@@ -37,19 +37,30 @@ def __init__(self, *, path: Union[Path, str], **kwargs):
37
37
self .path : str = str (path )
38
38
39
39
@staticmethod
40
- def generate_id (path : Optional [Union [Path , str ]] = None , sequence : Optional [int ] = None , ** _ ) -> str :
40
+ def generate_id (
41
+ path : Optional [Union [Path , str ]] = None , sequence : Optional [int ] = None , uuid_only : bool = False , ** _
42
+ ) -> str :
41
43
"""Generate an identifier for Plan."""
42
44
assert path , "Path is needed to generate id for WorkflowFileCompositePlan"
43
45
44
46
# NOTE: Workflow file's root composite plan's ID is generated only based on the file's path. The ID might be
45
47
# changed later if the plan is a derivative
46
48
key = f"{ path } " if sequence is None else f"{ path } ::{ sequence } "
47
49
key_bytes = key .encode ("utf-8" )
48
- return CompositePlan .generate_id (uuid = hashlib .md5 (key_bytes ).hexdigest ()[:32 ]) # nosec
50
+
51
+ uuid = hashlib .md5 (key_bytes ).hexdigest ()[:32 ] # nosec
52
+
53
+ if uuid_only :
54
+ return uuid
55
+ return CompositePlan .generate_id (uuid = uuid )
49
56
50
57
def assign_new_id (self , * , sequence : Optional [int ] = None , ** _ ) -> str :
51
58
"""Assign a new UUID or a deterministic."""
52
- new_id = uuid .uuid4 ().hex if sequence is None else self .generate_id (path = self .path , sequence = sequence )
59
+ new_id = (
60
+ uuid .uuid4 ().hex
61
+ if sequence is None
62
+ else self .generate_id (path = self .path , sequence = sequence , uuid_only = True )
63
+ )
53
64
return super ().assign_new_id (uuid = new_id )
54
65
55
66
def is_equal_to (self , other : WorkflowFileCompositePlan ) -> bool :
@@ -67,15 +78,22 @@ def __init__(self, *, path: Union[Path, str], **kwargs):
67
78
68
79
@staticmethod
69
80
def generate_id (
70
- path : Optional [Union [Path , str ]] = None , name : Optional [str ] = None , sequence : Optional [int ] = None , ** _
81
+ path : Optional [Union [Path , str ]] = None ,
82
+ name : Optional [str ] = None ,
83
+ sequence : Optional [int ] = None ,
84
+ uuid_only : bool = True ,
85
+ ** _ ,
71
86
) -> str :
72
87
"""Generate an identifier for Plan."""
73
88
assert path , "Path is needed to generate id for WorkflowFilePlan"
74
89
assert name , "Name is needed to generate id for WorkflowFilePlan"
75
90
76
91
key = f"{ path } ::{ name } " if sequence is None else f"{ path } ::{ name } ::{ sequence } "
77
92
key_bytes = key .encode ("utf-8" )
78
- return Plan .generate_id (uuid = hashlib .md5 (key_bytes ).hexdigest ()[:32 ]) # nosec
93
+ uuid = hashlib .md5 (key_bytes ).hexdigest ()[:32 ] # nosec
94
+ if uuid_only :
95
+ return uuid
96
+ return Plan .generate_id (uuid = uuid )
79
97
80
98
@staticmethod
81
99
def validate_name (name : str ):
@@ -92,7 +110,7 @@ def assign_new_id(self, *, sequence: Optional[int] = None, **_) -> str:
92
110
new_id = (
93
111
uuid .uuid4 ().hex
94
112
if sequence is None
95
- else self .generate_id (path = self .path , name = self .name , sequence = sequence )
113
+ else self .generate_id (path = self .path , name = self .name , sequence = sequence , uuid_only = True )
96
114
)
97
115
return super ().assign_new_id (uuid = new_id )
98
116
0 commit comments