it has to do with a name conflict between a regular python property you've configured somewhere, and the name of a mapped attribute or relation(). The descriptors which SQLAlchemy places on the class (InstrumentedAttribute) have an "impl" attribute. You'd have to find what name is conflicting; a pdb or print statement within attributes.py could reveal the key and class names in play.
(FTR, this kind of error wouldn't occur with SQLA 0.5 which checks for user-defined descriptors explicitly). On Aug 18, 2008, at 11:13 AM, Brad Wells wrote: > > I receive the following error with SA 0.4.7p1 and the latest 0.4 svn > revision. > > "AttributeError: 'property' object has no attribute 'impl'" > > Mappers > ====== > > mapper(TransactionType, transaction_types) > > transactions_mapper = mapper(Transaction, transactions, > order_by=transactions.c.date, > extension=[HistoryMapperExtension(), > TransactionDateMapperExtension()], > polymorphic_on=transactions.c.transaction_type_id, > polymorphic_identity=0, > exclude_properties=['number', 'address', 'shipping', > 'handling', 'purchase_order', > 'contact_note', 'notes', 'valid_until'], > properties={ > '_voided_at': transactions.c.voided_at, > '_date': transactions.c.date, > 'method': relation(PaymentMethodType, > backref='transactions'), > 'transaction_type': relation(TransactionType, > backref='transactions'), > 'created_by_id': transactions.c.created_by, > 'updated_by_id': transactions.c.updated_by, > 'created_by': relation(Contact, > primaryjoin=transactions.c.created_by==contacts.c.id), > 'updated_by': relation(Contact, > primaryjoin=transactions.c.updated_by==contacts.c.id), > }) > > mapper(Cost, inherits=transactions_mapper, polymorphic_identity=1, > properties={ > 'line_items': relation(LineItem, backref='cost', > cascade='delete') > }) > mapper(Payment, inherits=transactions_mapper, > polymorphic_identity=2) > > mapper(Receipt, inherits=transactions_mapper, > polymorphic_identity=4) > mapper(Adjustment, inherits=transactions_mapper, > polymorphic_identity=5) > > abstract_sales_mapper = mapper(AbstractSale, > inherits=transactions_mapper, > > polymorphic_on=transactions.c.transaction_type_id, > properties={ > 'number': transactions.c.number, > 'address': transactions.c.address, > 'shipping': transactions.c.shipping, > 'handling': transactions.c.handling, > 'purchase_order': transactions.c.purchase_order, > 'contact_note': transactions.c.contact_note, > 'notes': transactions.c.notes, > 'payment_terms': relation(PaymentTerm, > backref='abstract_sales'), > 'line_items': relation(LineItem, backref='sale', > cascade='delete', order_by=line_items.c.position) > }) > > mapper(Sale, inherits=abstract_sales_mapper, > polymorphic_identity=3) > > mapper(Quote, inherits=abstract_sales_mapper, > polymorphic_identity=6, properties={ > '_valid_until': > transactions.c.valid_until > }) > > > The error occurs when performing a query on Transaction ex: > Transaction.query.get(111) > where row id 111 is a Quote type. If a query uses the specific class > type ex: Quote.query.get(111) > it completes successfully. > > I don't know if this is an SA bug or an error in my mappers. Any help > is appreciated. > > -brad > > > > > Full Traceback > =========== > In [53]: m.Transaction.query.get(112) > ERROR: An unexpected error occurred while tokenizing input > The following traceback may be corrupted or invalid > The error message is: ('EOF in multi-line statement', (141, 0)) > > --------------------------------------------------------------------------- > AttributeError Traceback (most recent call > last) > > C:\Documents and Settings\bwells\workspace\ERP GIT TEST\erp\<ipython > console> in <module>() > > C:\Program Files\Python\lib\site-packages\sqlalchemy-0.4.7p1-py2.5.egg > \sqlalchemy\orm\query.pyc in get(self, ident, **kw > args) > 267 > 268 key = self.mapper.identity_key_from_primary_key(ident) > --> 269 return self._get(key, ident, **kwargs) > 270 > 271 def load(self, ident, raiseerr=True, **kwargs): > > C:\Program Files\Python\lib\site-packages\sqlalchemy-0.4.7p1-py2.5.egg > \sqlalchemy\orm\query.pyc in _get(self, key, ident > , refresh_instance, lockmode, only_load_props) > 1066 try: > 1067 # call using all() to avoid LIMIT compilation > complexity > -> 1068 return q.all()[0] > 1069 except IndexError: > 1070 return None > > C:\Program Files\Python\lib\site-packages\sqlalchemy-0.4.7p1-py2.5.egg > \sqlalchemy\orm\query.pyc in all(self) > 876 > 877 """ > --> 878 return list(self) > 879 > 880 > > C:\Program Files\Python\lib\site-packages\sqlalchemy-0.4.7p1-py2.5.egg > \sqlalchemy\orm\query.pyc in iterate_instances(sel > f, cursor, *mappers_or_columns, **kwargs) > 1001 rows = [] > 1002 for row in fetch: > -> 1003 process[0](context, row, rows) > 1004 elif single_entity: > 1005 rows = [process[0](context, row) for row in > fetch] > > C:\Program Files\Python\lib\site-packages\sqlalchemy-0.4.7p1-py2.5.egg > \sqlalchemy\orm\query.pyc in main(context, row, re > sult) > 1579 row = context.row_adapter(row) > 1580 self.mapper._instance(context, row, result, > -> 1581 extension=context.extension, > only_load_props=context.only_load_props, refresh_instance=conte > xt.refresh_instance > 1582 ) > 1583 elif context.row_adapter: > > C:\Program Files\Python\lib\site-packages\sqlalchemy-0.4.7p1-py2.5.egg > \sqlalchemy\orm\mapper.pyc in _instance(self, cont > ext, row, result, polymorphic_from, extension, only_load_props, > refresh_instance) > 1366 raise exceptions.AssertionError("No such > polymorphic_identity %r is defined" % discriminator > ) > 1367 if mapper is not self: > -> 1368 return mapper._instance(context, row, > result=result, polymorphic_from=self) > 1369 > 1370 # determine identity key > > C:\Program Files\Python\lib\site-packages\sqlalchemy-0.4.7p1-py2.5.egg > \sqlalchemy\orm\mapper.pyc in _instance(self, cont > ext, row, result, polymorphic_from, extension, only_load_props, > refresh_instance) > 1457 > 1458 if 'populate_instance' not in > extension.methods or extension.populate_instance(self, context, ro > w, instance, only_load_props=attrs, instancekey=identitykey, > isnew=isnew) is EXT_CONTINUE: > -> 1459 self.populate_instance(context, instance, > row, only_load_props=attrs, instancekey=identityke > y, isnew=isnew) > 1460 > 1461 if result is not None and ('append_result' not in > extension.methods or extension.append_result(self, con > text, row, instance, result, instancekey=identitykey, isnew=isnew) is > EXT_CONTINUE): > > C:\Program Files\Python\lib\site-packages\sqlalchemy-0.4.7p1-py2.5.egg > \sqlalchemy\orm\mapper.pyc in populate_instance(se > lf, selectcontext, instance, row, ispostselect, isnew, > only_load_props, **flags) > 1507 > 1508 for (key, populator) in populators: > -> 1509 selectcontext.exec_with_path(self, key, populator, > instance, row, ispostselect=ispostselect, isnew=i > snew, **flags) > 1510 > 1511 if self.non_primary: > > C:\Program Files\Python\lib\site-packages\sqlalchemy-0.4.7p1-py2.5.egg > \sqlalchemy\orm\query.pyc in exec_with_path(self, > mapper, propkey, fn, *args, **kwargs) > 1701 self.path += (mapper.base_mapper, propkey) > 1702 try: > -> 1703 return fn(*args, **kwargs) > 1704 finally: > 1705 self.path = oldpath > > C:\Program Files\Python\lib\site-packages\sqlalchemy-0.4.7p1-py2.5.egg > \sqlalchemy\orm\strategies.pyc in new_execute(inst > ance, row, isnew, **flags) > 84 def new_execute(instance, row, isnew, **flags): > 85 if isnew: > ---> 86 > instance._state.expire_attributes([self.key]) > 87 if self._should_log_debug: > 88 self.logger.debug("Deferring load for %s %s" % > (mapper, self.key)) > > C:\Program Files\Python\lib\site-packages\sqlalchemy-0.4.7p1-py2.5.egg > \sqlalchemy\orm\attributes.pyc in expire_attribute > s(self, attribute_names) > 870 self.committed_state.pop(key, None) > 871 self.expired_attributes.add(key) > --> 872 if getattr(self.class_, > key).impl.accepts_scalar_loader: > 873 self.callables[key] = self > 874 > > AttributeError: 'property' object has no attribute 'impl' > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---