pygeoapi icon indicating copy to clipboard operation
pygeoapi copied to clipboard

OpenAPI endpoint gives validation error

Open justb4 opened this issue 5 years ago • 9 comments

Came out of investigation for a WFS3 GeoHealthCheck plugin.

Interesting, there is quite some OpenAPI Python stuff out there, like a Spec Validator: https://github.com/p1c2u/openapi-spec-validator

Very easy to run, but gives validation errors on the pygeoapi master demo WFS3 I try:

$ pip install openapi-spec-validator
$ python
>>> from openapi_spec_validator import validate_spec_url
>>> validate_spec_url('https://demo.pygeoapi.io/master/api?f=json')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/just/.pyenv/versions/geohealthcheck2.7/lib/python2.7/site-packages/openapi_spec_validator/shortcuts.py", line 16, in validate
    return validator_callable(spec, spec_url=url)
  File "/Users/just/.pyenv/versions/geohealthcheck2.7/lib/python2.7/site-packages/openapi_spec_validator/validators.py", line 48, in validate
    raise err
openapi_spec_validator.exceptions.OpenAPIValidationError: {'content': {'application/json': {'example': {'inputs': [{'type': 'text/plain', 'id': 'name', 'value': 'hi there'}]}, 'schema': {'x-scope': ['https://demo.pygeoapi.io/master/api?f=json'], '$ref': 'https://raw.githubusercontent.com/opengeospatial/wps-rest-binding/master/core/openapi/schemas/execute.yaml'}}}, 'required': True, 'description': 'Mandatory execute request JSON'} is not valid under any of the given schemas

Failed validating 'oneOf' in schema['properties']['paths']['patternProperties']['^/']['properties']['post']['properties']['requestBody']:
    {'oneOf': [{'$ref': '#/definitions/requestBody'},
               {'$ref': '#/definitions/reference'}]}

On instance['paths']['/processes/hello-world/jobs']['post']['requestBody']:
    {'content': {'application/json': {'example': {'inputs': [{'id': 'name',
                                                              'type': 'text/plain',
                                                              'value': 'hi there'}]},
                                      'schema': {'$ref': 'https://raw.githubusercontent.com/opengeospatial/wps-rest-binding/master/core/openapi/schemas/execute.yaml',
                                                 'x-scope': ['https://demo.pygeoapi.io/master/api?f=json']}}},
     'description': 'Mandatory execute request JSON',
     'required': True}

Has to do with Processes. If I leave out /processes/hello-world/jobs, then validates ok:

  /processes/hello-world/jobs:
    get:
      description: Hello World process
.
.
      responses:
        200:
          description: successful operation
        400:
          description: Invalid id supplied
        404:
          description: not found
      summary: Process Hello World process execution
      tags:
      - hello-world

Some other, not all, WFS3 endpoints validate ok like:

>>> validate_spec_url('https://www.ldproxy.nrw.de/kataster/api/?f=json')
>>> validate_spec_url('http://beta.fmi.fi/data/3/wfs/sofp/api.json')

justb4 avatar Jun 04 '19 12:06 justb4

Ok nailed it down to this line:

            schema:
              $ref: https://raw.githubusercontent.com/opengeospatial/wps-rest-binding/master/core/openapi/schemas/execute.yaml

Here my OpenAPI knowledge lacks... Anyone from @pvgenuchten @tomkralidis ?

justb4 avatar Jun 04 '19 13:06 justb4

Not sure. The OpenAPI document works in https://editor.swagger.io fine

tomkralidis avatar Jun 04 '19 21:06 tomkralidis

Maybe the validator https://github.com/p1c2u/openapi-spec-validator is more strict?

At least it does not like the execute.yaml schema. Also to me it looks a bit "strange" (though may be lack of understanding):

  • the hello-world Process metadata is defined here
  • it specifies specific inputs/outputs definitions like name of type text/plain (should be string?)
  • the generated openapi.yaml only refers to the generic OGC WPS REST definition execute.yaml

I think i.s.o. execute.yaml the pygeoapi-generated OpenAPI-specific inputs/outputs for hello-world need to be defined from the PROCESS_METADATA similar how example is used. (and those defs need to be validated against the OGC WPS REST spec).

justb4 avatar Jun 09 '19 13:06 justb4

Maybe the validator https://github.com/p1c2u/openapi-spec-validator is more strict?

Is there an authoritative validator? For me, if it works in Swagger, it's fine (at this point). Swagger editor/UI is indeed interpreting the execute.yaml as expected.

it specifies specific inputs/outputs definitions like name of type text/plain (should be string?)

This is what we see currently in the 52 North implementation, and should also get clearer in a couple of weeks

it specifies specific inputs/outputs definitions like name of type text/plain (should be string?)

This is in the spirit of WPS 2.0 REST. This is sure to be distilled / clarified at the OGC API Hackathon

tomkralidis avatar Jun 09 '19 23:06 tomkralidis

Maybe the validator https://github.com/p1c2u/openapi-spec-validator is more strict?

Is there an authoritative validator? For me, if it works in Swagger, it's fine (at this point). Swagger editor/UI is indeed interpreting the execute.yaml as expected.

I expect OGC would be authoritative at some point (for OGC OpenAPI specs). IMHO https://github.com/p1c2u/openapi-spec-validator merely does a JSON-schema validation, similar to XML XSD validation e.g. with lxml which delegates even to different underlying parsers like libxml2 depending on the installation. So multiple validators may do. I tried others like: https://apidevtools.org/swagger-parser/online/ which gave similar errors on execute.yaml (unless I disabled following external $refs: image There' many others, few online: https://openapi.tools/

it specifies specific inputs/outputs definitions like name of type text/plain (should be string?)

This is what we see currently in the 52 North implementation, and should also get clearer in a couple of weeks

Yes I am aware that the OGC WPS REST spec is derived from the 52North one.

it specifies specific inputs/outputs definitions like name of type text/plain (should be string?)

This is in the spirit of WPS 2.0 REST. This is sure to be distilled / clarified at the OGC API Hackathon

Still I think we should somehow specify the requestBody compliant with execute.yaml, not refer to it. There e.g. outputs is required. And a user needs to know which inputs needs to be specified, not just an example. But again this whole domain is relatively new to me...

Also starts me thinking of a more modular approach to pygeoapi: a small kernel implementation and for each OGC API a module. Both in software and configuration. e.g. An implementation may only want to use Processes and not be bothered with Features (or the other way around).

justb4 avatar Jun 10 '19 11:06 justb4

Also starts me thinking of a more modular approach to pygeoapi: a small kernel implementation and for each OGC API a module. Both in software and configuration. e.g. An implementation may only want to use Processes and not be bothered with Features (or the other way around).

Agree. I think the user configuration should be enough to set off what gets turned on (or not)?

tomkralidis avatar Jun 10 '19 11:06 tomkralidis

Also starts me thinking of a more modular approach to pygeoapi: a small kernel implementation and for each OGC API a module. Both in software and configuration. e.g. An implementation may only want to use Processes and not be bothered with Features (or the other way around).

Agree. I think the user configuration should be enough to set off what gets turned on (or not)?

For now, yes, was thinking longer-term even in software distributions with only modules/formats needed, bit like MapServer and GDAL though in Python we can be more flexible (on-the-fly i.s.o. compiled-in, within Stetl and GHC we do something similar with Plugins), but we have currently much more basic issues to work on.

To get back to the requestBody schema and looking at execute.yaml: I think the pygeoapi-generated OpenAPI schema for the Hello-World Process should be, including the example, something like:

    post:
      description: Hello World process
      parameters: []
      requestBody:
        content:
          application/json:
            example:
              inputs:
              - id: name
                input:
                  dataType:
                    name: text/plain
                  value: hi there
            schema:
              type: object
              required:
                - outputs
              properties:
                inputs:
                  type: array
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        pattern: '^name$'
                      input:
                        type: object
                        properties:
                          value:
                            type: string
                          dataType:
                            type: object
                            required:
                              - name
                            properties:
                              name:
                                type: string
                                pattern: '^text/plain$'
                    minItems: 1
                    maxItems: 1
                outputs:
                  type: array
                  items:
                    type: object
                    properties:
.
.
etc

This validates ok. This schema should then additionally comply with execute.yaml.

So apart from validation tools etc, I think this is what pygeoapi should generate. Or am I completely missing something? I know WPS is very generic (in inputs/outputs), but looks like the pygeoapi Processes are specific in parameterization. How would a user otherwise know which inputs and outputs to specify?

justb4 avatar Jun 10 '19 12:06 justb4

@justb4 this should be fixed given #718. Can you test/validate?

tomkralidis avatar Jun 29 '21 12:06 tomkralidis

Thanks for this @tomkralidis ! Tried a couple of instances of pygeoapi (latest as now about 50 mins old from DockerHub) with the GeoHealthCheck Probe "OpenAPI Validator".

  • https://apitestbed.geonovum.nl/ghc/resource/1 for https://apitestbed.geonovum.nl/pygeoapi - now passes! (failed before)
  • https://apitestbed.geonovum.nl/ghc/resource/14 for https://demo.pygeoapi.io/cite - passes!
  • https://demo.geohealthcheck.org/resource/165 for https://demo.pygeoapi.io/master - still fails but with looks very different error message - see below
  • https://apitestbed.geonovum.nl/ghc/resource/15 for https://demo.pygeoapi.io/covid-19 - passes!

