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()
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()