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