Closed
Description
If you have url pattern in flask, you'll never get your paths validated.
import yaml
from flask import Flask, request
from openapi_core import create_spec
from openapi_core.validation.request.validators import RequestValidator
from openapi_core.wrappers.flask import FlaskOpenAPIRequest
spec = """openapi: "3.0.0"
info:
version: 1.0.0
title: test
servers:
- url: http://127.0.0.1:8000
components:
parameters:
some_param:
name: some
in: path
required: true
schema:
type: string
paths:
/{some}/path/:
parameters:
- $ref: '#/components/parameters/some_param'
post:
summary: anything
"""
TEST_SPEC = create_spec(spec)
FLASK_APP = Flask(__name__)
@FLASK_APP.route('/<some>/path', methods=['POST'])
def duh(some: str):
validator = RequestValidator(TEST_SPEC)
result = validator.validate(FlaskOpenAPIRequest(request))
print(result.errors)
Will always get an error
[InvalidOperation('Unknown operation path /<some>/path with method post')]
Because flask url pattern syntax and openapi pattern syntax do not match.
An error hides here https://github.com/p1c2u/openapi-core/blob/master/openapi_core/validation/request/validators.py#L24
- path_pattern is not transformed to openapi format
- request.path_pattern is not used