| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- #!/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("<module '", '').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
|