|
|
@@ -0,0 +1,120 @@
|
|
|
+#!/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("<module '", '').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
|