예제 #1
0
def update_feld():
    #print 'Feld tabelle ergänzen'
    tables = schemagen.get_schema_info(schemadata.schemainfo)
    verwtlist = CodeList(where = "kat_code = 'verwtyp'")
    katlist = KategorieList(where = '')
    dbtlist = TabelleList(where = '')
    for t in tables:
        dbt = dbtlist.findu("tabelle", t.tablename)
        assert dbt['tabelle'] == t.tablename
        #print "Tabelle '%s'" % t.tablename
        dbfields = FeldList(where = "tab_id = %s" % dbt['id'])
        for f in t.fields:
            dbf = dbfields.findu('feld', f.fieldname)
            assert dbf['feld'] == f.fieldname
            verwtyp = verwtlist.findu('code', f.verwtyp)
            dbfupd = Feld()
            dbfupd['verwtyp'] = verwtyp['id']
            #print "  Feld '%s' (%s %s)" % (f.fieldname, f.verwtyp, f.ref)
            if f.verwtyp in 'kmb':
                kat = katlist.findu('code', f.kat_code)
                dbfupd['kat_id'] = kat['id']
                dbfupd['kat_code'] = kat['code']
            if f.verwtyp in 'fkm':    # kodierte Felder sind Fremdschlüssel nach code
                dbfupd['ftab_id'] = dbtlist.findu('tabelle', f.ftable)['id']
                if f.verwtyp in 'f':    # Name für inverse Beziehung
                    dbfupd['inverse'] = f.inverse
            dbf.update(dbfupd)
예제 #2
0
def generate_ebapi(filename):
    from ebkus.gen.schemagen import get_schema_info
    from ebkus.gen.schemadata import schemainfo

    file = open(filename, "wb")
    #  print tables
    file.write(header)
    schemadata_tables = get_schema_info(schemainfo)
    for t in schemadata_tables:
        table, lname = t.tablename, t.classname
        dbfieldsl = [f.fieldname for f in t.fields]
        dbfields = formatFields(repr(dbfieldsl), MAXL, IND)
        primarykey = repr(t.primarykey)
        keys = t.keys
        file.write(
            template % {"dbfields": dbfields, "lname": lname, "table": table, "keys": keys, "primarykey": primarykey}
        )
        logging.info("Klassendefinition generiert: %s" % lname)

    fkeys, ifkeys, mkeys = generateForeignKeyInfo(schemadata_tables)
    file.write(
        """
    
# Die folgenden Einträge ermöglichen die automatische Navigation über
# Fremdschlüssel. Wird insbesondere von DBObjekt.__getitem__ verwendet.
#   fall['akte_id__vn'] kann damit automatisch evaluiert werden.
    
"""
    )
    for f in fkeys:
        file.write("%s.foreignfieldtypes['%s'] = (%s, %s)\n" % f)
    file.write(
        """
    
# Die folgenden Einträge ermöglichen die automatische Navigation über
# inverse Fremdschlüssel. Wird insbesondere von DBObjekt.__getitem__ 
# verwendet.
#   fall['leistungen'] kann damit automatisch evaluiert werden.
    
"""
    )
    for f in ifkeys:
        file.write("%s.inversefieldtypes['%s'] = (%sList, '%s')\n" % f)
    file.write(
        """
    
# Die folgenden Einträge ermöglichen Mehrfachauswahlfelder.
# In das Feld werden die IDs von Code-Instanzen als Strings
# geschrieben. Beim Aufruf über __getitem__ werden die durch
# Code-Instanzen ersetzt.
    
"""
    )
    for f in mkeys:
        file.write("%s.multikatfieldtypes['%s'] = %sList\n" % f)

    file.close()
예제 #3
0
 def init_new_db(self):
     from ebkus.gen.schemadata import schemainfo
     from ebkus.gen.schemagen import get_schema_info, create_schema_in_db, \
          insert_tables_fields_in_db, insert_version
     newtables = get_schema_info(schemainfo)
     test = False
     create_schema_in_db(newtables, test)
     insert_tables_fields_in_db(newtables, test)
     insert_version()
     logging.info('Neue Datenbank erzeugt')
