--- /dev/null
+def import_manager(kind, type):
+ """
+ kind expected in ['registry', 'aggregate', 'slice', 'component']
+ type is e.g. 'pl' or 'max' or whatever
+ """
+ basepath = 'sfa.managers'
+ qualified = "%s.%s_manager_%s"%(basepath,kind,type)
+ generic = "%s.%s_manager"%(basepath,kind)
+ try:
+ manager = __import__(qualified, fromlist=[basepath])
+ except:
+ try:
+ manager = __import__ (generic, fromlist=[basepath])
+ if type != 'pl' :
+ logger.warn ("Using generic manager for %s with type=%s"%(kind,type))
+ except:
+ manager=None
+ return manager
+
from sfa.util.xrn import get_authority, hrn_to_urn
from sfa.util.sfalogging import logger
+from sfa.managers.import_manager import import_manager
+
# after http://www.erlenstar.demon.co.uk/unix/faq_2.html
def daemon():
"""Daemonize the current process."""
def init_server(options, config):
"""
- Execute the init method defined in the manager file
+ Locate the manager based on config.*TYPE
+ Execute the init_server method (well in fact function, sigh) if defined in that module
+ In order to migrate to a more generic approach:
+ * search for <>_manager_<type>.py
+ * if not found, try <>_manager.py (and issue a warning if <type>!='pl')
"""
- def init_manager(manager_module, manager_base):
- try: manager = __import__(manager_module, fromlist=[manager_base])
- except: manager = None
- if manager and hasattr(manager, 'init_server'):
- manager.init_server()
-
- manager_base = 'sfa.managers'
if options.registry:
- mgr_type = config.SFA_REGISTRY_TYPE
- manager_module = manager_base + ".registry_manager_%s" % mgr_type
- init_manager(manager_module, manager_base)
- if options.am:
- mgr_type = config.SFA_AGGREGATE_TYPE
- manager_module = manager_base + ".aggregate_manager_%s" % mgr_type
- init_manager(manager_module, manager_base)
+ manager=import_manager ("registry", config.SFA_REGISTRY_TYPE)
+ if manager and hasattr(manager, 'init_server'): manager.init_server()
+ if options.am:
+ manager=import_manager ("aggregate", config.SFA_AGGREGATE_TYPE)
+ if manager and hasattr(manager, 'init_server'): manager.init_server()
if options.sm:
- mgr_type = config.SFA_SM_TYPE
- manager_module = manager_base + ".slice_manager_%s" % mgr_type
- init_manager(manager_module, manager_base)
+ manager=import_manager ("slice", config.SFA_SM_TYPE)
+ if manager and hasattr(manager, 'init_server'): manager.init_server()
if options.cm:
- mgr_type = config.SFA_CM_TYPE
- manager_module = manager_base + ".component_manager_%s" % mgr_type
- init_manager(manager_module, manager_base)
+ manager=import_manager ("component", config.SFA_CM_TYPE)
+ if manager and hasattr(manager, 'init_server'): manager.init_server()
+
def install_peer_certs(server_key_file, server_cert_file):
"""
import traceback
import string
import xmlrpclib
+
+from sfa.util.faults import *
+from sfa.util.config import *
import sfa.util.xmlrpcprotocol as xmlrpcprotocol
from sfa.util.sfalogging import logger
from sfa.trust.auth import Auth
-from sfa.util.config import *
-from sfa.util.faults import *
from sfa.util.cache import Cache
from sfa.trust.credential import *
from sfa.trust.certificate import *
+# this is wrong all right, but temporary
+from sfa.managers.import_manager import import_manager
+
# See "2.2 Characters" in the XML specification:
#
# #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD]
"""
This class acts as a wrapper around an SFA interface manager module, but
can be used with any python module. The purpose of this class is raise a
- SfaNotImplemented exception if the a someone attepmts to use an attribute
+ SfaNotImplemented exception if someone attempts to use an attribute
(could be a callable) thats not available in the library by checking the
library using hasattr. This helps to communicate better errors messages
to the users and developers in the event that a specifiec operation
self.interface = interface
def __getattr__(self, method):
-
if not hasattr(self.manager, method):
raise SfaNotImplemented(method, self.interface)
return getattr(self.manager, method)
Returns the appropriate manager module for this interface.
Modules are usually found in sfa/managers/
"""
-
+ manager=None
if self.interface in ['registry']:
- mgr_type = self.config.SFA_REGISTRY_TYPE
- manager_module = manager_base + ".registry_manager_%s" % mgr_type
+ manager=import_manager ("registry", self.config.SFA_REGISTRY_TYPE)
elif self.interface in ['aggregate']:
- mgr_type = self.config.SFA_AGGREGATE_TYPE
- manager_module = manager_base + ".aggregate_manager_%s" % mgr_type
+ manager=import_manager ("aggregate", self.config.SFA_AGGREGATE_TYPE)
elif self.interface in ['slicemgr', 'sm']:
- mgr_type = self.config.SFA_SM_TYPE
- manager_module = manager_base + ".slice_manager_%s" % mgr_type
+ manager=import_manager ("slice", self.config.SFA_SM_TYPE)
elif self.interface in ['component', 'cm']:
- mgr_type = self.config.SFA_CM_TYPE
- manager_module = manager_base + ".component_manager_%s" % mgr_type
- else:
+ manager=import_manager ("component", self.config.SFA_CM_TYPE)
+ if not manager:
raise SfaAPIError("No manager for interface: %s" % self.interface)
- manager = __import__(manager_module, fromlist=[manager_base])
+
# this isnt necessary but will help to produce better error messages
# if someone tries to access an operation this manager doesn't implement
manager = ManagerWrapper(manager, self.interface)