Skip to content

Commit 185f6e1

Browse files
author
Alin BUTU
committed
remarks correction
1 parent 5665bcd commit 185f6e1

File tree

9 files changed

+74
-116
lines changed

9 files changed

+74
-116
lines changed

services/adgs/rs_server_adgs/adgs_utils.py

Lines changed: 1 addition & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import stac_pydantic
2626
import yaml
2727
from fastapi import HTTPException, status
28-
from rs_server_common.stac_api_common import map_stac_platform
28+
from rs_server_common.utils.utils import map_stac_platform
2929

3030
ADGS_CONFIG = Path(osp.realpath(osp.dirname(__file__))).parent / "config"
3131
search_yaml = ADGS_CONFIG / "adgs_search_config.yaml"
@@ -86,47 +86,6 @@ def serialize_adgs_asset(feature_collection, products):
8686
return feature_collection
8787

8888

89-
def auxip_map_mission(platform: str, constellation: str) -> tuple[str | None, str | None]:
90-
"""
91-
Custom function for ADGS, to read constellation mapper and return propper
92-
values for platform and serial.
93-
Eodag maps this values to platformShortName, platformSerialIdentifier
94-
95-
Input: platform = sentinel-1a Output: sentinel-1, A
96-
Input: platform = sentinel-5P Output: sentinel-5p, None
97-
Input: constellation = sentinel-1 Output: sentinel-1, None
98-
"""
99-
data = map_stac_platform()
100-
platform_short_name: str | None = None
101-
platform_serial_identifier: str | None = None
102-
try:
103-
if platform:
104-
config = next(satellite[platform] for satellite in data["satellites"] if platform in satellite)
105-
platform_short_name = config.get("constellation", None)
106-
platform_serial_identifier = config.get("serialid", None)
107-
if constellation:
108-
if platform_short_name and platform_short_name != constellation:
109-
# Inconsistent combination of platform / constellation case
110-
raise HTTPException(
111-
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
112-
detail="Invalid combination of platform-constellation",
113-
)
114-
if any(
115-
satellite[list(satellite.keys())[0]]["constellation"] == constellation
116-
for satellite in data["satellites"]
117-
):
118-
platform_short_name = constellation
119-
platform_serial_identifier = None
120-
else:
121-
raise KeyError
122-
except (KeyError, IndexError, StopIteration) as exc:
123-
raise HTTPException(
124-
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
125-
detail="Cannot map platform/constellation",
126-
) from exc
127-
return platform_short_name, platform_serial_identifier
128-
129-
13089
def adgs_reverse_map_mission(
13190
platform: str | None,
13291
constellation: str | None,

services/adgs/rs_server_adgs/api/adgs_search.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
from fastapi.responses import RedirectResponse
3333
from rs_server_adgs import adgs_retriever, adgs_tags
3434
from rs_server_adgs.adgs_utils import (
35-
auxip_map_mission,
3635
auxip_odata_to_stac_template,
3736
auxip_stac_mapper,
3837
prepare_collection,
@@ -59,7 +58,11 @@
5958
split_multiple_values,
6059
)
6160
from rs_server_common.utils.logging import Logging
62-
from rs_server_common.utils.utils import validate_inputs_format, validate_sort_input
61+
from rs_server_common.utils.utils import (
62+
map_auxip_prip_mission,
63+
validate_inputs_format,
64+
validate_sort_input,
65+
)
6366
from stac_fastapi.api.models import GeoJSONResponse
6467

6568
# pylint: disable=duplicate-code # with cadip_search
@@ -89,7 +92,7 @@ def __init__(self, request: Request | None = None, readwrite: Literal["r", "w"]
8992
all_collections=lambda: read_conf()["collections"],
9093
select_config=select_config,
9194
stac_to_odata=stac_to_odata,
92-
map_mission=auxip_map_mission,
95+
map_mission=map_auxip_prip_mission,
9396
temporal_mapping={"start_datetime": "ContentDate/Start", "end_datetime": "ContentDate/End"},
9497
)
9598

services/cadip/rs_server_cadip/cadip_utils.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,8 @@
3030
import yaml
3131
from fastapi import HTTPException, status
3232
from rs_server_common.rspy_models import Item
33-
from rs_server_common.stac_api_common import map_stac_platform
3433
from rs_server_common.utils.logging import Logging
35-
from rs_server_common.utils.utils import strftime_millis
34+
from rs_server_common.utils.utils import map_stac_platform, strftime_millis
3635
from stac_pydantic import ItemCollection, ItemProperties
3736
from stac_pydantic.shared import Asset
3837

services/common/rs_server_common/stac_api_common.py

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -228,12 +228,9 @@ def get_queryables(
228228

229229
return queryables
230230

231-
if self.prip: # pylint: disable=too-many-branches
232-
can_query = True
233-
if can_query: # pylint: disable=too-many-branches
234-
for queryable_name, queryable_data in get_prip_queryables().items():
235-
queryables.update({queryable_name: QueryableField(**queryable_data)})
236-
231+
if self.prip:
232+
for queryable_name, queryable_data in get_prip_queryables().items():
233+
queryables.update({queryable_name: QueryableField(**queryable_data)})
237234
return queryables
238235

239236
# Idem for satellite or platform
@@ -1159,13 +1156,6 @@ def filter_allowed_collections(all_collections: list[dict], role: ServiceRole |
11591156
return stac_collections
11601157

11611158

1162-
@lru_cache
1163-
def map_stac_platform() -> dict:
1164-
"""Function used to read and interpret from constellation.yaml"""
1165-
with open(Path(__file__).parent.parent / "config" / "constellation.yaml", encoding="utf-8") as cf:
1166-
return yaml.safe_load(cf)
1167-
1168-
11691159
@lru_cache
11701160
def get_cadip_queryables() -> dict:
11711161
"""Function used to read and interpret from cadip_queryables.yaml"""

services/common/rs_server_common/utils/utils.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,12 @@
1818
from collections.abc import Callable, Iterable, Sequence
1919
from concurrent.futures import ThreadPoolExecutor
2020
from datetime import datetime
21+
from functools import lru_cache
22+
from pathlib import Path
2123
from threading import Thread
2224
from typing import Any
2325

26+
import yaml
2427
from dateutil.parser import isoparse
2528
from eodag import EOProduct
2629
from fastapi import HTTPException, status
@@ -145,6 +148,54 @@ def to_dt(dates: list[str]) -> list[datetime | None]:
145148
return fixed_date_dt, start_date_dt, stop_date_dt
146149

147150

151+
@lru_cache
152+
def map_stac_platform() -> dict:
153+
"""Function used to read and interpret from constellation.yaml"""
154+
with open(Path(__file__).parent.parent.parent / "config" / "constellation.yaml", encoding="utf-8") as cf:
155+
return yaml.safe_load(cf)
156+
157+
158+
def map_auxip_prip_mission(platform: str, constellation: str) -> tuple[str | None, str | None]:
159+
"""
160+
Custom function for ADGS/PRIP, to read constellation mapper and return propper
161+
values for platform and serial.
162+
Eodag maps this values to platformShortName, platformSerialIdentifier
163+
164+
Input: platform = sentinel-1a Output: sentinel-1, A
165+
Input: platform = sentinel-5P Output: sentinel-5p, None
166+
Input: constellation = sentinel-1 Output: sentinel-1, None
167+
"""
168+
data = map_stac_platform()
169+
platform_short_name: str | None = None
170+
platform_serial_identifier: str | None = None
171+
try:
172+
if platform:
173+
config = next(satellite[platform] for satellite in data["satellites"] if platform in satellite)
174+
platform_short_name = config.get("constellation", None)
175+
platform_serial_identifier = config.get("serialid", None)
176+
if constellation:
177+
if platform_short_name and platform_short_name != constellation:
178+
# Inconsistent combination of platform / constellation case
179+
raise HTTPException(
180+
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
181+
detail="Invalid combination of platform-constellation",
182+
)
183+
if any(
184+
satellite[list(satellite.keys())[0]]["constellation"] == constellation
185+
for satellite in data["satellites"]
186+
):
187+
platform_short_name = constellation
188+
platform_serial_identifier = None
189+
else:
190+
raise KeyError
191+
except (KeyError, IndexError, StopIteration) as exc:
192+
raise HTTPException(
193+
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
194+
detail="Cannot map platform/constellation",
195+
) from exc
196+
return platform_short_name, platform_serial_identifier
197+
198+
148199
def odata_to_stac(
149200
feature_template: dict,
150201
odata_dict: dict,

services/prip/rs_server_prip/api/prip_search.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,14 @@
4949
split_multiple_values,
5050
)
5151
from rs_server_common.utils.logging import Logging
52-
from rs_server_common.utils.utils import validate_inputs_format, validate_sort_input
52+
from rs_server_common.utils.utils import (
53+
map_auxip_prip_mission,
54+
validate_inputs_format,
55+
validate_sort_input,
56+
)
5357
from rs_server_prip import prip_retriever, prip_tags
5458
from rs_server_prip.prip_utils import (
5559
prepare_collection,
56-
prip_map_mission,
5760
prip_odata_to_stac_template,
5861
prip_stac_mapper,
5962
read_conf,
@@ -87,7 +90,7 @@ def __init__(self, request: Request | None = None, readwrite: Literal["r", "w"]
8790
all_collections=lambda: read_conf()["collections"],
8891
select_config=select_config,
8992
stac_to_odata=stac_to_odata,
90-
map_mission=prip_map_mission,
93+
map_mission=map_auxip_prip_mission,
9194
temporal_mapping={
9295
"start_datetime": "ContentDate/Start",
9396
"end_datetime": "ContentDate/End",

services/prip/rs_server_prip/prip_utils.py

Lines changed: 1 addition & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
import stac_pydantic
3131
import yaml
3232
from fastapi import HTTPException, status
33-
from rs_server_common.stac_api_common import map_stac_platform
33+
from rs_server_common.utils.utils import map_stac_platform
3434

3535
PRIP_CONFIG = Path(osp.realpath(osp.dirname(__file__))).parent / "config"
3636
search_yaml = PRIP_CONFIG / "prip_search_config.yaml"
@@ -120,50 +120,6 @@ def serialize_prip_asset(feature_collection: stac_pydantic.ItemCollection, produ
120120
return feature_collection
121121

122122

123-
# ----------------------
124-
# Platform mapping utilities
125-
# ----------------------
126-
def prip_map_mission(platform: str, constellation: str) -> tuple[str | None, str | None]:
127-
"""
128-
Custom function for PRIP, to read constellation mapper and return propper
129-
values for platform and serial.
130-
Eodag maps this values to platformShortName, platformSerialIdentifier
131-
132-
Input: platform = sentinel-1a Output: sentinel-1, A
133-
Input: platform = sentinel-5P Output: sentinel-5p, None
134-
Input: constellation = sentinel-1 Output: sentinel-1, None
135-
"""
136-
data = map_stac_platform()
137-
platform_short_name: str | None = None
138-
platform_serial_identifier: str | None = None
139-
try:
140-
if platform:
141-
config = next(satellite[platform] for satellite in data["satellites"] if platform in satellite)
142-
platform_short_name = config.get("constellation", None)
143-
platform_serial_identifier = config.get("serialid", None)
144-
if constellation:
145-
if platform_short_name and platform_short_name != constellation:
146-
# Inconsistent combination of platform / constellation case
147-
raise HTTPException(
148-
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
149-
detail="Invalid combination of platform-constellation",
150-
)
151-
if any(
152-
satellite[list(satellite.keys())[0]]["constellation"] == constellation
153-
for satellite in data["satellites"]
154-
):
155-
platform_short_name = constellation
156-
platform_serial_identifier = None
157-
else:
158-
raise KeyError
159-
except (KeyError, IndexError, StopIteration) as exc:
160-
raise HTTPException(
161-
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
162-
detail="Cannot map platform/constellation",
163-
) from exc
164-
return platform_short_name, platform_serial_identifier
165-
166-
167123
def prip_reverse_map_mission(
168124
platform: str | None,
169125
constellation: str | None,

tests/conftest.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
)
5252
from rs_server_common.data_retrieval.eodag_provider import CustomEODataAccessGateway
5353
from rs_server_common.utils.logging import Logging
54+
from rs_server_common.utils.utils import map_stac_platform
5455
from rs_server_prip import prip_retriever, prip_utils
5556

5657
from tests.app import init_app
@@ -189,7 +190,7 @@ def clear_caches():
189190
cadip_utils.read_conf.cache_clear()
190191
cadip_utils.cadip_stac_mapper.cache_clear()
191192
CustomEODataAccessGateway.create.cache_clear()
192-
stac_api_common.map_stac_platform.cache_clear()
193+
map_stac_platform.cache_clear()
193194
stac_api_common.get_cadip_queryables.cache_clear()
194195
stac_api_common.get_adgs_queryables.cache_clear()
195196

tests/test_search_endpoint.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,14 @@
2828
from httpx import Response
2929
from pydantic import ValidationError
3030
from rs_server_adgs import adgs_utils
31-
from rs_server_adgs.adgs_utils import auxip_map_mission
3231
from rs_server_cadip import cadip_utils
3332
from rs_server_cadip.cadip_utils import cadip_map_mission
3433
from rs_server_common.data_retrieval.provider import CreateProviderFailed, Provider
34+
from rs_server_common.utils.utils import map_auxip_prip_mission
3535
from rs_server_common.utils.utils2 import read_response_error
3636

3737
from tests.app import ROUTER_PREFIX_AUXIP, ROUTER_PREFIX_CADIP, ROUTER_PREFIX_PRIP
3838

39-
# from rs_server_prip import prip_utils
40-
# from rs_server_prip.prip_utils import prip_map_mission
41-
42-
4339
# pylint: disable=too-few-public-methods, too-many-arguments, too-many-locals,
4440
# pylint: disable=too-many-branches, too-many-lines, too-many-statements
4541

@@ -85,7 +81,7 @@ class TestConstellationMapping:
8581
)
8682
def test_valid_adgs_mapping(self, platform, constellation, short_name, serial_id):
8783
"""Pytest with only valid inputs, output is verified."""
88-
assert auxip_map_mission(platform, constellation) == (short_name, serial_id)
84+
assert map_auxip_prip_mission(platform, constellation) == (short_name, serial_id)
8985

9086
@pytest.mark.unit
9187
@pytest.mark.parametrize(
@@ -101,7 +97,7 @@ def test_valid_adgs_mapping(self, platform, constellation, short_name, serial_id
10197
def test_invalid_adgs_mapping(self, platform, constellation):
10298
"""Pytest using only invalid inputs, output is not verified, function should raise exception."""
10399
with pytest.raises(HTTPException):
104-
auxip_map_mission(platform, constellation)
100+
map_auxip_prip_mission(platform, constellation)
105101

106102
@pytest.mark.unit
107103
@pytest.mark.parametrize(

0 commit comments

Comments
 (0)