git://git.onelab.eu
/
sfa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
deeper pass on xmlrpclib vs xmlrpc.client as well as configparser
[sfa.git]
/
sfa
/
server
/
sfaapi.py
diff --git
a/sfa/server/sfaapi.py
b/sfa/server/sfaapi.py
index
898fb66
..
499e3bd
100644
(file)
--- a/
sfa/server/sfaapi.py
+++ b/
sfa/server/sfaapi.py
@@
-14,12
+14,12
@@
from sfa.util.version import version_core
from sfa.server.xmlrpcapi import XmlrpcApi
from sfa.client.return_value import ReturnValue
from sfa.server.xmlrpcapi import XmlrpcApi
from sfa.client.return_value import ReturnValue
+from sfa.storage.alchemy import alchemy
####################
class SfaApi (XmlrpcApi):
####################
class SfaApi (XmlrpcApi):
-
"""
"""
- An SfaApi instance is a basic xmlr
cp
service
+ An SfaApi instance is a basic xmlr
pc
service
augmented with the local cryptographic material and hrn
It also has the notion of its own interface (a string describing
augmented with the local cryptographic material and hrn
It also has the notion of its own interface (a string describing
@@
-31,8
+31,8
@@
class SfaApi (XmlrpcApi):
It gets augmented by the generic layer with
(*) an instance of manager (actually a manager module for now)
It gets augmented by the generic layer with
(*) an instance of manager (actually a manager module for now)
- (*) which in turn holds an instance of a testbed driver
-
For convenience api.manager.driver == api.
driver
+ beware that this is shared among all instances of api
+
(*) an instance of a testbed
driver
"""
def __init__ (self, encoding="utf-8", methods='sfa.methods',
"""
def __init__ (self, encoding="utf-8", methods='sfa.methods',
@@
-69,6
+69,7
@@
class SfaApi (XmlrpcApi):
# filled later on by generic/Generic
self.manager=None
# filled later on by generic/Generic
self.manager=None
+ self._dbsession=None
def server_proxy(self, interface, cred, timeout=30):
"""
def server_proxy(self, interface, cred, timeout=30):
"""
@@
-89,7
+90,16
@@
class SfaApi (XmlrpcApi):
server = interface.server_proxy(key_file, cert_file, timeout)
return server
server = interface.server_proxy(key_file, cert_file, timeout)
return server
-
+ def dbsession(self):
+ if self._dbsession is None:
+ self._dbsession=alchemy.session()
+ return self._dbsession
+
+ def close_dbsession(self):
+ if self._dbsession is None: return
+ alchemy.close_session(self._dbsession)
+ self._dbsession=None
+
def getCredential(self, minimumExpiration=0):
"""
Return a valid credential for this interface.
def getCredential(self, minimumExpiration=0):
"""
Return a valid credential for this interface.
@@
-159,7
+169,8
@@
class SfaApi (XmlrpcApi):
if not auth_hrn or hrn == self.config.SFA_INTERFACE_HRN:
auth_hrn = hrn
auth_info = self.auth.get_auth_info(auth_hrn)
if not auth_hrn or hrn == self.config.SFA_INTERFACE_HRN:
auth_hrn = hrn
auth_info = self.auth.get_auth_info(auth_hrn)
- from sfa.storage.alchemy import dbsession
+ # xxx although unlikely we might want to check for a potential leak
+ dbsession=self.dbsession()
from sfa.storage.model import RegRecord
record = dbsession.query(RegRecord).filter_by(type='authority+sa', hrn=hrn).first()
if not record:
from sfa.storage.model import RegRecord
record = dbsession.query(RegRecord).filter_by(type='authority+sa', hrn=hrn).first()
if not record:
@@
-211,6
+222,7
@@
class SfaApi (XmlrpcApi):
code = {
'geni_code': GENICODE.SUCCESS,
'am_type': 'sfa',
code = {
'geni_code': GENICODE.SUCCESS,
'am_type': 'sfa',
+ 'am_code': None,
}
if isinstance(result, SfaFault):
code['geni_code'] = result.faultCode
}
if isinstance(result, SfaFault):
code['geni_code'] = result.faultCode