@@ -37,19 +37,30 @@ def __init__(self, *, path: Union[Path, str], **kwargs):
3737 self .path : str = str (path )
3838
3939 @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 :
4143 """Generate an identifier for Plan."""
4244 assert path , "Path is needed to generate id for WorkflowFileCompositePlan"
4345
4446 # NOTE: Workflow file's root composite plan's ID is generated only based on the file's path. The ID might be
4547 # changed later if the plan is a derivative
4648 key = f"{ path } " if sequence is None else f"{ path } ::{ sequence } "
4749 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 )
4956
5057 def assign_new_id (self , * , sequence : Optional [int ] = None , ** _ ) -> str :
5158 """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+ )
5364 return super ().assign_new_id (uuid = new_id )
5465
5566 def is_equal_to (self , other : WorkflowFileCompositePlan ) -> bool :
@@ -67,15 +78,22 @@ def __init__(self, *, path: Union[Path, str], **kwargs):
6778
6879 @staticmethod
6980 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 = False ,
85+ ** _ ,
7186 ) -> str :
7287 """Generate an identifier for Plan."""
7388 assert path , "Path is needed to generate id for WorkflowFilePlan"
7489 assert name , "Name is needed to generate id for WorkflowFilePlan"
7590
7691 key = f"{ path } ::{ name } " if sequence is None else f"{ path } ::{ name } ::{ sequence } "
7792 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 )
7997
8098 @staticmethod
8199 def validate_name (name : str ):
@@ -92,7 +110,7 @@ def assign_new_id(self, *, sequence: Optional[int] = None, **_) -> str:
92110 new_id = (
93111 uuid .uuid4 ().hex
94112 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 )
96114 )
97115 return super ().assign_new_id (uuid = new_id )
98116
0 commit comments