From 7059a7340d843eaf0500c2f288c5a923af5e9109 Mon Sep 17 00:00:00 2001 From: PatchOfScotland Date: Fri, 10 Feb 2023 15:09:51 +0100 Subject: [PATCH] seperated out rule and job id generation --- core/meow.py | 4 ++-- functionality/meow.py | 4 ++-- functionality/naming.py | 8 +++++++- tests/test_functionality.py | 16 ++++++++-------- 4 files changed, 19 insertions(+), 13 deletions(-) diff --git a/core/meow.py b/core/meow.py index b311092..c902680 100644 --- a/core/meow.py +++ b/core/meow.py @@ -19,7 +19,7 @@ from core.correctness.vars import VALID_RECIPE_NAME_CHARS, \ SWEEP_JUMP, SWEEP_START, SWEEP_STOP, get_drt_imp_msg from core.correctness.validation import valid_string, check_type, \ check_implementation, valid_list, valid_dict -from functionality.naming import generate_id +from functionality.naming import generate_rule_id class BaseRecipe: @@ -524,7 +524,7 @@ def create_rule(pattern:BasePattern, recipe:BaseRecipe, key = (type(pattern).__name__, type(recipe).__name__) if (key) in all_rules: return all_rules[key]( - generate_id(prefix="Rule_"), + generate_rule_id(), pattern, recipe ) diff --git a/functionality/meow.py b/functionality/meow.py index a4c5386..4a310b9 100644 --- a/functionality/meow.py +++ b/functionality/meow.py @@ -12,7 +12,7 @@ from core.correctness.vars import EVENT_PATH, EVENT_RULE, EVENT_TYPE, \ EVENT_TYPE_WATCHDOG, JOB_CREATE_TIME, JOB_EVENT, JOB_ID, JOB_PATTERN, \ JOB_RECIPE, JOB_REQUIREMENTS, JOB_RULE, JOB_STATUS, JOB_TYPE, \ STATUS_QUEUED, WATCHDOG_BASE, WATCHDOG_HASH -from functionality.naming import generate_id +from functionality.naming import generate_job_id # mig trigger keyword replacements @@ -88,7 +88,7 @@ def create_job(job_type:str, event:Dict[str,Any], extras:Dict[Any,Any]={} """Function to create a MEOW job dictionary.""" job_dict = { #TODO compress event? - JOB_ID: generate_id(prefix="job_"), + JOB_ID: generate_job_id(), JOB_EVENT: event, JOB_TYPE: job_type, JOB_PATTERN: event[EVENT_RULE].pattern.name, diff --git a/functionality/naming.py b/functionality/naming.py index 95c6073..072e3e2 100644 --- a/functionality/naming.py +++ b/functionality/naming.py @@ -11,7 +11,7 @@ from core.correctness.vars import CHAR_LOWERCASE, CHAR_UPPERCASE #TODO Make this guaranteed unique -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): random_length = max(length - len(prefix), 0) for _ in range(attempts): @@ -21,3 +21,9 @@ def generate_id(prefix:str="", length:int=16, existing_ids:List[str]=[], return id raise ValueError(f"Could not generate ID unique from '{existing_ids}' " f"using values '{charset}' and length of '{length}'.") + +def generate_rule_id(): + _generate_id(prefix="rule_") + +def generate_job_id(): + _generate_id(prefix="job_") diff --git a/tests/test_functionality.py b/tests/test_functionality.py index 9de0d66..db81654 100644 --- a/tests/test_functionality.py +++ b/tests/test_functionality.py @@ -23,7 +23,7 @@ from functionality.meow import create_event, create_job, \ KEYWORD_BASE, KEYWORD_DIR, KEYWORD_EXTENSION, KEYWORD_FILENAME, \ KEYWORD_JOB, KEYWORD_PATH, KEYWORD_PREFIX, KEYWORD_REL_DIR, \ KEYWORD_REL_PATH -from functionality.naming import generate_id +from functionality.naming import _generate_id from functionality.parameterisation import parameterize_jupyter_notebook, \ parameterize_python_script from functionality.process_io import wait @@ -565,29 +565,29 @@ class NamingTests(unittest.TestCase): # Test that generate_id creates unique ids def testGenerateIDWorking(self)->None: - id = generate_id() + id = _generate_id() self.assertEqual(len(id), 16) for i in range(len(id)): self.assertIn(id[i], CHAR_UPPERCASE+CHAR_LOWERCASE) # In extrememly rare cases this may fail due to randomness in algorithm - new_id = generate_id(existing_ids=[id]) + new_id = _generate_id(existing_ids=[id]) self.assertNotEqual(id, new_id) - another_id = generate_id(length=32) + another_id = _generate_id(length=32) self.assertEqual(len(another_id), 32) - again_id = generate_id(charset="a") + again_id = _generate_id(charset="a") for i in range(len(again_id)): self.assertIn(again_id[i], "a") with self.assertRaises(ValueError): - generate_id(length=2, charset="a", existing_ids=["aa"]) + _generate_id(length=2, charset="a", existing_ids=["aa"]) - prefix_id = generate_id(length=4, prefix="Test") + prefix_id = _generate_id(length=4, prefix="Test") self.assertEqual(prefix_id, "Test") - prefix_id = generate_id(prefix="Test") + prefix_id = _generate_id(prefix="Test") self.assertEqual(len(prefix_id), 16) self.assertTrue(prefix_id.startswith("Test"))