Changeset 463

Show
Ignore:
Timestamp:
09/24/09 17:04:35 (3 years ago)
Author:
ged
Message:

made Elixir work with SA's current trunk (future 0.6).

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • elixir/trunk/elixir/entity.py

    r448 r463  
    2727 
    2828DEBUG = False 
     29try: 
     30    from sqlalchemy.orm import EXT_PASS 
     31    SA05orlater = False 
     32except ImportError: 
     33    SA05orlater = True 
    2934 
    3035__doc_all__ = ['Entity', 'EntityMeta'] 
     
    220225        defined up to this point. 
    221226        ''' 
    222         if self.entity.table: 
     227        if self.entity.table is not None: 
    223228            return 
    224229 
     
    256261 
    257262                    #FIXME: use the public equivalent of _get_colspec when 
    258                     #available 
     263                    # available (e.target_fullname) 
    259264                    for con in self.parent._descriptor.constraints: 
    260265                        self.add_constraint( 
    261266                            ForeignKeyConstraint( 
    262                                 [c.key for c in con.columns], 
     267                                [e.parent.key for e in con.elements], 
    263268                                [e._get_colspec() for e in con.elements], 
    264269                                name=con.name, #TODO: modify it 
     
    487492        # get one in any case. 
    488493        table = type.__getattribute__(self.entity, 'table') 
    489         if table: 
     494        if table is not None: 
    490495            if check_duplicate and col.key in table.columns.keys(): 
    491496                raise Exception("Column '%s' already exist in table '%s' ! " % 
     
    499504 
    500505        table = self.entity.table 
    501         if table: 
     506        if table is not None: 
    502507            table.append_constraint(constraint) 
    503508 
     
    591596 
    592597    def columns(self): 
    593         if self.entity.table: 
     598        if self.entity.table is not None: 
    594599            return self.entity.table.columns 
    595600        else: 
     
    616621 
    617622    def table(self): 
    618         if self.entity.table: 
     623        if self.entity.table is not None: 
    619624            return self.entity.table 
    620625        else: 
     
    827832    # - table_iterator method in MetaData class in sqlalchemy/schema.py 
    828833    # - visit_metadata method in sqlalchemy/ansisql.py 
    829     original_table_iterator = md.table_iterator 
    830     if not hasattr(original_table_iterator, 
    831                    '_non_elixir_patched_iterator'): 
    832         def table_iterator(*args, **kwargs): 
    833             elixir.setup_all() 
    834             return original_table_iterator(*args, **kwargs) 
    835         table_iterator.__doc__ = original_table_iterator.__doc__ 
    836         table_iterator._non_elixir_patched_iterator = \ 
    837             original_table_iterator 
    838         md.table_iterator = table_iterator 
     834    if SA05orlater: 
     835        warnings.warn( 
     836            "The automatic setup via metadata.create_all() through " 
     837            "the autosetup option doesn't work with SQLAlchemy 0.5 and later!") 
     838    else: 
     839        # SA 0.6 does not use table_iterator anymore (it was already deprecated 
     840        # since SA 0.5.0) 
     841        original_table_iterator = md.table_iterator 
     842        if not hasattr(original_table_iterator, 
     843                       '_non_elixir_patched_iterator'): 
     844            def table_iterator(*args, **kwargs): 
     845                elixir.setup_all() 
     846                return original_table_iterator(*args, **kwargs) 
     847            table_iterator.__doc__ = original_table_iterator.__doc__ 
     848            table_iterator._non_elixir_patched_iterator = \ 
     849                original_table_iterator 
     850            md.table_iterator = table_iterator 
    839851 
    840852    #TODO: we might want to add all columns that will be available as 
     
    866878 
    867879    # restore original table iterator if not done already 
    868     if hasattr(md.table_iterator, '_non_elixir_patched_iterator'): 
    869         md.table_iterator = \ 
    870             md.table_iterator._non_elixir_patched_iterator 
     880    if not SA05orlater: 
     881        if hasattr(md.table_iterator, '_non_elixir_patched_iterator'): 
     882            md.table_iterator = \ 
     883                md.table_iterator._non_elixir_patched_iterator 
    871884 
    872885    del cls._has_triggers