From 8f069ee9a33ab4da9fb995e3f8d19998e91abc9f Mon Sep 17 00:00:00 2001 From: Fede Barcelona Date: Wed, 7 May 2025 16:20:32 +0200 Subject: [PATCH 1/2] fix: extract extra options recursively --- openapi_spec_validator/validation/keywords.py | 32 +++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/openapi_spec_validator/validation/keywords.py b/openapi_spec_validator/validation/keywords.py index e21df31..8811dd0 100644 --- a/openapi_spec_validator/validation/keywords.py +++ b/openapi_spec_validator/validation/keywords.py @@ -73,6 +73,26 @@ def __init__(self, registry: "KeywordValidatorRegistry"): def default_validator(self) -> ValueValidator: return cast(ValueValidator, self.registry["default"]) + def _collect_properties(self, schema) -> set[str]: + """Return *all* property names reachable from this schema.""" + props: set[str] = set() + + if "properties" in schema: + props.update((schema / "properties").keys()) + + for kw in ("allOf", "anyOf", "oneOf"): + if kw in schema: + for sub in schema / kw: + props.update(self._collect_properties(sub)) + + if "items" in schema: + props.update(self._collect_properties(schema / "items")) + + if "not" in schema: + props.update(self._collect_properties(schema / "not")) + + return props + def __call__( self, schema: SchemaPath, require_properties: bool = True ) -> Iterator[ValidationError]: @@ -89,15 +109,9 @@ def __call__( if "allOf" in schema: all_of = schema / "allOf" for inner_schema in all_of: - yield from self( - inner_schema, - require_properties=False, - ) - if "properties" not in inner_schema: - continue - inner_schema_props = inner_schema / "properties" - inner_schema_props_keys = inner_schema_props.keys() - nested_properties += list(inner_schema_props_keys) + yield from self(inner_schema, require_properties=False) + nested_properties += list(self._collect_properties(inner_schema)) + if "anyOf" in schema: any_of = schema / "anyOf" From ae91d807018fbcee7c350c7d443c3b029425f185 Mon Sep 17 00:00:00 2001 From: p1c2u Date: Sat, 7 Jun 2025 15:36:43 +0100 Subject: [PATCH 2/2] Added _collect_properties function missing type annotation --- openapi_spec_validator/validation/keywords.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openapi_spec_validator/validation/keywords.py b/openapi_spec_validator/validation/keywords.py index 8811dd0..869c9fd 100644 --- a/openapi_spec_validator/validation/keywords.py +++ b/openapi_spec_validator/validation/keywords.py @@ -73,7 +73,7 @@ def __init__(self, registry: "KeywordValidatorRegistry"): def default_validator(self) -> ValueValidator: return cast(ValueValidator, self.registry["default"]) - def _collect_properties(self, schema) -> set[str]: + def _collect_properties(self, schema: SchemaPath) -> set[str]: """Return *all* property names reachable from this schema.""" props: set[str] = set() pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy