summaryrefslogtreecommitdiff
path: root/python-py-openapi-schema-to-json-schema.spec
diff options
context:
space:
mode:
Diffstat (limited to 'python-py-openapi-schema-to-json-schema.spec')
-rw-r--r--python-py-openapi-schema-to-json-schema.spec540
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
+[![Build Status](https://travis-ci.org/pglass/py-openapi-schema-to-json-schema.svg?branch=master)](https://travis-ci.org/pglass/py-openapi-schema-to-json-schema)
+[![PyPI](https://img.shields.io/pypi/v/py-openapi-schema-to-json-schema.svg)](https://pypi.org/project/py-openapi-schema-to-json-schema/)
+[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/py-openapi-schema-to-json-schema.svg)](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
+[![Build Status](https://travis-ci.org/pglass/py-openapi-schema-to-json-schema.svg?branch=master)](https://travis-ci.org/pglass/py-openapi-schema-to-json-schema)
+[![PyPI](https://img.shields.io/pypi/v/py-openapi-schema-to-json-schema.svg)](https://pypi.org/project/py-openapi-schema-to-json-schema/)
+[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/py-openapi-schema-to-json-schema.svg)](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
+[![Build Status](https://travis-ci.org/pglass/py-openapi-schema-to-json-schema.svg?branch=master)](https://travis-ci.org/pglass/py-openapi-schema-to-json-schema)
+[![PyPI](https://img.shields.io/pypi/v/py-openapi-schema-to-json-schema.svg)](https://pypi.org/project/py-openapi-schema-to-json-schema/)
+[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/py-openapi-schema-to-json-schema.svg)](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