seperated out rule and job id generation

This commit is contained in:
PatchOfScotland
2023-02-10 15:09:51 +01:00
parent 908ecf9950
commit 7059a7340d
4 changed files with 19 additions and 13 deletions

View File

@ -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
)

View File

@ -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,

View File

@ -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_")

View File

@ -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"))