Skip to content

Optionally disable validation #107

@multimeric

Description

@multimeric

Is your feature request related to a problem? Please describe.
It seems that some OpenAPI specifications aren't always correct, but it might be helpful to allow generation anyway.

For example, I installed the latest version from the main branch using:

poetry add git+https://github.com/triaxtec/openapi-python-client.git@main
pip install importlib_metadata
openapi-python-client generate --url https://api.biocontainers.pro/ga4gh/trs/v2/openapi.json

and the warnings I got were:

Traceback (most recent call last):
  File "/media/michael/Storage2/Programming/BioBackhaul/venv/bin/openapi-python-client", line 33, in <module>
    sys.exit(load_entry_point('openapi-python-client', 'console_scripts', 'openapi-python-client')())
  File "/media/michael/Storage2/Programming/BioBackhaul/venv/lib/python3.7/site-packages/typer/main.py", line 214, in __call__
    return get_command(self)(*args, **kwargs)
  File "/media/michael/Storage2/Programming/BioBackhaul/venv/lib/python3.7/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/media/michael/Storage2/Programming/BioBackhaul/venv/lib/python3.7/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/media/michael/Storage2/Programming/BioBackhaul/venv/lib/python3.7/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/media/michael/Storage2/Programming/BioBackhaul/venv/lib/python3.7/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/media/michael/Storage2/Programming/BioBackhaul/venv/lib/python3.7/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/media/michael/Storage2/Programming/BioBackhaul/venv/lib/python3.7/site-packages/typer/main.py", line 497, in wrapper
    return callback(**use_params)  # type: ignore
  File "/media/michael/Storage2/Programming/BioBackhaul/venv/src/openapi-python-client/openapi_python_client/cli.py", line 91, in generate
    create_new_client(url=url, path=path)
  File "/media/michael/Storage2/Programming/BioBackhaul/venv/src/openapi-python-client/openapi_python_client/__init__.py", line 48, in create_new_client
    project = _get_project_for_url_or_path(url=url, path=path)
  File "/media/michael/Storage2/Programming/BioBackhaul/venv/src/openapi-python-client/openapi_python_client/__init__.py", line 31, in _get_project_for_url_or_path
    openapi = GeneratorData.from_dict(data_dict)
  File "/media/michael/Storage2/Programming/BioBackhaul/venv/src/openapi-python-client/openapi_python_client/openapi_parser/openapi.py", line 243, in from_dict
    openapi = oai.OpenAPI.parse_obj(d)
  File "pydantic/main.py", line 455, in pydantic.main.BaseModel.parse_obj
  File "pydantic/main.py", line 346, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 93 validation errors for OpenAPI
paths -> /facets -> get -> responses -> 200 -> content -> application/json -> schema -> $ref
  field required (type=value_error.missing)
paths -> /facets -> get -> responses -> 200 -> content -> application/json -> schema -> items
  extra fields not permitted (type=value_error.extra)
paths -> /facets -> get -> responses -> 200 -> content -> application/json -> schema -> type
  extra fields not permitted (type=value_error.extra)
paths -> /facets -> get -> responses -> 200 -> content -> application/json -> schema -> x-content-type
  extra fields not permitted (type=value_error.extra)
paths -> /facets -> get -> responses -> 200 -> content -> application/json -> schema -> x-content-type
  extra fields not permitted (type=value_error.extra)
paths -> /facets -> get -> responses -> 200 -> $ref
  field required (type=value_error.missing)
paths -> /facets -> get -> responses -> 200 -> content
  extra fields not permitted (type=value_error.extra)
paths -> /facets -> get -> responses -> 200 -> description
  extra fields not permitted (type=value_error.extra)
paths -> /facets -> get -> x-openapi-router-controller
  extra fields not permitted (type=value_error.extra)
paths -> /service-info -> get -> x-openapi-router-controller
  extra fields not permitted (type=value_error.extra)
paths -> /stats -> get -> responses -> 200 -> content -> application/json -> schema -> $ref
  field required (type=value_error.missing)
paths -> /stats -> get -> responses -> 200 -> content -> application/json -> schema -> items
  extra fields not permitted (type=value_error.extra)
paths -> /stats -> get -> responses -> 200 -> content -> application/json -> schema -> type
  extra fields not permitted (type=value_error.extra)
