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