Skip to content

Commit e2c5b86

Browse files
authored
move provider utils to pygeoapi.provider (#2228)
1 parent ecd81c1 commit e2c5b86

11 files changed

Lines changed: 90 additions & 90 deletions

File tree

pygeoapi/api/__init__.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,14 @@
6161
from pygeoapi.log import setup_logger
6262
from pygeoapi.plugin import load_plugin
6363
from pygeoapi.process.manager.base import get_manager
64+
from pygeoapi.provider import (
65+
filter_providers_by_type, get_provider_by_type, get_provider_default)
6466
from pygeoapi.provider.base import (
6567
ProviderConnectionError, ProviderGenericError, ProviderTypeError)
6668

6769
from pygeoapi.util import (
6870
TEMPLATESDIR, UrlPrefetcher, dategetter,
69-
filter_dict_by_key_value, filter_providers_by_type, get_api_rules,
70-
get_base_url, get_provider_by_type, get_provider_default, get_typed_value,
71+
filter_dict_by_key_value, get_api_rules, get_base_url, get_typed_value,
7172
render_j2_template, to_json, get_choice_from_headers, get_from_headers,
7273
get_dataset_formatters
7374
)

pygeoapi/api/coverages.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,8 @@
4646
from pygeoapi.openapi import get_oas_30_parameters
4747
from pygeoapi.plugin import load_plugin
4848
from pygeoapi.provider.base import ProviderGenericError, ProviderTypeError
49-
from pygeoapi.util import (
50-
filter_dict_by_key_value, get_provider_by_type, to_json
51-
)
49+
from pygeoapi.provider import get_provider_by_type
50+
from pygeoapi.util import filter_dict_by_key_value, to_json
5251

5352
from . import (
5453
APIRequest, API, F_JSON, SYSTEM_LOCALE, validate_bbox, validate_datetime,

pygeoapi/api/environmental_data_retrieval.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,12 @@
5353
from pygeoapi.crs import (create_crs_transform_spec, set_content_crs_header)
5454
from pygeoapi.openapi import get_oas_30_parameters
5555
from pygeoapi.plugin import load_plugin, PLUGINS
56+
from pygeoapi.provider import filter_providers_by_type, get_provider_by_type
5657
from pygeoapi.provider.base import (
5758
ProviderGenericError, ProviderItemNotFoundError)
58-
from pygeoapi.util import (
59-
filter_providers_by_type, get_dataset_formatters, get_provider_by_type,
60-
get_typed_value, render_j2_template, to_json, filter_dict_by_key_value
61-
)
59+
from pygeoapi.util import (get_dataset_formatters, get_typed_value,
60+
render_j2_template, to_json,
61+
filter_dict_by_key_value)
6262

6363
from . import (APIRequest, API, F_COVERAGEJSON, F_HTML, F_JSON, F_JSONLD,
6464
validate_datetime, validate_bbox)

pygeoapi/api/itemtypes.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,13 @@
5858
from pygeoapi.linked_data import geojson2jsonld
5959
from pygeoapi.openapi import get_oas_30_parameters
6060
from pygeoapi.plugin import load_plugin, PLUGINS
61+
from pygeoapi.provider import filter_providers_by_type, get_provider_by_type
6162
from pygeoapi.provider.base import (
6263
ProviderGenericError, ProviderItemNotFoundError,
6364
ProviderTypeError, SchemaType)
6465

65-
from pygeoapi.util import (filter_providers_by_type, to_json,
66-
filter_dict_by_key_value, str2bool,
67-
get_provider_by_type, render_j2_template,
68-
get_dataset_formatters)
66+
from pygeoapi.util import (to_json, filter_dict_by_key_value, str2bool,
67+
render_j2_template, get_dataset_formatters)
6968

7069
from . import (
7170
APIRequest, API, SYSTEM_LOCALE, F_JSON, FORMAT_TYPES, F_HTML, F_JSONLD,

pygeoapi/api/maps.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,11 @@
4646
from pygeoapi.crs import transform_bbox
4747
from pygeoapi.openapi import get_oas_30_parameters
4848
from pygeoapi.plugin import load_plugin
49+
from pygeoapi.provider import filter_providers_by_type, get_provider_by_type
4950
from pygeoapi.provider.base import (
5051
ProviderGenericError, ProviderInvalidDataError
5152
)
52-
from pygeoapi.util import (
53-
get_provider_by_type, to_json, filter_providers_by_type,
54-
filter_dict_by_key_value
55-
)
53+
from pygeoapi.util import to_json, filter_dict_by_key_value
5654

5755
from . import (
5856
APIRequest, API, F_JSON, FORMAT_TYPES, validate_datetime, validate_subset

pygeoapi/api/stac.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,12 @@
5151
from pygeoapi.api import itemtypes as itemtypes_api
5252
from pygeoapi.plugin import load_plugin
5353

54+
from pygeoapi.provider import get_provider_by_type
5455
from pygeoapi.provider.base import (
5556
ProviderConnectionError, ProviderNotFoundError, ProviderTypeError
5657
)
57-
from pygeoapi.util import (
58-
filter_dict_by_key_value, get_current_datetime, get_provider_by_type,
59-
render_j2_template, to_json
60-
)
58+
from pygeoapi.util import (filter_dict_by_key_value, get_current_datetime,
59+
render_j2_template, to_json)
6160

6261
from . import APIRequest, API, FORMAT_TYPES, F_JSON, F_HTML
6362

pygeoapi/api/tiles.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,13 @@
4646
from pygeoapi.plugin import load_plugin
4747
from pygeoapi.models.provider.base import (TilesMetadataFormat,
4848
TileMatrixSetEnum)
49+
from pygeoapi.provider import get_provider_by_type, filter_providers_by_type
4950
from pygeoapi.provider.base import (
5051
ProviderGenericError, ProviderTypeError
5152
)
5253
from pygeoapi.provider.tile import ProviderTileNotFoundError
5354

54-
from pygeoapi.util import (
55-
get_provider_by_type, to_json, filter_dict_by_key_value,
56-
filter_providers_by_type, render_j2_template
57-
)
55+
from pygeoapi.util import to_json, filter_dict_by_key_value, render_j2_template
5856

5957
from . import (
6058
APIRequest, API, FORMAT_TYPES, F_JSON, F_HTML, SYSTEM_LOCALE, F_JSONLD

pygeoapi/provider/__init__.py

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#
33
# Authors: Tom Kralidis <tomkralidis@gmail.com>
44
#
5-
# Copyright (c) 2019 Tom Kralidis
5+
# Copyright (c) 2026 Tom Kralidis
66
#
77
# Permission is hereby granted, free of charge, to any person
88
# obtaining a copy of this software and associated documentation
@@ -27,4 +27,63 @@
2727
#
2828
# =================================================================
2929

30-
"""Provider module containing the plugins wrapping data sources"""
30+
import logging
31+
32+
from pygeoapi.provider.base import ProviderTypeError
33+
34+
LOGGER = logging.getLogger(__name__)
35+
36+
37+
def filter_providers_by_type(providers: list, type: str) -> dict:
38+
"""
39+
helper function to filter a list of providers by type
40+
41+
:param providers: ``list``
42+
:param type: str
43+
44+
:returns: filtered ``dict`` provider
45+
"""
46+
47+
providers_ = {provider['type']: provider for provider in providers}
48+
return providers_.get(type)
49+
50+
51+
def get_provider_by_type(providers: list, provider_type: str) -> dict:
52+
"""
53+
helper function to load a provider by a provider type
54+
55+
:param providers: ``list`` of providers
56+
:param provider_type: type of provider (e.g. feature)
57+
58+
:returns: provider based on type
59+
"""
60+
61+
LOGGER.debug(f'Searching for provider type {provider_type}')
62+
try:
63+
p = (next(d for i, d in enumerate(providers)
64+
if d['type'] == provider_type))
65+
except (RuntimeError, StopIteration):
66+
raise ProviderTypeError('Invalid provider type requested')
67+
68+
return p
69+
70+
71+
def get_provider_default(providers: list) -> dict:
72+
"""
73+
helper function to get a resource's default provider
74+
75+
:param providers: ``list`` of providers
76+
77+
:returns: filtered ``dict``
78+
"""
79+
80+
try:
81+
default = (next(d for i, d in enumerate(providers) if 'default' in d
82+
and d['default']))
83+
LOGGER.debug('found default provider type')
84+
except StopIteration:
85+
LOGGER.debug('no default provider type. Returning first provider')
86+
default = providers[0]
87+
88+
LOGGER.debug(f"Default provider: {default['type']}")
89+
return default

pygeoapi/provider/sql.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@
9191
ProviderQueryError,
9292
ProviderItemNotFoundError
9393
)
94+
from pygeoapi.util import str2bool
9495

9596
LOGGER = logging.getLogger(__name__)
9697

@@ -127,6 +128,7 @@ def __init__(
127128
self.id_field = provider_def['id_field']
128129
self.geom = provider_def.get('geom_field', 'geom')
129130
self.driver_name = driver_name
131+
self.count = str2bool(provider_def.get('count', True))
130132

131133
LOGGER.debug(f'Name: {self.name}')
132134
LOGGER.debug(f'Table: {self.table}')

pygeoapi/util.py

Lines changed: 1 addition & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,7 @@
6565
from pygeoapi import l10n
6666
from pygeoapi.models import config as config_models
6767
from pygeoapi.plugin import load_plugin, PLUGINS
68-
from pygeoapi.provider.base import ProviderTypeError
69-
68+
from pygeoapi.provider import get_provider_default
7069

7170
LOGGER = logging.getLogger(__name__)
7271

@@ -527,61 +526,6 @@ def filter_dict_by_key_value(dict_: dict, key: str, value: str) -> dict:
527526
return {k: v for (k, v) in dict_.items() if v[key] == value}
528527

529528

530-
def filter_providers_by_type(providers: list, type: str) -> dict:
531-
"""
532-
helper function to filter a list of providers by type
533-
534-
:param providers: ``list``
535-
:param type: str
536-
537-
:returns: filtered ``dict`` provider
538-
"""
539-
540-
providers_ = {provider['type']: provider for provider in providers}
541-
return providers_.get(type)
542-
543-
544-
def get_provider_by_type(providers: list, provider_type: str) -> dict:
545-
"""
546-
helper function to load a provider by a provider type
547-
548-
:param providers: ``list`` of providers
549-
:param provider_type: type of provider (e.g. feature)
550-
551-
:returns: provider based on type
552-
"""
553-
554-
LOGGER.debug(f'Searching for provider type {provider_type}')
555-
try:
556-
p = (next(d for i, d in enumerate(providers)
557-
if d['type'] == provider_type))
558-
except (RuntimeError, StopIteration):
559-
raise ProviderTypeError('Invalid provider type requested')
560-
561-
return p
562-
563-
564-
def get_provider_default(providers: list) -> dict:
565-
"""
566-
helper function to get a resource's default provider
567-
568-
:param providers: ``list`` of providers
569-
570-
:returns: filtered ``dict``
571-
"""
572-
573-
try:
574-
default = (next(d for i, d in enumerate(providers) if 'default' in d
575-
and d['default']))
576-
LOGGER.debug('found default provider type')
577-
except StopIteration:
578-
LOGGER.debug('no default provider type. Returning first provider')
579-
default = providers[0]
580-
581-
LOGGER.debug(f"Default provider: {default['type']}")
582-
return default
583-
584-
585529
class ProcessExecutionMode(Enum):
586530
sync_execute = 'sync-execute'
587531
async_execute = 'async-execute'

0 commit comments

Comments
 (0)