|
51 | 51 | from pygeoapi.api import evaluate_limit |
52 | 52 | from pygeoapi.formatter.base import FormatterSerializationError |
53 | 53 | from pygeoapi.linked_data import geojson2jsonld |
| 54 | +from pygeoapi.openapi import get_oas_30_parameters |
54 | 55 | from pygeoapi.plugin import load_plugin, PLUGINS |
55 | 56 | from pygeoapi.provider.base import ( |
56 | 57 | ProviderGenericError, ProviderTypeError, SchemaType) |
|
59 | 60 | filter_dict_by_key_value, get_crs_from_uri, |
60 | 61 | get_provider_by_type, get_supported_crs_list, |
61 | 62 | modify_pygeofilter, render_j2_template, str2bool, |
62 | | - to_json, transform_bbox) |
| 63 | + to_json, transform_bbox, get_dataset_formatters) |
63 | 64 |
|
64 | 65 | from . import ( |
65 | 66 | APIRequest, API, SYSTEM_LOCALE, F_JSON, FORMAT_TYPES, F_HTML, F_JSONLD, |
@@ -355,13 +356,7 @@ def get_collection_items( |
355 | 356 | err.ogc_exception_code, err.message) |
356 | 357 |
|
357 | 358 | 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]) |
365 | 360 |
|
366 | 361 | if not request.is_valid(dataset_formatters.keys()): |
367 | 362 | 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, |
1189 | 1184 | v.get('limits', {}) |
1190 | 1185 | ) |
1191 | 1186 |
|
| 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 | + |
1192 | 1192 | paths[items_path] = { |
1193 | 1193 | 'get': { |
1194 | 1194 | 'summary': f'Get {title} items', |
1195 | 1195 | 'description': description, |
1196 | 1196 | 'tags': [k], |
1197 | 1197 | 'operationId': f'get{k.capitalize()}Features', |
1198 | 1198 | 'parameters': [ |
1199 | | - {'$ref': '#/components/parameters/f'}, |
| 1199 | + coll_f_parameter, |
1200 | 1200 | {'$ref': '#/components/parameters/lang'}, |
1201 | 1201 | {'$ref': '#/components/parameters/bbox'}, |
1202 | 1202 | coll_limit, |
|
0 commit comments