Title: OAS3.1 validation not triggering for `exclusiveMinimum`? · python-openapi/openapi-core · Discussion #810 · GitHub
Open Graph Title: OAS3.1 validation not triggering for `exclusiveMinimum`? · python-openapi/openapi-core · Discussion #810
X Title: OAS3.1 validation not triggering for `exclusiveMinimum`? · python-openapi/openapi-core · Discussion #810
Description: OAS3.1 validation not triggering for `exclusiveMinimum`?
Open Graph Description: Hello! I've been looking at updating pyramid_openapi3 to support OAS3.1, since openapi-core supports it, woohoo! I wasn't sure if this is a bug in openapi-core/one of the underlying libraries yet, ...
X Description: Hello! I've been looking at updating pyramid_openapi3 to support OAS3.1, since openapi-core supports it, woohoo! I wasn't sure if this is a bug in openapi-core/one of the underlying librari...
Opengraph URL: https://github.com/python-openapi/openapi-core/discussions/810
X: @github
Domain: patch-diff.githubusercontent.com
{"@context":"https://schema.org","@type":"QAPage","mainEntity":{"@type":"Question","name":"OAS3.1 validation not triggering for `exclusiveMinimum`?","text":"Hello!
\nI've been looking at updating pyramid_openapi3 to support OAS3.1, since openapi-core supports it, woohoo!
\nI wasn't sure if this is a bug in openapi-core/one of the underlying libraries yet, so I thought it'd be best to ask here.
\nHere's a sample.yaml file I'm using:
\nopenapi: \"3.1.0\"\ninfo:\n version: \"1.0.0\"\n title: Hello API\npaths:\n /hello:\n get:\n parameters:\n - name: name\n in: query\n required: true\n schema:\n type: string\n exclusiveMinimum: 3\n responses:\n 200:\n description: Say hello\n 400:\n description: Bad Request
\nNote the exclusiveMinimum: 3 value. In OAS3.0, this would have been a pair of minimum: 3 and exclusiveMinimum: true, but in OAS3.1 I should be able to express it only with one key.
\nHere's a repro that should error, but doesn't:
\nimport requests\nfrom openapi_core import OpenAPI\nfrom openapi_core.contrib.requests import RequestsOpenAPIRequest\n\nopenapi = OpenAPI.from_file_path('sample.yaml')\n\nrequest = requests.Request('GET', 'https://foo.local/hello?name=yo')\nopenapi_request = RequestsOpenAPIRequest(request)\n\n# Should raise a validation error for the parameter being too short, doesn't\nvalidated = openapi.unmarshal_request(openapi_request)\n\n# Some debug handling\nassert not validated.errors\nprint(validated.parameters.query[\"name\"]) #=> yo\nprint(len(validated.parameters.query[\"name\"])) #=> 2
\nSome versions:
\n\n- Python 3.12.2
\n- openapi-core 0.19.0
\n
\nFull version tree, in case that's interesting:
\nDetails
\n$ poetry show -t openapi-core\nopenapi-core 0.19.0 client-side and server-side support for the OpenAPI Specification v3\n├── isodate *\n│ └── six *\n├── jsonschema >=4.18.0,<5.0.0\n│ ├── attrs >=22.2.0\n│ ├── jsonschema-specifications >=2023.03.6\n│ │ └── referencing >=0.31.0\n│ │ ├── attrs >=22.2.0 (circular dependency aborted here)\n│ │ └── rpds-py >=0.7.0\n│ ├── referencing >=0.28.4 (circular dependency aborted here)\n│ └── rpds-py >=0.7.1 (circular dependency aborted here)\n├── jsonschema-path >=0.3.1,<0.4.0\n│ ├── pathable >=0.4.1,<0.5.0\n│ ├── pyyaml >=5.1\n│ ├── referencing >=0.28.0,<0.32.0\n│ │ ├── attrs >=22.2.0\n│ │ └── rpds-py >=0.7.0\n│ └── requests >=2.31.0,<3.0.0\n│ ├── certifi >=2017.4.17\n│ ├── charset-normalizer >=2,<4\n│ ├── idna >=2.5,<4\n│ └── urllib3 >=1.21.1,<3\n├── more-itertools *\n├── openapi-schema-validator >=0.6.0,<0.7.0\n│ ├── jsonschema >=4.19.1,<5.0.0\n│ │ ├── attrs >=22.2.0\n│ │ ├── jsonschema-specifications >=2023.03.6\n│ │ │ └── referencing >=0.31.0\n│ │ │ ├── attrs >=22.2.0 (circular dependency aborted here)\n│ │ │ └── rpds-py >=0.7.0\n│ │ ├── referencing >=0.28.4 (circular dependency aborted here)\n│ │ └── rpds-py >=0.7.1 (circular dependency aborted here)\n│ ├── jsonschema-specifications >=2023.5.2,<2024.0.0 (circular dependency aborted here)\n│ └── rfc3339-validator *\n│ └── six *\n├── openapi-spec-validator >=0.7.1,<0.8.0\n│ ├── jsonschema >=4.18.0,<5.0.0\n│ │ ├── attrs >=22.2.0\n│ │ ├── jsonschema-specifications >=2023.03.6\n│ │ │ └── referencing >=0.31.0\n│ │ │ ├── attrs >=22.2.0 (circular dependency aborted here)\n│ │ │ └── rpds-py >=0.7.0\n│ │ ├── referencing >=0.28.4 (circular dependency aborted here)\n│ │ └── rpds-py >=0.7.1 (circular dependency aborted here)\n│ ├── jsonschema-path >=0.3.1,<0.4.0\n│ │ ├── pathable >=0.4.1,<0.5.0\n│ │ ├── pyyaml >=5.1\n│ │ ├── referencing >=0.28.0,<0.32.0 (circular dependency aborted here)\n│ │ └── requests >=2.31.0,<3.0.0\n│ │ ├── certifi >=2017.4.17\n│ │ ├── charset-normalizer >=2,<4\n│ │ ├── idna >=2.5,<4\n│ │ └── urllib3 >=1.21.1,<3\n│ ├── lazy-object-proxy >=1.7.1,<2.0.0\n│ └── openapi-schema-validator >=0.6.0,<0.7.0\n│ ├── jsonschema >=4.19.1,<5.0.0 (circular dependency aborted here)\n│ ├── jsonschema-specifications >=2023.5.2,<2024.0.0 (circular dependency aborted here)\n│ └── rfc3339-validator *\n│ └── six *\n├── parse *\n└── werkzeug *\n └── markupsafe >=2.1.1
\n\nI hope this makes the issue clear, please let me know if there's something I'm overlooking!
","upvoteCount":1,"answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Hi @miketheman
\nexclusiveMinimum works for numeric types only
\nhttps://json-schema.org/understanding-json-schema/reference/numeric#range
","upvoteCount":1,"url":"https://github.com/python-openapi/openapi-core/discussions/810#discussioncomment-8813175"}}}
| route-pattern | /_view_fragments/Voltron::DiscussionsFragmentsController/show/:user_id/:repository/:discussion_number/discussion_layout(.:format) |
| route-controller | voltron_discussions_fragments |
| route-action | discussion_layout |
| fetch-nonce | v2:2f16209d-bce3-54bf-67f4-aaf17884463a |
| current-catalog-service-hash | 9f0abe34da433c9b6db74bffa2466494a717b579a96b30a5d252e5090baea7be |
| request-id | 95BC:2C62EA:59E0F0A:7A6DED4:69783FD8 |
| html-safe-nonce | 99fe436b6baf7de7f901258524fce457d151be09c75cc7ed9b645d6c30fe6c3c |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5NUJDOjJDNjJFQTo1OUUwRjBBOjdBNkRFRDQ6Njk3ODNGRDgiLCJ2aXNpdG9yX2lkIjoiNDIyMzI2MjQxNTAzNTg0MjUyMCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | e828f30f63bcbfee1d4d78e9c5521bd7e5ca0c13170919384707f4ba17da7609 |
| hovercard-subject-tag | discussion:6374738 |
| github-keyboard-shortcuts | repository,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/Voltron::DiscussionsFragmentsController/show/python-openapi/openapi-core/810/discussion_layout |
| twitter:image | https://opengraph.githubassets.com/730ccf9a0c1925e3e78d6d387233aaeea7da62633bb2fc69e6c0e28c1476a600/python-openapi/openapi-core/discussions/810 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/730ccf9a0c1925e3e78d6d387233aaeea7da62633bb2fc69e6c0e28c1476a600/python-openapi/openapi-core/discussions/810 |
| og:image:alt | Hello! I've been looking at updating pyramid_openapi3 to support OAS3.1, since openapi-core supports it, woohoo! I wasn't sure if this is a bug in openapi-core/one of the underlying libraries yet, ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| hostname | github.com |
| expected-hostname | github.com |
| None | 2981c597c945c1d90ac6fa355ce7929b2f413dfe7872ca5c435ee53a24a1de50 |
| turbo-cache-control | no-preview |
| go-import | github.com/python-openapi/openapi-core git https://github.com/python-openapi/openapi-core.git |
| octolytics-dimension-user_id | 126442889 |
| octolytics-dimension-user_login | python-openapi |
| octolytics-dimension-repository_id | 104200746 |
| octolytics-dimension-repository_nwo | python-openapi/openapi-core |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 104200746 |
| octolytics-dimension-repository_network_root_nwo | python-openapi/openapi-core |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 520b65a872113b919c1bbdb03834a50af15859fd |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width