| 74 | | _delayed_descriptors = list() |
| | 75 | _delayed_entities = list() |
| | 76 | |
| | 77 | def setup_entities(entities): |
| | 78 | '''Setup all entities passed in entities''' |
| | 79 | |
| | 80 | for entity in entities: |
| | 81 | desc = entity._descriptor |
| | 82 | entity._ready = False |
| | 83 | del sqlalchemy.orm.mapper_registry[entity._class_key] |
| | 84 | |
| | 85 | md = desc.metadata |
| | 86 | |
| | 87 | # the fake table could have already been removed (namely in a |
| | 88 | # single table inheritance scenario) |
| | 89 | md.tables.pop(entity._table_key, None) |
| | 90 | |
| | 91 | # restore original table iterator if not done already |
| | 92 | if hasattr(md.table_iterator, '_non_elixir_patched_iterator'): |
| | 93 | md.table_iterator = \ |
| | 94 | md.table_iterator._non_elixir_patched_iterator |
| | 95 | |
| | 96 | for method_name in ( |
| | 97 | 'setup_autoload_table', 'create_pk_cols', 'setup_relkeys', |
| | 98 | 'before_table', 'setup_table', 'setup_reltables', 'after_table', |
| | 99 | 'setup_events', |
| | 100 | 'before_mapper', 'setup_mapper', 'after_mapper', |
| | 101 | 'setup_properties', |
| | 102 | 'finalize'): |
| | 103 | for entity in entities: |
| | 104 | method = getattr(entity._descriptor, method_name) |
| | 105 | method() |
| 92 | | for desc in _delayed_descriptors: |
| 93 | | entity = desc.entity |
| 94 | | entity._ready = False |
| 95 | | del sqlalchemy.orm.mapper_registry[entity._class_key] |
| 96 | | |
| 97 | | md = desc.metadata |
| 98 | | # the table could have already been removed (namely in a single |
| 99 | | # table inheritance scenario) |
| 100 | | md.tables.pop(entity._table_key, None) |
| 101 | | |
| 102 | | # restore original table iterator if not done already |
| 103 | | if hasattr(md.table_iterator, '_non_elixir_patched_iterator'): |
| 104 | | md.table_iterator = \ |
| 105 | | md.table_iterator._non_elixir_patched_iterator |
| 106 | | |
| 107 | | # Make sure autoloaded tables are available so that we can setup |
| 108 | | # foreign keys to their columns |
| 109 | | for desc in _delayed_descriptors: |
| 110 | | if desc.autoload: |
| 111 | | desc.setup_table() |
| 112 | | |
| 113 | | for desc in _delayed_descriptors: |
| 114 | | desc.create_pk_cols() |
| 115 | | |
| 116 | | # Create other columns from belongs_to relationships. |
| 117 | | for desc in _delayed_descriptors: |
| 118 | | for rel in desc.relationships.itervalues(): |
| 119 | | rel.create_keys(False) |
| 120 | | |
| 121 | | for desc in _delayed_descriptors: |
| 122 | | if not desc.autoload: |
| 123 | | desc.setup_table() |
| 124 | | |
| 125 | | for desc in _delayed_descriptors: |
| 126 | | Statement.process(desc.entity, 'before_table') |
| 127 | | |
| 128 | | for desc in _delayed_descriptors: |
| 129 | | for rel in desc.relationships.itervalues(): |
| 130 | | rel.create_tables() |
| 131 | | |
| 132 | | for desc in _delayed_descriptors: |
| 133 | | Statement.process(desc.entity, 'after_table') |
| 134 | | |
| 135 | | for desc in _delayed_descriptors: |
| 136 | | desc.setup_events() |
| 137 | | |
| 138 | | for desc in _delayed_descriptors: |
| 139 | | Statement.process(desc.entity, 'before_mapper') |
| 140 | | |
| 141 | | for desc in _delayed_descriptors: |
| 142 | | desc.setup_mapper() |
| 143 | | |
| 144 | | for desc in _delayed_descriptors: |
| 145 | | Statement.process(desc.entity, 'after_mapper') |
| 146 | | |
| 147 | | for desc in _delayed_descriptors: |
| 148 | | for rel in desc.relationships.itervalues(): |
| 149 | | rel.create_properties() |
| 150 | | |
| 151 | | for desc in _delayed_descriptors: |
| 152 | | Statement.process(desc.entity, 'finalize') |
| 153 | | |
| | 118 | setup_entities(_delayed_entities) |