Hello,
I've just found out that SA fails to work correctly on object that feature a
metaclass. It seems to have little to do with the metaclass behaviour, it
actually happens even using a bare type as metaclass - which is the standard
Python behaviour, and just creates the object class.

What I spotted is that the class __init__ method is not called whenever
getting an object via a query.

I've not had enough time to investigate it, I'll do in the next days. In the
meantime I'm attaching the demo of the issue.

(I think there're a couple of typos in the file 'cause I wrote it very
quickly, but it's just about printed strings. the program runs fine).

-- 
Alan Franzoni <[EMAIL PROTECTED]>
-
Togli .xyz dalla mia email per contattarmi.
Remove .xyz from my address in order to contact me.
-
GPG Key Fingerprint (Key ID = FE068F3E):
5C77 9DC3 BD5B 3A28 E7BC 921A 0255 42AA FE06 8F3E


--~--~---------~--~----~------------~-------~--~----~
 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
-~----------~----~----~----~------~----~------~--~---
from sqlalchemy import *

connect_params = "postgres://user:[EMAIL PROTECTED]:5432/kiwi"

engine = create_engine(connect_params, echo=False, convert_unicode=True)

metadata = BoundMetaData(engine)


prove = Table("prove", metadata,
          Column("id", Integer, Sequence("prove_id_seq"), primary_key=True, nullable=False),
          Column("testo", String(30)),
          Column("numero_lungo", Integer),
          )

metadata.create_all()
    
  

class MappedObject(object):
    
    __metaclass__ = type
    
    def __init__(self, testattr="default"):
        print "inizialization done!"
        self._testattr = testattr
        super(MappedObject, self).__init__()
        
m = mapper(MappedObject, prove)

a = MappedObject("value")
a.testo = "onetwothree"

print "testattr:",a._testattr
print "isobject:",isinstance(a, object)

session = create_session()
session.save(a)
session.flush()
session.clear()

del a

query = session.query(MappedObject)

b = query.get_by(testo="onetwothree")

print b
print b._testattr





    
    

Reply via email to