Thanks Michael,
Could not find a hidden Session object.
So I broke it down into a problem that works/doesn't work based on
files separation
1. If I place all of the code into one file all_in_one.py which
contains the cherrypy startup, the SA init code and ORM object and the
cherrypy REST resource then it works when trying to use a session
during request handling
2. If I divide up the code into 2 files...the cherrypy startup code &
SA init code in one file and then the REST class, and the ORM class in
the other then it fails when trying to use a session during request
handling.
In both cases the code is 'essentially' the same.
I'm sure I'm missing a python based problem...I'm new to it as well as
SA.
------------------------------------
Working single file case all_in_one.py
import cherrypy
from sqlalchemy import *
import MySQLdb
from sqlalchemy.orm import session, Session, scoped_session,
sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.dialects.mysql import MEDIUMTEXT
from sqlalchemy import Column, Integer, String, DateTime, func
engine = create_engine('mysql://xxxx:xxxxx@localhost/test', echo=True)
meta = MetaData()
Session = scoped_session(sessionmaker(bind=engine))
class RESTResource(object):
orm_class = None
def __init__(self, ormcls):
self.orm_class = ormcls
@cherrypy.expose
def default(self, *vpath, **params):
method = getattr(self, "handle_" + cherrypy.request.method,
None)
if not method:
methods = [x.replace("handle_", "")
for x in dir(self) if x.startswith("handle_")]
cherrypy.response.headers["Allow"] = ",".join(methods)
raise cherrypy.HTTPError(405, "Method not implemented.")
return method(*vpath, **params);
def handle_GET(self, *vpath, **params):
try:
session = Session()
session.query(ProjectORM).filter(ProjectORM.id ==
12).one()
except:
print "got exception!!!!!"
raise
print "all ok!"
return "done GET"
def handle_PUT(self, *vpath, **params):
return "done PUT"
Base = declarative_base()
class ProjectORM(Base):
__tablename__ = 'project'
id = Column(Integer, primary_key=True)
name = Column(String(256))
about = Column(String(1024))
url = Column(String(512))
version = Column(Integer)
mbd_metadata = Column('metadata',MEDIUMTEXT)
creation = Column(DateTime)
def __init__(self, name, about, url, version, mbd_metadata):
self.name = name
self.about = about
self.url = url
self.version = version
self.mbd_metadata = mbd_metadata
self.creation = func.now()
def __repr__(self):
return "<User('%s','%s', '%s')>" % (self.name, self.about,
self.url, self.version, self.mbd_metadata, self.creation)
class Root(object):
project = RESTResource(ProjectORM)
@cherrypy.expose
def index(self):
return "JBPC VAMPS REST Service"
cherrypy.quickstart(Root())
-----------------------------------------
-----------------------------------------
Failing two file case
first file
two_file_server.py as follows:
import cherrypy
from sqlalchemy import *
import MySQLdb
from sqlalchemy.orm import session, Session, scoped_session,
sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.dialects.mysql import MEDIUMTEXT
from restresource import *
engine = create_engine('mysql://xxxx:xxxxx@localhost/test', echo=True)
meta = MetaData()
Session = scoped_session(sessionmaker(bind=engine))
class Root(object):
project = RESTResource(ProjectORM)
@cherrypy.expose
def index(self):
return "JBPC VAMPS REST Service"
cherrypy.quickstart(Root())
-----------------------------------------
-----------------------------------------
the second file of the two file set:
restresource.py
import cherrypy
from sqlalchemy import *
import MySQLdb
from sqlalchemy.orm import session, Session, scoped_session,
sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.dialects.mysql import MEDIUMTEXT
from sqlalchemy import Column, Integer, String, DateTime, func
Base = declarative_base()
class ProjectORM(Base):
__tablename__ = 'project'
id = Column(Integer, primary_key=True)
name = Column(String(256))
about = Column(String(1024))
url = Column(String(512))
version = Column(Integer)
mbd_metadata = Column('metadata',MEDIUMTEXT)
creation = Column(DateTime)
def __init__(self, name, about, url, version, mbd_metadata):
self.name = name
self.about = about
self.url = url
self.version = version
self.mbd_metadata = mbd_metadata
self.creation = func.now()
def get_one(self):
pass
def __repr__(self):
return "<User('%s','%s', '%s')>" % (self.name, self.about,
self.url, self.version, self.mbd_metadata, self.creation)
class RESTResource(object):
orm_class = None
def __init__(self, ormcls):
self.orm_class = ormcls
@cherrypy.expose
def default(self, *vpath, **params):
method = getattr(self, "handle_" + cherrypy.request.method,
None)
if not method:
methods = [x.replace("handle_", "")
for x in dir(self) if x.startswith("handle_")]
cherrypy.response.headers["Allow"] = ",".join(methods)
raise cherrypy.HTTPError(405, "Method not implemented.")
return method(*vpath, **params);
def handle_GET(self, *vpath, **params):
try:
session = Session()
session.query(ProjectORM).filter(ProjectORM.id ==
12).one()
except:
print "got exception!!!!!"
raise
print "all ok!"
return "done GET"
def handle_PUT(self, *vpath, **params):
return "done PUT"
def get_all_or_one(self,vpath):
if len(vpath) == 0:
all = self.orm_class.get_all()
else:
one = self.orm_class.get_instance(vpath[0])
k = 1
--
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.