durusmail: quixote-users: Re: How to run session.ptl from demo application
Re: How to run session.ptl from demo application
2002-07-24
2002-07-24
2002-07-24
Re: How to run session.ptl from demo application
Pedro Lima
2002-07-24
>I did your suggested modification to splat.cgi, and
>this is the error I am getting now:

Here is the splat.cgi I used to get the program running.

Hope that helps
regards
Pedro Lima

--

#!c:/python22/python.exe

import sys, os
sys.stderr.write("starting %s (pid %d)\n" % (sys.argv[0], os.getpid()))

from stat import ST_MTIME
from time import time
from cPickle import load, dump
from quixote import enable_ptl
from quixote.publish import SessionPublisher
from quixote.session import Session, SessionManager
from splat.config import OptionParser, get_config
from splat.preferences import Preferences

class DirMapping:
    def __init__ (self, save_dir=None):
        self.set_save_dir(save_dir)
        self.cache = {}
        self.cache_time = {}

    def set_save_dir (self, save_dir):
        self.save_dir = save_dir
        if save_dir and not os.path.isdir(save_dir):
            os.mkdir(save_dir, 0700)

    def keys (self):
        return os.listdir(self.save_dir)

    def values (self):
        # This is pretty expensive!
        return [self[id] for id in self.keys()]

    def items (self):
        return [(id, self[id]) for id in self.keys()]

    def _gen_filename (self, session_id):
        return os.path.join(self.save_dir, session_id)

    def __getitem__ (self, session_id):

        filename = self._gen_filename(session_id)
        if (self.cache.has_key(session_id) and
            os.stat(filename)[ST_MTIME] <= self.cache_time[session_id]):
            return self.cache[session_id]

        if os.path.exists(filename):
            try:
                file = open(filename, "rb")
                try:
                    print "loading session from %r" % file
                    session = load(file)
                    self.cache[session_id] = session
                    self.cache_time[session_id] = time()
                    return session
                finally:
                    file.close()
            except IOError, err:
                raise KeyError(session_id,
                               "error reading session from %s: %s"
                               % (filename, err))
        else:
            raise KeyError(session_id,
                           "no such file %s" % filename)

    def get (self, session_id, default=None):
        try:
            return self[session_id]
        except KeyError:
            return default

    def has_key (self, session_id):
        return os.path.exists(self._gen_filename(session_id))

    def __setitem__ (self, session_id, session):
        filename = self._gen_filename(session.id)
        file = open(filename, "wb")
        print "saving session to %s" % file
        dump(session, file, 1)
        file.close()

        self.cache[session_id] = session
        self.cache_time[session_id] = time()

    def __delitem__ (self, session_id):
        filename = self._gen_filename(session_id)
        if os.path.exists(filename):
            os.remove(filename)
            if self.cache.has_key(session_id):
                del self.cache[session_id]
                del self.cache_time[session_id]
        else:
            raise KeyError(session_id, "no such file: %s" % filename)

# ----------------------------------------------------------------------

class DemoSession(Session):

    def __init__ (self, request, id):
        Session.__init__(self, request, id)
        self.prefs = Preferences()
        self.visible_bugs = []
        self.widgets = {}

    def start_request (self, request):
        Session.start_request(self, request)

    def has_info (self):
        return 1

    is_dirty = has_info

# ----------------------------------------------------------------------

sys.stderr.write("imported everything OK\n")

default_config_file = os.path.join(os.path.dirname(sys.argv[0]),
"splat.conf")

parser = OptionParser()
parser.set_default("config_file", default_config_file)
(options, args) = parser.parse_args()
config = get_config(options)

enable_ptl()
sessions = DirMapping(save_dir="/tmp/quixote-session-demo")
session_mgr =
SessionManager(session_class=DemoSession,session_mapping=sessions)
pub = SessionPublisher('splat.web', session_mgr=session_mgr)
pub.setup_logs()
sys.stderr.write("set everything up OK, transferring to Quixote's
publisher\n")
pub.publish_cgi()





_________________________________________________________________
Send and receive Hotmail on your mobile device: http://mobile.msn.com



reply