1919
2020import pydantic
2121import redis
22+ from typing_extensions import assert_never
2223
2324from corva .api import Api
2425from corva .configuration import SETTINGS
@@ -60,7 +61,7 @@ def base_handler(
6061 func : Callable ,
6162 raw_event_type : Type [RawBaseEvent ],
6263 handler : Optional [logging .Handler ],
63- merge_events : Optional [ bool ] = False ,
64+ merge_events : bool = False ,
6465) -> Callable [[Any , Any ], List [Any ]]:
6566 @functools .wraps (func )
6667 def wrapper (aws_event : Any , aws_context : Any ) -> List [Any ]:
@@ -125,14 +126,14 @@ def stream(
125126 func : Optional [Callable [[StreamEventT , Api , UserRedisSdk ], Any ]] = None ,
126127 * ,
127128 handler : Optional [logging .Handler ] = None ,
128- merge_events : Optional [ bool ] = False ,
129+ merge_events : bool = False ,
129130) -> Callable :
130131 """Runs stream app.
131132
132133 Arguments:
133134 handler: logging handler to include in Corva logger.
134135 merge_events: if True - merge all incoming events into one before
135- passing them to func
136+ passing them to func
136137 """
137138
138139 if func is None :
@@ -234,12 +235,14 @@ def scheduled(
234235 func : Optional [Callable [[ScheduledEventT , Api , UserRedisSdk ], Any ]] = None ,
235236 * ,
236237 handler : Optional [logging .Handler ] = None ,
237- merge_events : Optional [ bool ] = False ,
238+ merge_events : bool = False ,
238239) -> Callable :
239240 """Runs scheduled app.
240241
241242 Arguments:
242243 handler: logging handler to include in Corva logger.
244+ merge_events: if True - merge all incoming events into one before
245+ passing them to func
243246 """
244247
245248 if func is None :
@@ -581,20 +584,11 @@ def _merge_events(aws_event: Any, data_transformation_type: Type[RawBaseEvent])
581584 if is_depth
582585 else ("schedule_start" , "schedule_end" )
583586 )
584- min_event_start , max_event_end = (
585- aws_event [0 ][event_start ],
586- aws_event [0 ].get (event_end ),
587+ min_event_start = min (e [event_start ] for e in aws_event )
588+ max_event_end = max (
589+ (e [event_end ] for e in aws_event if e .get (event_end ) is not None ),
590+ default = None ,
587591 )
588- for event in aws_event [1 :]:
589- if event [event_start ] < min_event_start :
590- min_event_start = event [event_start ]
591- if (
592- max_event_end
593- and event .get (event_end )
594- and event [event_end ] > max_event_end
595- ):
596- max_event_end = event [event_end ]
597-
598592 aws_event [0 ][event_start ] = min_event_start
599593 if max_event_end :
600594 aws_event [0 ][event_end ] = max_event_end
@@ -608,9 +602,6 @@ def _merge_events(aws_event: Any, data_transformation_type: Type[RawBaseEvent])
608602 aws_event = [aws_event [0 ]]
609603 return aws_event
610604
611- # unexpected event type, raise an exception
612- raise RuntimeError (
613- "merge_events parameter was passed to app type other than scheduled "
614- "or stream. Merge strategy is not implemented for "
615- f"{ data_transformation_type } event types."
616- )
605+ else :
606+ # unexpected event type, raise an exception
607+ assert_never (data_transformation_type ) # type: ignore
0 commit comments