Pylons / pyramid_openapi3

Pyramid addon for OpenAPI3 validation of requests and responses.
https://pypi.org/project/pyramid-openapi3/
MIT License
83 stars 47 forks source link

support variables in the server config #178

Open mmerickel opened 2 years ago

mmerickel commented 2 years ago
servers:
  # - url: '/connect/api/v1' <-- required because below is not supported
  - url: '{connectUrl}/api/v1'
    variables:
      connectUrl:
        default: '/connect'
        description: The base URL of the server, including any subpaths to the connect site.
paths:
  /challenges/change-password:
    post:
      # <snip ...>

2022-10-25 14:55:22,889 ERROR [pyramid_openapi3][request=e4deab37-061d-4d3b-8119-ff3a09842061] 2.1 Server not found for http://localhost:5000/connect/api/v1/challenges/change-password

The following doesn't work unless I uncomment the extra server directive which kind of defeats the point of it being variable. Is there a way to turn off the validation entirely or do something to define the server directive more clearly? I think I'd like to be able to pass in a config-time value for the variable that I know when invoking config.pyramid_openapi3_spec(..., server_variables={'connectUrl': '/connect'})

This issue is directly related to https://github.com/Pylons/pyramid_openapi3/issues/104 and https://github.com/Pylons/pyramid_openapi3/issues/105 where I simply cannot get the openapi definition to work with an unknown subpath and could use some help. Everything in my document is defined relative to request.application_url but nothing doing the validation is aware of that.

zupo commented 2 years ago

Validation can be turned off, but sadly only very broadly: https://github.com/Pylons/pyramid_openapi3#endpoints--request--response-validation

Can you provide a minimal example with code & test that shows exactly how you'd like it to work?

goodwillcoding commented 6 months ago

@mmerickel I am running into the same problem, got mounted rutter apps and no way to pass in the mount point. Did you ever find a way to address this?