diff --git a/openapi_schema_validator/_keywords.py b/openapi_schema_validator/_keywords.py index 08c8078..6692580 100644 --- a/openapi_schema_validator/_keywords.py +++ b/openapi_schema_validator/_keywords.py @@ -234,27 +234,21 @@ def additionalProperties( yield ValidationError(error % extras_msg(extras)) -def readOnly( +def write_readOnly( validator: Validator, ro: bool, instance: Any, schema: Mapping[Hashable, Any], ) -> Iterator[ValidationError]: - if not getattr(validator, "write", True) or not ro: - return - yield ValidationError(f"Tried to write read-only property with {instance}") -def writeOnly( +def read_writeOnly( validator: Validator, wo: bool, instance: Any, schema: Mapping[Hashable, Any], ) -> Iterator[ValidationError]: - if not getattr(validator, "read", True) or not wo: - return - yield ValidationError(f"Tried to read write-only property with {instance}") diff --git a/openapi_schema_validator/validators.py b/openapi_schema_validator/validators.py index f541655..44b5a42 100644 --- a/openapi_schema_validator/validators.py +++ b/openapi_schema_validator/validators.py @@ -49,8 +49,8 @@ "$ref": _keywords.ref, # fixed OAS fields "discriminator": oas_keywords.not_implemented, - "readOnly": oas_keywords.readOnly, - "writeOnly": oas_keywords.writeOnly, + "readOnly": oas_keywords.not_implemented, + "writeOnly": oas_keywords.not_implemented, "xml": oas_keywords.not_implemented, "externalDocs": oas_keywords.not_implemented, "example": oas_keywords.not_implemented, @@ -68,16 +68,14 @@ OAS30Validator, validators={ "required": oas_keywords.read_required, - "readOnly": oas_keywords.not_implemented, - "writeOnly": oas_keywords.writeOnly, + "writeOnly": oas_keywords.read_writeOnly, }, ) OAS30WriteValidator = extend( OAS30Validator, validators={ "required": oas_keywords.write_required, - "readOnly": oas_keywords.readOnly, - "writeOnly": oas_keywords.not_implemented, + "readOnly": oas_keywords.write_readOnly, }, ) diff --git a/tests/integration/test_validators.py b/tests/integration/test_validators.py index 9413581..07bc4df 100644 --- a/tests/integration/test_validators.py +++ b/tests/integration/test_validators.py @@ -596,6 +596,11 @@ def test_read_only(self): format_checker=oas30_format_checker, ) assert validator.validate({"some_prop": "hello"}) is None + validator = OAS30Validator( + schema, + format_checker=oas30_format_checker, + ) + assert validator.validate({"some_prop": "hello"}) is None def test_write_only(self): schema = { @@ -617,6 +622,11 @@ def test_write_only(self): format_checker=oas30_format_checker, ) assert validator.validate({"some_prop": "hello"}) is None + validator = OAS30Validator( + schema, + format_checker=oas30_format_checker, + ) + assert validator.validate({"some_prop": "hello"}) is None def test_required_read_only(self): schema = {