X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FAPI.py;h=55a034921d36cd5e7a0d4d46411e4554a2e38313;hb=1cda98c34563ed3e90a9d2219730ae81f9705dc6;hp=3c825b7aa26e3215ed84305ea39acb7bba6ea32b;hpb=b7e454465c4cb7ee3698de9778ed2d4f2d131aa3;p=plcapi.git diff --git a/PLC/API.py b/PLC/API.py index 3c825b7a..55a03492 100644 --- a/PLC/API.py +++ b/PLC/API.py @@ -6,6 +6,7 @@ # # Copyright (C) 2004-2006 The Trustees of Princeton University # $Id$ +# $URL$ # import sys @@ -83,8 +84,7 @@ except ImportError: from PLC.Config import Config from PLC.Faults import * import PLC.Methods -import PLC.Shortcuts -import PLC.Legacy +import PLC.Accessors def import_deep(name): mod = __import__(name) @@ -99,11 +99,11 @@ class PLCAPI: native_methods = PLC.Methods.native_methods # other_methods_map : dict {methodname: fullpath} - # e.g. 'Shortcuts' -> 'PLC.Shortcuts.Shortcuts' + # e.g. 'Accessors' -> 'PLC.Accessors.Accessors' other_methods_map={} - for subdir in [ 'Shortcuts', 'Legacy']: + for subdir in [ 'Accessors' ]: path="PLC."+subdir - # scan e.g. PLC.Shortcuts.__all__ + # scan e.g. PLC.Accessors.__all__ pkg = __import__(path).__dict__[subdir] for modulename in getattr(pkg,"__all__"): fullpath=path+"."+modulename @@ -126,10 +126,16 @@ class PLCAPI: if self.config.PLC_DB_TYPE == "postgresql": from PLC.PostgreSQL import PostgreSQL self.db = PostgreSQL(self) - else: raise PLCAPIError, "Unsupported database type " + self.config.PLC_DB_TYPE + # Aspects modify the API injecting code before/after method + # calls. As of now we only have aspects for OMF integration, + # that's why we enable aspects only if PLC_OMF is set to true. + if self.config.PLC_OMF: + from aspects import apply_aspects; apply_aspects() + + def callable(self, method): """ Return a new instance of the specified method. @@ -143,14 +149,13 @@ class PLCAPI: try: classname = method.split(".")[-1] if method in self.native_methods: - module = __import__("PLC.Methods." + method, globals(), locals(), [classname]) - return getattr(module, classname)(self) + fullpath="PLC.Methods." + method else: fullpath=self.other_methods_map[method] - module = __import__(fullpath, globals(), locals(), [classname]) - return getattr(module, classname)(self) + module = __import__(fullpath, globals(), locals(), [classname]) + return getattr(module, classname)(self) except ImportError, AttributeError: - raise PLCInvalidAPIMethod, method + raise PLCInvalidAPIMethod, "import error %s for %s" % (AttributeError,fullpath) def call(self, source, method, *args): """