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 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
-~----------~----~----~----~------~----~------~--~---

Reply via email to