Ejemplo n.º 1
0
def map_tables(exclude_sys_tables=False):
    # Map bootstrap orm Linkage object (and dependent objects 
    # Relation and Cardinality) by hand
    if not exclude_sys_tables:
        for klass in BOOTSTRAP_CLASSES:
            class_ = setobject_type_registry.lookup(klass)
            class_.sa_map()

    # First, create all properties for the orm.relation method. This is a separate step,
    # as we use the sqlalchemy orm query object that requires all mapping acitvies are in a consistent state.
    # This we can only guarantee before and after the mapping process. Therefore we do it before.
    for setobject_type in setobject_type_registry.values():
        if needs_mapping(setobject_type, exclude_sys_tables):
            try:
                setobject_type.compute_mapper_properties()
            except NoPrimaryKeyException:
                # Table has no primary key, don't map it
                table_identifier = setobject_type.get_table_name()
                setobject_type_registry.delete_by_table(table_identifier)
                setobject_table_registry.delete_by_table(table_identifier)
  
    # In a second step we do the actual mapping with the already computed properties 
    # Map table type to ORM setobject type
    for setobject_type in setobject_type_registry.values():
        if needs_mapping(setobject_type, exclude_sys_tables):
            setobject_type.map_computed_properties()
Ejemplo n.º 2
0
def orm_mapping(event=None):
    # Register table type for grokked ModelBase classes
    registered = []
    for setobject_type in setobject_type_registry.values():
        class_name = setobject_type.__name__
        table_name = setobject_type.get_table_name()
        # Create SA table type
        if setobject_table_registry.get_by_table(table_name) == None:
            table_type = Table(table_name, metadata, autoload=True)
        else:
            table_type = setobject_table_registry.lookup_by_table(table_name)
        # And register it.
        setobject_table_registry.register_type(class_name, table_name, table_type)
        registered.append(class_name)

    # register all the non-grokked, remaining tables (e.g. user tables) 
    register_remaining_tables(registered)
    
    map_tables()