File:  [Repository] / OSAS / OSA_system / OSAS_ids.py
Revision 1.10: download - view: text, annotated - select for diffs - revision graph
Mon Mar 5 17:58:06 2007 UTC (17 years, 2 months ago) by casties
Branches: MAIN
CVS tags: HEAD
update to psycopg connect string

"""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
import psycopg as 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
        
        self.dsn = "dbname=osas_ids user=archiver"

    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(self.dsn)
        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(self.dsn)
        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')




    
        


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>