paths -> /stats -> get -> responses -> 200 -> content -> application/json -> schema -> x-content-type
  extra fields not permitted (type=value_error.extra)
paths -> /stats -> get -> responses -> 200 -> content -> application/json -> schema -> x-content-type
  extra fields not permitted (type=value_error.extra)
paths -> /stats -> get -> responses -> 200 -> $ref
  field required (type=value_error.missing)
paths -> /stats -> get -> responses -> 200 -> content
  extra fields not permitted (type=value_error.extra)
paths -> /stats -> get -> responses -> 200 -> description
  extra fields not permitted (type=value_error.extra)
paths -> /stats -> get -> x-openapi-router-controller
  extra fields not permitted (type=value_error.extra)
paths -> /toolClasses -> get -> responses -> 200 -> content -> application/json -> schema -> $ref
  field required (type=value_error.missing)
paths -> /toolClasses -> get -> responses -> 200 -> content -> application/json -> schema -> items
  extra fields not permitted (type=value_error.extra)
paths -> /toolClasses -> get -> responses -> 200 -> content -> application/json -> schema -> type
  extra fields not permitted (type=value_error.extra)
paths -> /toolClasses -> get -> responses -> 200 -> content -> application/json -> schema -> x-content-type
  extra fields not permitted (type=value_error.extra)
paths -> /toolClasses -> get -> responses -> 200 -> content -> application/json -> schema -> x-content-type
  extra fields not permitted (type=value_error.extra)
paths -> /toolClasses -> get -> responses -> 200 -> $ref
  field required (type=value_error.missing)
paths -> /toolClasses -> get -> responses -> 200 -> content
  extra fields not permitted (type=value_error.extra)
paths -> /toolClasses -> get -> responses -> 200 -> description
  extra fields not permitted (type=value_error.extra)
paths -> /toolClasses -> get -> x-openapi-router-controller
  extra fields not permitted (type=value_error.extra)
paths -> /tools -> get -> responses -> 200 -> content -> application/json -> schema -> $ref
  field required (type=value_error.missing)
paths -> /tools -> get -> responses -> 200 -> content -> application/json -> schema -> items
  extra fields not permitted (type=value_error.extra)
paths -> /tools -> get -> responses -> 200 -> content -> application/json -> schema -> type
  extra fields not permitted (type=value_error.extra)
paths -> /tools -> get -> responses -> 200 -> content -> application/json -> schema -> x-content-type
  extra fields not permitted (type=value_error.extra)
paths -> /tools -> get -> responses -> 200 -> content -> application/json -> schema -> x-content-type
  extra fields not permitted (type=value_error.extra)
paths -> /tools -> get -> responses -> 200 -> $ref
  field required (type=value_error.missing)
paths -> /tools -> get -> responses -> 200 -> content
  extra fields not permitted (type=value_error.extra)
paths -> /tools -> get -> responses -> 200 -> description
  extra fields not permitted (type=value_error.extra)
paths -> /tools -> get -> responses -> 200 -> headers
  extra fields not permitted (type=value_error.extra)
paths -> /tools -> get -> x-openapi-router-controller
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id} -> get -> x-openapi-router-controller
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/similars -> get -> responses -> 200 -> content -> application/json -> schema -> $ref
  field required (type=value_error.missing)
paths -> /tools/{id}/similars -> get -> responses -> 200 -> content -> application/json -> schema -> items
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/similars -> get -> responses -> 200 -> content -> application/json -> schema -> type
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/similars -> get -> responses -> 200 -> content -> application/json -> schema -> x-content-type
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/similars -> get -> responses -> 200 -> content -> application/json -> schema -> x-content-type
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/similars -> get -> responses -> 200 -> $ref
  field required (type=value_error.missing)
paths -> /tools/{id}/similars -> get -> responses -> 200 -> content
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/similars -> get -> responses -> 200 -> description
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/similars -> get -> x-openapi-router-controller
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions -> get -> responses -> 200 -> content -> application/json -> schema -> $ref
  field required (type=value_error.missing)
paths -> /tools/{id}/versions -> get -> responses -> 200 -> content -> application/json -> schema -> items
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions -> get -> responses -> 200 -> content -> application/json -> schema -> type
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions -> get -> responses -> 200 -> content -> application/json -> schema -> x-content-type
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions -> get -> responses -> 200 -> content -> application/json -> schema -> x-content-type
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions -> get -> responses -> 200 -> $ref
  field required (type=value_error.missing)
