@@ -21,6 +21,8 @@ class History(object):
2121 :type _external_workflows_canceling: collections.OrderedDict[str, dict[str, Any]]
2222 :ivar _signals: activity events
2323 :type _signals: collections.OrderedDict[str, dict[str, Any]]
24+ :ivar _markers: marker events
25+ :type _markers: collections.OrderedDict[str, list[dict[str, Any]]]
2426 :ivar _tasks: ordered list of tasks/etc
2527 :type _tasks: list[dict[str, Any]]
2628 """
@@ -33,8 +35,18 @@ def __init__(self, history):
3335 self ._external_workflows_canceling = collections .OrderedDict ()
3436 self ._signals = collections .OrderedDict ()
3537 self ._signaled_workflows = collections .defaultdict (list )
38+ self ._markers = collections .OrderedDict ()
3639 self ._tasks = []
3740
41+ @property
42+ def swf_history (self ):
43+ """
44+
45+ :return: SWF history
46+ :rtype: swf.models.history.History
47+ """
48+ return self ._history
49+
3850 @property
3951 def activities (self ):
4052 """
@@ -75,8 +87,21 @@ def signaled_workflows(self):
7587 """
7688 return self ._signaled_workflows
7789
90+ @property
91+ def markers (self ):
92+ """
93+
94+ :return: Markers
95+ :rtype: collections.OrderedDict[str, list[dict[str, Any]]]
96+ """
97+ return self ._markers
98+
7899 @property
79100 def tasks (self ):
101+ """
102+ :return:
103+ :rtype: list[dict[str, Any]]
104+ """
80105 return self ._tasks
81106
82107 @property
@@ -422,11 +447,34 @@ def get_workflow(workflows):
422447 workflow ['workflow_id' ] = event .workflow_execution ['workflowId' ]
423448 workflow ['cancel_requested_timestamp' ] = event .timestamp
424449
450+ def parse_marker_event (self , events , event ):
451+ if event .state == 'recorded' :
452+ marker = {
453+ 'type' : 'marker' ,
454+ 'name' : event .marker_name ,
455+ 'state' : event .state ,
456+ 'details' : getattr (event , 'details' , None ),
457+ 'recorded_event_id' : event .id ,
458+ 'recorded_event_timestamp' : event .timestamp ,
459+ }
460+ self ._markers .setdefault (event .marker_name , []).append (marker )
461+ elif event .state == 'failed' :
462+ marker = {
463+ 'type' : 'marker' ,
464+ 'name' : event .marker_name ,
465+ 'state' : event .state ,
466+ 'cause' : event .cause ,
467+ 'record_failed_event_id' : event .id ,
468+ 'record_failed_event_timestamp' : event .timestamp ,
469+ }
470+ self ._markers .setdefault (event .marker_name , []).append (marker )
471+
425472 TYPE_TO_PARSER = {
426473 'ActivityTask' : parse_activity_event ,
427474 'ChildWorkflowExecution' : parse_child_workflow_event ,
428475 'WorkflowExecution' : parse_workflow_event ,
429476 'ExternalWorkflowExecution' : parse_external_workflow_event ,
477+ 'Marker' : parse_marker_event ,
430478 }
431479
432480 def parse (self ):
0 commit comments