SQLAlchemy doesnt expect your class to have customizations going on  
with  __new__().  either fix your __new__() method to require only  
the cls argument, or create a MapperExtension that provides the  
create_instance() method, so that you create new instances yourself:

http://www.sqlalchemy.org/docs/ 
adv_datamapping.html#advdatamapping_extending


On Jun 10, 2007, at 3:36 PM, nathan harmston wrote:

> HI,
>
> I m currently trying to build an api for a database and I really  
> like the way that Djangos manager ( Class_name.objects ). This  
> seems very intuitive for me. After reading through the some of the  
> django source and getting slightly confused I ve implemented a  
> basic version for one of my tables. The problem is I get an  
> exception, when I m not expecting one. If this isnt a specific  
> sqlalchemy question then please tell me so I can re-post to python  
> etc.
>
> registry.py --> contains table definitions etc.
>
> Manager.py
>
> from Registry import *
>
> class Manager(object):
>     def __init__(self, model, table=None):
>         self.model = model
>         self.table = table
>     def get(self, slice):
>         pass
>     def all(self):
>         print "1"
>         mapper(self.model, interpro_table)
>         print "2"
>         session = create_session()
>         print "3"
>         query = session.query(self.model)
>         print "4"
>         return query.select()
>
> Models.py
>
> from Manager import *
>
> class ModelBase(type):
>     def __new__(cls, name, bases, dict):
>         print cls
>         setattr(cls, 'objects', Manager(cls))
>         return type.__new__(cls, name, bases, dict)
>
> class Model(object):
>     __metaclass__=ModelBase
>
> class InterPro(Model):
>     _tableName = interpro_table
>     def __init__(self, interpro_ac):
>         self.interpro_ac = interpro_ac
>     def __str__(self):
>         return "InterPro: %s" %(self.interpro_ac)
>     def __repr__(self):
>         return "InterPro: %s" %(self.interpro_ac)
>
> if __name__=='__main__':
>     a = Manager(InterPro)
>     print a
>     print a.all() --> this prints out all of the objects in the  
> database
>     i = InterPro('IPR014697')
>     print InterPro.objects
>     print InterPro.objects.all()
>  --> this fails and produces the exception.
>
> Traceback (most recent call last):
>   File "Model.py ", line 28, in ?
>     print InterPro.objects.all()
>   File "/home/skeg/workspace/test/src/Manager.py", line 17, in all
>     return query.select()
>   File "/usr/lib/python2.4/site-packages/sqlalchemy/orm/query.py",  
> line 247, in select
>     return self.select_whereclause(whereclause=arg, **kwargs)
>   File "/usr/lib/python2.4/site-packages/sqlalchemy/orm/query.py",  
> line 252, in select_whereclause
>     return self._select_statement(statement, params=params)
>   File "/usr/lib/python2.4/site-packages/sqlalchemy/orm/query.py",  
> line 378, in _select_statement
>     return self.execute(statement, params=params, **kwargs)
>   File "/usr/lib/python2.4/site-packages/sqlalchemy/orm/query.py",  
> line 310, in execute
>     return self.instances(result, **kwargs)
>   File "/usr/lib/python2.4/site-packages/sqlalchemy/orm/query.py",  
> line 329, in instances
>     self.mapper._instance(context, row, result)
>   File "/usr/lib/python2.4/site-packages/sqlalchemy/orm/mapper.py",  
> line 1213, in _instance
>     instance = self._create_instance(context.session)
>   File "/usr/lib/python2.4/site-packages/sqlalchemy/orm/mapper.py",  
> line 1234, in _create_instance
>     obj = self.class_.__new__(self.class_)
> TypeError: __new__() takes exactly 4 arguments (1 given)
>
> Does anyone know what the problem is? Is it the way I ve programmed  
> this using metaclasses or is it sqlalchemy and the way in  
> instantiates objects or even both?
>
> Many Thanks in advance,
>
> Nathan
>
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to [email protected]
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to