Hi All,
I don't whether this is the right place for such a long post...
Facing a strange problem using the abovementioned configuration. Being
new to TG and python, unable to know whether I am doing something
stupid, or it's a bug. Although I might now think to proceed with
default tables to keep things simple, mentioning the problem here, in
case I am missing something obvious, or it helps discovering a bug!
I have this postgres table, which I want to map to the User object:
CREATE TABLE person (
id SERIAL PRIMARY KEY,
login_id VARCHAR(50) NOT NULL,
first_name VARCHAR(30) NOT NULL,
middle_name VARCHAR(30) NULL,
last_name VARCHAR(30) NOT NULL,
email_id VARCHAR(100) NOT NULL,
used_bytes INTEGER NOT NULL DEFAULT 0,
tel_numbers VARCHAR(100) NULL,
ad_words VARCHAR(255) NULL,
blocked BOOLEAN NOT NULL DEFAULT FALSE,
passwrd VARCHAR(40) NOT NULL DEFAULT 'welcome'
);
I also have created other tables needed by Identity Management.
However, I don't need to use group and permissions.
In model.py, I did the following changes:
-
from turbogears.database import metadata, session # added session
from sqlalchemy.ext.assignmapper import assign_mapper # added this line
-
commented all generated code except Visit and VisitIdentity
-
# changed the foreign key in VisitIdentity to point to person table:
user_id = column(Integer, foreign_key="person.id", index=True)
-
Added this code:
class Group(object):
def __init__(self):
self.group_id = 1
self.group_name = 'persons'
self.display_name = 'All persons'
self.created = datetime.now()
self.users = []
self.permissions = []
class Permission(object):
def __init__(self):
self.permission_id = 1
self.permission_name = 'All'
self.description = 'All permissions'
self.groups = []
person_tbl = Table('person', metadata, autoload=True)
class User(object):
created = property(lambda self:datetime(2000, 1, 1))
groups = property(lambda self:[])
permissions = property(lambda self:set())
assign_mapper(session.context, User, person_tbl, properties = {
'user_id' : person_tbl.c.id,
'user_name' : person_tbl.c.login_id,
'email_address' : person_tbl.c.email_id,
'display_name' : person_tbl.c.first_name,
'password' : person_tbl.c.passwrd,
})
Now the interesting part. I created a user (user_id=sanjay,
password=welcome)
While I run the code and login using 'sanjay' (with single quotes fed
in the text box!), I succeed. If I don't use the single quotes, I get
this strange error:
Traceback (most recent call last):
File
"/usr/lib/python2.4/site-packages/CherryPy-2.2.1-py2.4.egg/cherrypy/_cphttptools.py",
line 103, in _run
applyFilters('before_main')
File
"/usr/lib/python2.4/site-packages/CherryPy-2.2.1-py2.4.egg/cherrypy/filters/__init__.py",
line 151, in applyFilters
method()
File
"/usr/lib/python2.4/site-packages/TurboGears-0.9a7-py2.4.egg/turbogears/visit/api.py",
line 154, in before_main
plugin.record_request( visit )
File
"/usr/lib/python2.4/site-packages/TurboGears-0.9a7-py2.4.egg/turbogears/identity/visitor.py",
line 162, in record_request
identity= self.identity_from_request(visit.key)
File
"/usr/lib/python2.4/site-packages/TurboGears-0.9a7-py2.4.egg/turbogears/identity/visitor.py",
line 86, in identity_from_request
identity= source(visit_key)
File
"/usr/lib/python2.4/site-packages/TurboGears-0.9a7-py2.4.egg/turbogears/identity/visitor.py",
line 143, in identity_from_form
identity= self.provider.validate_identity( user_name, pw, visit_key
)
File
"/usr/lib/python2.4/site-packages/TurboGears-0.9a7-py2.4.egg/turbogears/identity/saprovider.py",
line 153, in validate_identity
user = user_class.get_by(user_name=user_name)
File
"/usr/lib/python2.4/site-packages/SQLAlchemy-0.2.6-py2.4.egg/sqlalchemy/ext/assignmapper.py",
line 7, in do
return getattr(query, name)(*args, **kwargs)
File "build/bdist.linux-i686/egg/sqlalchemy/orm/query.py", line 70,
in get_by
File "build/bdist.linux-i686/egg/sqlalchemy/orm/query.py", line 230,
in select_whereclause
File "build/bdist.linux-i686/egg/sqlalchemy/orm/query.py", line 300,
in _select_statement
File "build/bdist.linux-i686/egg/sqlalchemy/orm/query.py", line 262,
in instances
File "build/bdist.linux-i686/egg/sqlalchemy/orm/session.py", line
114, in execute
File
"/usr/lib/python2.4/site-packages/SQLAlchemy-0.2.6-py2.4.egg/sqlalchemy/engine/base.py",
line 244, in execute
return Connection.executors[type(object).__mro__[-2]](self, object,
*multiparams, **params)
File
"/usr/lib/python2.4/site-packages/SQLAlchemy-0.2.6-py2.4.egg/sqlalchemy/engine/base.py",
line 268, in execute_clauseelement
return self.execute_compiled(elem.compile(engine=self.__engine,
parameters=param), *multiparams, **params)
File
"/usr/lib/python2.4/site-packages/SQLAlchemy-0.2.6-py2.4.egg/sqlalchemy/engine/base.py",
line 284, in execute_compiled
proxy(str(compiled), parameters)
File
"/usr/lib/python2.4/site-packages/SQLAlchemy-0.2.6-py2.4.egg/sqlalchemy/engine/base.py",
line 280, in proxy
self._execute_raw(statement, parameters, cursor=cursor,
context=context)
File
"/usr/lib/python2.4/site-packages/SQLAlchemy-0.2.6-py2.4.egg/sqlalchemy/engine/base.py",
line 319, in _execute_raw
self._execute(cursor, statement, parameters, context=context)
File
"/usr/lib/python2.4/site-packages/SQLAlchemy-0.2.6-py2.4.egg/sqlalchemy/engine/base.py",
line 338, in _execute
raise exceptions.SQLError(statement, parameters, e)
SQLError: (ProgrammingError) ERROR: column "sanjay" does not exist
SELECT person.last_name AS person_last_name, person.middle_name AS
person_middle_name, person.id AS person_id, person.login_id AS
person_login_id, person.used_bytes AS person_used_bytes,
person.ad_words AS person_ad_words, person.tel_numbers AS
person_tel_numbers, person.first_name AS person_first_name,
person.passwrd AS person_passwrd, person.email_id AS person_email_id,
person.blocked AS person_blocked
FROM person
WHERE person.login_id = sanjay ORDER BY person.id
LIMIT 1 'SELECT person.last_name AS person_last_name,
person.middle_name AS person_middle_name, person.id AS person_id,
person.login_id AS person_login_id, person.used_bytes AS
person_used_bytes, person.ad_words AS person_ad_words,
person.tel_numbers AS person_tel_numbers, person.first_name AS
person_first_name, person.passwrd AS person_passwrd, person.email_id AS
person_email_id, person.blocked AS person_blocked \nFROM person \nWHERE
person.login_id = %(person_login_id)s ORDER BY person.id \n LIMIT 1'
{'person_login_id': u'sanjay'}
Sorry for this long post, and thanks in advance for valuable tips...
Sanjay
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---