%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