1: """Generate and organize the institutes internal IDs
2: DW 2003, itgroup
3:
4: needs PgSQL
5: needs manual configuration at the moment
6:
7: """
8:
9: from AccessControl import ClassSecurityInfo
10: from Globals import InitializeClass,package_home
11: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
12: from Products.PageTemplates.PageTemplate import PageTemplate
13: from OFS.SimpleItem import SimpleItem
14: #from pyPgSQL import PgSQL
15: import psycopg as PgSQL
16: try:
17: import psycopg2 as PgSQL
18: except:
19: try:
20: import psycopg as PgSQL
21: except:
22: import pgdb as PgSQL
23:
24: from Products.PageTemplates.PageTemplate import PageTemplate
25: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
26:
27: import random
28: import types
29: import time
30: import os.path
31:
32: class OSAS_idGenerator(SimpleItem):
33: """Object zum Erzeugen und Registrieren von ID's"""
34:
35: def __init__(self, id,title):
36: """init"""
37: self.id=id
38: self.title=title
39:
40: self.dsn = "dbname=osas_ids user=archiver"
41:
42: meta_type="OSAS_idGenerator"
43:
44: def getOSASId(self):
45: """erzeuge ID"""
46: id=self.generateId()
47: print "ID",id
48: while self.idExists(id):
49: id=self.generateId()
50: return id
51:
52: def registerID(self,id,date,name):
53: """registrieren der id"""
54:
55: if self.idExists(id):
56: return "ERROR: id - %s - already exists" %id
57:
58: conn=PgSQL.connect(self.dsn)
59: curs=conn.cursor()
60:
61: curs.execute("INSERT INTO institutesIds (id,date,name) VALUES ('%s','%s','%s')" % (id,date,name))
62:
63: conn.commit()
64:
65: return "OK: id - %s - registered" %id
66:
67: def idExists(self,id):
68: """Existiert eine ID"""
69: conn=PgSQL.connect(self.dsn)
70: curs=conn.cursor()
71:
72: founds=curs.execute("SELECT id FROM institutesIds WHERE id='%s'"%id)
73: conn.commit()
74:
75: if not founds==None:
76: return True
77: else:
78: return False
79:
80: def index_html(self):
81: """ID generator"""
82: pt=PageTemplateFile(os.path.join(package_home(globals()),"zpt","OSAS_ids.zpt")).__of__(self)
83: return pt()
84:
85: def giveIdsOut(self,number,RESPONSE=None):
86: """Ausgabe von ID's"""
87: number=int(number)
88: ids=[]
89:
90: for i in range(number):
91: ids.append(self.getOSASId())
92:
93: if RESPONSE:
94: self.REQUEST.SESSION['ids']=ids
95: pt=PageTemplateFile(os.path.join(package_home(globals()),"zpt","OSAS_printIDs.zpt")).__of__(self)
96: return pt()
97: else:
98: return ids
99:
100: def registerIdsOut(self,ids,name=None,IdDate=None,RESPONSE=None):
101: """Registriere IDS"""
102: #print "TYPES",type(ids)
103: #import datetime
104:
105: if not name:
106: name="Anon"
107:
108: if not IdDate:
109: IdDate=time.strftime("%Y%m%d",time.localtime())
110:
111: if type(ids) is types.ListType:
112:
113: for id in ids:
114: #print "id",id
115: self.registerID(id,IdDate,name)
116: self.REQUEST.SESSION['ids']=ids
117: else:
118: self.registerID(ids,IdDate,name)
119: self.REQUEST.SESSION['ids']=[ids]
120:
121: if RESPONSE:
122: pt=PageTemplateFile(os.path.join(package_home(globals()),"zpt","OSAS_registrationIdsDone.zpt")).__of__(self)
123: return pt()
124: else:
125: return self.REQUEST.SESSION['ids']
126:
127:
128: def generateId(self):
129: """Zufällige ID"""
130: driEncode={ 0:'0',
131: 1:'1',
132: 2:'2',
133: 3:'3',
134: 4:'4',
135: 5:'5',
136: 6:'6',
137: 7:'7',
138: 8:'8',
139: 9:'9',
140: 10:'A',
141: 11:'B',
142: 12:'C',
143: 13:'D',
144: 14:'E',
145: 15:'F',
146: 16:'G',
147: 17:'H',
148: 18:'K',
149: 19:'M',
150: 20:'N',
151: 21:'P',
152: 22:'Q',
153: 23:'R',
154: 24:'S',
155: 25:'T',
156: 26:'U',
157: 27:'V',
158: 28:'W',
159: 29:'X',
160: 30:'Y',
161: 31:'Z'
162: }
163:
164: random.seed()
165: x=[]
166: for i in range(7):
167: x.append(random.randint(0,31))
168:
169: sum=0
170: for i in range(7):
171: sum+=(i+1)*x[i]
172: print i
173: c=sum % 31
174: id=""
175: for i in range(7):
176: id+=driEncode[x[i]]
177: id+=driEncode[c]
178: return id
179:
180: def manage_AddOSAS_idGeneratorForm(self):
181: """Erzeuge idGenerator"""
182: pt=PageTemplateFile(os.path.join(package_home(globals()),"zpt","AddOSAS_idGenerator.zpt")).__of__(self)
183: return pt()
184:
185: def manage_AddOSAS_idGenerator(self,id,title=None,RESPONSE=None):
186: """add the OSAS_root"""
187: newObj=OSAS_idGenerator(id,title)
188: self._setObject(id,newObj)
189: if RESPONSE is not None:
190: RESPONSE.redirect('manage_main')
191:
192:
193:
194:
195:
196:
197:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>