diff options
Diffstat (limited to 'python-py-openapi-schema-to-json-schema.spec')
-rw-r--r-- | python-py-openapi-schema-to-json-schema.spec | 540 |
1 files changed, 540 insertions, 0 deletions
diff --git a/python-py-openapi-schema-to-json-schema.spec b/python-py-openapi-schema-to-json-schema.spec new file mode 100644 index 0000000..e4f8928 --- /dev/null +++ b/python-py-openapi-schema-to-json-schema.spec @@ -0,0 +1,540 @@ +%global _empty_manifest_terminate_build 0 +Name: python-py-openapi-schema-to-json-schema +Version: 0.0.3 +Release: 1 +Summary: Convert OpenAPI Schemas to JSON Schemas +License: MIT +URL: https://github.com/pglass/py-openapi-schema-to-json-schema +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/51/c5/5d6a9b08df175a886b4085eb51e0351854a96e4896a367b2373ad19d881b/py-openapi-schema-to-json-schema-0.0.3.tar.gz +BuildArch: noarch + + +%description +[](https://travis-ci.org/pglass/py-openapi-schema-to-json-schema) +[](https://pypi.org/project/py-openapi-schema-to-json-schema/) +[](https://pypi.org/project/py-openapi-schema-to-json-schema/) +**This is a straight Python port of the MIT-licensed +[mikunn/openapi-schema-to-json-schema](https://github.com/mikunn/openapi-schema-to-json-schema) +([v2.1.0](https://github.com/mikunn/openapi-schema-to-json-schema/tree/v2.1.0))**. +This port is similarly MIT-licensed. +It converts from [OpenAPI 3.0]( +https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md) to +[JSON Schema Draft 4](http://json-schema.org/specification-links.html#draft-4). +## Why? +OpenAPI 3 Schemas and JSON Schemas are mostly similar. However, JSON Schema +validators are unaware of the differences between the two formats. This means +that validating request/response JSON using a standard JSON Schema validator +with OpenAPI 3 Schemas will result in incorrect validations in certain common +cases. +One way to solve this problem is to translate the OpenAPI 3 schema to JSON +Schema, which is the purpose of this library. +See [here](https://github.com/mikunn/openapi-schema-to-json-schema/tree/v2.1.0#why) +for more rationale, as well as [Phil Sturgeon's blog post]( +https://philsturgeon.uk/api/2018/03/30/openapi-and-json-schema-divergence/) +about the problem. +## Features +* converts OpenAPI 3.0 Schema Object to JSON Schema Draft 4 +* deletes `nullable` and adds `"null"` to `type` array if `nullable` is `true` and `type` is present +* adds `{"type": "null"}` to `oneOf` or `anyOf` array if `nullable` is `true` and `type` is _not_ present +* supports deep structures with nested `allOf`s etc. +* removes [OpenAPI specific + properties](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#fixed-fields-20) +such as `discriminator`, `deprecated` etc. unless specified otherwise +* optionally supports `patternProperties` with `x-patternProperties` in the + Schema Object +**NOTE**: `$ref`s are not dereferenced. You will need another library to +read the spec and follow `$ref` fields. +## Installation +```bash +$ pip install py-openapi-schema-to-json-schema +``` +## Usage +```python +import json +from openapi_schema_to_json_schema import to_json_schema +openapi_schema = { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": True, + } + }, + "x-patternProperties": { + "^[a-z]+$": { + "type": "number", + } + } +} +options = {"supportPatternProperties": True} +converted = to_json_schema(openapi_schema, options) +print(json.dumps(converted, indent=2)) +``` +This outputs the following JSON schema. This shows the conversion of +`nullable: True` to `type: ["string", "null"]`, and the enablement of +unsupported JSON Schema features using OpenAPI extension fields +(`x-patternProperties` -> `patternProperties`). +```json +{ + "patternProperties": { + "^[a-z]+$": { + "type": "number" + } + }, + "properties": { + "name": { + "type": [ + "string", + "null" + ] + } + }, + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object" +} +``` +### Options +The `to_json_schema` function accepts an `options` dictionary as the second +argument. +```python +# Defaults +options = { + 'cloneSchema': True, + 'dateToDateTime': False, + 'supportPatternProperties': False, + 'keepNotSupported': [], + 'patternPropertiesHandler': + openapi_schema_to_json_schema.patternPropertiesHandler, + 'removeReadOnly': False, + 'removeWriteOnly': True, +} +``` +#### `cloneSchema` (bool) +If set to `False`, converts the provided schema in place. If `True`, clones the +schema using `copy.deepcopy`. Defaults to `True`. +#### `dateToDateTime` (bool) +This is `False` by default and leaves `date` format as is. If set to `True`, +sets `format: 'date'` to `format: 'date-time'`. +For example +```python +import json +from openapi_schema_to_json_schema import to_json_schema +schema = { + 'type': 'string', + 'format': 'date', +} +converted = to_json_schema(schema, {'dateToDateTime': True}) +print(json.dumps(converted, indent=2)) +``` +prints +```json +{ + "format": "date-time", + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "string" +} +``` +#### `keepNotSupported` (list) +By default, the following fields are removed from the result schema: +`nullable`, `discriminator`, `readOnly`, `writeOnly`, `xml`, `externalDocs`, +`example` and `deprecated` as they are not supported by JSON Schema Draft 4. +Provide a list of the ones you want to keep (as strings) and they won't be +removed. +#### `removeReadOnly` (bool) +If set to `True`, will remove properties set as `readOnly`. If the property is +set as `required`, it will be removed from the `required` list as well. The +property will be removed even if `readOnly` is set to be kept with +`keepNotSupported`. +#### `removeWriteOnly` (bool) +Similar to `removeReadOnly`, but for `writeOnly` properties. +#### `supportPatternProperties` (bool) +If set to `True` and `x-patternProperties` property is present, change +`x-patternProperties` to `patternProperties` and call +`patternPropertiesHandler`. If `patternPropertiesHandler` is not defined, call +the default handler. See `patternPropertiesHandler` for more information. +#### `patternPropertiesHandler` (function) +Provide a function to handle pattern properties and set +`supportPatternProperties` to take effect. The function takes the schema where +`x-patternProperties` is defined on the root level. At this point +`x-patternProperties` is changed to `patternProperties`. It must return the +modified schema. +If the handler is not provided, the default handler is used. If +`additionalProperties` is set and is an object, the default handler sets it to +false if the `additionalProperties` object has deep equality with a pattern +object inside `patternProperties`. This is because we might want to define +`additionalProperties` in OpenAPI spec file, but want to validate against a +pattern. The pattern would turn out to be useless if `additionalProperties` of +the same structure were allowed. Create you own handler to override this +functionality. +See `tests/to_jsonschema/test_pattern_properties.py` for examples of this. + +%package -n python3-py-openapi-schema-to-json-schema +Summary: Convert OpenAPI Schemas to JSON Schemas +Provides: python-py-openapi-schema-to-json-schema +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-py-openapi-schema-to-json-schema +[](https://travis-ci.org/pglass/py-openapi-schema-to-json-schema) +[](https://pypi.org/project/py-openapi-schema-to-json-schema/) +[](https://pypi.org/project/py-openapi-schema-to-json-schema/) +**This is a straight Python port of the MIT-licensed +[mikunn/openapi-schema-to-json-schema](https://github.com/mikunn/openapi-schema-to-json-schema) +([v2.1.0](https://github.com/mikunn/openapi-schema-to-json-schema/tree/v2.1.0))**. +This port is similarly MIT-licensed. +It converts from [OpenAPI 3.0]( +https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md) to +[JSON Schema Draft 4](http://json-schema.org/specification-links.html#draft-4). +## Why? +OpenAPI 3 Schemas and JSON Schemas are mostly similar. However, JSON Schema +validators are unaware of the differences between the two formats. This means +that validating request/response JSON using a standard JSON Schema validator +with OpenAPI 3 Schemas will result in incorrect validations in certain common +cases. +One way to solve this problem is to translate the OpenAPI 3 schema to JSON +Schema, which is the purpose of this library. +See [here](https://github.com/mikunn/openapi-schema-to-json-schema/tree/v2.1.0#why) +for more rationale, as well as [Phil Sturgeon's blog post]( +https://philsturgeon.uk/api/2018/03/30/openapi-and-json-schema-divergence/) +about the problem. +## Features +* converts OpenAPI 3.0 Schema Object to JSON Schema Draft 4 +* deletes `nullable` and adds `"null"` to `type` array if `nullable` is `true` and `type` is present +* adds `{"type": "null"}` to `oneOf` or `anyOf` array if `nullable` is `true` and `type` is _not_ present +* supports deep structures with nested `allOf`s etc. +* removes [OpenAPI specific + properties](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#fixed-fields-20) +such as `discriminator`, `deprecated` etc. unless specified otherwise +* optionally supports `patternProperties` with `x-patternProperties` in the + Schema Object +**NOTE**: `$ref`s are not dereferenced. You will need another library to +read the spec and follow `$ref` fields. +## Installation +```bash +$ pip install py-openapi-schema-to-json-schema +``` +## Usage +```python +import json +from openapi_schema_to_json_schema import to_json_schema +openapi_schema = { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": True, + } + }, + "x-patternProperties": { + "^[a-z]+$": { + "type": "number", + } + } +} +options = {"supportPatternProperties": True} +converted = to_json_schema(openapi_schema, options) +print(json.dumps(converted, indent=2)) +``` +This outputs the following JSON schema. This shows the conversion of +`nullable: True` to `type: ["string", "null"]`, and the enablement of +unsupported JSON Schema features using OpenAPI extension fields +(`x-patternProperties` -> `patternProperties`). +```json +{ + "patternProperties": { + "^[a-z]+$": { + "type": "number" + } + }, + "properties": { + "name": { + "type": [ + "string", + "null" + ] + } + }, + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object" +} +``` +### Options +The `to_json_schema` function accepts an `options` dictionary as the second +argument. +```python +# Defaults +options = { + 'cloneSchema': True, + 'dateToDateTime': False, + 'supportPatternProperties': False, + 'keepNotSupported': [], + 'patternPropertiesHandler': + openapi_schema_to_json_schema.patternPropertiesHandler, + 'removeReadOnly': False, + 'removeWriteOnly': True, +} +``` +#### `cloneSchema` (bool) +If set to `False`, converts the provided schema in place. If `True`, clones the +schema using `copy.deepcopy`. Defaults to `True`. +#### `dateToDateTime` (bool) +This is `False` by default and leaves `date` format as is. If set to `True`, +sets `format: 'date'` to `format: 'date-time'`. +For example +```python +import json +from openapi_schema_to_json_schema import to_json_schema +schema = { + 'type': 'string', + 'format': 'date', +} +converted = to_json_schema(schema, {'dateToDateTime': True}) +print(json.dumps(converted, indent=2)) +``` +prints +```json +{ + "format": "date-time", + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "string" +} +``` +#### `keepNotSupported` (list) +By default, the following fields are removed from the result schema: +`nullable`, `discriminator`, `readOnly`, `writeOnly`, `xml`, `externalDocs`, +`example` and `deprecated` as they are not supported by JSON Schema Draft 4. +Provide a list of the ones you want to keep (as strings) and they won't be +removed. +#### `removeReadOnly` (bool) +If set to `True`, will remove properties set as `readOnly`. If the property is +set as `required`, it will be removed from the `required` list as well. The +property will be removed even if `readOnly` is set to be kept with +`keepNotSupported`. +#### `removeWriteOnly` (bool) +Similar to `removeReadOnly`, but for `writeOnly` properties. +#### `supportPatternProperties` (bool) +If set to `True` and `x-patternProperties` property is present, change +`x-patternProperties` to `patternProperties` and call +`patternPropertiesHandler`. If `patternPropertiesHandler` is not defined, call +the default handler. See `patternPropertiesHandler` for more information. +#### `patternPropertiesHandler` (function) +Provide a function to handle pattern properties and set +`supportPatternProperties` to take effect. The function takes the schema where +`x-patternProperties` is defined on the root level. At this point +`x-patternProperties` is changed to `patternProperties`. It must return the +modified schema. +If the handler is not provided, the default handler is used. If +`additionalProperties` is set and is an object, the default handler sets it to +false if the `additionalProperties` object has deep equality with a pattern +object inside `patternProperties`. This is because we might want to define +`additionalProperties` in OpenAPI spec file, but want to validate against a +pattern. The pattern would turn out to be useless if `additionalProperties` of +the same structure were allowed. Create you own handler to override this +functionality. +See `tests/to_jsonschema/test_pattern_properties.py` for examples of this. + +%package help +Summary: Development documents and examples for py-openapi-schema-to-json-schema +Provides: python3-py-openapi-schema-to-json-schema-doc +%description help +[](https://travis-ci.org/pglass/py-openapi-schema-to-json-schema) +[](https://pypi.org/project/py-openapi-schema-to-json-schema/) +[](https://pypi.org/project/py-openapi-schema-to-json-schema/) +**This is a straight Python port of the MIT-licensed +[mikunn/openapi-schema-to-json-schema](https://github.com/mikunn/openapi-schema-to-json-schema) +([v2.1.0](https://github.com/mikunn/openapi-schema-to-json-schema/tree/v2.1.0))**. +This port is similarly MIT-licensed. +It converts from [OpenAPI 3.0]( +https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md) to +[JSON Schema Draft 4](http://json-schema.org/specification-links.html#draft-4). +## Why? +OpenAPI 3 Schemas and JSON Schemas are mostly similar. However, JSON Schema +validators are unaware of the differences between the two formats. This means +that validating request/response JSON using a standard JSON Schema validator +with OpenAPI 3 Schemas will result in incorrect validations in certain common +cases. +One way to solve this problem is to translate the OpenAPI 3 schema to JSON +Schema, which is the purpose of this library. +See [here](https://github.com/mikunn/openapi-schema-to-json-schema/tree/v2.1.0#why) +for more rationale, as well as [Phil Sturgeon's blog post]( +https://philsturgeon.uk/api/2018/03/30/openapi-and-json-schema-divergence/) +about the problem. +## Features +* converts OpenAPI 3.0 Schema Object to JSON Schema Draft 4 +* deletes `nullable` and adds `"null"` to `type` array if `nullable` is `true` and `type` is present +* adds `{"type": "null"}` to `oneOf` or `anyOf` array if `nullable` is `true` and `type` is _not_ present +* supports deep structures with nested `allOf`s etc. +* removes [OpenAPI specific + properties](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#fixed-fields-20) +such as `discriminator`, `deprecated` etc. unless specified otherwise +* optionally supports `patternProperties` with `x-patternProperties` in the + Schema Object +**NOTE**: `$ref`s are not dereferenced. You will need another library to +read the spec and follow `$ref` fields. +## Installation +```bash +$ pip install py-openapi-schema-to-json-schema +``` +## Usage +```python +import json +from openapi_schema_to_json_schema import to_json_schema +openapi_schema = { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": True, + } + }, + "x-patternProperties": { + "^[a-z]+$": { + "type": "number", + } + } +} +options = {"supportPatternProperties": True} +converted = to_json_schema(openapi_schema, options) +print(json.dumps(converted, indent=2)) +``` +This outputs the following JSON schema. This shows the conversion of +`nullable: True` to `type: ["string", "null"]`, and the enablement of +unsupported JSON Schema features using OpenAPI extension fields +(`x-patternProperties` -> `patternProperties`). +```json +{ + "patternProperties": { + "^[a-z]+$": { + "type": "number" + } + }, + "properties": { + "name": { + "type": [ + "string", + "null" + ] + } + }, + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object" +} +``` +### Options +The `to_json_schema` function accepts an `options` dictionary as the second +argument. +```python +# Defaults +options = { + 'cloneSchema': True, + 'dateToDateTime': False, + 'supportPatternProperties': False, + 'keepNotSupported': [], + 'patternPropertiesHandler': + openapi_schema_to_json_schema.patternPropertiesHandler, + 'removeReadOnly': False, + 'removeWriteOnly': True, +} +``` +#### `cloneSchema` (bool) +If set to `False`, converts the provided schema in place. If `True`, clones the +schema using `copy.deepcopy`. Defaults to `True`. +#### `dateToDateTime` (bool) +This is `False` by default and leaves `date` format as is. If set to `True`, +sets `format: 'date'` to `format: 'date-time'`. +For example +```python +import json +from openapi_schema_to_json_schema import to_json_schema +schema = { + 'type': 'string', + 'format': 'date', +} +converted = to_json_schema(schema, {'dateToDateTime': True}) +print(json.dumps(converted, indent=2)) +``` +prints +```json +{ + "format": "date-time", + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "string" +} +``` +#### `keepNotSupported` (list) +By default, the following fields are removed from the result schema: +`nullable`, `discriminator`, `readOnly`, `writeOnly`, `xml`, `externalDocs`, +`example` and `deprecated` as they are not supported by JSON Schema Draft 4. +Provide a list of the ones you want to keep (as strings) and they won't be +removed. +#### `removeReadOnly` (bool) +If set to `True`, will remove properties set as `readOnly`. If the property is +set as `required`, it will be removed from the `required` list as well. The +property will be removed even if `readOnly` is set to be kept with +`keepNotSupported`. +#### `removeWriteOnly` (bool) +Similar to `removeReadOnly`, but for `writeOnly` properties. +#### `supportPatternProperties` (bool) +If set to `True` and `x-patternProperties` property is present, change +`x-patternProperties` to `patternProperties` and call +`patternPropertiesHandler`. If `patternPropertiesHandler` is not defined, call +the default handler. See `patternPropertiesHandler` for more information. +#### `patternPropertiesHandler` (function) +Provide a function to handle pattern properties and set +`supportPatternProperties` to take effect. The function takes the schema where +`x-patternProperties` is defined on the root level. At this point +`x-patternProperties` is changed to `patternProperties`. It must return the +modified schema. +If the handler is not provided, the default handler is used. If +`additionalProperties` is set and is an object, the default handler sets it to +false if the `additionalProperties` object has deep equality with a pattern +object inside `patternProperties`. This is because we might want to define +`additionalProperties` in OpenAPI spec file, but want to validate against a +pattern. The pattern would turn out to be useless if `additionalProperties` of +the same structure were allowed. Create you own handler to override this +functionality. +See `tests/to_jsonschema/test_pattern_properties.py` for examples of this. + +%prep +%autosetup -n py-openapi-schema-to-json-schema-0.0.3 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-py-openapi-schema-to-json-schema -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Tue Apr 11 2023 Python_Bot <Python_Bot@openeuler.org> - 0.0.3-1 +- Package Spec generated |