[Twisted-Python] Session expiration callbacks have no arguments?

Kevin Unger kunger at intersight.com
Thu Dec 11 21:18:40 EST 2003


Hello twisteds,

Shouldn't the callbacks that are  registered via 
web.server.Session.notifyOnExpire() be called with the session object 
as a parameter?  How does the callback know what session is expiring?

-k




On Thursday, December 11, 2003, at 09:03 AM, Valentino Volonghi aka 
Dialtone wrote:

> I don't get why this version of my software does not work...  The
> previous version did not use service.Service but directly
> protocol.ServerFactory and it worked right.
>
> Basically this software is a server to which you can connect and
> manage some database, actually now it only supports sqlite but it will
> support more and more soon I hope.
>
> ######################################## CODE HERE ################
> VERSION = 0.1
>
> from twisted.application import internet, service
> from twisted.internet import protocol, reactor, defer
> from twisted.protocols import basic
>
> import sqlite
>
> def catchError(err):
>     return "Internal Server"
>
> class DBUniversalProtocol(basic.LineReceiver):
>     def send_results(self, q_results):
>         if q_results:
>             print "Sending data...",
>             self.transport.write(str(q_results) +'\r\n')
>             print "OK"
>
>     def connectionMade(self):
>         self.factory.connect_to_DB()
>
>     def connectionLost(self, reason):
>         print "Connection closed by client... ",
>         self.factory.conn.commit()
>         self.factory.cursor.close()
>         self.factory.conn.close()
>         print "Reset done."
>
>     def lineReceived(self, line):
>         d = self.factory.dispatch_function(line)
>         d.addErrback(catchError)
>         d.addCallback(self.send_results)
>
> class DBUniversalService(service.Service):
>     def __init__(self):
>         print "DB Universal Server, v.", VERSION, "(c) Valentino 
> Volonghi"
>         print "Licensed under the Lesser General Public License v2.1"
>         print "Written by Valentino Volonghi and released without any 
> warranties"
>
>         self.dispatcher = {'set_query':self.set_query,
>                            'get_many':self.get_many,
>                            'get_all':self.get_all,
>                            'get_one':self.get_one
>                           }
>         self.conn = None
>         self.cursor = None
>
>     def getDBUniversalFactory(self):
>         f = protocol.ServerFactory()
>         f.protocol = DBUniversalProtocol
>         f.dispatch_function = self.dispatch_function
>         f.conn = self.conn
>         f.cursor = self.cursor
>         f.connect_to_DB = self.connect_to_DB
>         return f
>
>     def dispatch_function(self, line):
>         # Every line sent to this server is made of some parts:
>         # "FUN_TO_CALL:ARGS_IF_ANY\r\n"
>         # Be sure to always use this format standard otherwise
>         # You won't have the expected behaviour
>
>         fun = line.split(":")[0]
>         callable = self.dispatcher.get(fun.strip(), None)
>         if not callable:
>             return defer.succeed(self.error())
>         else:
>             return defer.succeed(callable(line))
>
>     def set_query(self, line):
>         arg = line.split(":")[1]
>         self.SQL = arg
>         return self.run_query()
>
>     def get_many(self, line):
>         arg = line.split(":")[1]
>         try:
>             NUM = int(arg)
>         except:
>             return defer.succeed(self.error())
>         return defer.succeed(self.cursor.fetchmany(NUM))
>
>     def get_all(self, line):
>         return defer.succeed(self.cursor.fetchall())
>
>     def get_one(self, line):
>         return defer.succeed(self.cursor.fetchone())
>
>     def error(self):
>         return "Operation Failed!"
>
>     def allOK(self):
>         return "OK"
>
>     def run_query(self):
>         print "Checking the query (%s)... " %(self.SQL.strip()),
>         isCorrect = self.check_query(self.SQL)
>         if isCorrect:
>             print " OK"
>             self.cursor.execute(self.SQL)
>             return defer.succeed(self.allOK())
>         else:
>             print " Failed"
>             return defer.succeed(self.error())
>
>     def check_query(self, to_check):
>         res = to_check.split("\r\n")
>         if len(res) > 2: return 0
>         if res[0][-1] != ";": return 0
>         return 1
>
>     def connect_to_DB(self):
>         print "Connecting to DB... ",
>         self.conn = sqlite.connect("test.db")
>         self.cursor = self.conn.cursor()
>         print "OK"
>
> #############################################
> MYPORT = 6000
> application = service.Application('dbi_face', uid=1000, gid=1000)
> f = DBUniversalService()
> serviceCollection = service.IServiceCollection(application)
> internet.TCPServer(MYPORT, f.getDBUniversalFactory()
>                    ).setServiceParent(serviceCollection)
> #############################################
> Are these last lines right or are they wrong?
>
> I've not really understood the meaning of the last lines,
> while I understand the meaning of:
>
> reactor.listenTCP(MYPORT, DBUniversalServer())
> reactor.run()
>
> I must say I based my "upgrade" to finger listings.
>
> Thanks for your help
>
> -- 
> Valentino Volonghi, Regia SpA, Milan
> Linux User #310274, Gentoo Proud User
>
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>





More information about the Twisted-Python mailing list