paths -> /tools/{id}/versions -> get -> responses -> 200 -> content
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions -> get -> responses -> 200 -> description
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions -> get -> x-openapi-router-controller
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id} -> get -> x-openapi-router-controller
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id}/containerfile -> get -> responses -> 200 -> content -> application/json -> schema -> $ref
  field required (type=value_error.missing)
paths -> /tools/{id}/versions/{version_id}/containerfile -> get -> responses -> 200 -> content -> application/json -> schema -> items
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id}/containerfile -> get -> responses -> 200 -> content -> application/json -> schema -> type
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id}/containerfile -> get -> responses -> 200 -> content -> application/json -> schema -> x-content-type
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id}/containerfile -> get -> responses -> 200 -> content -> application/json -> schema -> x-content-type
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id}/containerfile -> get -> responses -> 200 -> $ref
  field required (type=value_error.missing)
paths -> /tools/{id}/versions/{version_id}/containerfile -> get -> responses -> 200 -> content
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id}/containerfile -> get -> responses -> 200 -> description
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id}/containerfile -> get -> x-openapi-router-controller
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id}/{type}/descriptor -> get -> x-openapi-router-controller
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id}/{type}/descriptor/{relative_path} -> get -> x-openapi-router-controller
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id}/{type}/files -> get -> responses -> 200 -> content -> application/json -> schema -> $ref
  field required (type=value_error.missing)
paths -> /tools/{id}/versions/{version_id}/{type}/files -> get -> responses -> 200 -> content -> application/json -> schema -> items
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id}/{type}/files -> get -> responses -> 200 -> content -> application/json -> schema -> type
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id}/{type}/files -> get -> responses -> 200 -> content -> application/json -> schema -> x-content-type
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id}/{type}/files -> get -> responses -> 200 -> content -> application/json -> schema -> x-content-type
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id}/{type}/files -> get -> responses -> 200 -> $ref
  field required (type=value_error.missing)
paths -> /tools/{id}/versions/{version_id}/{type}/files -> get -> responses -> 200 -> content
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id}/{type}/files -> get -> responses -> 200 -> description
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id}/{type}/files -> get -> x-openapi-router-controller
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id}/{type}/tests -> get -> responses -> 200 -> content -> application/json -> schema -> $ref
  field required (type=value_error.missing)
paths -> /tools/{id}/versions/{version_id}/{type}/tests -> get -> responses -> 200 -> content -> application/json -> schema -> items
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id}/{type}/tests -> get -> responses -> 200 -> content -> application/json -> schema -> type
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id}/{type}/tests -> get -> responses -> 200 -> content -> application/json -> schema -> x-content-type
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id}/{type}/tests -> get -> responses -> 200 -> content -> application/json -> schema -> x-content-type
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id}/{type}/tests -> get -> responses -> 200 -> $ref
  field required (type=value_error.missing)
paths -> /tools/{id}/versions/{version_id}/{type}/tests -> get -> responses -> 200 -> content
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id}/{type}/tests -> get -> responses -> 200 -> description
  extra fields not permitted (type=value_error.extra)
paths -> /tools/{id}/versions/{version_id}/{type}/tests -> get -> x-openapi-router-controller
  extra fields not permitted (type=value_error.extra)
components -> securitySchemes -> BEARER -> x-apikeyInfoFunc
  extra fields not permitted (type=value_error.extra)
components -> securitySchemes -> BEARER -> $ref
  field required (type=value_error.missing)
components -> securitySchemes -> BEARER -> in
  extra fields not permitted (type=value_error.extra)
components -> securitySchemes -> BEARER -> name
  extra fields not permitted (type=value_error.extra)
components -> securitySchemes -> BEARER -> type
  extra fields not permitted (type=value_error.extra)
components -> securitySchemes -> BEARER -> x-apikeyInfoFunc
  extra fields not permitted (type=value_error.extra)

Describe the solution you'd like
I would like a flag, for example --skip-validation, that disables the validation if the errors aren't fatal. In the above case, they're simply extra fields, so it shouldn't prohibit running the generator.

Describe alternatives you've considered
I was able to use openapi-generator with the --skip-validate-spec flag, which worked, but I would like to be able to do this in pure python.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions