mmm.. I'm not sure but..
Have you to specify a relation like this? in Class Association
group = relationship('Group', primaryjoin=group_id==Group.group_id 
,backref='associations',cascade="all, delete")




On 02/18/2011 08:53 AM, Abdul Gaffar wrote:
Hi,

I tried the following example, rows are inserting fine but when  I try
to login I am getting the following error.





Error -<class 'sqlalchemy.exc.InvalidRequestError'>: Mapper 'Mapper|
User|t_user' has no property 'groups'
URL: http://192.168.2.129:8081/login_handler?__logins=0&came_from=%2F
File
'/home/gaffar/ProjectWork/tg2env/lib/python2.6/site-packages/WebError-0.10.1-py2.6.egg/weberror/errormiddleware.py',
 line 162 in __call__
   app_iter = self.application(environ, sr_checker)
File
'/home/gaffar/ProjectWork/tg2env/lib/python2.6/site-packages/TurboGears2-2.1-py2.6.egg/tg/configuration.py',
 line 796 in remover
   return app(environ, start_response)
File
'/home/gaffar/ProjectWork/tg2env/lib/python2.6/site-packages/repoze.tm2-1.0b1-py2.6.egg/repoze/tm/__init__.py',
 line 23 in __call__
   result = self.application(environ, save_status_and_headers)
File
'/home/gaffar/ProjectWork/tg2env/lib/python2.6/site-packages/repoze.who-1.0.18-py2.6.egg/repoze/who/middleware.py',
 line 85 in __call__
   self.add_metadata(environ, classification, identity)
File
'/home/gaffar/ProjectWork/tg2env/lib/python2.6/site-packages/repoze.who-1.0.18-py2.6.egg/repoze/who/middleware.py',
 line 179 in add_metadata
   plugin.add_metadata(environ, identity)
File
'/home/gaffar/ProjectWork/tg2env/lib/python2.6/site-packages/repoze.what-1.0.9-py2.6.egg/repoze/what/middleware.py',
 line 98 in add_metadata
   groups, permissions = self._find_groups(identity)
File
'/home/gaffar/ProjectWork/tg2env/lib/python2.6/site-packages/repoze.what-1.0.9-py2.6.egg/repoze/what/middleware.py',
 line 78 in _find_groups
   groups |= set(grp_fetcher.find_sections(credentials))
File
'/home/gaffar/ProjectWork/tg2env/lib/python2.6/site-packages/repoze.what-1.0.9-py2.6.egg/repoze/what/adapters/__init__.py',
 line 170 in find_sections
   return self._find_sections(hint)
File
'/home/gaffar/ProjectWork/tg2env/lib/python2.6/site-packages/repoze.what.plugins.sql-1.0-py2.6.egg/repoze/what/plugins/sql/adapters.py',
 line 307 in _find_sections
   user = self._get_item_as_row(id_)
File
'/home/gaffar/ProjectWork/tg2env/lib/python2.6/site-packages/repoze.what.plugins.sql-1.0-py2.6.egg/repoze/what/plugins/sql/adapters.py',
 line 197 in _get_item_as_row
   query =
self.dbsession.query(self.children_class).options(eagerload(self.translations['sections']))
File
'/home/gaffar/ProjectWork/tg2env/lib/python2.6/site-packages/SQLAlchemy-0.6.6-py2.6.egg/sqlalchemy/orm/query.py',
 line 853 in options
   return self._options(False, *args)
File '<string>', line 1 in<lambda>
File
'/home/gaffar/ProjectWork/tg2env/lib/python2.6/site-packages/SQLAlchemy-0.6.6-py2.6.egg/sqlalchemy/orm/query.py',
 line 52 in generate
   fn(self, *args[1:], **kw)
File
'/home/gaffar/ProjectWork/tg2env/lib/python2.6/site-packages/SQLAlchemy-0.6.6-py2.6.egg/sqlalchemy/orm/query.py',
 line 870 in _options
   opt.process_query(self)
File
'/home/gaffar/ProjectWork/tg2env/lib/python2.6/site-packages/SQLAlchemy-0.6.6-py2.6.egg/sqlalchemy/orm/interfaces.py',
 line 760 in process_query
   self._process(query, True)
File
'/home/gaffar/ProjectWork/tg2env/lib/python2.6/site-packages/SQLAlchemy-0.6.6-py2.6.egg/sqlalchemy/orm/interfaces.py',
 line 766 in _process
   paths, mappers = self._get_paths(query, raiseerr)
File
'/home/gaffar/ProjectWork/tg2env/lib/python2.6/site-packages/SQLAlchemy-0.6.6-py2.6.egg/sqlalchemy/orm/interfaces.py',
 line 843 in _get_paths
   resolve_synonyms=True, raiseerr=raiseerr)
File
'/home/gaffar/ProjectWork/tg2env/lib/python2.6/site-packages/SQLAlchemy-0.6.6-py2.6.egg/sqlalchemy/orm/mapper.py',
 line 941 in get_property
   "Mapper '%s' has no property '%s'" % (self, key))
InvalidRequestError: Mapper 'Mapper|User|t_user' has no property
'groups'


------------------------------------




On Thu, 2011-02-17 at 14:02 +0100, Christoph Zwerschke wrote:
Am 17.02.2011 13:00 schrieb Abdul Gaffar:
I tried this example, I am facing proble while inserting the records..
I think the problem is you can't easily associate items with SQLAlchemy
by using the relationship property. It's really made only for binary
relationships. I guess you need to do it explicitely, like this:

user = User.query.filter_by(user_name='abdul').one()
group = Group.query.filter_by(group_name='foo').one()
project = Project.query.filter_by(project_name='tg').one()

DBSession.add(Association(user, group, project))

DBSession.flush()

print user.groups_for_project(project)

where the classes are defined like that:


class Association(DeclarativeBase):
      __tablename__ = 't_assoc'

      user_id = Column(Integer, ForeignKey('t_user.user_id',
          onupdate="CASCADE", ondelete="CASCADE"), primary_key=True)
      group_id = Column(Integer, ForeignKey('t_group.group_id',
          onupdate="CASCADE", ondelete="CASCADE"),  primary_key=True,)
      project_id = Column(Integer, ForeignKey('t_project.project_id',
          onupdate="CASCADE", ondelete="CASCADE"), primary_key=True)

      user = relationship('User', backref='associations',
          cascade="all, delete")
      group = relationship('Group', backref='associations',
          cascade="all, delete")
      project = relationship('Project', backref='associations',
          cascade="all, delete")

      def __init__(self, user, group, project):
          self.user_id = user.user_id
          self.group_id = group.group_id
          self.project_id = project.project_id


class User(DeclarativeBase):
      __tablename__ = 't_user'

      user_id = Column(Integer, autoincrement=True, primary_key=True)
      user_name = Column(Unicode(32), unique=True, nullable=False)
      email_address = Column(Unicode(320), unique=True, nullable=False,
                             info={'rum': {'field':'Email'}})

      def __repr__(self):
          return ('<User: user_name=%r, email=%r>' % (
                  self.user_name, self.email_address))

      def __unicode__(self):
          return self.user_name

      def groups_for_project(self, project):
          return Project.query.join(Association).filter_by(
              project_id=project.project_id, user_id=self.user_id).all()


class Group(DeclarativeBase):
      __tablename__ = 't_group'

      group_id = Column(Integer, autoincrement=True, primary_key=True)
      group_name = Column(Unicode(16), unique=True)

      def __repr__(self):
          return '<Group: name=%r>' % self.group_name

      def __unicode__(self):
          return self.group_name


class Project(DeclarativeBase):
      __tablename__ = 't_project'

      project_id = Column(Integer, autoincrement=True, primary_key=True)
      project_name = Column(Unicode(80), unique=True, nullable=False)

      def __repr__(self):
          return '<Project(%r)>' % self.project_name


Similarly, you can define User.projects_for_group and the corresponding
methods on the other classes.

But you'll probably get a more profound answer on the SA mailing list
(if you follow http://www.gerv.net/hacking/how-to-ask-good-questions/).

-- Christoph


--
You received this message because you are subscribed to the Google Groups 
"TurboGears" 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/turbogears?hl=en.

Reply via email to