modInfo.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import os
  4. import importlib
  5. import sys
  6. class modInfo(object):
  7. def __init__(self, path):
  8. self._loaded = False
  9. self._size = 0
  10. self._path = ""
  11. self._mod = None
  12. self.Path = path
  13. def __del__(self):
  14. self.Unload()
  15. del self._loaded
  16. del self._mod
  17. del self._path
  18. del self._size
  19. def Unload(self):
  20. if self._loaded == False:
  21. return
  22. self._loaded = False
  23. def Execute(self, methode, arg1 = None, arg2 = None,arg3 = None):
  24. if self._loaded == False:
  25. return
  26. methode = getattr(self._mod, methode)
  27. if methode:
  28. if arg1 == None and arg2==None and arg3 == None:
  29. methode()
  30. elif arg2 == None and arg3 == None:
  31. methode(arg1)
  32. elif arg3 == None:
  33. methode(arg1, arg2)
  34. else:
  35. methode(arg1, arg2, arg3)
  36. def _loadModule(self, moduleName):
  37. module = None
  38. moduleName = moduleName.replace("/",".")
  39. try:
  40. del sys.modules[moduleName]
  41. except BaseException as err:
  42. pass
  43. try:
  44. module = importlib.import_module(moduleName)
  45. except BaseException as err:
  46. serr = str(err)
  47. print("Error loading module '" + moduleName + "': " + serr)
  48. return module
  49. def _reloadModule(self, moduleName):
  50. module = loadModule(moduleName)
  51. moduleName = moduleName.replace("/",".")
  52. moduleName, modulePath = str(module).replace("' from '", "||").replace("<module '", '').replace("'>", '').split("||")
  53. if (modulePath.endswith(".pyc")):
  54. import os
  55. os.remove(modulePath)
  56. module = loadModule(moduleName)
  57. return module
  58. def _getInstance(self, moduleName, param1, param2, param3):
  59. module = reloadModule(moduleName)
  60. instance = eval("module." + moduleName + "(param1, param2, param3)")
  61. return instance
  62. @property
  63. def Path(self):
  64. return self._path
  65. @Path.setter
  66. def Path(self,value):
  67. if self._path == value:
  68. return
  69. print("Set Path to "+value)
  70. self.Unload()
  71. if value == "":
  72. return
  73. self._path = value
  74. if os.path.isfile(value):
  75. self._size = os.path.getsize(self._path)
  76. try:
  77. #self._mod = __import__(self._path)
  78. self._mod = self._loadModule(self._path)
  79. self._loaded = True
  80. except ImportError:
  81. self._mod = None
  82. self._loaded = False
  83. else:
  84. self._mod = None
  85. self._loaded = False
  86. self._size = 0
  87. @property
  88. def Size(self):
  89. return self._size
  90. @property
  91. def Module(self):
  92. return self._mod
  93. @property
  94. def Loaded(self):
  95. return self._loaded