77"""
88
99import logging
10- from typing import Callable , Dict , Optional
11- from dataclasses import dataclass
10+ from typing import Callable , Dict , Optional , Unpack , TypedDict
1211
1312
1413logger = logging .getLogger (__name__ )
1514
1615
17- @dataclass
18- class RegisterWorkflowOptions :
16+ class RegisterWorkflowOptions (TypedDict , total = False ):
1917 """Options for registering a workflow."""
20- name : Optional [str ] = None
21- alias : Optional [str ] = None
18+ name : Optional [str ]
19+ alias : Optional [str ]
2220
2321
24- @dataclass
25- class RegisterActivityOptions :
22+ class RegisterActivityOptions (TypedDict , total = False ):
2623 """Options for registering an activity."""
27- name : Optional [str ] = None
28- alias : Optional [str ] = None
24+ name : Optional [str ]
25+ alias : Optional [str ]
2926
3027
3128class Registry :
@@ -46,7 +43,7 @@ def __init__(self):
4643 def workflow (
4744 self ,
4845 func : Optional [Callable ] = None ,
49- ** kwargs : RegisterWorkflowOptions
46+ ** kwargs : Unpack [ RegisterWorkflowOptions ]
5047 ) -> Callable :
5148 """
5249 Register a workflow function.
@@ -66,18 +63,19 @@ def workflow(
6663 options = RegisterWorkflowOptions (** kwargs )
6764
6865 def decorator (f : Callable ) -> Callable :
69- workflow_name = options .name or f .__name__
66+ workflow_name = options .get ( ' name' ) or f .__name__
7067
7168 if workflow_name in self ._workflows :
7269 raise KeyError (f"Workflow '{ workflow_name } ' is already registered" )
7370
7471 self ._workflows [workflow_name ] = f
7572
7673 # Register alias if provided
77- if options .alias :
78- if options .alias in self ._workflow_aliases :
79- raise KeyError (f"Workflow alias '{ options .alias } ' is already registered" )
80- self ._workflow_aliases [options .alias ] = workflow_name
74+ alias = options .get ('alias' )
75+ if alias :
76+ if alias in self ._workflow_aliases :
77+ raise KeyError (f"Workflow alias '{ alias } ' is already registered" )
78+ self ._workflow_aliases [alias ] = workflow_name
8179
8280 logger .info (f"Registered workflow '{ workflow_name } '" )
8381 return f
@@ -89,7 +87,7 @@ def decorator(f: Callable) -> Callable:
8987 def activity (
9088 self ,
9189 func : Optional [Callable ] = None ,
92- ** kwargs : RegisterActivityOptions
90+ ** kwargs : Unpack [ RegisterActivityOptions ]
9391 ) -> Callable :
9492 """
9593 Register an activity function.
@@ -109,18 +107,19 @@ def activity(
109107 options = RegisterActivityOptions (** kwargs )
110108
111109 def decorator (f : Callable ) -> Callable :
112- activity_name = options .name or f .__name__
110+ activity_name = options .get ( ' name' ) or f .__name__
113111
114112 if activity_name in self ._activities :
115113 raise KeyError (f"Activity '{ activity_name } ' is already registered" )
116114
117115 self ._activities [activity_name ] = f
118116
119117 # Register alias if provided
120- if options .alias :
121- if options .alias in self ._activity_aliases :
122- raise KeyError (f"Activity alias '{ options .alias } ' is already registered" )
123- self ._activity_aliases [options .alias ] = activity_name
118+ alias = options .get ('alias' )
119+ if alias :
120+ if alias in self ._activity_aliases :
121+ raise KeyError (f"Activity alias '{ alias } ' is already registered" )
122+ self ._activity_aliases [alias ] = activity_name
124123
125124 logger .info (f"Registered activity '{ activity_name } '" )
126125 return f
0 commit comments