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.

Reply via email to