From 9c085172212441757926d0b44b9610e917544248 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B0=D0=BC=D0=BE=D1=83=D0=BA=D0=B8=D0=BD=20=D0=90?= =?UTF-8?q?=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= Date: Thu, 28 Oct 2010 16:58:29 +0400 Subject: [PATCH] Change cl_api module (delete class attribute). --- pym/cl_api.py | 78 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 60 insertions(+), 18 deletions(-) diff --git a/pym/cl_api.py b/pym/cl_api.py index 6dc5169..43ea13b 100644 --- a/pym/cl_api.py +++ b/pym/cl_api.py @@ -46,7 +46,9 @@ class libVars: return True class _services(color_print, libVars): - apiObjs = {} + + def __init__(self): + self.apiObjs = {} def getApiClass(self, apiFile): importPath, moduleName = os.path.split(apiFile) @@ -153,11 +155,17 @@ class attribute(object): class _pkgAPI(object): def __init__(self, pkgName): + self._pkgName = pkgName + + + def __setvar__(self, pkgName): services = _services() - self.var = False varObj = services.runMethodToPkg(pkgName, 'get_vars') if varObj: self.var = attribute(varObj) + + def __setmethods__(self, pkgName): + services = _services() pkgObj = services.getPkgApi(pkgName) for attr in dir(pkgObj): if not attr.startswith("_") and callable(getattr(pkgObj, attr)) and\ @@ -165,13 +173,36 @@ class _pkgAPI(object): setattr(self, attr, getattr(pkgObj, attr)) def __getattribute__(self, attr): - if attr.startswith("__") or attr in ('var','all'): + if attr.startswith("__") or attr in ('_pkgName'): value = object.__getattribute__(self, attr) + elif attr == 'var': + try: + value = object.__getattribute__(self, attr) + except AttributeError: + pkgName = object.__getattribute__(self, '_pkgName') + self.__setvar__(pkgName) + value = object.__getattribute__(self, attr) + elif attr == 'api': + try: + value = object.__getattribute__(self, attr) + except AttributeError: + services = _services() + pkgName = object.__getattribute__(self, '_pkgName') + value = services.getPkgApi(pkgName) + setattr(self, attr, value) else: try: - value = object.__getattribute__(self,attr)() + value = object.__getattribute__(self, attr)() + flagFoundAttr = True except: - raise APIError(_("Can not found method %s")%attr) + flagFoundAttr = False + if flagFoundAttr is False: + pkgName = object.__getattribute__(self, '_pkgName') + self.__setmethods__(pkgName) + try: + value = object.__getattribute__(self, attr)() + except: + raise APIError(_("Can not found method %s")%attr) return value class _allPkg(object): @@ -223,7 +254,7 @@ class _allPkg(object): listValues = [] for pkgObj in listObi: try: - val = object.__getattribute__(pkgObj, attr)() + val = getattr(pkgObj, attr) except Exception, e: continue listValues.append(val) @@ -234,20 +265,31 @@ class _allPkg(object): else: return True listValues = filter(lambda x: x, listValues) - listValues = map(lambda x: '1' if x is True else x, listValues) + listValues = map(lambda x: '1' if x is True else str(x), listValues) value = "\n".join(listValues) object.__setattr__(self, attr, value) return value -class packagesAPI: +class packagesAPI(object): - def __init__(self): - objLibVars = libVars() - objLibVars.createClLibVars() - apiDict = objLibVars.clLibVars.Get('cl_api') - listPkgObj = [] - for pkgName in apiDict.keys(): - pkgAPIObj = _pkgAPI(pkgName) - setattr(self, pkgName.replace('-','_'), pkgAPIObj) - listPkgObj.append(pkgAPIObj) - setattr(self, 'all', _allPkg(listPkgObj)) + def __getattribute__(self, attr): + if attr.startswith("__"): + value = object.__getattribute__(self, attr) + else: + try: + value = object.__getattribute__(self, attr) + flagFoundAttr = True + except AttributeError: + flagFoundAttr = False + if flagFoundAttr is False: + objLibVars = libVars() + objLibVars.createClLibVars() + apiDict = objLibVars.clLibVars.Get('cl_api') + listPkgObj = [] + for pkgName in apiDict.keys(): + pkgAPIObj = _pkgAPI(pkgName) + setattr(self, pkgName.replace('-','_'), pkgAPIObj) + listPkgObj.append(pkgAPIObj) + setattr(self, 'all', _allPkg(listPkgObj)) + value = object.__getattribute__(self, attr) + return value