They all run the same Docker Image version but with very different configs. Will need more investigation, but a major step ahead! Only pygeoapi and ldproxy pass the GHC OAS3 API Validator (which is basically a JSON-schema checker).

Error - demo.pygeoapi.io/master

Quite verbose, maybe easier to read on https://demo.geohealthcheck.org/resource/165

"end_time": "2021-06-29T13:59:02Z",
  "message": "{'type': 'object', 'title': 'domainSet', 'description': 'The domainSet describes the *direct positions* of the coverage, i.e., the locations for which values are available.', 'oneOf': [{'required': ['type', 'generalGrid'], 'properties': {'type': {'enum': ['DomainSetType']}, 'generalGrid': {'title': 'General Grid', 'description': 'A general n-D grid is defined through a sequence of axes, each of which can be of a particular axis type.', 'type': 'object', 'required': ['type'], 'additionalProperties': False, 'properties': {'type': {'enum': ['GeneralGridCoverageType']}, 'id': {'type': 'string'}, 'srsName': {'type': 'string', 'format': 'uri'}, 'axisLabels': {'type': 'array', 'items': {'type': 'string'}}, 'axis': {'type': 'array', 'items': {'type': 'object', 'oneOf': [{'title': 'Index Axis', 'description': 'An Index Axis is an axis with only integer positions allowed.', 'required': ['type', 'axisLabel', 'lowerBound', 'upperBound'], 'additionalProperties': False, 'properties': {'type': {'enum': ['IndexAxisType']}, 'id': {'type': 'string'}, 'axisLabel': {'type': 'string'}, 'lowerBound': {'type': 'number'}, 'upperBound': {'type': 'number'}}}, {'title': 'Regular Axis', 'description': 'A Regular Axis is an axis where all direct coordinates are at a common distance from its immediate neighbors.', 'required': ['type', 'axisLabel', 'lowerBound', 'upperBound', 'resolution', 'uomLabel'], 'additionalProperties': False, 'properties': {'type': {'enum': ['RegularAxisType']}, 'id': {'type': 'string'}, 'axisLabel': {'type': 'string'}, 'lowerBound': {'type': 'string'}, 'upperBound': {'type': 'string'}, 'uomLabel': {'type': 'string'}, 'resolution': {'type': 'number'}}}, {'title': 'Irregular Axis', 'description': 'An irregular axis enumerates all possible direct position coordinates.', 'required': ['type', 'axisLabel', 'uomLabel', 'coordinate'], 'additionalProperties': False, 'properties': {'type': {'enum': ['IrregularAxisType']}, 'id': {'type': 'string'}, 'axisLabel': {'type': 'string'}, 'uomLabel': {'type': 'string'}, 'coordinate': {'type': 'array', 'items': {'type': 'string'}}}}]}}, 'displacement': {'title': 'Displacement', 'description': 'A Displacement is a warped axis nest where points on the grid all have their individual direct position coordinates. The sequenceRule element describes linearization order.', 'type': 'object', 'oneOf': [{'required': ['type', 'axisLabels', 'uomLabels', 'coordinates'], 'properties': {'type': {'enum': ['DisplacementAxisNestType']}, 'id': {'type': 'string'}, 'axisLabel': {'type': 'string'}, 'srsName': {'type': 'string', 'format': 'uri'}, 'axisLabels': {'type': 'array', 'items': {'type': 'string'}}, 'uomLabels': {'type': 'array', 'items': {'type': 'string'}}, 'coordinates': {'type': 'array', 'items': {'type': 'array', 'items': {'type': 'string'}}}}}, {'required': ['type', 'axisLabels', 'uomLabels', 'coordinatesRef'], 'properties': {'type': {'enum': ['DisplacementAxisNestTypeRef']}, 'id': {'type': 'string'}, 'axisLabel': {'type': 'string'}, 'srsName': {'type': 'string', 'format': 'uri'}, 'axisLabels': {'type': 'array', 'items': {'type': 'string'}}, 'uomLabels': {'type': 'array', 'items': {'type': 'string'}}, 'coordinatesRef': {'type': 'string', 'format': 'uri'}}}]}, 'model': {'title': 'Sensor model', 'description': 'A Transformation By Sensor Model is a transformation definition which is given by a SensorML 2.0 transformation specification.', 'type': 'object', 'required': ['type', 'sensorModelRef'], 'properties': {'type': {'enum': ['TransformationBySensorModelType']}, 'id': {'type': 'string'}, 'axisLabels': {'type': 'array', 'items': {'type': 'string'}}, 'uomLabels': {'type': 'array', 'items': {'type': 'string'}}, 'sensorModelRef': {'type': 'string', 'format': 'uri'}, 'sensorInstanceRef': {'type': 'string', 'format': 'uri'}}}, 'gridLimits': {'title': 'Grid limits', 'description': 'This is the boundary of the array underlying the grid, given by its diagonal corner points in integer _60_3D. The grid limits can be omitted in case all axes are of type index axis, because then it repeats the grid information in a redundant way. The purpose of the axisLabels attribute, which lists the axis labels of all axisExtent elements in proper sequence, is to enforce axis sequence also in XML systems which do not preserve document order.', 'type': 'object', 'required': ['type'], 'properties': {'indexAxis': {'title': 'Index Axis', 'description': 'An Index Axis is an axis with only integer positions allowed.', 'type': 'object', 'required': ['type', 'lowerBound', 'upperBound'], 'additionalProperties': False, 'properties': {'type': {'enum': ['IndexAxisType']}, 'id': {'type': 'string'}, 'axisLabel': {'type': 'string'}, 'lowerBound': {'type': 'number'}, 'upperBound': {'type': 'number'}}}, 'srsName': {'type': 'string', 'format': 'uri'}, 'axisLabels': {'type': 'array', 'items': {'type': 'string'}}}}}}}}, {'required': ['type', 'directMultiPoint'], 'properties': {'type': {'enum': ['DomainSetType']}, 'directMultiPoint': {'oneOf': [{'required': ['type', 'coordinates'], 'properties': {'type': {'enum': ['DirectMultiPointType']}, 'coordinates': {'type': 'array', 'items': {'type': 'array', 'items': {'type': 'string'}}}}}, {'required': ['type', 'coordinatesRef'], 'properties': {'type': {'enum': ['DirectMultiPointTypeRef']}, 'coordinatesRef': {'type': 'string', 'format': 'uri'}}}]}}}, {'required': ['type', 'fileReference'], 'properties': {'type': {'enum': ['DomainSetRefType']}, 'id': {'type': 'string', 'format': 'uri'}, 'fileReference': {'type': 'string', 'format': 'uri'}}}]} is not valid under any of the given schemas\n\nFailed validating 'oneOf' in schema['properties']['paths']['patternProperties']['^/']['properties']['get']['properties']['responses']['patternProperties']['^([0-9X]{3})$']:\n    {'oneOf': [{'$ref': '#/definitions/response'},\n               {'$ref': '#/definitions/reference'}]}\n\nOn instance['paths']['/collections/gdps-temperature/coverage/domainset']['get']['responses']['200']:\n    {'description': 'The domainSet describes the *direct positions* of the '\n                    'coverage, i.e., the locations for which values are '\n                    'available.',\n     'oneOf': [{'properties': {'generalGrid': {'additionalProperties': False,\n                                               'description': 'A general '\n                                                              'n-D grid is '\n                                                              'defined '\n                                                              'through a '\n                                                              'sequence of '\n                                                              'axes, each '\n                                                              'of which '\n                                                              'can be of a '\n                                                              'particular '\n                                                              'axis type.',\n                                               'properties': {'axis': {'items': {'oneOf': [{'additionalProperties': False,\n                                                                                            'description': 'An '\n                                                                                                           'Index '\n                                                                                                           'Axis '\n                                                                                                           'is '\n                                                                                                           'an '\n                                                                                                           'axis '\n                                                                                                           'with '\n                                                                                                           'only '\n                                                                                                           'integer '\n                                                                                                           'positions '\n                                                                                                           'allowed.',\n                                                                                            'properties': {'axisLabel': {'type': 'string'},\n                                                                                                           'id': {'type': 'string'},\n                                                                                                           'lowerBound': {'type': 'number'},\n                                                                                                           'type': {'enum': ['IndexAxisType']},\n                                                                                                           'upperBound': {'type': 'number'}},\n                                                                                            'required': ['type',\n                                                                                                         'axisLabel',\n                                                                                                         'lowerBound',\n                                                                                                         'upperBound'],\n                                                                                            'title': 'Index '\n                                                                                                     'Axis'},\n                                                                                           {'additionalProperties': False,\n                                                                                            'description': 'A '\n                                                                                                           'Regular '\n                                                                                                           'Axis '\n                                                                                                           'is '\n                                                                                                           'an '\n                                                                                                           'axis '\n                                                                                                           'where '\n                                                                                                           'all '\n                                                                                                           'direct '\n                                                                                                           'coordinates '\n                                                                                                           'are '\n                                                                                                           'at '\n                                                                                                           'a '\n                                                                                                           'common '\n                                                                                                           'distance '\n                                                                                                           'from '\n                                                                                                           'its '\n                                                                                                           'immediate '\n                                                                                                           'neighbors.',\n                                                                                            'properties': {'axisLabel': {'type': 'string'},\n                                                                                                           'id': {'type': 'string'},\n                                                                                                           'lowerBound': {'type': 'string'},\n                                                                                                           'resolution': {'type': 'number'},\n                                                                                                           'type': {'enum': ['RegularAxisType']},\n                                                                                                           'uomLabel': {'type': 'string'},\n                                                                                                           'upperBound': {'type': 'string'}},\n                                                                                            'required': ['type',\n                                                                                                         'axisLabel',\n                                                                                                         'lowerBound',\n                                                                                                         'upperBound',\n                                                                                                         'resolution',\n                                                                                                         'uomLabel'],\n                                                                                            'title': 'Regular '\n                                                                                                     'Axis'},\n                                                                                           {'additionalProperties': False,\n                                                                                            'description': 'An '\n                                                                                                           'irregular '\n                                                                                                           'axis '\n                                                                                                           'enumerates '\n                                                                                                           'all '\n                                                                                                           'possible '\n                                                                                                           'direct '\n                                                                                                           'position '\n                                                                                                           'coordinates.',\n                                                                                            'properties': {'axisLabel': {'type': 'string'},\n                                                                                                           'coordinate': {'items': {'type': 'string'},\n                                                                                                                          'type': 'array'},\n                                                                                                           'id': {'type': 'string'},\n                                                                                                           'type': {'enum': ['IrregularAxisType']},\n                                                                                                           'uomLabel': {'type': 'string'}},\n                                                                                            'required': ['type',\n                                                                                                         'axisLabel',\n                                                                                                         'uomLabel',\n                                                                                                         'coordinate'],\n                                                                                            'title': 'Irregular '\n                                                                                                     'Axis'}],\n                                                                                 'type': 'object'},\n                                                                       'type': 'array'},\n                                                              'axisLabels': {'items': {'type': 'string'},\n                                                                             'type': 'array'},\n                                                              'displacement': {'description': 'A '\n                                                                                              'Displacement '\n                                                                                              'is '\n                                                                                              'a '\n                                                                                              'warped '\n                                                                                              'axis '\n                                                                                              'nest '\n                                                                                              'where '\n                                                                                              'points '\n                                                                                              'on '\n                                                                                              'the '\n                                                                                              'grid '\n                                                                                              'all '\n                                                                                              'have '\n                                                                                              'their '\n                                                                                              'individual '\n                                                                                              'direct '\n                                                                                              'position '\n                                                                                              'coordinates. '\n                                                                                              'The '\n                                                                                              'sequenceRule '\n                                                                                              'element '\n                                                                                              'describes '\n                                                                                              'linearization '\n                                                                                              'order.',\n                                                                               'oneOf': [{'properties': {'axisLabel': {'type': 'string'},\n                                                                                                         'axisLabels': {'items': {'type': 'string'},\n                                                                                                                        'type': 'array'},\n                                                                                                         'coordinates': {'items': {'items': {'type': 'string'},\n                                                                                                                                   'type': 'array'},\n                                                                                                                         'type': 'array'},\n                                                                                                         'id': {'type': 'string'},\n                                                                                                         'srsName': {'format': 'uri',\n                                                                                                                     'type': 'string'},\n                                                                                                         'type': {'enum': ['DisplacementAxisNestType']},\n                                                                                                         'uomLabels': {'items': {'type': 'string'},\n                                                                                                                       'type': 'array'}},\n                                                                                          'required': ['type',\n                                                                                                       'axisLabels',\n                                                                                                       'uomLabels',\n                                                                                                       'coordinates']},\n                                                                                         {'properties': {'axisLabel': {'type': 'string'},\n                                                                                                         'axisLabels': {'items': {'type': 'string'},\n                                                                                                                        'type': 'array'},\n                                                                                                         'coordinatesRef': {'format': 'uri',\n                                                                                                                            'type': 'string'},\n                                                                                                         'id': {'type': 'string'},\n                                                                                                         'srsName': {'format': 'uri',\n                                                                                                                     'type': 'string'},\n                                                                                                         'type': {'enum': ['DisplacementAxisNestTypeRef']},\n                                                                                                         'uomLabels': {'items': {'type': 'string'},\n                                                                                                                       'type': 'array'}},\n                                                                                          'required': ['type',\n                                                                                                       'axisLabels',\n                                                                                                       'uomLabels',\n                                                                                                       'coordinatesRef']}],\n                                                                               'title': 'Displacement',\n                                                                               'type': 'object'},\n                                                              'gridLimits': {'description': 'This '\n                                                                                            'is '\n                                                                                            'the '\n                                                                                            'boundary '\n                                                                                            'of '\n                                                                                            'the '\n                                                                                            'array '\n                                                                                            'underlying '\n                                                                                            'the '\n                                                                                            'grid, '\n                                                                                            'given '\n                                                                                            'by '\n                                                                                            'its '\n                                                                                            'diagonal '\n                                                                                            'corner '\n                                                                                            'points '\n                                                                                            'in '\n                                                                                            'integer '\n                                                                                            '_60_3D. '\n                                                                                            'The '\n                                                                                            'grid '\n                                                                                            'limits '\n                                                                                            'can '\n                                                                                            'be '\n                                                                                            'omitted '\n                                                                                            'in '\n                                                                                            'case '\n                                                                                            'all '\n                                                                                            'axes '\n                                                                                            'are '\n                                                                                            'of '\n                                                                                            'type '\n                                                                                            'index '\n                                                                                            'axis, '\n                                                                                            'because '\n                                                                                            'then '\n                                                                                            'it '\n                                                                                            'repeats '\n                                                                                            'the '\n                                                                                            'grid '\n                                                                                            'information '\n                                                                                            'in '\n                                                                                            'a '\n                                                                                            'redundant '\n                                                                                            'way. '\n                                                                                            'The '\n                                                                                            'purpose '\n                                                                                            'of '\n                                                                                            'the '\n                                                                                            'axisLabels '\n                                                                                            'attribute, '\n                                                                                            'which '\n                                                                                            'lists '\n                                                                                            'the '\n                                                                                            'axis '\n                                                                                            'labels '\n                                                                                            'of '\n                                                                                            'all '\n                                                                                            'axisExtent '\n                                                                                            'elements '\n                                                                                            'in '\n                                                                                            'proper '\n                                                                                            'sequence, '\n                                                                                            'is '\n                                                                                            'to '\n                                                                                            'enforce '\n                                                                                            'axis '\n                                                                                            'sequence '\n                                                                                            'also '\n                                                                                            'in '\n                                                                                            'XML '\n                                                                                            'systems '\n                                                                                            'which '\n                                                                                            'do '\n                                                                                            'not '\n                                                                                            'preserve '\n                                                                                            'document '\n                                                                                            'order.',\n                                                                             'properties': {'axisLabels': {'items': {'type': 'string'},\n                                                                                                           'type': 'array'},\n                                                                                            'indexAxis': {'additionalProperties': False,\n                                                                                                          'description': 'An '\n                                                                                                                         'Index '\n                                                                                                                         'Axis '\n                                                                                                                         'is '\n                                                                                                                         'an '\n                                                                                                                         'axis '\n                                                                                                                         'with '\n                                                                                                                         'only '\n                                                                                                                         'integer '\n                                                                                                                         'positions '\n                                                                                                                         'allowed.',\n                                                                                                          'properties': {'axisLabel': {'type': 'string'},\n                                                                                                                         'id': {'type': 'string'},\n                                                                                                                         'lowerBound': {'type': 'number'},\n                                                                                                                         'type': {'enum': ['IndexAxisType']},\n                                                                                                                         'upperBound': {'type': 'number'}},\n                                                                                                          'required': ['type',\n                                                                                                                       'lowerBound',\n                                                                                                                       'upperBound'],\n                                                                                                          'title': 'Index '\n                                                                                                                   'Axis',\n                                                                                                          'type': 'object'},\n                                                                                            'srsName': {'format': 'uri',\n                                                                                                        'type': 'string'}},\n                                                                             'required': ['type'],\n                                                                             'title': 'Grid '\n                                                                                      'limits',\n                                                                             'type': 'object'},\n                                                              'id': {'type': 'string'},\n                                                              'model': {'description': 'A '\n                                                                                       'Transformation '\n                                                                                       'By '\n                                                                                       'Sensor '\n                                                                                       'Model '\n                                                                                       'is '\n                                                                                       'a '\n                                                                                       'transformation '\n                                                                                       'definition '\n                                                                                       'which '\n                                                                                       'is '\n                                                                                       'given '\n                                                                                       'by '\n                                                                                       'a '\n                                                                                       'SensorML '\n                                                                                       '2.0 '\n                                                                                       'transformation '\n                                                                                       'specification.',\n                                                                        'properties': {'axisLabels': {'items': {'type': 'string'},\n                                                                                                      'type': 'array'},\n                                                                                       'id': {'type': 'string'},\n                                                                                       'sensorInstanceRef': {'format': 'uri',\n                                                                                                             'type': 'string'},\n                                                                                       'sensorModelRef': {'format': 'uri',\n                                                                                                          'type': 'string'},\n                                                                                       'type': {'enum': ['TransformationBySensorModelType']},\n                                                                                       'uomLabels': {'items': {'type': 'string'},\n                                                                                                     'type': 'array'}},\n                                                                        'required': ['type',\n                                                                                     'sensorModelRef'],\n                                                                        'title': 'Sensor '\n                                                                                 'model',\n                                                                        'type': 'object'},\n                                                              'srsName': {'format': 'uri',\n                                                                          'type': 'string'},\n                                                              'type': {'enum': ['GeneralGridCoverageType']}},\n                                               'required': ['type'],\n                                               'title': 'General Grid',\n                                               'type': 'object'},\n                               'type': {'enum': ['DomainSetType']}},\n                'required': ['type', 'generalGrid']},\n               {'properties': {'directMultiPoint': {'oneOf': [{'properties': {'coordinates': {'items': {'items': {'type': 'string'},\n                                                                                                        'type': 'array'},\n                                                                                              'type': 'array'},\n                                                                              'type': {'enum': ['DirectMultiPointType']}},\n                                                               'required': ['type',\n                                                                            'coordinates']},\n                                                              {'properties': {'coordinatesRef': {'format': 'uri',\n                                                                                                 'type': 'string'},\n                                                                              'type': {'enum': ['DirectMultiPointTypeRef']}},\n                                                               'required': ['type',\n                                                                            'coordinatesRef']}]},\n                               'type': {'enum': ['DomainSetType']}},\n                'required': ['type', 'directMultiPoint']},\n               {'properties': {'fileReference': {'format': 'uri',\n                                                 'type': 'string'},\n                               'id': {'format': 'uri', 'type': 'string'},\n                               'type': {'enum': ['DomainSetRefType']}},\n                'required': ['type', 'fileReference']}],\n     'title': 'domainSet',\n     'type': 'object'}",
  "probes": [
    {
      "checks": [
        {
          "message": "OpenAPI Sanity Check",
          "response_time": "0.851342",
          "success": true
        },
        {
          "message": "{'type': 'object', 'title': 'domainSet', 'description': 'The domainSet describes the *direct positions* of the coverage, i.e., the locations for which values are available.', 'oneOf': [{'required': ['type', 'generalGrid'], 'properties': {'type': {'enum': ['DomainSetType']}, 'generalGrid': {'title': 'General Grid', 'description': 'A general n-D grid is defined through a sequence of axes, each of which can be of a particular axis type.', 'type': 'object', 'required': ['type'], 'additionalProperties': False, 'properties': {'type': {'enum': ['GeneralGridCoverageType']}, 'id': {'type': 'string'}, 'srsName': {'type': 'string', 'format': 'uri'}, 'axisLabels': {'type': 'array', 'items': {'type': 'string'}}, 'axis': {'type': 'array', 'items': {'type': 'object', 'oneOf': [{'title': 'Index Axis', 'description': 'An Index Axis is an axis with only integer positions allowed.', 'required': ['type', 'axisLabel', 'lowerBound', 'upperBound'], 'additionalProperties': False, 'properties': {'type': {'enum': ['IndexAxisType']}, 'id': {'type': 'string'}, 'axisLabel': {'type': 'string'}, 'lowerBound': {'type': 'number'}, 'upperBound': {'type': 'number'}}}, {'title': 'Regular Axis', 'description': 'A Regular Axis is an axis where all direct coordinates are at a common distance from its immediate neighbors.', 'required': ['type', 'axisLabel', 'lowerBound', 'upperBound', 'resolution', 'uomLabel'], 'additionalProperties': False, 'properties': {'type': {'enum': ['RegularAxisType']}, 'id': {'type': 'string'}, 'axisLabel': {'type': 'string'}, 'lowerBound': {'type': 'string'}, 'upperBound': {'type': 'string'}, 'uomLabel': {'type': 'string'}, 'resolution': {'type': 'number'}}}, {'title': 'Irregular Axis', 'description': 'An irregular axis enumerates all possible direct position coordinates.', 'required': ['type', 'axisLabel', 'uomLabel', 'coordinate'], 'additionalProperties': False, 'properties': {'type': {'enum': ['IrregularAxisType']}, 'id': {'type': 'string'}, 'axisLabel': {'type': 'string'}, 'uomLabel': {'type': 'string'}, 'coordinate': {'type': 'array', 'items': {'type': 'string'}}}}]}}, 'displacement': {'title': 'Displacement', 'description': 'A Displacement is a warped axis nest where points on the grid all have their individual direct position coordinates. The sequenceRule element describes linearization order.', 'type': 'object', 'oneOf': [{'required': ['type', 'axisLabels', 'uomLabels', 'coordinates'], 'properties': {'type': {'enum': ['DisplacementAxisNestType']}, 'id': {'type': 'string'}, 'axisLabel': {'type': 'string'}, 'srsName': {'type': 'string', 'format': 'uri'}, 'axisLabels': {'type': 'array', 'items': {'type': 'string'}}, 'uomLabels': {'type': 'array', 'items': {'type': 'string'}}, 'coordinates': {'type': 'array', 'items': {'type': 'array', 'items': {'type': 'string'}}}}}, {'required': ['type', 'axisLabels', 'uomLabels', 'coordinatesRef'], 'properties': {'type': {'enum': ['DisplacementAxisNestTypeRef']}, 'id': {'type': 'string'}, 'axisLabel': {'type': 'string'}, 'srsName': {'type': 'string', 'format': 'uri'}, 'axisLabels': {'type': 'array', 'items': {'type': 'string'}}, 'uomLabels': {'type': 'array', 'items': {'type': 'string'}}, 'coordinatesRef': {'type': 'string', 'format': 'uri'}}}]}, 'model': {'title': 'Sensor model', 'description': 'A Transformation By Sensor Model is a transformation definition which is given by a SensorML 2.0 transformation specification.', 'type': 'object', 'required': ['type', 'sensorModelRef'], 'properties': {'type': {'enum': ['TransformationBySensorModelType']}, 'id': {'type': 'string'}, 'axisLabels': {'type': 'array', 'items': {'type': 'string'}}, 'uomLabels': {'type': 'array', 'items': {'type': 'string'}}, 'sensorModelRef': {'type': 'string', 'format': 'uri'}, 'sensorInstanceRef': {'type': 'string', 'format': 'uri'}}}, 'gridLimits': {'title': 'Grid limits', 'description': 'This is the boundary of the array underlying the grid, given by its diagonal corner points in integer _60_3D. The grid limits can be omitted in case all axes are of type index axis, because then it repeats the grid information in a redundant way. The purpose of the axisLabels attribute, which lists the axis labels of all axisExtent elements in proper sequence, is to enforce axis sequence also in XML systems which do not preserve document order.', 'type': 'object', 'required': ['type'], 'properties': {'indexAxis': {'title': 'Index Axis', 'description': 'An Index Axis is an axis with only integer positions allowed.', 'type': 'object', 'required': ['type', 'lowerBound', 'upperBound'], 'additionalProperties': False, 'properties': {'type': {'enum': ['IndexAxisType']}, 'id': {'type': 'string'}, 'axisLabel': {'type': 'string'}, 'lowerBound': {'type': 'number'}, 'upperBound': {'type': 'number'}}}, 'srsName': {'type': 'string', 'format': 'uri'}, 'axisLabels': {'type': 'array', 'items': {'type': 'string'}}}}}}}}, {'required': ['type', 'directMultiPoint'], 'properties': {'type': {'enum': ['DomainSetType']}, 'directMultiPoint': {'oneOf': [{'required': ['type', 'coordinates'], 'properties': {'type': {'enum': ['DirectMultiPointType']}, 'coordinates': {'type': 'array', 'items': {'type': 'array', 'items': {'type': 'string'}}}}}, {'required': ['type', 'coordinatesRef'], 'properties': {'type': {'enum': ['DirectMultiPointTypeRef']}, 'coordinatesRef': {'type': 'string', 'format': 'uri'}}}]}}}, {'required': ['type', 'fileReference'], 'properties': {'type': {'enum': ['DomainSetRefType']}, 'id': {'type': 'string', 'format': 'uri'}, 'fileReference': {'type': 'string', 'format': 'uri'}}}]} is not valid under any of the given schemas\n\nFailed validating 'oneOf' in schema['properties']['paths']['patternProperties']['^/']['properties']['get']['properties']['responses']['patternProperties']['^([0-9X]{3})$']:\n    {'oneOf': [{'$ref': '#/definitions/response'},\n               {'$ref': '#/definitions/reference'}]}\n\nOn instance['paths']['/collections/gdps-temperature/coverage/domainset']['get']['responses']['200']:\n    {'description': 'The domainSet describes the *direct positions* of the '\n                    'coverage, i.e., the locations for which values are '\n                    'available.',\n     'oneOf': [{'properties': {'generalGrid': {'additionalProperties': False,\n                                               'description': 'A general '\n                                                              'n-D grid is '\n                                                              'defined '\n                                                              'through a '\n                                                              'sequence of '\n                                                              'axes, each '\n                                                              'of which '\n                                                              'can be of a '\n                                                              'particular '\n                                                              'axis type.',\n                                               'properties': {'axis': {'items': {'oneOf': [{'additionalProperties': False,\n                                                                                            'description': 'An '\n                                                                                                           'Index '\n                                                                                                           'Axis '\n                                                                                                           'is '\n                                                                                                           'an '\n                                                                                                           'axis '\n                                                                                                           'with '\n                                                                                                           'only '\n                                                                                                           'integer '\n                                                                                                           'positions '\n                                                                                                           'allowed.',\n                                                                                            'properties': {'axisLabel': {'type': 'string'},\n                                                                                                           'id': {'type': 'string'},\n                                                                                                           'lowerBound': {'type': 'number'},\n                                                                                                           'type': {'enum': ['IndexAxisType']},\n                                                                                                           'upperBound': {'type': 'number'}},\n                                                                                            'required': ['type',\n                                                                                                         'axisLabel',\n                                                                                                         'lowerBound',\n                                                                                                         'upperBound'],\n                                                                                            'title': 'Index '\n                                                                                                     'Axis'},\n                                                                                           {'additionalProperties': False,\n                                                                                            'description': 'A '\n                                                                                                           'Regular '\n                                                                                                           'Axis '\n                                                                                                           'is '\n                                                                                                           'an '\n                                                                                                           'axis '\n                                                                                                           'where '\n                                                                                                           'all '\n                                                                                                           'direct '\n                                                                                                           'coordinates '\n                                                                                                           'are '\n                                                                                                           'at '\n                                                                                                           'a '\n                                                                                                           'common '\n                                                                                                           'distance '\n                                                                                                           'from '\n                                                                                                           'its '\n                                                                                                           'immediate '\n                                                                                                           'neighbors.',\n                                                                                            'properties': {'axisLabel': {'type': 'string'},\n                                                                                                           'id': {'type': 'string'},\n                                                                                                           'lowerBound': {'type': 'string'},\n                                                                                                           'resolution': {'type': 'number'},\n                                                                                                           'type': {'enum': ['RegularAxisType']},\n                                                                                                           'uomLabel': {'type': 'string'},\n                                                                                                           'upperBound': {'type': 'string'}},\n                                                                                            'required': ['type',\n                                                                                                         'axisLabel',\n                                                                                                         'lowerBound',\n                                                                                                         'upperBound',\n                                                                                                         'resolution',\n                                                                                                         'uomLabel'],\n                                                                                            'title': 'Regular '\n                                                                                                     'Axis'},\n                                                                                           {'additionalProperties': False,\n                                                                                            'description': 'An '\n                                                                                                           'irregular '\n                                                                                                           'axis '\n                                                                                                           'enumerates '\n                                                                                                           'all '\n                                                                                                           'possible '\n                                                                                                           'direct '\n                                                                                                           'position '\n                                                                                                           'coordinates.',\n                                                                                            'properties': {'axisLabel': {'type': 'string'},\n                                                                                                           'coordinate': {'items': {'type': 'string'},\n                                                                                                                          'type': 'array'},\n                                                                                                           'id': {'type': 'string'},\n                                                                                                           'type': {'enum': ['IrregularAxisType']},\n                                                                                                           'uomLabel': {'type': 'string'}},\n                                                                                            'required': ['type',\n                                                                                                         'axisLabel',\n                                                                                                         'uomLabel',\n                                                                                                         'coordinate'],\n                                                                                            'title': 'Irregular '\n                                                                                                     'Axis'}],\n                                                                                 'type': 'object'},\n                                                                       'type': 'array'},\n                                                              'axisLabels': {'items': {'type': 'string'},\n                                                                             'type': 'array'},\n                                                              'displacement': {'description': 'A '\n                                                                                              'Displacement '\n                                                                                              'is '\n                                                                                              'a '\n                                                                                              'warped '\n                                                                                              'axis '\n                                                                                              'nest '\n                                                                                              'where '\n                                                                                              'points '\n                                                                                              'on '\n                                                                                              'the '\n                                                                                              'grid '\n                                                                                              'all '\n                                                                                              'have '\n                                                                                              'their '\n                                                                                              'individual '\n                                                                                              'direct '\n                                                                                              'position '\n                                                                                              'coordinates. '\n                                                                                              'The '\n                                                                                              'sequenceRule '\n                                                                                              'element '\n                                                                                              'describes '\n                                                                                              'linearization '\n                                                                                              'order.',\n                                                                               'oneOf': [{'properties': {'axisLabel': {'type': 'string'},\n                                                                                                         'axisLabels': {'items': {'type': 'string'},\n                                                                                                                        'type': 'array'},\n                                                                                                         'coordinates': {'items': {'items': {'type': 'string'},\n                                                                                                                                   'type': 'array'},\n                                                                                                                         'type': 'array'},\n                                                                                                         'id': {'type': 'string'},\n                                                                                                         'srsName': {'format': 'uri',\n                                                                                                                     'type': 'string'},\n                                                                                                         'type': {'enum': ['DisplacementAxisNestType']},\n                                                                                                         'uomLabels': {'items': {'type': 'string'},\n                                                                                                                       'type': 'array'}},\n                                                                                          'required': ['type',\n                                                                                                       'axisLabels',\n                                                                                                       'uomLabels',\n                                                                                                       'coordinates']},\n                                                                                         {'properties': {'axisLabel': {'type': 'string'},\n                                                                                                         'axisLabels': {'items': {'type': 'string'},\n                                                                                                                        'type': 'array'},\n                                                                                                         'coordinatesRef': {'format': 'uri',\n                                                                                                                            'type': 'string'},\n                                                                                                         'id': {'type': 'string'},\n                                                                                                         'srsName': {'format': 'uri',\n                                                                                                                     'type': 'string'},\n                                                                                                         'type': {'enum': ['DisplacementAxisNestTypeRef']},\n                                                                                                         'uomLabels': {'items': {'type': 'string'},\n                                                                                                                       'type': 'array'}},\n                                                                                          'required': ['type',\n                                                                                                       'axisLabels',\n                                                                                                       'uomLabels',\n                                                                                                       'coordinatesRef']}],\n                                                                               'title': 'Displacement',\n                                                                               'type': 'object'},\n                                                              'gridLimits': {'description': 'This '\n                                                                                            'is '\n                                                                                            'the '\n                                                                                            'boundary '\n                                                                                            'of '\n                                                                                            'the '\n                                                                                            'array '\n                                                                                            'underlying '\n                                                                                            'the '\n                                                                                            'grid, '\n                                                                                            'given '\n                                                                                            'by '\n                                                                                            'its '\n                                                                                            'diagonal '\n                                                                                            'corner '\n                                                                                            'points '\n                                                                                            'in '\n                                                                                            'integer '\n                                                                                            '_60_3D. '\n                                                                                            'The '\n                                                                                            'grid '\n                                                                                            'limits '\n                                                                                            'can '\n                                                                                            'be '\n                                                                                            'omitted '\n                                                                                            'in '\n                                                                                            'case '\n                                                                                            'all '\n                                                                                            'axes '\n                                                                                            'are '\n                                                                                            'of '\n                                                                                            'type '\n                                                                                            'index '\n                                                                                            'axis, '\n                                                                                            'because '\n                                                                                            'then '\n                                                                                            'it '\n                                                                                            'repeats '\n                                                                                            'the '\n                                                                                            'grid '\n                                                                                            'information '\n                                                                                            'in '\n                                                                                            'a '\n                                                                                            'redundant '\n                                                                                            'way. '\n                                                                                            'The '\n                                                                                            'purpose '\n                                                                                            'of '\n                                                                                            'the '\n                                                                                            'axisLabels '\n                                                                                            'attribute, '\n                                                                                            'which '\n                                                                                            'lists '\n                                                                                            'the '\n                                                                                            'axis '\n                                                                                            'labels '\n                                                                                            'of '\n                                                                                            'all '\n                                                                                            'axisExtent '\n                                                                                            'elements '\n                                                                                            'in '\n                                                                                            'proper '\n                                                                                            'sequence, '\n                                                                                            'is '\n                                                                                            'to '\n                                                                                            'enforce '\n                                                                                            'axis '\n                                                                                            'sequence '\n                                                                                            'also '\n                                                                                            'in '\n                                                                                            'XML '\n                                                                                            'systems '\n                                                                                            'which '\n                                                                                            'do '\n                                                                                            'not '\n                                                                                            'preserve '\n                                                                                            'document '\n                                                                                            'order.',\n                                                                             'properties': {'axisLabels': {'items': {'type': 'string'},\n                                                                                                           'type': 'array'},\n                                                                                            'indexAxis': {'additionalProperties': False,\n                                                                                                          'description': 'An '\n                                                                                                                         'Index '\n                                                                                                                         'Axis '\n                                                                                                                         'is '\n                                                                                                                         'an '\n                                                                                                                         'axis '\n                                                                                                                         'with '\n                                                                                                                         'only '\n                                                                                                                         'integer '\n                                                                                                                         'positions '\n                                                                                                                         'allowed.',\n                                                                                                          'properties': {'axisLabel': {'type': 'string'},\n                                                                                                                         'id': {'type': 'string'},\n                                                                                                                         'lowerBound': {'type': 'number'},\n                                                                                                                         'type': {'enum': ['IndexAxisType']},\n                                                                                                                         'upperBound': {'type': 'number'}},\n                                                                                                          'required': ['type',\n                                                                                                                       'lowerBound',\n                                                                                                                       'upperBound'],\n                                                                                                          'title': 'Index '\n                                                                                                                   'Axis',\n                                                                                                          'type': 'object'},\n                                                                                            'srsName': {'format': 'uri',\n                                                                                                        'type': 'string'}},\n                                                                             'required': ['type'],\n                                                                             'title': 'Grid '\n                                                                                      'limits',\n                                                                             'type': 'object'},\n                                                              'id': {'type': 'string'},\n                                                              'model': {'description': 'A '\n                                                                                       'Transformation '\n                                                                                       'By '\n                                                                                       'Sensor '\n                                                                                       'Model '\n                                                                                       'is '\n                                                                                       'a '\n                                                                                       'transformation '\n                                                                                       'definition '\n                                                                                       'which '\n                                                                                       'is '\n                                                                                       'given '\n                                                                                       'by '\n                                                                                       'a '\n                                                                                       'SensorML '\n                                                                                       '2.0 '\n                                                                                       'transformation '\n                                                                                       'specification.',\n                                                                        'properties': {'axisLabels': {'items': {'type': 'string'},\n                                                                                                      'type': 'array'},\n                                                                                       'id': {'type': 'string'},\n                                                                                       'sensorInstanceRef': {'format': 'uri',\n                                                                                                             'type': 'string'},\n                                                                                       'sensorModelRef': {'format': 'uri',\n                                                                                                          'type': 'string'},\n                                                                                       'type': {'enum': ['TransformationBySensorModelType']},\n                                                                                       'uomLabels': {'items': {'type': 'string'},\n                                                                                                     'type': 'array'}},\n                                                                        'required': ['type',\n                                                                                     'sensorModelRef'],\n                                                                        'title': 'Sensor '\n                                                                                 'model',\n                                                                        'type': 'object'},\n                                                              'srsName': {'format': 'uri',\n                                                                          'type': 'string'},\n                                                              'type': {'enum': ['GeneralGridCoverageType']}},\n                                               'required': ['type'],\n                                               'title': 'General Grid',\n                                               'type': 'object'},\n                               'type': {'enum': ['DomainSetType']}},\n                'required': ['type', 'generalGrid']},\n               {'properties': {'directMultiPoint': {'oneOf': [{'properties': {'coordinates': {'items': {'items': {'type': 'string'},\n                                                                                                        'type': 'array'},\n                                                                                              'type': 'array'},\n                                                                              'type': {'enum': ['DirectMultiPointType']}},\n                                                               'required': ['type',\n                                                                            'coordinates']},\n                                                              {'properties': {'coordinatesRef': {'format': 'uri',\n                                                                                                 'type': 'string'},\n                                                                              'type': {'enum': ['DirectMultiPointTypeRef']}},\n                                                               'required': ['type',\n                                                                            'coordinatesRef']}]},\n                               'type': {'enum': ['DomainSetType']}},\n                'required': ['type', 'directMultiPoint']},\n               {'properties': {'fileReference': {'format': 'uri',\n                                                 'type': 'string'},\n                               'id': {'format': 'uri', 'type': 'string'},\n                               'type': {'enum': ['DomainSetRefType']}},\n                'required': ['type', 'fileReference']}],\n     'title': 'domainSet',\n     'type': 'object'}",
          "response_time": "1.167665",
          "success": false
        },
        {
          "message": "{'title': 'rangeType', 'description': \"The rangeType element describes the structure and semantics of a coverage's range values, including (optionally) restrictions on the interpolation allowed on such values.\", 'type': 'object', 'oneOf': [{'required': ['type', 'field'], 'properties': {'type': {'enum': ['DataRecordType']}, 'field': {'type': 'array', 'items': {'title': 'quantity', 'description': 'quantiy', 'type': 'object', 'required': ['type'], 'properties': {'type': {'enum': ['QuantityType']}, 'id': {'type': 'string', 'format': 'uri'}, 'name': {'type': 'string'}, 'definition': {'type': 'string', 'format': 'uri'}, 'uom': {'title': 'units of measure', 'description': 'units of measure', 'type': 'object', 'required': ['type', 'code'], 'properties': {'type': {'enum': ['UnitReference']}, 'id': {'type': 'string', 'format': 'uri'}, 'code': {'type': 'string'}}}, 'constraint': {'title': 'Constraint', 'description': 'Constraint', 'type': 'object', 'required': ['type'], 'properties': {'type': {'enum': ['AllowedValues']}, 'id': {'type': 'string', 'format': 'uri'}, 'interval': {'type': 'array', 'items': {'type': 'string'}}}}}}}, 'interpolationRestriction': {'title': 'interpolationRestriction', 'description': 'Interpolation restriction', 'type': 'object', 'required': ['type'], 'properties': {'type': {'enum': ['InterpolationRestrictionType']}, 'id': {'type': 'string', 'format': 'uri'}, 'allowedInterpolation': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}}}}}}, {'required': ['type', 'fileReference'], 'properties': {'type': {'enum': ['RangeTypeRefType']}, 'id': {'type': 'string', 'format': 'uri'}, 'fileReference': {'type': 'string', 'format': 'uri'}}}]} is not valid under any of the given schemas\n\nFailed validating 'oneOf' in schema['properties']['paths']['patternProperties']['^/']['properties']['get']['properties']['responses']['patternProperties']['^([0-9X]{3})$']:\n    {'oneOf': [{'$ref': '#/definitions/response'},\n               {'$ref': '#/definitions/reference'}]}\n\nOn instance['paths']['/collections/gdps-temperature/coverage/rangetype']['get']['responses']['200']:\n    {'description': 'The rangeType element describes the structure and '\n                    \"semantics of a coverage's range values, including \"\n                    '(optionally) restrictions on the interpolation '\n                    'allowed on such values.',\n     'oneOf': [{'properties': {'field': {'items': {'description': 'quantiy',\n                                                   'properties': {'constraint': {'description': 'Constraint',\n                                                                                 'properties': {'id': {'format': 'uri',\n                                                                                                       'type': 'string'},\n                                                                                                'interval': {'items': {'type': 'string'},\n                                                                                                             'type': 'array'},\n                                                                                                'type': {'enum': ['AllowedValues']}},\n                                                                                 'required': ['type'],\n                                                                                 'title': 'Constraint',\n                                                                                 'type': 'object'},\n                                                                  'definition': {'format': 'uri',\n                                                                                 'type': 'string'},\n                                                                  'id': {'format': 'uri',\n                                                                         'type': 'string'},\n                                                                  'name': {'type': 'string'},\n                                                                  'type': {'enum': ['QuantityType']},\n                                                                  'uom': {'description': 'units '\n                                                                                         'of '\n                                                                                         'measure',\n                                                                          'properties': {'code': {'type': 'string'},\n                                                                                         'id': {'format': 'uri',\n                                                                                                'type': 'string'},\n                                                                                         'type': {'enum': ['UnitReference']}},\n                                                                          'required': ['type',\n                                                                                       'code'],\n                                                                          'title': 'units '\n                                                                                   'of '\n                                                                                   'measure',\n                                                                          'type': 'object'}},\n                                                   'required': ['type'],\n                                                   'title': 'quantity',\n                                                   'type': 'object'},\n                                         'type': 'array'},\n                               'interpolationRestriction': {'description': 'Interpolation '\n                                                                           'restriction',\n                                                            'properties': {'allowedInterpolation': {'items': {'format': 'uri',\n                                                                                                              'type': 'string'},\n                                                                                                    'type': 'array'},\n                                                                           'id': {'format': 'uri',\n                                                                                  'type': 'string'},\n                                                                           'type': {'enum': ['InterpolationRestrictionType']}},\n                                                            'required': ['type'],\n                                                            'title': 'interpolationRestriction',\n                                                            'type': 'object'},\n                               'type': {'enum': ['DataRecordType']}},\n                'required': ['type', 'field']},\n               {'properties': {'fileReference': {'format': 'uri',\n                                                 'type': 'string'},\n                               'id': {'format': 'uri', 'type': 'string'},\n                               'type': {'enum': ['RangeTypeRefType']}},\n                'required': ['type', 'fileReference']}],\n     'title': 'rangeType',\n     'type': 'object'}",
          "response_time": "0.222368",
          "success": false
        },
        {
          "message": "OpenAPI Compliance Result:second must be in 0..59",
          "response_time": "0.877420",
          "success": false
        }
      ],
      "class": "GeoHealthCheck.plugins.probe.wfs3.WFS3OpenAPIValidator",
      "message": "{'type': 'object', 'title': 'domainSet', 'description': 'The domainSet describes the *direct positions* of the coverage, i.e., the locations for which values are available.', 'oneOf': [{'required': ['type', 'generalGrid'], 'properties': {'type': {'enum': ['DomainSetType']}, 'generalGrid': {'title': 'General Grid', 'description': 'A general n-D grid is defined through a sequence of axes, each of which can be of a particular axis type.', 'type': 'object', 'required': ['type'], 'additionalProperties': False, 'properties': {'type': {'enum': ['GeneralGridCoverageType']}, 'id': {'type': 'string'}, 'srsName': {'type': 'string', 'format': 'uri'}, 'axisLabels': {'type': 'array', 'items': {'type': 'string'}}, 'axis': {'type': 'array', 'items': {'type': 'object', 'oneOf': [{'title': 'Index Axis', 'description': 'An Index Axis is an axis with only integer positions allowed.', 'required': ['type', 'axisLabel', 'lowerBound', 'upperBound'], 'additionalProperties': False, 'properties': {'type': {'enum': ['IndexAxisType']}, 'id': {'type': 'string'}, 'axisLabel': {'type': 'string'}, 'lowerBound': {'type': 'number'}, 'upperBound': {'type': 'number'}}}, {'title': 'Regular Axis', 'description': 'A Regular Axis is an axis where all direct coordinates are at a common distance from its immediate neighbors.', 'required': ['type', 'axisLabel', 'lowerBound', 'upperBound', 'resolution', 'uomLabel'], 'additionalProperties': False, 'properties': {'type': {'enum': ['RegularAxisType']}, 'id': {'type': 'string'}, 'axisLabel': {'type': 'string'}, 'lowerBound': {'type': 'string'}, 'upperBound': {'type': 'string'}, 'uomLabel': {'type': 'string'}, 'resolution': {'type': 'number'}}}, {'title': 'Irregular Axis', 'description': 'An irregular axis enumerates all possible direct position coordinates.', 'required': ['type', 'axisLabel', 'uomLabel', 'coordinate'], 'additionalProperties': False, 'properties': {'type': {'enum': ['IrregularAxisType']}, 'id': {'type': 'string'}, 'axisLabel': {'type': 'string'}, 'uomLabel': {'type': 'string'}, 'coordinate': {'type': 'array', 'items': {'type': 'string'}}}}]}}, 'displacement': {'title': 'Displacement', 'description': 'A Displacement is a warped axis nest where points on the grid all have their individual direct position coordinates. The sequenceRule element describes linearization order.', 'type': 'object', 'oneOf': [{'required': ['type', 'axisLabels', 'uomLabels', 'coordinates'], 'properties': {'type': {'enum': ['DisplacementAxisNestType']}, 'id': {'type': 'string'}, 'axisLabel': {'type': 'string'}, 'srsName': {'type': 'string', 'format': 'uri'}, 'axisLabels': {'type': 'array', 'items': {'type': 'string'}}, 'uomLabels': {'type': 'array', 'items': {'type': 'string'}}, 'coordinates': {'type': 'array', 'items': {'type': 'array', 'items': {'type': 'string'}}}}}, {'required': ['type', 'axisLabels', 'uomLabels', 'coordinatesRef'], 'properties': {'type': {'enum': ['DisplacementAxisNestTypeRef']}, 'id': {'type': 'string'}, 'axisLabel': {'type': 'string'}, 'srsName': {'type': 'string', 'format': 'uri'}, 'axisLabels': {'type': 'array', 'items': {'type': 'string'}}, 'uomLabels': {'type': 'array', 'items': {'type': 'string'}}, 'coordinatesRef': {'type': 'string', 'format': 'uri'}}}]}, 'model': {'title': 'Sensor model', 'description': 'A Transformation By Sensor Model is a transformation definition which is given by a SensorML 2.0 transformation specification.', 'type': 'object', 'required': ['type', 'sensorModelRef'], 'properties': {'type': {'enum': ['TransformationBySensorModelType']}, 'id': {'type': 'string'}, 'axisLabels': {'type': 'array', 'items': {'type': 'string'}}, 'uomLabels': {'type': 'array', 'items': {'type': 'string'}}, 'sensorModelRef': {'type': 'string', 'format': 'uri'}, 'sensorInstanceRef': {'type': 'string', 'format': 'uri'}}}, 'gridLimits': {'title': 'Grid limits', 'description': 'This is the boundary of the array underlying the grid, given by its diagonal corner points in integer _60_3D. The grid limits can be omitted in case all axes are of type index axis, because then it repeats the grid information in a redundant way. The purpose of the axisLabels attribute, which lists the axis labels of all axisExtent elements in proper sequence, is to enforce axis sequence also in XML systems which do not preserve document order.', 'type': 'object', 'required': ['type'], 'properties': {'indexAxis': {'title': 'Index Axis', 'description': 'An Index Axis is an axis with only integer positions allowed.', 'type': 'object', 'required': ['type', 'lowerBound', 'upperBound'], 'additionalProperties': False, 'properties': {'type': {'enum': ['IndexAxisType']}, 'id': {'type': 'string'}, 'axisLabel': {'type': 'string'}, 'lowerBound': {'type': 'number'}, 'upperBound': {'type': 'number'}}}, 'srsName': {'type': 'string', 'format': 'uri'}, 'axisLabels': {'type': 'array', 'items': {'type': 'string'}}}}}}}}, {'required': ['type', 'directMultiPoint'], 'properties': {'type': {'enum': ['DomainSetType']}, 'directMultiPoint': {'oneOf': [{'required': ['type', 'coordinates'], 'properties': {'type': {'enum': ['DirectMultiPointType']}, 'coordinates': {'type': 'array', 'items': {'type': 'array', 'items': {'type': 'string'}}}}}, {'required': ['type', 'coordinatesRef'], 'properties': {'type': {'enum': ['DirectMultiPointTypeRef']}, 'coordinatesRef': {'type': 'string', 'format': 'uri'}}}]}}}, {'required': ['type', 'fileReference'], 'properties': {'type': {'enum': ['DomainSetRefType']}, 'id': {'type': 'string', 'format': 'uri'}, 'fileReference': {'type': 'string', 'format': 'uri'}}}]} is not valid under any of the given schemas\n\nFailed validating 'oneOf' in schema['properties']['paths']['patternProperties']['^/']['properties']['get']['properties']['responses']['patternProperties']['^([0-9X]{3})$']:\n    {'oneOf': [{'$ref': '#/definitions/response'},\n               {'$ref': '#/definitions/reference'}]}\n\nOn instance['paths']['/collections/gdps-temperature/coverage/domainset']['get']['responses']['200']:\n    {'description': 'The domainSet describes the *direct positions* of the '\n                    'coverage, i.e., the locations for which values are '\n                    'available.',\n     'oneOf': [{'properties': {'generalGrid': {'additionalProperties': False,\n                                               'description': 'A general '\n                                                              'n-D grid is '\n                                                              'defined '\n                                                              'through a '\n                                                              'sequence of '\n                                                              'axes, each '\n                                                              'of which '\n                                                              'can be of a '\n                                                              'particular '\n                                                              'axis type.',\n                                               'properties': {'axis': {'items': {'oneOf': [{'additionalProperties': False,\n                                                                                            'description': 'An '\n                                                                                                           'Index '\n                                                                                                           'Axis '\n                                                                                                           'is '\n                                                                                                           'an '\n                                                                                                           'axis '\n                                                                                                           'with '\n                                                                                                           'only '\n                                                                                                           'integer '\n                                                                                                           'positions '\n                                                                                                           'allowed.',\n                                                                                            'properties': {'axisLabel': {'type': 'string'},\n                                                                                                           'id': {'type': 'string'},\n                                                                                                           'lowerBound': {'type': 'number'},\n                                                                                                           'type': {'enum': ['IndexAxisType']},\n                                                                                                           'upperBound': {'type': 'number'}},\n                                                                                            'required': ['type',\n                                                                                                         'axisLabel',\n                                                                                                         'lowerBound',\n                                                                                                         'upperBound'],\n                                                                                            'title': 'Index '\n                                                                                                     'Axis'},\n                                                                                           {'additionalProperties': False,\n                                                                                            'description': 'A '\n                                                                                                           'Regular '\n                                                                                                           'Axis '\n                                                                                                           'is '\n                                                                                                           'an '\n                                                                                                           'axis '\n                                                                                                           'where '\n                                                                                                           'all '\n                                                                                                           'direct '\n                                                                                                           'coordinates '\n                                                                                                           'are '\n                                                                                                           'at '\n                                                                                                           'a '\n                                                                                                           'common '\n                                                                                                           'distance '\n                                                                                                           'from '\n                                                                                                           'its '\n                                                                                                           'immediate '\n                                                                                                           'neighbors.',\n                                                                                            'properties': {'axisLabel': {'type': 'string'},\n                                                                                                           'id': {'type': 'string'},\n                                                                                                           'lowerBound': {'type': 'string'},\n                                                                                                           'resolution': {'type': 'number'},\n                                                                                                           'type': {'enum': ['RegularAxisType']},\n                                                                                                           'uomLabel': {'type': 'string'},\n                                                                                                           'upperBound': {'type': 'string'}},\n                                                                                            'required': ['type',\n                                                                                                         'axisLabel',\n                                                                                                         'lowerBound',\n                                                                                                         'upperBound',\n                                                                                                         'resolution',\n                                                                                                         'uomLabel'],\n                                                                                            'title': 'Regular '\n                                                                                                     'Axis'},\n                                                                                           {'additionalProperties': False,\n                                                                                            'description': 'An '\n                                                                                                           'irregular '\n                                                                                                           'axis '\n                                                                                                           'enumerates '\n                                                                                                           'all '\n                                                                                                           'possible '\n                                                                                                           'direct '\n                                                                                                           'position '\n                                                                                                           'coordinates.',\n                                                                                            'properties': {'axisLabel': {'type': 'string'},\n                                                                                                           'coordinate': {'items': {'type': 'string'},\n                                                                                                                          'type': 'array'},\n                                                                                                           'id': {'type': 'string'},\n                                                                                                           'type': {'enum': ['IrregularAxisType']},\n                                                                                                           'uomLabel': {'type': 'string'}},\n                                                                                            'required': ['type',\n                                                                                                         'axisLabel',\n                                                                                                         'uomLabel',\n                                                                                                         'coordinate'],\n                                                                                            'title': 'Irregular '\n                                                                                                     'Axis'}],\n                                                                                 'type': 'object'},\n                                                                       'type': 'array'},\n                                                              'axisLabels': {'items': {'type': 'string'},\n                                                                             'type': 'array'},\n                                                              'displacement': {'description': 'A '\n                                                                                              'Displacement '\n                                                                                              'is '\n                                                                                              'a '\n                                                                                              'warped '\n                                                                                              'axis '\n                                                                                              'nest '\n                                                                                              'where '\n                                                                                              'points '\n                                                                                              'on '\n                                                                                              'the '\n                                                                                              'grid '\n                                                                                              'all '\n                                                                                              'have '\n                                                                                              'their '\n                                                                                              'individual '\n                                                                                              'direct '\n                                                                                              'position '\n                                                                                              'coordinates. '\n                                                                                              'The '\n                                                                                              'sequenceRule '\n                                                                                              'element '\n                                                                                              'describes '\n                                                                                              'linearization '\n                                                                                              'order.',\n                                                                               'oneOf': [{'properties': {'axisLabel': {'type': 'string'},\n                                                                                                         'axisLabels': {'items': {'type': 'string'},\n                                                                                                                        'type': 'array'},\n                                                                                                         'coordinates': {'items': {'items': {'type': 'string'},\n                                                                                                                                   'type': 'array'},\n                                                                                                                         'type': 'array'},\n                                                                                                         'id': {'type': 'string'},\n                                                                                                         'srsName': {'format': 'uri',\n                                                                                                                     'type': 'string'},\n                                                                                                         'type': {'enum': ['DisplacementAxisNestType']},\n                                                                                                         'uomLabels': {'items': {'type': 'string'},\n                                                                                                                       'type': 'array'}},\n                                                                                          'required': ['type',\n                                                                                                       'axisLabels',\n                                                                                                       'uomLabels',\n                                                                                                       'coordinates']},\n                                                                                         {'properties': {'axisLabel': {'type': 'string'},\n                                                                                                         'axisLabels': {'items': {'type': 'string'},\n                                                                                                                        'type': 'array'},\n                                                                                                         'coordinatesRef': {'format': 'uri',\n                                                                                                                            'type': 'string'},\n                                                                                                         'id': {'type': 'string'},\n                                                                                                         'srsName': {'format': 'uri',\n                                                                                                                     'type': 'string'},\n                                                                                                         'type': {'enum': ['DisplacementAxisNestTypeRef']},\n                                                                                                         'uomLabels': {'items': {'type': 'string'},\n                                                                                                                       'type': 'array'}},\n                                                                                          'required': ['type',\n                                                                                                       'axisLabels',\n                                                                                                       'uomLabels',\n                                                                                                       'coordinatesRef']}],\n                                                                               'title': 'Displacement',\n                                                                               'type': 'object'},\n                                                              'gridLimits': {'description': 'This '\n                                                                                            'is '\n                                                                                            'the '\n                                                                                            'boundary '\n                                                                                            'of '\n                                                                                            'the '\n                                                                                            'array '\n                                                                                            'underlying '\n                                                                                            'the '\n                                                                                            'grid, '\n                                                                                            'given '\n                                                                                            'by '\n                                                                                            'its '\n                                                                                            'diagonal '\n                                                                                            'corner '\n                                                                                            'points '\n                                                                                            'in '\n                                                                                            'integer '\n                                                                                            '_60_3D. '\n                                                                                            'The '\n                                                                                            'grid '\n                                                                                            'limits '\n                                                                                            'can '\n                                                                                            'be '\n                                                                                            'omitted '\n                                                                                            'in '\n                                                                                            'case '\n                                                                                            'all '\n                                                                                            'axes '\n                                                                                            'are '\n                                                                                            'of '\n                                                                                            'type '\n                                                                                            'index '\n                                                                                            'axis, '\n                                                                                            'because '\n                                                                                            'then '\n                                                                                            'it '\n                                                                                            'repeats '\n                                                                                            'the '\n                                                                                            'grid '\n                                                                                            'information '\n                                                                                            'in '\n                                                                                            'a '\n                                                                                            'redundant '\n                                                                                            'way. '\n                                                                                            'The '\n                                                                                            'purpose '\n                                                                                            'of '\n                                                                                            'the '\n                                                                                            'axisLabels '\n                                                                                            'attribute, '\n                                                                                            'which '\n                                                                                            'lists '\n                                                                                            'the '\n                                                                                            'axis '\n                                                                                            'labels '\n                                                                                            'of '\n                                                                                            'all '\n                                                                                            'axisExtent '\n                                                                                            'elements '\n                                                                                            'in '\n                                                                                            'proper '\n                                                                                            'sequence, '\n                                                                                            'is '\n                                                                                            'to '\n                                                                                            'enforce '\n                                                                                            'axis '\n                                                                                            'sequence '\n                                                                                            'also '\n                                                                                            'in '\n                                                                                            'XML '\n                                                                                            'systems '\n                                                                                            'which '\n                                                                                            'do '\n                                                                                            'not '\n                                                                                            'preserve '\n                                                                                            'document '\n                                                                                            'order.',\n                                                                             'properties': {'axisLabels': {'items': {'type': 'string'},\n                                                                                                           'type': 'array'},\n                                                                                            'indexAxis': {'additionalProperties': False,\n                                                                                                          'description': 'An '\n                                                                                                                         'Index '\n                                                                                                                         'Axis '\n                                                                                                                         'is '\n                                                                                                                         'an '\n                                                                                                                         'axis '\n                                                                                                                         'with '\n                                                                                                                         'only '\n                                                                                                                         'integer '\n                                                                                                                         'positions '\n                                                                                                                         'allowed.',\n                                                                                                          'properties': {'axisLabel': {'type': 'string'},\n                                                                                                                         'id': {'type': 'string'},\n                                                                                                                         'lowerBound': {'type': 'number'},\n                                                                                                                         'type': {'enum': ['IndexAxisType']},\n                                                                                                                         'upperBound': {'type': 'number'}},\n                                                                                                          'required': ['type',\n                                                                                                                       'lowerBound',\n                                                                                                                       'upperBound'],\n                                                                                                          'title': 'Index '\n                                                                                                                   'Axis',\n                                                                                                          'type': 'object'},\n                                                                                            'srsName': {'format': 'uri',\n                                                                                                        'type': 'string'}},\n                                                                             'required': ['type'],\n                                                                             'title': 'Grid '\n                                                                                      'limits',\n                                                                             'type': 'object'},\n                                                              'id': {'type': 'string'},\n                                                              'model': {'description': 'A '\n                                                                                       'Transformation '\n                                                                                       'By '\n                                                                                       'Sensor '\n                                                                                       'Model '\n                                                                                       'is '\n                                                                                       'a '\n                                                                                       'transformation '\n                                                                                       'definition '\n                                                                                       'which '\n                                                                                       'is '\n                                                                                       'given '\n                                                                                       'by '\n                                                                                       'a '\n                                                                                       'SensorML '\n                                                                                       '2.0 '\n                                                                                       'transformation '\n                                                                                       'specification.',\n                                                                        'properties': {'axisLabels': {'items': {'type': 'string'},\n                                                                                                      'type': 'array'},\n                                                                                       'id': {'type': 'string'},\n                                                                                       'sensorInstanceRef': {'format': 'uri',\n                                                                                                             'type': 'string'},\n                                                                                       'sensorModelRef': {'format': 'uri',\n                                                                                                          'type': 'string'},\n                                                                                       'type': {'enum': ['TransformationBySensorModelType']},\n                                                                                       'uomLabels': {'items': {'type': 'string'},\n                                                                                                     'type': 'array'}},\n                                                                        'required': ['type',\n                                                                                     'sensorModelRef'],\n                                                                        'title': 'Sensor '\n                                                                                 'model',\n                                                                        'type': 'object'},\n                                                              'srsName': {'format': 'uri',\n                                                                          'type': 'string'},\n                                                              'type': {'enum': ['GeneralGridCoverageType']}},\n                                               'required': ['type'],\n                                               'title': 'General Grid',\n                                               'type': 'object'},\n                               'type': {'enum': ['DomainSetType']}},\n                'required': ['type', 'generalGrid']},\n               {'properties': {'directMultiPoint': {'oneOf': [{'properties': {'coordinates': {'items': {'items': {'type': 'string'},\n                                                                                                        'type': 'array'},\n                                                                                              'type': 'array'},\n                                                                              'type': {'enum': ['DirectMultiPointType']}},\n                                                               'required': ['type',\n                                                                            'coordinates']},\n                                                              {'properties': {'coordinatesRef': {'format': 'uri',\n                                                                                                 'type': 'string'},\n                                                                              'type': {'enum': ['DirectMultiPointTypeRef']}},\n                                                               'required': ['type',\n                                                                            'coordinatesRef']}]},\n                               'type': {'enum': ['DomainSetType']}},\n                'required': ['type', 'directMultiPoint']},\n               {'properties': {'fileReference': {'format': 'uri',\n                                                 'type': 'string'},\n                               'id': {'format': 'uri', 'type': 'string'},\n                               'type': {'enum': ['DomainSetRefType']}},\n                'required': ['type', 'fileReference']}],\n     'title': 'domainSet',\n     'type': 'object'}",
      "name": "OGC API Features (OAFeat) OpenAPI Validator",
      "probe_id": 1574,
      "response_time": "3.118951",
      "success": false
    },

justb4 avatar Jun 29 '21 14:06 justb4

As per RFC4, this Issue has been inactive for 90 days. In order to manage maintenance burden, it will be automatically closed in 7 days.

github-actions[bot] avatar Mar 10 '24 21:03 github-actions[bot]

As per RFC4, this Issue has been closed due to there being no activity for more than 90 days.

github-actions[bot] avatar Mar 24 '24 03:03 github-actions[bot]