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
2to3 -f print
[sfa.git]
/
sfa
/
server
/
sfaapi.py
diff --git
a/sfa/server/sfaapi.py
b/sfa/server/sfaapi.py
index
280bf14
..
9911e46
100644
(file)
--- a/
sfa/server/sfaapi.py
+++ b/
sfa/server/sfaapi.py
@@
-10,15
+10,14
@@
from sfa.trust.auth import Auth
from sfa.trust.certificate import Keypair, Certificate
from sfa.trust.credential import Credential
from sfa.trust.rights import determine_rights
from sfa.trust.certificate import Keypair, Certificate
from sfa.trust.credential import Credential
from sfa.trust.rights import determine_rights
-
+from sfa.util.version import version_core
from sfa.server.xmlrpcapi import XmlrpcApi
from sfa.server.xmlrpcapi import XmlrpcApi
-
from sfa.client.return_value import ReturnValue
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 xmlrcp service
augmented with the local cryptographic material and hrn
"""
An SfaApi instance is a basic xmlrcp service
augmented with the local cryptographic material and hrn
@@
-32,12
+31,12
@@
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',
- config = "/etc/sfa/sfa_config
.py
",
+ config = "/etc/sfa/sfa_config",
peer_cert = None, interface = None,
key_file = None, cert_file = None, cache = None):
peer_cert = None, interface = None,
key_file = None, cert_file = None, cache = None):
@@
-70,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):
"""
@@
-90,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.
@@
-129,7
+138,7
@@
class SfaApi (XmlrpcApi):
delegated_cred = None
for cred in creds:
delegated_cred = None
for cred in creds:
- if hierarchy.auth_exists(Credential(
string
=cred).get_gid_caller().get_hrn()):
+ if hierarchy.auth_exists(Credential(
cred
=cred).get_gid_caller().get_hrn()):
delegated_cred = cred
break
return delegated_cred
delegated_cred = cred
break
return delegated_cred
@@
-160,8
+169,9
@@
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
- from sfa.storage.persistentobjs import RegRecord
+ # 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:
raise RecordNotFound(hrn)
record = dbsession.query(RegRecord).filter_by(type='authority+sa', hrn=hrn).first()
if not record:
raise RecordNotFound(hrn)
@@
-232,9
+242,10
@@
class SfaApi (XmlrpcApi):
output = result.faultString
return output
output = result.faultString
return output
- def prepare_response_v2_am(self, result):
+ def prepare_response_am(self, result):
+ version = version_core()
response = {
response = {
- 'geni_api':
2,
+ 'geni_api':
3,
'code': self.get_geni_code(result),
'value': self.get_geni_value(result),
'output': self.get_geni_output(result),
'code': self.get_geni_code(result),
'value': self.get_geni_value(result),
'output': self.get_geni_output(result),
@@
-248,6
+259,6
@@
class SfaApi (XmlrpcApi):
"""
# as of dec 13 2011 we only support API v2
if self.interface.lower() in ['aggregate', 'slicemgr']:
"""
# as of dec 13 2011 we only support API v2
if self.interface.lower() in ['aggregate', 'slicemgr']:
- result = self.prepare_response_
v2_
am(result)
+ result = self.prepare_response_am(result)
return XmlrpcApi.prepare_response(self, result, method)
return XmlrpcApi.prepare_response(self, result, method)