#!/usr/bin/env python # -*- coding: utf-8 -*- import os import importlib import sys class modInfo(object): def __init__(self, path:str,className:str, classPath:str): print("Load Module: " + classPath) self._loaded = False self._size = 0 self._path = "" self._mod = None self._className = className self._classPath = classPath #self.Path = path self.__setPath(path) def __del__(self): self.Unload() del self._loaded del self._mod del self._path del self._size del self._className del self._classPath def Unload(self): #TODO realy unload the module if self._loaded == False: return self._loaded = False def Execute(self, methode:str, arg1 = None, arg2 = None,arg3 = None): if self._loaded == False: return isActive = getattr(self._instance, "IsActive") if isActive(): methode = getattr(self._instance, methode) if methode: if arg1 == None and arg2==None and arg3 == None: methode() elif arg2 == None and arg3 == None: methode(arg1) elif arg3 == None: methode(arg1, arg2) else: methode(arg1, arg2, arg3) def _loadModule(self, moduleName:str): module = None moduleName = self._classPath + "." + self._className #print("- moduleName: " + moduleName) try: del sys.modules[moduleName] except BaseException as err: pass try: #print("try to import module "+moduleName) module = importlib.import_module(moduleName) except BaseException as err: serr = str(err) print("Error loading module '" + moduleName + "': " + serr) return module def _reloadModule(self, moduleName): module = self.loadModule(moduleName) moduleName = moduleName.replace("/",".") moduleName, modulePath = str(module).replace("' from '", "||").replace("", '').split("||") if (modulePath.endswith(".pyc")): import os os.remove(modulePath) module = self.loadModule(moduleName) return module @property def Path(self): return self._path @Path.setter def Path(self,value): self.__setPath(value) @property def Size(self): return self._size @property def Module(self): return self._mod @property def Loaded(self): return self._loaded def __setPath(self, value): if self._path == value: return self.Unload() if value == "": return self._path = value if os.path.isfile(value): #print("- file exists") self._size = os.path.getsize(self._path) #print("- size: " + str(self._size)) try: #self._mod = __import__(self._path) self._mod = self._loadModule(self._path) #print("- _loadModule("+self._path+") done") self._instance = getattr(self._mod, self._className)() if self._instance==None: #print("- failed to create instance") self._loaded = False else: #print("instance created") self._loaded = True #print("- loaded done") except ImportError: print("- ImportError") self._mod = None self._loaded = False else: print("- Not found") self._mod = None self._loaded = False self._size = 0