Store an instance of a connection - twisted.web

1.4k views Asked by At

How I store an instance of a connection in twisted.web? I have seen request.getSession() but I searched and there are very few examples of how it is stored and retrieved later.

Thanks.

Update: I want to store the ldap connection in a session for retrieve later

  def render_POST(self, request):

    command = request.path[1:]
    session = request.getSession()

    if command == "authentication":
      Connect = LdapConnection(request.args['host'][0],request.args['user'][0],request.args['password'][0])
      session.addComponent(LdapConnection, Connect)                  

    if command == "users":
      Connect = session.getComponent(LdapConnection)                     
      u = Users(Connect, request.args['name'][0],request.args['employeeNumber'])

    return
1

There are 1 answers

1
karlcow On

There are plenty of examples in the documentation of twisted. If you prefer a quick summary on how to use sessions.

from twisted.web.resource import Resource

class ShowSession(Resource):
    def render_GET(self, request):
        return 'Your session id is: ' + request.getSession().uid

class ExpireSession(Resource):
    def render_GET(self, request):
        request.getSession().expire()
        return 'Your session has been expired.'

resource = ShowSession()
resource.putChild("expire", ExpireSession())

Do not forget that request.getsession() will create the session if it doesn't already exists. This tutorial explains how to store objects in session.

cache()

from zope.interface import Interface, Attribute, implements
from twisted.python.components import registerAdapter
from twisted.web.server import Session
from twisted.web.resource import Resource

class ICounter(Interface):
    value = Attribute("An int value which counts up once per page view.")

class Counter(object):
    implements(ICounter)
    def __init__(self, session):
        self.value = 0

registerAdapter(Counter, Session, ICounter)

class CounterResource(Resource):
    def render_GET(self, request):
        session = request.getSession()
        counter = ICounter(session)   
        counter.value += 1
        return "Visit #%d for you!" % (counter.value,)

resource = CounterResource()