Skip to content

Commit f991b46

Browse files
author
Kolea Plesco
committed
SupraNotice Validator
1 parent 453726c commit f991b46

9 files changed

Lines changed: 90 additions & 11 deletions

File tree

dags/selector_daily_fetch_orchestrator.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
from ted_sws import config
1111
from ted_sws.core.model.notice import NoticeStatus
1212
from ted_sws.data_manager.adapters.notice_repository import NoticeRepository
13-
from ted_sws.data_sampler.services.notice_xml_indexer import index_notice
1413
from ted_sws.event_manager.adapters.event_log_decorator import event_log
1514
from ted_sws.event_manager.model.event_message import TechnicalEventMessage, EventMessageMetadata, \
1615
EventMessageProcessType

ted_sws/core/model/supra_notice.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,8 @@
77

88
""" This module implements aggregates over groups of notices and the appropriate business needs, on those groups """
99
import abc
10-
import json
11-
from datetime import datetime, date, time
12-
from typing import List, Any, Optional
13-
14-
from pydantic import Field
10+
from datetime import datetime, time
11+
from typing import List, Optional
1512

1613
from ted_sws.core.model import PropertyBaseModel
1714
from ted_sws.core.model.manifestation import Manifestation

ted_sws/data_manager/adapters/supra_notice_repository.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from datetime import datetime
21
from typing import Optional, Iterator
32

43
from pymongo import MongoClient, ASCENDING

ted_sws/notice_fetcher/adapters/ted_api_abc.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ def __call__(self, api_url: str, api_query: dict) -> dict:
1717
"""
1818

1919

20-
2120
class TedAPIAdapterABC(abc.ABC):
2221
@abc.abstractmethod
2322
def get_by_id(self, document_id: str) -> dict:
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from datetime import datetime, date, time
2+
from typing import Union
3+
4+
from pymongo import MongoClient
5+
6+
from ted_sws.core.model.supra_notice import SupraNoticeValidationReport, DailySupraNotice
7+
from ted_sws.data_manager.adapters.supra_notice_repository import DailySupraNoticeRepository
8+
from ted_sws.notice_fetcher.adapters.ted_api import TedAPIAdapter, RequestAPI
9+
10+
day_type = Union[datetime, date]
11+
12+
13+
def validate_and_update_daily_supra_notice(notice_publication_day: day_type, mongodb_client: MongoClient,
14+
request_api: RequestAPI = None):
15+
if isinstance(notice_publication_day, date):
16+
notice_publication_day = datetime.combine(notice_publication_day, time())
17+
18+
repo = DailySupraNoticeRepository(mongodb_client=mongodb_client)
19+
supra_notice: DailySupraNotice = repo.get(reference=notice_publication_day)
20+
21+
if not supra_notice:
22+
raise ValueError("SupraNotice not found in Database!")
23+
24+
fetched_notice_ids_list = supra_notice.notice_ids or []
25+
fetched_notice_ids = set(fetched_notice_ids_list)
26+
27+
ted_api_adapter: TedAPIAdapter = TedAPIAdapter(request_api=request_api)
28+
documents = ted_api_adapter.get_by_wildcard_date(wildcard_date=notice_publication_day.strftime("%Y%m%d*"))
29+
api_notice_ids_list = [document["ND"] for document in documents] if documents and len(documents) else []
30+
api_notice_ids = set(api_notice_ids_list)
31+
32+
validation_report = SupraNoticeValidationReport(object_data="")
33+
missing_notice_ids = api_notice_ids - fetched_notice_ids
34+
if len(missing_notice_ids):
35+
validation_report.missing_notice_ids = missing_notice_ids
36+
37+
supra_notice.validation_report = validation_report
38+
repo.update(daily_supra_notice=supra_notice)

tests/conftest.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ def notice_repository():
3939
def ted_document_search():
4040
return TedAPIAdapter(request_api=FakeRequestAPI())
4141

42+
4243
@pytest.fixture
4344
def raw_notice(ted_document_search, notice_repository, notice_id) -> Notice:
4445
document_id = notice_id
@@ -47,6 +48,7 @@ def raw_notice(ted_document_search, notice_repository, notice_id) -> Notice:
4748
raw_notice = notice_repository.get(reference=document_id)
4849
return raw_notice
4950

51+
5052
@pytest.fixture
5153
def indexed_notice(raw_notice) -> Notice:
5254
raw_notice.set_xml_metadata(XMLMetadata(unique_xpaths=["FAKE_INDEX_XPATHS"]))
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import pytest
2+
3+
from ted_sws.data_manager.adapters.supra_notice_repository import DailySupraNoticeRepository
4+
from tests.fakes.fake_ted_api import FakeRequestAPI
5+
6+
7+
@pytest.fixture
8+
def daily_supra_notice_repository(mongodb_client) -> DailySupraNoticeRepository:
9+
return DailySupraNoticeRepository(mongodb_client=mongodb_client)
10+
11+
12+
@pytest.fixture
13+
def fake_request_api():
14+
return FakeRequestAPI()

tests/unit/supra_notice_manager/test_daily_supra_notice_manager.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55
create_and_store_in_mongo_db_daily_supra_notice
66

77

8-
def test_daily_supra_notice_manager(mongodb_client):
8+
def test_daily_supra_notice_manager(mongodb_client, daily_supra_notice_repository):
99
notice_ids = ["1", "2", "3"]
1010
create_and_store_in_mongo_db_daily_supra_notice(notice_ids=notice_ids, mongodb_client=mongodb_client)
11-
daily_supra_notice_repository = DailySupraNoticeRepository(mongodb_client=mongodb_client)
1211
result = daily_supra_notice_repository.get(reference=datetime.combine(datetime.today(), time()))
13-
assert result
12+
assert result
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
from datetime import datetime, time
2+
3+
import pytest
4+
5+
from ted_sws.supra_notice_manager.services.daily_supra_notice_manager import \
6+
create_and_store_in_mongo_db_daily_supra_notice
7+
from ted_sws.supra_notice_manager.services.supra_notice_validator import validate_and_update_daily_supra_notice
8+
9+
10+
def test_supra_notice_validator(mongodb_client, daily_supra_notice_repository, fake_request_api):
11+
today = datetime.combine(datetime.today(), time())
12+
13+
with pytest.raises(ValueError):
14+
validate_and_update_daily_supra_notice(today, mongodb_client, fake_request_api)
15+
16+
api_document_id = "067623-2022"
17+
18+
notice_ids = ["1", "2", "3"]
19+
create_and_store_in_mongo_db_daily_supra_notice(notice_ids=notice_ids, mongodb_client=mongodb_client)
20+
validate_and_update_daily_supra_notice(today, mongodb_client, fake_request_api)
21+
result = daily_supra_notice_repository.get(reference=today)
22+
assert result
23+
assert len(result.validation_report.missing_notice_ids) > 0
24+
assert api_document_id in result.validation_report.missing_notice_ids
25+
assert not result.validation_report.is_valid()
26+
27+
notice_ids = [api_document_id]
28+
create_and_store_in_mongo_db_daily_supra_notice(notice_ids=notice_ids, mongodb_client=mongodb_client)
29+
validate_and_update_daily_supra_notice(today, mongodb_client, fake_request_api)
30+
result = daily_supra_notice_repository.get(reference=today)
31+
assert result
32+
assert result.validation_report.is_valid()

0 commit comments

Comments
 (0)