diff --git a/pygeoapi/openapi.py b/pygeoapi/openapi.py index c3016c828..dce73168a 100644 --- a/pygeoapi/openapi.py +++ b/pygeoapi/openapi.py @@ -717,9 +717,29 @@ def get_admin(cfg: dict) -> dict: paths = {} - res_eg_key = next(iter(cfg['resources'])) + res_eg_key = next(iter(cfg['resources'])) if cfg['resources'] else 'example' res_eg = { - res_eg_key: cfg['resources'][res_eg_key] + res_eg_key: cfg['resources'][res_eg_key] + } if cfg['resources'] else { + 'example': { + 'type': 'collection', + 'title': 'Example', + 'description': 'Example', + 'keywords': ['example'], + 'links': [], + 'linked-data': {}, + 'extents': { + 'spatial': { + 'bbox': [-180,-90,180,90], + 'crs': 'http://www.opengis.net/def/crs/OGC/1.3/CRS84' + }, + 'temporal': { + 'begin': '2000-10-30T18:24:39Z', + 'end': '2007-10-30T08:57:29Z', + 'trs': 'http://www.opengis.net/def/uom/ISO-8601/0/Gregorian' + } + } + } } if 'extents' in res_eg[res_eg_key]: res_eg_eg_key = 'extents' @@ -824,7 +844,7 @@ def get_admin(cfg: dict) -> dict: 'description': 'Adds resource to configuration', 'content': { 'application/json': { - 'example': {'new-collection': cfg['resources'][res_eg_key]}, # noqa + 'example': {'new-collection': cfg['resources'][res_eg_key] if cfg['resources'] else res_eg['example'] }, # noqa 'schema': schema_dict['properties']['resources']['patternProperties']['^.*$'] # noqa } }, diff --git a/tests/other/test_openapi.py b/tests/other/test_openapi.py index 49f4f70ba..0832ec433 100644 --- a/tests/other/test_openapi.py +++ b/tests/other/test_openapi.py @@ -43,6 +43,14 @@ def config(): return yaml_load(fh) +@pytest.fixture() +def config_admin_empty_resources(): + with open( + get_test_file_path('pygeoapi-test-config-admin-empty-resources.yml') + ) as fh: + return yaml_load(fh) + + @pytest.fixture() def config_hidden_resources(): filename = 'pygeoapi-test-config-hidden-resources.yml' @@ -131,3 +139,8 @@ def test_hidden_resources(config_hidden_resources): assert '/collections/obs' not in openapi_doc['paths'] assert '/collections/obs/items' not in openapi_doc['paths'] + + +def test_admin_empty_resources(config_admin_empty_resources): + openapi_doc = get_oas(config_admin_empty_resources) + assert '/admin/config' in openapi_doc['paths'] diff --git a/tests/pygeoapi-test-config-admin-empty-resources.yml b/tests/pygeoapi-test-config-admin-empty-resources.yml new file mode 100644 index 000000000..202022ad4 --- /dev/null +++ b/tests/pygeoapi-test-config-admin-empty-resources.yml @@ -0,0 +1,103 @@ +# ================================================================= +# +# Authors: Tom Kralidis +# +# Copyright (c) 2019 Tom Kralidis +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation +# files (the "Software"), to deal in the Software without +# restriction, including without limitation the rights to use, +# copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following +# conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +# ================================================================= + +server: + bind: + host: 0.0.0.0 + port: 5000 + url: http://localhost:5000/ + mimetype: application/json; charset=UTF-8 + encoding: utf-8 + gzip: false + languages: + # First language is the default language + - en-US + - fr-CA + cors: true + pretty_print: true + limits: + default_items: 10 + max_items: 10 + # templates: /path/to/templates + map: + url: https://tile.openstreetmap.org/{z}/{x}/{y}.png + attribution: '© OpenStreetMap contributors' + manager: + name: TinyDB + connection: /tmp/pygeoapi-test-process-manager.db + output_dir: /tmp + admin: true + +logging: + level: DEBUG + #logfile: /tmp/pygeoapi.log + +metadata: + identification: + title: + en: pygeoapi default instance + fr: instance par défaut de pygeoapi + description: + en: pygeoapi provides an API to geospatial data + fr: pygeoapi fournit une API aux données géospatiales + keywords: + en: + - geospatial + - data + - api + fr: + - géospatiale + - données + - api + keywords_type: theme + terms_of_service: https://creativecommons.org/licenses/by/4.0/ + url: http://example.org + license: + name: CC-BY 4.0 license + url: https://creativecommons.org/licenses/by/4.0/ + provider: + name: Organization Name + url: https://pygeoapi.io + contact: + name: Lastname, Firstname + position: Position Title + address: Mailing Address + city: City + stateorprovince: Administrative Area + postalcode: Zip or Postal Code + country: Country + phone: +xx-xxx-xxx-xxxx + fax: +xx-xxx-xxx-xxxx + email: you@example.org + url: Contact URL + hours: Hours of Service + instructions: During hours of service. Off on weekends. + role: pointOfContact + +resources: {}