예제 #4
0
def gen_api(schema_str):
    import StringIO
    file = StringIO.StringIO()
    newtables = getNewTablesPairs()
    tables = newtables
    #  print tables
    file.write(header)
    # hier geht es durcheinander, weil noch nicht einheitlich von schemadata
    # generiert wird.
    schemadata_tables = schemagen.get_schema_info(schema_str)
    tabledict = schemadata_tables[0].Tables
    for elem in tables:
        table, lname = elem
        dbfieldsl, dbfields_prefixl = getFields(table)
        dbfields = formatFields(repr(dbfieldsl), MAXL, IND)
        dbfields_prefix = formatFields(repr(dbfields_prefixl), MAXL, IND)
        if tabledict.has_key(table):
            primarykey = repr(tabledict[table].primarykey)
            keys =  tabledict[table].keys
        else: # alte Tabelle, Heuristik
            primarykey = 'None'
            keys = []
            ##       if 'id' in dbfieldsl:
            ##      primarykey = "'id'"
            ##       else:
            ##      primarykey = 'None'
        file.write(template % { 'dbfields' : dbfields, 'dbfields_prefix' : dbfields_prefix, 
                           'lname' : lname, 'table' : table,
                           'keys' : keys, 'primarykey' : primarykey})
        print 'Klassendefinition generiert: %s' % lname
        
    fkeys, ifkeys = generateForeignKeyInfo(schemadata_tables)
    file.write(
    """
    
    # Die folgenden Einträge ermöglichen die automatische Navigation über
    # Fremdschlüssel. Wird insbesondere von DBObjekt.__getitem__ verwendet.
    #   fall['akte_id__vn'] kann damit automatisch evaluiert werden.
    
    """)
    for f in fkeys:
        file.write("%s.foreignfieldtypes['%s'] = (%s, %s)\n" % f)
    file.write(
    """
    
    # Die folgenden Einträge ermöglichen die automatische Navigation über
    # inverse Fremdschlüssel. Wird insbesondere von DBObjekt.__getitem__ 
    # verwendet.
    #   fall['leistungen'] kann damit automatisch evaluiert werden.
    
    """)
    for f in ifkeys:
        file.write("%s.inversefieldtypes['%s'] = (%sList, '%s')\n" % f)
    return file
예제 #5
0
def create_new_table():
    tables = get_schema_info(schemainfo)
    jghstat07 = [t for t in tables if t.tablename == 'jghstat07'][0]
    db = getDBHandle()
    #print jghstat07.sql_create()
    db.query(jghstat07.sql_create())
    #table_id = 32
    #field_id = 333
    table_id = Tabelle().getNewId()
    #print jghstat07.sql_insert(table_id)
    db.query(jghstat07.sql_insert(table_id))
    for f in jghstat07.fields:
        field_id = Feld().getNewId()
        #print f.sql_insert(field_id)
        db.query(f.sql_insert(field_id))
    j07 = Tabelle(tabelle='jghstat07')
    logging.info("Neue Tabelle für %s: %s" % (j07['name'], 'jghstat07'))

    if config.BERLINER_VERSION:
        merkmale = 'merkmale_berlin.py'
    else:
        merkmale = 'merkmale_standard.py'
    create_new_kategorien(jghstat07,
                          join(config.EBKUS_HOME, 'sql',
                               merkmale))
    for f in jghstat07.fields:
        fupd = Feld()
        v = Code(code=f.verwtyp, kat_code='verwtyp')
        fupd['verwtyp'] = v['id']
        if f.verwtyp in 'kb':
            kat = Kategorie(code=f.kat_code)
            fupd['kat_id'] = kat['id']
            fupd['kat_code'] = kat['code']
        if f.verwtyp in 'fk':    # kodierte Felder sind Fremdschlüssel nach code
            fupd['ftab_id'] = Tabelle(tabelle=f.ftable)['id']
            if f.verwtyp in 'f':    # Name für inverse Beziehung
                fupd['inverse'] = f.inverse
        feld = Feld(feld=f.fieldname, tab_id=j07['id'])
        feld.update(fupd)

