Hello ! I'm running SQLAlchemy 0.2.8 with Python 2.4.
I have the following :
roles_table = Table('roles', meta,
Column('id', Integer, primary_key=True, nullable=False),
Column('name', String(100), nullable=False))
users_table = Table('users', meta,
Column('id', Integer, primary_key=True, nullable=False),
Column('added', DateTime, nullable=False, default=func.localtimestamp),
Column('modified', DateTime, nullable=False,
default=func.localtimestamp, onupdate=func.localtimestamp),
Column('first_name', String(200), nullable=False),
Column('last_name', String(200), nullable=False),
Column('login', String(200), nullable=False),
Column('password', String(40), nullable=False),
Column('email', String(200), nullable=False))
user_role_table = Table('user_role', meta,
Column('role_id', Integer, ForeignKey('roles.id'), primary_key=True,
nullable=False),
Column('user_id', Integer, ForeignKey('users.id'), primary_key=True,
nullable=False))
mapper(role.Role, roles_table)
mapper(authentication.User, users_table, properties = {
'roles' : relation(role.Role, secondary=user_role_table,
cascade='all, delete-orphan'),
'_id' : users_table.c.id,
'_added' : users_table.c.added,
'_modified' : users_table.c.modified,
'_first_name' : users_table.c.first_name,
'_last_name' : users_table.c.last_name,
'_login' : users_table.c.login,
'_password' : users_table.c.password,
'_email' : users_table.c.email
})
The situation is the following:
I'm using the MVC pattern with mod_python (with a home made handler).
BaseController is the root class for all the controllers. Every action
is rendered through the .render() method in the BaseController.
I have a controller called UserController with a method .login() - if
the login is successfull I store an User object (which is the
authenticated user) in the user (mod_python) session. The problem I have
is that when I reload the session it fail with the following error :
PythonHandler public/dispatch: Traceback (most recent call last):
PythonHandler public/dispatch: File
"/usr/lib/python2.4/site-packages/mod_python/apache.py", line 299, in
HandlerDispatch\n result = object(req)
PythonHandler public/dispatch: File
"/home/jcigar/public_html/bbpf_website/trunk/public/dispatch.py", line
34, in handler\n ctrl_inst = ctrl_class(req)
PythonHandler public/dispatch: File
"/home/jcigar/public_html/bbpf_website/trunk/application/controllers/site.py",
line 16, in __init__\n super(SiteController, self).__init__(req)
PythonHandler public/dispatch: File
"/home/jcigar/public_html/bbpf_website/trunk/application/controllers/base.py",
line 18, in __init__\n self.session_user =
Session.DbmSession(self.req, dbm=configuration.main.SESSION_LOCATION)
PythonHandler public/dispatch: File
"/usr/lib/python2.4/site-packages/mod_python/Session.py", line 337, in
__init__\n timeout=timeout, lock=lock)
PythonHandler public/dispatch: File
"/usr/lib/python2.4/site-packages/mod_python/Session.py", line 166, in
__init__\n if self.load():
PythonHandler public/dispatch: File
"/usr/lib/python2.4/site-packages/mod_python/Session.py", line 225, in
load\n dict = self.do_load()
PythonHandler public/dispatch: File
"/usr/lib/python2.4/site-packages/mod_python/Session.py", line 361, in
do_load\n return cPickle.loads(dbm[self._sid])
PythonHandler public/dispatch: File
"/usr/lib/python2.4/site-packages/sqlalchemy/attributes.py", line 337,
in __setstate__\n self.attr = getattr(d['obj'].__class__, self.key)
PythonHandler public/dispatch: AttributeError: type object 'User' has no
attribute 'roles'
Is it possible that the Relation() "roles" of the "User" mapper is not
serializable .. ?
Here is my code :
import os.path
from sqlalchemy import create_session
from genshi.template import TemplateLoader
from genshi.core import Markup
from mod_python import util, Session, apache
from application.models.authentication import User, AnonymousUser
import configuration
class BaseController(object):
def __init__(self, req):
self.req = req
self.session_db = create_session()
# THIS IS THE LINE WHICH FAIL
self.session_user = Session.DbmSession(self.req,
dbm=configuration.main.SESSION_LOCATION)
self.user = self.session_user.get('user', AnonymousUser())
self.errors = {}
self.params = {}
self.context = {}
try:
# detached -> persistent//
self.session_db.update(self.user)
except:
pass
def render(self, template):
self.context.update(Markup=Markup, user=self.user,
SITE_ROOT=configuration.main.SITE_ROOT,
MEDIA_ROOT=configuration.main.MEDIA_ROOT, request=self.req,
errors=self.errors)
loader =
TemplateLoader([configuration.main.TEMPLATES_LOCATION])
template = loader.load(template)
stream = template.generate(**self.context)
if not self.req._content_type_set:
self.req.content_type = 'text/html;charset=UTF-8'
self.req.write(stream.render(method='xhtml', encoding='utf-8'))
self.session_user.save()
self.session_db.close()
In advance thanks for answers !
Julien
--
Julien Cigar
Belgian Biodiversity Platform
http://www.biodiversity.be
Université Libre de Bruxelles
Campus de la Plaine CP 257
Bâtiment NO, Bureau 4 N4 115C (Niveau 4)
Boulevard du Triomphe, entrée ULB 2
B-1050 Bruxelles
office: [EMAIL PROTECTED]
home: [EMAIL PROTECTED]
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---