Skip to content

Commit 60c8f84

Browse files
committed
feat(providers): replace filter_by_name() by filter()
filter() takes a regex input and output a Provider iterator
1 parent 10465d9 commit 60c8f84

File tree

2 files changed

+22
-17
lines changed

2 files changed

+22
-17
lines changed

eodag/api/core.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -479,14 +479,14 @@ def list_product_types(
479479
self.fetch_product_types_list(provider=provider)
480480

481481
product_types: list[dict[str, Any]] = []
482-
providers = self.providers.filter_by_name(provider)
482+
providers = list(self.providers.filter(f"^{provider}$" if provider else None))
483483

484484
if provider and not providers:
485485
raise UnsupportedProvider(
486486
f"The requested provider is not (yet) supported: {provider}"
487487
)
488488

489-
for p in providers.values():
489+
for p in providers:
490490
for product_type_id in p.product_types: # type: ignore
491491
if product_type_id == GENERIC_PRODUCT_TYPE:
492492
continue
@@ -515,13 +515,13 @@ def fetch_product_types_list(self, provider: Optional[str] = None) -> None:
515515
if strict_mode:
516516
return
517517

518-
providers_to_fetch = self.providers.filter_by_name(provider)
519-
520518
# providers discovery confs that are fetchable
521519
providers_discovery_configs_fetchable: dict[str, DiscoverProductTypes] = {}
522520
# check if any provider has not already been fetched for product types
523521
already_fetched = True
524-
for provider_to_fetch in providers_to_fetch.values():
522+
for provider_to_fetch in self.providers.filter(
523+
f"^{provider}$" if provider else None
524+
):
525525
if provider_to_fetch.fetchable and provider_to_fetch.search_config:
526526
providers_discovery_configs_fetchable[
527527
provider_to_fetch.name
@@ -639,7 +639,9 @@ def discover_product_types(
639639
:returns: external product types configuration
640640
"""
641641

642-
providers_to_discover = self.providers.filter_by_name(provider)
642+
providers_to_discover = list(
643+
self.providers.filter(f"^{provider}$" if provider else None)
644+
)
643645

644646
if provider and not providers_to_discover:
645647
raise UnsupportedProvider(
@@ -649,7 +651,7 @@ def discover_product_types(
649651
ext_product_types_conf: dict[str, Any] = {}
650652

651653
kwargs: dict[str, Any] = {}
652-
for p in providers_to_discover.values():
654+
for p in providers_to_discover:
653655
if not p.search_config:
654656
return None
655657

eodag/api/provider.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import logging
2121
import os
22+
import re
2223
import tempfile
2324
import traceback
2425
from collections import UserDict
@@ -426,7 +427,7 @@ def sync_product_types(
426427
Synchronize product types for a provider based on strict or permissive mode.
427428
428429
In strict mode, removes product types not in product_types_config.
429-
In permissive mode, adds empty product type configs for missing types.
430+
In permissive mode, adds empty product type to config for missing types.
430431
431432
:param product_types_config: The configuration of product_types.
432433
:param strict_mode: If True, remove unknown product types; if False, add empty configs for them.
@@ -636,19 +637,21 @@ def get_products(self, provider: str | Provider) -> Optional[dict[str, Any]]:
636637
provider_obj = self.data.get(name)
637638
return provider_obj.product_types if provider_obj else None
638639

639-
def filter_by_name(self, name: Optional[str] = None) -> ProvidersDict:
640+
def filter(self, pattern: Optional[str] = None) -> Iterator[Provider]:
640641
"""
641-
Return a ProvidersDict filtered by provider name or group.
642+
Yield providers whose name or group matches the regex pattern.
642643
643-
:param name: The name or group to filter by.
644-
:return: The filtered ProvidersDict.
644+
:param pattern: Regex pattern to filter provider name or group.
645+
:return: Iterator of matching Provider objects.
645646
"""
646-
if not name:
647-
return self
647+
if not pattern:
648+
yield from self.data.values()
649+
return
648650

649-
return ProvidersDict(
650-
{n: p for n, p in self.data.items() if name in [p.name, p.group]}
651-
)
651+
regex = re.compile(pattern)
652+
for p in self.data.values():
653+
if regex.search(p.name) or (p.group and regex.search(p.group)):
654+
yield p
652655

653656
def delete_product_type(self, provider: str, product_type: str) -> None:
654657
"""

0 commit comments

Comments
 (0)