"""Generate and organize the institutes internal IDs DW 2003, itgroup needs PgSQL needs manual configuration at the moment """ from AccessControl import ClassSecurityInfo from Globals import InitializeClass,package_home from Products.PageTemplates.PageTemplateFile import PageTemplateFile from Products.PageTemplates.PageTemplate import PageTemplate from OFS.SimpleItem import SimpleItem #from pyPgSQL import PgSQL try: import psycopg2 as PgSQL except: try: import psycopg as PgSQL except: import pgdb as PgSQL from Products.PageTemplates.PageTemplate import PageTemplate from Products.PageTemplates.PageTemplateFile import PageTemplateFile import random import types import time import os.path class OSAS_idGenerator(SimpleItem): """Object zum Erzeugen und Registrieren von ID's""" def __init__(self, id,title): """init""" self.id=id self.title=title meta_type="OSAS_idGenerator" def getOSASId(self): """erzeuge ID""" id=self.generateId() print "ID",id while self.idExists(id): id=self.generateId() return id def registerID(self,id,date,name): """registrieren der id""" if self.idExists(id): return "ERROR: id - %s - already exists" %id conn=PgSQL.connect("127.0.0.1:osas_ids:dwinter") curs=conn.cursor() curs.execute("INSERT INTO institutesIds (id,date,name) VALUES ('%s','%s','%s')" % (id,date,name)) conn.commit() return "OK: id - %s - registered" %id def idExists(self,id): """Existiert eine ID""" conn=PgSQL.connect("127.0.0.1:osas_ids:dwinter") curs=conn.cursor() founds=curs.execute("SELECT id FROM institutesIds WHERE id='%s'"%id) conn.commit() if not founds==None: return True else: return False def index_html(self): """ID generator""" pt=PageTemplateFile(os.path.join(package_home(globals()),"zpt","OSAS_ids.zpt")).__of__(self) return pt() def giveIdsOut(self,number,RESPONSE=None): """Ausgabe von ID's""" number=int(number) ids=[] for i in range(number): ids.append(self.getOSASId()) if RESPONSE: self.REQUEST.SESSION['ids']=ids pt=PageTemplateFile(os.path.join(package_home(globals()),"zpt","OSAS_printIDs.zpt")).__of__(self) return pt() else: return ids def registerIdsOut(self,ids,name=None,IdDate=None,RESPONSE=None): """Registriere IDS""" #print "TYPES",type(ids) #import datetime if not name: name="Anon" if not IdDate: IdDate=time.strftime("%Y%m%d",time.localtime()) if type(ids) is types.ListType: for id in ids: #print "id",id self.registerID(id,IdDate,name) self.REQUEST.SESSION['ids']=ids else: self.registerID(ids,IdDate,name) self.REQUEST.SESSION['ids']=[ids] if RESPONSE: pt=PageTemplateFile(os.path.join(package_home(globals()),"zpt","OSAS_registrationIdsDone.zpt")).__of__(self) return pt() else: return self.REQUEST.SESSION['ids'] def generateId(self): """Zufällige ID""" driEncode={ 0:'0', 1:'1', 2:'2', 3:'3', 4:'4', 5:'5', 6:'6', 7:'7', 8:'8', 9:'9', 10:'A', 11:'B', 12:'C', 13:'D', 14:'E', 15:'F', 16:'G', 17:'H', 18:'K', 19:'M', 20:'N', 21:'P', 22:'Q', 23:'R', 24:'S', 25:'T', 26:'U', 27:'V', 28:'W', 29:'X', 30:'Y', 31:'Z' } random.seed() x=[] for i in range(7): x.append(random.randint(0,31)) sum=0 for i in range(7): sum+=(i+1)*x[i] print i c=sum % 31 id="" for i in range(7): id+=driEncode[x[i]] id+=driEncode[c] return id def manage_AddOSAS_idGeneratorForm(self): """Erzeuge idGenerator""" pt=PageTemplateFile(os.path.join(package_home(globals()),"zpt","AddOSAS_idGenerator.zpt")).__of__(self) return pt() def manage_AddOSAS_idGenerator(self,id,title=None,RESPONSE=None): """add the OSAS_root""" newObj=OSAS_idGenerator(id,title) self._setObject(id,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main')