fix global variable handling in config
This commit is contained in:
@@ -203,12 +203,12 @@ class Pyinotifyd:
|
|||||||
config = {}
|
config = {}
|
||||||
name = Pyinotifyd.name
|
name = Pyinotifyd.name
|
||||||
exec("from logging import DEBUG, INFO, WARNING, ERROR, CRITICAL",
|
exec("from logging import DEBUG, INFO, WARNING, ERROR, CRITICAL",
|
||||||
{}, config)
|
config)
|
||||||
exec(f"from {name} import Pyinotifyd, Watch", {}, config)
|
exec(f"from {name} import Pyinotifyd, Watch", config)
|
||||||
exec(f"from {name} import setLoglevel, enableSyslog", {}, config)
|
exec(f"from {name} import setLoglevel, enableSyslog", config)
|
||||||
exec(f"from {name}.scheduler import *", {}, config)
|
exec(f"from {name}.scheduler import *", config)
|
||||||
with open(config_file, "r") as fh:
|
with open(config_file, "r") as fh:
|
||||||
exec(fh.read(), {}, config)
|
exec(fh.read(), config)
|
||||||
instance = config[f"{name}"]
|
instance = config[f"{name}"]
|
||||||
assert isinstance(instance, Pyinotifyd), \
|
assert isinstance(instance, Pyinotifyd), \
|
||||||
f"{name}: expected {type(Pyinotifyd)}, " \
|
f"{name}: expected {type(Pyinotifyd)}, " \
|
||||||
|
|||||||
@@ -46,13 +46,13 @@ class SchedulerLogger(logging.LoggerAdapter):
|
|||||||
class TaskScheduler:
|
class TaskScheduler:
|
||||||
|
|
||||||
class TaskState:
|
class TaskState:
|
||||||
def __init__(self, id=None, task=None, cancelable=True):
|
def __init__(self, task_id=None, task=None, cancelable=True):
|
||||||
self.id = id or str(uuid4())
|
self.id = task_id or str(uuid4())
|
||||||
self.task = task
|
self.task = task
|
||||||
self.cancelable = cancelable
|
self.cancelable = cancelable
|
||||||
|
|
||||||
def __init__(self, job, files=True, dirs=False, delay=0, logname="sched",
|
def __init__(self, job, files=True, dirs=False, delay=0, logname="sched",
|
||||||
loop=None):
|
loop=None, global_vars={}):
|
||||||
assert iscoroutinefunction(job), \
|
assert iscoroutinefunction(job), \
|
||||||
f"job: expected coroutine, got {type(job)}"
|
f"job: expected coroutine, got {type(job)}"
|
||||||
assert isinstance(files, bool), \
|
assert isinstance(files, bool), \
|
||||||
@@ -61,6 +61,8 @@ class TaskScheduler:
|
|||||||
f"dirs: expected {type(bool)}, got {type(dirs)}"
|
f"dirs: expected {type(bool)}, got {type(dirs)}"
|
||||||
assert isinstance(delay, int), \
|
assert isinstance(delay, int), \
|
||||||
f"delay: expected {type(int)}, got {type(delay)}"
|
f"delay: expected {type(int)}, got {type(delay)}"
|
||||||
|
assert isinstance(global_vars, dict), \
|
||||||
|
f"global_vars: expected {type(dict)}, got {type(global_vars)}"
|
||||||
|
|
||||||
self._job = job
|
self._job = job
|
||||||
self._files = files
|
self._files = files
|
||||||
@@ -68,7 +70,7 @@ class TaskScheduler:
|
|||||||
self._delay = delay
|
self._delay = delay
|
||||||
self._log = logging.getLogger((logname or __name__))
|
self._log = logging.getLogger((logname or __name__))
|
||||||
self._loop = (loop or asyncio.get_event_loop())
|
self._loop = (loop or asyncio.get_event_loop())
|
||||||
|
self._globals = global_vars
|
||||||
self._tasks = {}
|
self._tasks = {}
|
||||||
self._pause = False
|
self._pause = False
|
||||||
|
|
||||||
@@ -124,7 +126,14 @@ class TaskScheduler:
|
|||||||
return
|
return
|
||||||
|
|
||||||
logger.info("start task")
|
logger.info("start task")
|
||||||
|
if self._globals:
|
||||||
|
local_vars = {"self": self,
|
||||||
|
"event": event,
|
||||||
|
"task_id": task_state.id}
|
||||||
|
task_state.task = self._loop.create_task(
|
||||||
|
eval("self._job(event, task_id)", self._globals, local_vars))
|
||||||
|
|
||||||
|
else:
|
||||||
task_state.task = self._loop.create_task(
|
task_state.task = self._loop.create_task(
|
||||||
self._job(event, task_state.id))
|
self._job(event, task_state.id))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user