updated event dict to always include path, should be more future proof
This commit is contained in:
@ -3,7 +3,8 @@ from inspect import signature
|
|||||||
from os.path import sep, exists, isfile, isdir, dirname
|
from os.path import sep, exists, isfile, isdir, dirname
|
||||||
from typing import Any, _SpecialForm, Union, Tuple, get_origin, get_args
|
from typing import Any, _SpecialForm, Union, Tuple, get_origin, get_args
|
||||||
|
|
||||||
from core.correctness.vars import VALID_PATH_CHARS, get_not_imp_msg, EVENT_TYPE
|
from core.correctness.vars import VALID_PATH_CHARS, get_not_imp_msg, \
|
||||||
|
EVENT_TYPE, EVENT_PATH
|
||||||
|
|
||||||
def check_type(variable:Any, expected_type:type, alt_types:list[type]=[],
|
def check_type(variable:Any, expected_type:type, alt_types:list[type]=[],
|
||||||
or_none:bool=False)->None:
|
or_none:bool=False)->None:
|
||||||
@ -183,3 +184,5 @@ def valid_event(event)->None:
|
|||||||
check_type(event, dict)
|
check_type(event, dict)
|
||||||
if not EVENT_TYPE in event.keys():
|
if not EVENT_TYPE in event.keys():
|
||||||
raise KeyError(f"Events require key '{EVENT_TYPE}'")
|
raise KeyError(f"Events require key '{EVENT_TYPE}'")
|
||||||
|
if not EVENT_PATH in event.keys():
|
||||||
|
raise KeyError(f"Events require key '{EVENT_PATH}'")
|
||||||
|
@ -189,8 +189,8 @@ APPENDING_NOTEBOOK = {
|
|||||||
|
|
||||||
# meow events
|
# meow events
|
||||||
EVENT_TYPE = "meow_event_type"
|
EVENT_TYPE = "meow_event_type"
|
||||||
|
EVENT_PATH = "event_path"
|
||||||
WATCHDOG_TYPE = "watchdog"
|
WATCHDOG_TYPE = "watchdog"
|
||||||
WATCHDOG_SRC = "src_path"
|
|
||||||
WATCHDOG_BASE = "monitor_base"
|
WATCHDOG_BASE = "monitor_base"
|
||||||
WATCHDOG_RULE = "rule_name"
|
WATCHDOG_RULE = "rule_name"
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ from core.correctness.validation import check_type, valid_existing_file_path, \
|
|||||||
valid_path
|
valid_path
|
||||||
from core.correctness.vars import CHAR_LOWERCASE, CHAR_UPPERCASE, \
|
from core.correctness.vars import CHAR_LOWERCASE, CHAR_UPPERCASE, \
|
||||||
VALID_CHANNELS, HASH_BUFFER_SIZE, SHA256, DEBUG_WARNING, DEBUG_INFO, \
|
VALID_CHANNELS, HASH_BUFFER_SIZE, SHA256, DEBUG_WARNING, DEBUG_INFO, \
|
||||||
EVENT_TYPE
|
EVENT_TYPE, EVENT_PATH
|
||||||
|
|
||||||
def generate_id(prefix:str="", length:int=16, existing_ids:list[str]=[],
|
def generate_id(prefix:str="", length:int=16, existing_ids:list[str]=[],
|
||||||
charset:str=CHAR_UPPERCASE+CHAR_LOWERCASE, attempts:int=24):
|
charset:str=CHAR_UPPERCASE+CHAR_LOWERCASE, attempts:int=24):
|
||||||
@ -241,6 +241,6 @@ def print_debug(print_target, debug_level, msg, level)->None:
|
|||||||
status = "WARNING"
|
status = "WARNING"
|
||||||
print(f"{status}: {msg}", file=print_target)
|
print(f"{status}: {msg}", file=print_target)
|
||||||
|
|
||||||
def create_event(event_type:str, source:dict[Any,Any]={})->dict[Any,Any]:
|
def create_event(event_type:str, path:str, source:dict[Any,Any]={})->dict[Any,Any]:
|
||||||
return {**source, EVENT_TYPE: event_type}
|
return {**source, EVENT_PATH: path, EVENT_TYPE: event_type}
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ from core.correctness.validation import check_type, valid_string, \
|
|||||||
from core.correctness.vars import VALID_RECIPE_NAME_CHARS, \
|
from core.correctness.vars import VALID_RECIPE_NAME_CHARS, \
|
||||||
VALID_VARIABLE_NAME_CHARS, FILE_EVENTS, FILE_CREATE_EVENT, \
|
VALID_VARIABLE_NAME_CHARS, FILE_EVENTS, FILE_CREATE_EVENT, \
|
||||||
FILE_MODIFY_EVENT, FILE_MOVED_EVENT, DEBUG_INFO, WATCHDOG_TYPE, \
|
FILE_MODIFY_EVENT, FILE_MOVED_EVENT, DEBUG_INFO, WATCHDOG_TYPE, \
|
||||||
WATCHDOG_SRC, WATCHDOG_RULE, WATCHDOG_BASE, FILE_RETROACTIVE_EVENT
|
WATCHDOG_RULE, WATCHDOG_BASE, FILE_RETROACTIVE_EVENT, EVENT_PATH
|
||||||
from core.functionality import print_debug, create_event
|
from core.functionality import print_debug, create_event
|
||||||
from core.meow import BasePattern, BaseMonitor, BaseRule, BaseRecipe, \
|
from core.meow import BasePattern, BaseMonitor, BaseRule, BaseRecipe, \
|
||||||
create_rule
|
create_rule
|
||||||
@ -189,11 +189,10 @@ class WatchdogMonitor(BaseMonitor):
|
|||||||
|
|
||||||
if direct_hit or recursive_hit:
|
if direct_hit or recursive_hit:
|
||||||
meow_event = create_event(
|
meow_event = create_event(
|
||||||
WATCHDOG_TYPE, {
|
WATCHDOG_TYPE,
|
||||||
WATCHDOG_SRC: event.src_path,
|
event.src_path,
|
||||||
WATCHDOG_BASE: self.base_dir,
|
{ WATCHDOG_BASE: self.base_dir, WATCHDOG_RULE: rule }
|
||||||
WATCHDOG_RULE: rule
|
)
|
||||||
})
|
|
||||||
print_debug(self._print_target, self.debug_level,
|
print_debug(self._print_target, self.debug_level,
|
||||||
f"Event at {src_path} of type {event_type} hit rule "
|
f"Event at {src_path} of type {event_type} hit rule "
|
||||||
f"{rule.name}", DEBUG_INFO)
|
f"{rule.name}", DEBUG_INFO)
|
||||||
@ -418,11 +417,10 @@ class WatchdogMonitor(BaseMonitor):
|
|||||||
for globble in globbed:
|
for globble in globbed:
|
||||||
|
|
||||||
meow_event = create_event(
|
meow_event = create_event(
|
||||||
WATCHDOG_TYPE, {
|
WATCHDOG_TYPE,
|
||||||
WATCHDOG_SRC: globble,
|
globble,
|
||||||
WATCHDOG_BASE: self.base_dir,
|
{ WATCHDOG_BASE: self.base_dir, WATCHDOG_RULE: rule }
|
||||||
WATCHDOG_RULE: rule
|
)
|
||||||
})
|
|
||||||
print_debug(self._print_target, self.debug_level,
|
print_debug(self._print_target, self.debug_level,
|
||||||
f"Retroactive event for file at at {globble} hit rule "
|
f"Retroactive event for file at at {globble} hit rule "
|
||||||
f"{rule.name}", DEBUG_INFO)
|
f"{rule.name}", DEBUG_INFO)
|
||||||
|
@ -18,7 +18,7 @@ from core.correctness.validation import check_type, valid_string, \
|
|||||||
setup_debugging
|
setup_debugging
|
||||||
from core.correctness.vars import VALID_VARIABLE_NAME_CHARS, VALID_CHANNELS, \
|
from core.correctness.vars import VALID_VARIABLE_NAME_CHARS, VALID_CHANNELS, \
|
||||||
SHA256, DEBUG_ERROR, DEBUG_WARNING, DEBUG_INFO, WATCHDOG_TYPE, \
|
SHA256, DEBUG_ERROR, DEBUG_WARNING, DEBUG_INFO, WATCHDOG_TYPE, \
|
||||||
WATCHDOG_SRC, WATCHDOG_BASE, WATCHDOG_RULE
|
WATCHDOG_BASE, WATCHDOG_RULE, EVENT_PATH
|
||||||
from core.functionality import wait, get_file_hash, generate_id, make_dir, \
|
from core.functionality import wait, get_file_hash, generate_id, make_dir, \
|
||||||
write_yaml, write_notebook, get_file_hash, parameterize_jupyter_notebook, \
|
write_yaml, write_notebook, get_file_hash, parameterize_jupyter_notebook, \
|
||||||
print_debug
|
print_debug
|
||||||
@ -118,9 +118,9 @@ class PapermillHandler(BaseHandler):
|
|||||||
# TODO finish implementation and test
|
# TODO finish implementation and test
|
||||||
|
|
||||||
print_debug(self._print_target, self.debug_level,
|
print_debug(self._print_target, self.debug_level,
|
||||||
f"Handling event {event[WATCHDOG_SRC]}", DEBUG_INFO)
|
f"Handling event {event[EVENT_PATH]}", DEBUG_INFO)
|
||||||
|
|
||||||
file_hash = get_file_hash(event[WATCHDOG_SRC], SHA256)
|
file_hash = get_file_hash(event[EVENT_PATH], SHA256)
|
||||||
rule = event[WATCHDOG_RULE]
|
rule = event[WATCHDOG_RULE]
|
||||||
|
|
||||||
yaml_dict = {}
|
yaml_dict = {}
|
||||||
@ -128,7 +128,7 @@ class PapermillHandler(BaseHandler):
|
|||||||
yaml_dict[var] = val
|
yaml_dict[var] = val
|
||||||
for var, val in rule.pattern.outputs.items():
|
for var, val in rule.pattern.outputs.items():
|
||||||
yaml_dict[var] = val
|
yaml_dict[var] = val
|
||||||
yaml_dict[rule.pattern.triggering_file] = event[WATCHDOG_SRC]
|
yaml_dict[rule.pattern.triggering_file] = event[EVENT_PATH]
|
||||||
|
|
||||||
if not rule.pattern.sweep:
|
if not rule.pattern.sweep:
|
||||||
waiting_for_threaded_resources = True
|
waiting_for_threaded_resources = True
|
||||||
@ -203,7 +203,7 @@ class PapermillHandler(BaseHandler):
|
|||||||
JOB_PATTERN: event[WATCHDOG_RULE].pattern,
|
JOB_PATTERN: event[WATCHDOG_RULE].pattern,
|
||||||
JOB_RECIPE: event[WATCHDOG_RULE].recipe,
|
JOB_RECIPE: event[WATCHDOG_RULE].recipe,
|
||||||
JOB_RULE: event[WATCHDOG_RULE].name,
|
JOB_RULE: event[WATCHDOG_RULE].name,
|
||||||
JOB_PATH: event[WATCHDOG_SRC],
|
JOB_PATH: event[EVENT_PATH],
|
||||||
JOB_HASH: triggerfile_hash,
|
JOB_HASH: triggerfile_hash,
|
||||||
JOB_STATUS: STATUS_QUEUED,
|
JOB_STATUS: STATUS_QUEUED,
|
||||||
JOB_CREATE_TIME: datetime.now(),
|
JOB_CREATE_TIME: datetime.now(),
|
||||||
@ -211,7 +211,7 @@ class PapermillHandler(BaseHandler):
|
|||||||
}
|
}
|
||||||
|
|
||||||
print_debug(self._print_target, self.debug_level,
|
print_debug(self._print_target, self.debug_level,
|
||||||
f"Creating job for event at {event[WATCHDOG_SRC]} with ID "
|
f"Creating job for event at {event[EVENT_PATH]} with ID "
|
||||||
f"{job_dict[JOB_ID]}", DEBUG_INFO)
|
f"{job_dict[JOB_ID]}", DEBUG_INFO)
|
||||||
|
|
||||||
self.add_job(job_dict[JOB_ID])
|
self.add_job(job_dict[JOB_ID])
|
||||||
@ -219,7 +219,7 @@ class PapermillHandler(BaseHandler):
|
|||||||
yaml_dict = self.replace_keywords(
|
yaml_dict = self.replace_keywords(
|
||||||
yaml_dict,
|
yaml_dict,
|
||||||
job_dict[JOB_ID],
|
job_dict[JOB_ID],
|
||||||
event[WATCHDOG_SRC],
|
event[EVENT_PATH],
|
||||||
event[WATCHDOG_BASE]
|
event[WATCHDOG_BASE]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user