From 1c3423d452d0ca1e20dff36ce05c2e35d2894f29 Mon Sep 17 00:00:00 2001 From: Leif Johansson Date: Mon, 2 May 2011 14:43:23 +0200 Subject: new acl - first version --- src/meetingtools/ac/__init__.py | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) (limited to 'src/meetingtools/ac/__init__.py') diff --git a/src/meetingtools/ac/__init__.py b/src/meetingtools/ac/__init__.py index 1250a5f..4fdc2f5 100644 --- a/src/meetingtools/ac/__init__.py +++ b/src/meetingtools/ac/__init__.py @@ -1,12 +1,46 @@ from meetingtools.ac.api import ACPClient +import time -def ac_api_client_cached(request,acc): +def ac_api_client_cache(request,acc): tag = 'ac_api_client_%s' % acc.name if not request.session.has_key(tag): - request.session[tag] = ACPClient(acc.api_url,acc.user,acc.password) + request.session[tag] = ACPClientWrapper(acc) return request.session[tag] -def ac_api_client(request,acc): +def ac_api_client_nocache(request,acc): + return ACPClientWrapper(acc) + +ac_api_client = ac_api_client_nocache + +def ac_api(request,acc): return ACPClient(acc.api_url,acc.user,acc.password) + + +MAXCALLS = 10 +MAXIDLE = 10 + +class ACPClientWrapper(object): + + def __init__(self,acc): + self.acc = acc + self._delegate = None + self.ncalls = 0 + self.lastcall = time.time() + + def invalidate(self): + self._delegate = None + + def client_factory(self): + now = time.time() + if self.ncalls > MAXCALLS or now - self.lastcall > MAXIDLE or not self._delegate: + self._delegate = ACPClient(self.acc.api_url,self.acc.user,self.acc.password) + self.ncalls = 0 + self.ncalls += 1 + self.lastcall = now + return self._delegate + + def __getattr__(self,name): + client = self.client_factory() + return getattr(client,name) \ No newline at end of file -- cgit v1.1