Skip to content

Commit d74102b

Browse files
committed
make all fields in partial rerun merge events optional
1 parent ddeeac1 commit d74102b

File tree

4 files changed

+77
-37
lines changed

4 files changed

+77
-37
lines changed

src/corva/handlers.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,9 @@ def _merge_events(
576576
Only "scheduled" and "stream" type of apps can be processed here.
577577
If somehow any other type is passed - raise an exception
578578
"""
579+
if not isinstance(aws_event, list): # if aws_event is not a list - there is nothing to merge, so do nothing.
580+
return aws_event
581+
579582
if data_transformation_type is RawScheduledEvent:
580583
# scheduled event
581584
if not isinstance(aws_event[0], dict):

src/corva/models/merge/merge.py

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from corva.models.base import CorvaBaseEvent
22
from corva.models.merge.enums import EventType, RerunMode, SourceType
3+
from typing import Optional
34

45

56
class PartialRerunMergeEvent(CorvaBaseEvent):
@@ -25,23 +26,23 @@ class PartialRerunMergeEvent(CorvaBaseEvent):
2526
run_until: run until
2627
"""
2728

28-
event_type: EventType
29-
partial_well_rerun_id: int
30-
rerun_mode: RerunMode
31-
start: int
32-
end: int
33-
asset_id: int
34-
rerun_asset_id: int
35-
app_stream_id: int
36-
rerun_app_stream_id: int
37-
version: int
38-
app_id: int
39-
app_key: str
40-
app_connection_id: int
41-
rerun_app_connection_id: int
42-
source_type: SourceType
43-
log_type: str
44-
run_until: int
29+
event_type: Optional[EventType]
30+
partial_well_rerun_id: Optional[int]
31+
rerun_mode: Optional[RerunMode]
32+
start: Optional[int]
33+
end: Optional[int]
34+
asset_id: Optional[int]
35+
rerun_asset_id: Optional[int]
36+
app_stream_id: Optional[int]
37+
rerun_app_stream_id: Optional[int]
38+
version: Optional[int]
39+
app_id: Optional[int]
40+
app_key: Optional[str]
41+
app_connection_id: Optional[int]
42+
rerun_app_connection_id: Optional[int]
43+
source_type: Optional[SourceType]
44+
log_type: Optional[str]
45+
run_until: Optional[int]
4546

4647
class Config:
4748
extra = "allow"

src/corva/models/merge/raw.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from __future__ import annotations
22

3-
from typing import Any, Dict, List
3+
from typing import Any, Dict, List, Optional
44

55
import pydantic
66

@@ -9,24 +9,24 @@
99

1010

1111
class RawPartialMergeEventData(pydantic.BaseModel):
12-
partial_well_rerun_id: int
13-
rerun_mode: RerunMode
14-
start: int
15-
end: int
16-
asset_id: int
17-
rerun_asset_id: int
18-
app_stream_id: int
19-
rerun_app_stream_id: int
20-
version: int = pydantic.Field(
12+
partial_well_rerun_id: Optional[int]
13+
rerun_mode: Optional[RerunMode]
14+
start: Optional[int]
15+
end: Optional[int]
16+
asset_id: Optional[int]
17+
rerun_asset_id: Optional[int]
18+
app_stream_id: Optional[int]
19+
rerun_app_stream_id: Optional[int]
20+
version: Optional[int] = pydantic.Field(
2121
..., le=1, ge=1
2222
) # Currently handler supports only 1-st version of this event.
23-
app_id: int
24-
app_key: str
25-
app_connection_id: int
26-
rerun_app_connection_id: int
27-
source_type: SourceType
28-
log_type: str
29-
run_until: int
23+
app_id: Optional[int]
24+
app_key: Optional[str]
25+
app_connection_id: Optional[int]
26+
rerun_app_connection_id: Optional[int]
27+
source_type: Optional[SourceType]
28+
log_type: Optional[str]
29+
run_until: Optional[int]
3030

3131
class Config:
3232
extra = "allow"

tests/unit/test_partial_rerun_merge_app.py

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
"""Module contains functional requirements for partial rerun merge event handler."""
2-
2+
from copy import deepcopy
33
from uuid import uuid4
44

55
import pytest
@@ -33,7 +33,7 @@
3333

3434

3535
def test_merge_event_handler_called_from_stream_app_on_unexpected_event_type_raises_exc(
36-
context,
36+
context,
3737
):
3838
"""Partial merge app must raise Pydantic validation exception
3939
while processing event of unexpected type.
@@ -55,7 +55,7 @@ def partial_rerun_merge_app(event, api, asset_cache, rerun_asset_cache):
5555

5656

5757
def test_merge_event_handler_called_from_stream_app_returns_expected_cache_values(
58-
context,
58+
context,
5959
):
6060
"""Partial merge app must provide functional(working) cache objects
6161
for asset and rerun asset.
@@ -121,3 +121,39 @@ def partial_rerun_merge_app(event, api, asset_cache, rerun_asset_cache):
121121

122122
partial_merge_app_response = scheduled_app(RAW_EVENT, context)[0]
123123
assert partial_merge_app_response == expected_response
124+
125+
126+
def test_event_parsing_not_failing_on_missing_field(context):
127+
"""When calling scheduled event with merge event handler defined,
128+
partial merge handler should be called only.
129+
"""
130+
131+
@corva.scheduled(merge_events=True)
132+
def scheduled_app(event, api, cache):
133+
pytest.fail("Scheduled app was unexpectedly called!")
134+
135+
@corva.partial_rerun_merge
136+
def partial_rerun_merge_app(event, api, asset_cache, rerun_asset_cache):
137+
return True
138+
139+
event_with_missing_parameter = deepcopy(RAW_EVENT)
140+
event_with_missing_parameter["data"]["end"] = None
141+
partial_merge_app_response = scheduled_app(event_with_missing_parameter, context)[0]
142+
assert partial_merge_app_response is True
143+
144+
145+
def test_merge_events_parameter_ignored_for_partial_rerun_merge(context):
146+
"""When calling scheduled event with merge event handler defined,
147+
partial merge handler should be called only.
148+
"""
149+
150+
@corva.scheduled(merge_events=True)
151+
def scheduled_app(event, api, cache):
152+
pytest.fail("Scheduled app was unexpectedly called!")
153+
154+
@corva.partial_rerun_merge
155+
def partial_rerun_merge_app(event, api, asset_cache, rerun_asset_cache):
156+
return True
157+
158+
partial_merge_app_response = scheduled_app(RAW_EVENT, context)[0]
159+
assert partial_merge_app_response is True

0 commit comments

Comments
 (0)