From: Thierry Parmentelat Date: Thu, 20 Oct 2011 14:52:30 +0000 (+0200) Subject: new naming scheme in managers/ X-Git-Tag: sfa-1.1-1~83^2 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=f5a322f7ba026bb2d0844e9e2258882b70b27f92;p=sfa.git new naming scheme in managers/ the pl_version now has no extension, as it will be the basis for a more generic version --- diff --git a/sfa/managers/aggregate_manager_pl.py b/sfa/managers/aggregate_manager.py similarity index 100% rename from sfa/managers/aggregate_manager_pl.py rename to sfa/managers/aggregate_manager.py diff --git a/sfa/managers/import_manager.py b/sfa/managers/import_manager.py new file mode 100644 index 00000000..65c92c08 --- /dev/null +++ b/sfa/managers/import_manager.py @@ -0,0 +1,19 @@ +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 + diff --git a/sfa/managers/registry_manager_pl.py b/sfa/managers/registry_manager.py similarity index 100% rename from sfa/managers/registry_manager_pl.py rename to sfa/managers/registry_manager.py diff --git a/sfa/managers/slice_manager_pl.py b/sfa/managers/slice_manager.py similarity index 100% rename from sfa/managers/slice_manager_pl.py rename to sfa/managers/slice_manager.py diff --git a/sfa/server/sfa-server.py b/sfa/server/sfa-server.py index 4ed8c1fb..c46dfe66 100755 --- a/sfa/server/sfa-server.py +++ b/sfa/server/sfa-server.py @@ -49,6 +49,8 @@ from sfa.server.aggregate import Aggregates 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.""" @@ -137,31 +139,25 @@ def init_self_signed_cert(hrn, key, server_cert_file): 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_.py + * if not found, try <>_manager.py (and issue a warning if !='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): """ diff --git a/sfa/util/api.py b/sfa/util/api.py index eeb3d6ac..39d65382 100644 --- a/sfa/util/api.py +++ b/sfa/util/api.py @@ -7,15 +7,19 @@ import os 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] @@ -95,7 +99,7 @@ class ManagerWrapper: """ 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 @@ -107,7 +111,6 @@ class ManagerWrapper: self.interface = interface def __getattr__(self, method): - if not hasattr(self.manager, method): raise SfaNotImplemented(method, self.interface) return getattr(self.manager, method) @@ -160,22 +163,18 @@ class BaseAPI: 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)