##     site = Code(kat_code='dbsite', code=config.SITE)
##     t = TabellenID()
##     t['table_id'] = j07['id']
##     t['table_name'] = j07['tabelle']
##     t['dbsite'] = site['id']
##     t['minid'] = site['mini']
##     t['maxid'] = site['maxi']
##     t['maxist'] = 1
##     t.insert()
    return True
예제 #6
0
def create_new_table():
    tables = get_schema_info(schemainfo)
    jghstat07 = [t for t in tables if t.tablename == "jghstat07"][0]
    db = getDBHandle()
    # print jghstat07.sql_create()
    db.query(jghstat07.sql_create())
    # table_id = 32
    # field_id = 333
    table_id = Tabelle().getNewId()
    # print jghstat07.sql_insert(table_id)
    db.query(jghstat07.sql_insert(table_id))
    for f in jghstat07.fields:
        field_id = Feld().getNewId()
        # print f.sql_insert(field_id)
        db.query(f.sql_insert(field_id))
    j07 = Tabelle(tabelle="jghstat07")
    logging.info("Neue Tabelle für %s: %s" % (j07["name"], "jghstat07"))

    if config.BERLINER_VERSION:
        merkmale = "merkmale_berlin.py"
    else:
        merkmale = "merkmale_standard.py"
    create_new_kategorien(jghstat07, join(config.EBKUS_HOME, "sql", merkmale))
    for f in jghstat07.fields:
        fupd = Feld()
        v = Code(code=f.verwtyp, kat_code="verwtyp")
        fupd["verwtyp"] = v["id"]
        if f.verwtyp in "kb":
            kat = Kategorie(code=f.kat_code)
            fupd["kat_id"] = kat["id"]
            fupd["kat_code"] = kat["code"]
        if f.verwtyp in "fk":  # kodierte Felder sind Fremdschlüssel nach code
            fupd["ftab_id"] = Tabelle(tabelle=f.ftable)["id"]
            if f.verwtyp in "f":  # Name für inverse Beziehung
                fupd["inverse"] = f.inverse
        feld = Feld(feld=f.fieldname, tab_id=j07["id"])
        feld.update(fupd)

    site = Code(kat_code="dbsite", code=config.SITE)
    t = TabellenID()
    t["table_id"] = j07["id"]
    t["table_name"] = j07["tabelle"]
    t["dbsite"] = site["id"]
    t["minid"] = site["mini"]
    t["maxid"] = site["maxi"]
    t["maxist"] = 1
    t.insert()
    return True
예제 #7
0
def generate_ebapi(filename):
    from ebkus.gen.schemagen import get_schema_info
    from ebkus.gen.schemadata import schemainfo
    file = open(filename, 'wb')
    #  print tables
    file.write(header)
    schemadata_tables = get_schema_info(schemainfo)
    for t in schemadata_tables:
        table, lname = t.tablename, t.classname
        dbfieldsl = [f.fieldname for f in t.fields]
        dbfields = formatFields(repr(dbfieldsl), MAXL, IND)
        primarykey = repr(t.primarykey)
        keys =  t.keys
        file.write(template % { 'dbfields' : dbfields,
                           'lname' : lname, 'table' : table,
                           'keys' : keys, 'primarykey' : primarykey})
        logging.info('Klassendefinition generiert: %s' % lname)
        
    fkeys, ifkeys = generateForeignKeyInfo(schemadata_tables)
    file.write("""
    
# Die folgenden Einträge ermöglichen die automatische Navigation über
# Fremdschlüssel. Wird insbesondere von DBObjekt.__getitem__ verwendet.
#   fall['akte_id__vn'] kann damit automatisch evaluiert werden.
    
""")
    for f in fkeys:
        file.write("%s.foreignfieldtypes['%s'] = (%s, %s)\n" % f)
    file.write("""
    
# Die folgenden Einträge ermöglichen die automatische Navigation über
# inverse Fremdschlüssel. Wird insbesondere von DBObjekt.__getitem__ 
# verwendet.
#   fall['leistungen'] kann damit automatisch evaluiert werden.
    
""")
    for f in ifkeys:
        file.write("%s.inversefieldtypes['%s'] = (%sList, '%s')\n" % f)
    file.close()