#!/usr/bin/env python # -*- coding: utf-8 -*- import os import importlib import sys class modInfo(object): def __init__(self, path): self._loaded = False self._size = 0 self._path = "" self._mod = None self.Path = path def __del__(self): self.Unload() del self._loaded del self._mod del self._path del self._size def Unload(self): if self._loaded == False: return self._loaded = False def Execute(self, methode, arg1 = None, arg2 = None,arg3 = None): if self._loaded == False: return methode = getattr(self._mod, 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): module = None moduleName = moduleName.replace("/",".") try: del sys.modules[moduleName] except BaseException as err: pass try: 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 = loadModule(moduleName) moduleName = moduleName.replace("/",".") moduleName, modulePath = str(module).replace("' from '", "||").replace("", '').split("||") if (modulePath.endswith(".pyc")): import os os.remove(modulePath) module = loadModule(moduleName) return module def _getInstance(self, moduleName, param1, param2, param3): module = reloadModule(moduleName) instance = eval("module." + moduleName + "(param1, param2, param3)") return instance @property def Path(self): return self._path @Path.setter def Path(self,value): if self._path == value: return print("Set Path to "+value) self.Unload() if value == "": return self._path = value if os.path.isfile(value): self._size = os.path.getsize(self._path) try: #self._mod = __import__(self._path) self._mod = self._loadModule(self._path) self._loaded = True except ImportError: self._mod = None self._loaded = False else: self._mod = None self._loaded = False self._size = 0 @property def Size(self): return self._size @property def Module(self): return self._mod @property def Loaded(self): return self._loaded