Skip to content

Commit 0c22b67

Browse files
committed
update
1 parent 27e9a57 commit 0c22b67

4 files changed

Lines changed: 43 additions & 11 deletions

File tree

pygeoapi/api/__init__.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868
filter_dict_by_key_value, filter_providers_by_type, get_api_rules,
6969
get_base_url, get_provider_by_type, get_provider_default, get_typed_value,
7070
get_crs_from_uri, get_supported_crs_list, render_j2_template, to_json,
71-
get_choice_from_headers, get_from_headers
71+
get_choice_from_headers, get_from_headers, get_dataset_formatters
7272
)
7373

7474
LOGGER = logging.getLogger(__name__)
@@ -1142,6 +1142,13 @@ def describe_collections(api: API, request: APIRequest,
11421142
'title': l10n.translate('Items as HTML', request.locale), # noqa
11431143
'href': f'{api.get_collections_url()}/{k}/items?f={F_HTML}' # noqa
11441144
})
1145+
for key, value in get_dataset_formatters(v).items():
1146+
collection['links'].append({
1147+
'type': value.mimetype,
1148+
'rel': 'items',
1149+
'title': l10n.translate(f'Items as {value.name}', request.locale), # noqa
1150+
'href': f'{api.get_collections_url()}/{k}/items?f={key}' # noqa
1151+
})
11451152

11461153
# OAPIF Part 2 - list supported CRSs and StorageCRS
11471154
if collection_data_type in ['edr', 'feature']:

pygeoapi/api/itemtypes.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
from pygeoapi.api import evaluate_limit
5252
from pygeoapi.formatter.base import FormatterSerializationError
5353
from pygeoapi.linked_data import geojson2jsonld
54+
from pygeoapi.openapi import get_oas_30_parameters
5455
from pygeoapi.plugin import load_plugin, PLUGINS
5556
from pygeoapi.provider.base import (
5657
ProviderGenericError, ProviderTypeError, SchemaType)
@@ -59,7 +60,7 @@
5960
filter_dict_by_key_value, get_crs_from_uri,
6061
get_provider_by_type, get_supported_crs_list,
6162
modify_pygeofilter, render_j2_template, str2bool,
62-
to_json, transform_bbox)
63+
to_json, transform_bbox, get_dataset_formatters)
6364

6465
from . import (
6566
APIRequest, API, SYSTEM_LOCALE, F_JSON, FORMAT_TYPES, F_HTML, F_JSONLD,
@@ -355,13 +356,7 @@ def get_collection_items(
355356
err.ogc_exception_code, err.message)
356357

357358
LOGGER.debug('Validating requested format')
358-
dataset_formatters = {}
359-
for key, value in PLUGINS['formatter'].items():
360-
df2 = load_plugin('formatter', {'name': key})
361-
dataset_formatters[df2.name] = df2
362-
for df in collections[dataset].get('formatters', []):
363-
df2 = load_plugin('formatter', df)
364-
dataset_formatters[df2.name] = df2
359+
dataset_formatters = get_dataset_formatters(collections[dataset])
365360

366361
if not request.is_valid(dataset_formatters.keys()):
367362
return api.get_format_exception(request)
@@ -1189,14 +1184,19 @@ def get_oas_30(cfg: dict, locale: str) -> tuple[list[dict[str, str]], dict[str,
11891184
v.get('limits', {})
11901185
)
11911186

1187+
dataset_formatters = get_dataset_formatters(v)
1188+
coll_f_parameter = deepcopy(get_oas_30_parameters(cfg, locale))['f'] # noqa
1189+
for key, value in dataset_formatters.items():
1190+
coll_f_parameter['schema']['enum'].append(key)
1191+
11921192
paths[items_path] = {
11931193
'get': {
11941194
'summary': f'Get {title} items',
11951195
'description': description,
11961196
'tags': [k],
11971197
'operationId': f'get{k.capitalize()}Features',
11981198
'parameters': [
1199-
{'$ref': '#/components/parameters/f'},
1199+
coll_f_parameter,
12001200
{'$ref': '#/components/parameters/lang'},
12011201
{'$ref': '#/components/parameters/bbox'},
12021202
coll_limit,

pygeoapi/formatter/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def __init__(self, formatter_def: dict):
3939
"""
4040
Initialize object
4141
42-
:param formatter_def: formatter definition
42+
param formatter_def: formatter definition
4343
4444
:returns: pygeoapi.formatter.base.BaseFormatter
4545
"""

pygeoapi/util.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
from pygeoapi import __version__
8181
from pygeoapi import l10n
8282
from pygeoapi.models import config as config_models
83+
from pygeoapi.plugin import load_plugin, PLUGINS
8384
from pygeoapi.provider.base import ProviderTypeError
8485

8586

@@ -1113,3 +1114,27 @@ def get_choice_from_headers(headers: dict,
11131114

11141115
# Return one or all choices
11151116
return sorted_choices if all else sorted_choices[0]
1117+
1118+
1119+
def get_dataset_formatters(dataset: dict) -> dict:
1120+
"""
1121+
Helper function to derive all formatters for an itemtype
1122+
1123+
:param dataset: `dict` of dataset resource definition
1124+
1125+
:returns: `dict` of formatters
1126+
"""
1127+
1128+
dataset_formatters = {}
1129+
1130+
print(dataset)
1131+
for key, value in PLUGINS['formatter'].items():
1132+
print("PLUGINS")
1133+
df2 = load_plugin('formatter', {'name': key})
1134+
dataset_formatters[df2.name] = df2
1135+
for df in dataset.get('formatters', []):
1136+
print("CUSTOM")
1137+
df2 = load_plugin('formatter', df)
1138+
dataset_formatters[df2.name] = df2
1139+
1140+
return dataset_formatters

0 commit comments

Comments
 (0)