first commit
This commit is contained in:
43
python/reloader.py
Normal file
43
python/reloader.py
Normal file
@@ -0,0 +1,43 @@
|
||||
"""
|
||||
Python only loads modules once, so domoticz will only load a module the first time it is needed. Code changes will not be reflected, only after a restart of domoticz. Note that doesn't hold for scripts, they always get reloaded.
|
||||
To have your module reloaded, you can enter the following code in it.
|
||||
import reloader
|
||||
reloader.auto_reload(__name__)
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
try:
|
||||
reload # Python 2
|
||||
except NameError:
|
||||
from importlib import reload # Python 3
|
||||
|
||||
|
||||
# mark module as a module to reload
|
||||
def auto_reload(module_name):
|
||||
import domoticz as dz
|
||||
path = _py_source(sys.modules[module_name])
|
||||
_module_mtimes[module_name] = os.path.getmtime(path)
|
||||
|
||||
|
||||
# below this is internal stuff
|
||||
|
||||
# maps from module name to modification time (mtime)
|
||||
_module_mtimes = {}
|
||||
|
||||
# convert module to python source filename
|
||||
def _py_source(module):
|
||||
path = module.__file__
|
||||
if path[:-1].endswith("py"):
|
||||
path = path[:-1]
|
||||
return path
|
||||
|
||||
def _check_reload():
|
||||
for module_name, loaded_mtime in _module_mtimes.items():
|
||||
path = _py_source(sys.modules[module_name])
|
||||
# if file is changed, the current mtime is greater
|
||||
if loaded_mtime < os.path.getmtime(path):
|
||||
reload(sys.modules[module_name]) # and reload
|
||||
else:
|
||||
pass
|
||||
Reference in New Issue
Block a user