diff options
author | CoprDistGit <infra@openeuler.org> | 2023-05-05 03:29:12 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2023-05-05 03:29:12 +0000 |
commit | c9d2b168057af536dccdd472c9900dea1372ebe3 (patch) | |
tree | 5d471898bbf38fe3705531cbb79f8890d42ca5f6 | |
parent | 7291935f8038d784107985b2002b8570617d7b5a (diff) |
automatic import of python-apischemaopeneuler20.03
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-apischema.spec | 452 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 454 insertions, 0 deletions
@@ -0,0 +1 @@ +/apischema-0.18.0.tar.gz diff --git a/python-apischema.spec b/python-apischema.spec new file mode 100644 index 0000000..c8422fa --- /dev/null +++ b/python-apischema.spec @@ -0,0 +1,452 @@ +%global _empty_manifest_terminate_build 0 +Name: python-apischema +Version: 0.18.0 +Release: 1 +Summary: JSON (de)serialization, GraphQL and JSON schema generation using Python typing. +License: MIT +URL: https://github.com/wyfo/apischema +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/f8/83/3eb3847e6b43978a5a44e5a614d937c397e369a9332a6d3e7eb566022175/apischema-0.18.0.tar.gz + +Requires: python3-graphql-core +Requires: python3-attrs +Requires: python3-docstring-parser +Requires: python3-bson +Requires: python3-orjson +Requires: python3-pydantic +Requires: python3-pytest +Requires: python3-sqlalchemy +Requires: python3-graphql-core + +%description +# apischema + +JSON (de)serialization, GraphQL and JSON schema generation using Python typing. + +*apischema* makes your life easier when dealing with API data. + +## Documentation + +[https://wyfo.github.io/apischema/](https://wyfo.github.io/apischema/) + +## Install +```shell +pip install apischema +``` +It requires only Python 3.7+. *PyPy3* is also fully supported. + +## Why another library? + +(If you wonder how this differs from the *pydantic* library, see the [dedicated section of the documentation](https://wyfo.github.io/apischema/0.18/difference_with_pydantic) — there are many differences.) + +This library fulfills the following goals: + +- stay as close as possible to the standard library (dataclasses, typing, etc.) — as a consequence we do not need plugins for editors/linters/etc.; +- avoid object-oriented limitations — do not require a base class — thus handle easily every type (`Foo`, `list[Bar]`, `NewType(Id, int)`, etc.) the same way. +- be adaptable, provide tools to support any types (ORM, etc.); +- avoid dynamic things like using raw strings for attributes name - play nicely with your IDE. + +No known alternative achieves all of this, and apischema is also [(a lot) faster](https://wyfo.github.io/apischema/0.18/optimizations_and_benchmark#benchmark) than all of them. + +On top of that, because APIs are not only JSON, *apischema* is also a complete GraphQL library + +> Actually, *apischema* is even adaptable enough to enable support of competitor libraries in a few dozens of line of code ([pydantic support example](https://wyfo.github.io/apischema/0.18/examples/pydantic_support) using [conversions feature](https://wyfo.github.io/apischema/0.18/conversions)) + +## Example + +```python +from collections.abc import Collection +from dataclasses import dataclass, field +from uuid import UUID, uuid4 + +import pytest +from graphql import print_schema + +from apischema import ValidationError, deserialize, serialize +from apischema.graphql import graphql_schema +from apischema.json_schema import deserialization_schema + + +# Define a schema with standard dataclasses +@dataclass +class Resource: + id: UUID + name: str + tags: set[str] = field(default_factory=set) + + +# Get some data +uuid = uuid4() +data = {"id": str(uuid), "name": "wyfo", "tags": ["some_tag"]} +# Deserialize data +resource = deserialize(Resource, data) +assert resource == Resource(uuid, "wyfo", {"some_tag"}) +# Serialize objects +assert serialize(Resource, resource) == data +# Validate during deserialization +with pytest.raises(ValidationError) as err: # pytest checks exception is raised + deserialize(Resource, {"id": "42", "name": "wyfo"}) +assert err.value.errors == [ + {"loc": ["id"], "err": "badly formed hexadecimal UUID string"} +] +# Generate JSON Schema +assert deserialization_schema(Resource) == { + "$schema": "http://json-schema.org/draft/2020-12/schema#", + "type": "object", + "properties": { + "id": {"type": "string", "format": "uuid"}, + "name": {"type": "string"}, + "tags": { + "type": "array", + "items": {"type": "string"}, + "uniqueItems": True, + "default": [], + }, + }, + "required": ["id", "name"], + "additionalProperties": False, +} + + +# Define GraphQL operations +def resources(tags: Collection[str] | None = None) -> Collection[Resource] | None: + ... + + +# Generate GraphQL schema +schema = graphql_schema(query=[resources], id_types={UUID}) +schema_str = """\ +type Query { + resources(tags: [String!]): [Resource!] +} + +type Resource { + id: ID! + name: String! + tags: [String!]! +}""" +assert print_schema(schema) == schema_str +``` +*apischema* works out of the box with your data model. + +> This example and further ones are using *pytest* API because they are in fact run as tests in the library CI + +### Run the documentation examples + +All documentation examples are written using the last Python minor version — currently 3.10 — in order to provide up-to-date documentation. Because Python 3.10 specificities (like [PEP 585](https://www.python.org/dev/peps/pep-0604/)) are used, this version is "mandatory" to execute the examples as-is. + +In addition to *pytest*, some examples use third-party libraries like *SQLAlchemy* or *attrs*. All of this dependencies can be downloaded using the `examples` extra with +```shell +pip install apischema[examples] +``` + +Once dependencies are installed, you can simply copy-paste examples and execute them, using the proper Python version. + + + +%package -n python3-apischema +Summary: JSON (de)serialization, GraphQL and JSON schema generation using Python typing. +Provides: python-apischema +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +BuildRequires: python3-cffi +BuildRequires: gcc +BuildRequires: gdb +%description -n python3-apischema +# apischema + +JSON (de)serialization, GraphQL and JSON schema generation using Python typing. + +*apischema* makes your life easier when dealing with API data. + +## Documentation + +[https://wyfo.github.io/apischema/](https://wyfo.github.io/apischema/) + +## Install +```shell +pip install apischema +``` +It requires only Python 3.7+. *PyPy3* is also fully supported. + +## Why another library? + +(If you wonder how this differs from the *pydantic* library, see the [dedicated section of the documentation](https://wyfo.github.io/apischema/0.18/difference_with_pydantic) — there are many differences.) + +This library fulfills the following goals: + +- stay as close as possible to the standard library (dataclasses, typing, etc.) — as a consequence we do not need plugins for editors/linters/etc.; +- avoid object-oriented limitations — do not require a base class — thus handle easily every type (`Foo`, `list[Bar]`, `NewType(Id, int)`, etc.) the same way. +- be adaptable, provide tools to support any types (ORM, etc.); +- avoid dynamic things like using raw strings for attributes name - play nicely with your IDE. + +No known alternative achieves all of this, and apischema is also [(a lot) faster](https://wyfo.github.io/apischema/0.18/optimizations_and_benchmark#benchmark) than all of them. + +On top of that, because APIs are not only JSON, *apischema* is also a complete GraphQL library + +> Actually, *apischema* is even adaptable enough to enable support of competitor libraries in a few dozens of line of code ([pydantic support example](https://wyfo.github.io/apischema/0.18/examples/pydantic_support) using [conversions feature](https://wyfo.github.io/apischema/0.18/conversions)) + +## Example + +```python +from collections.abc import Collection +from dataclasses import dataclass, field +from uuid import UUID, uuid4 + +import pytest +from graphql import print_schema + +from apischema import ValidationError, deserialize, serialize +from apischema.graphql import graphql_schema +from apischema.json_schema import deserialization_schema + + +# Define a schema with standard dataclasses +@dataclass +class Resource: + id: UUID + name: str + tags: set[str] = field(default_factory=set) + + +# Get some data +uuid = uuid4() +data = {"id": str(uuid), "name": "wyfo", "tags": ["some_tag"]} +# Deserialize data +resource = deserialize(Resource, data) +assert resource == Resource(uuid, "wyfo", {"some_tag"}) +# Serialize objects +assert serialize(Resource, resource) == data +# Validate during deserialization +with pytest.raises(ValidationError) as err: # pytest checks exception is raised + deserialize(Resource, {"id": "42", "name": "wyfo"}) +assert err.value.errors == [ + {"loc": ["id"], "err": "badly formed hexadecimal UUID string"} +] +# Generate JSON Schema +assert deserialization_schema(Resource) == { + "$schema": "http://json-schema.org/draft/2020-12/schema#", + "type": "object", + "properties": { + "id": {"type": "string", "format": "uuid"}, + "name": {"type": "string"}, + "tags": { + "type": "array", + "items": {"type": "string"}, + "uniqueItems": True, + "default": [], + }, + }, + "required": ["id", "name"], + "additionalProperties": False, +} + + +# Define GraphQL operations +def resources(tags: Collection[str] | None = None) -> Collection[Resource] | None: + ... + + +# Generate GraphQL schema +schema = graphql_schema(query=[resources], id_types={UUID}) +schema_str = """\ +type Query { + resources(tags: [String!]): [Resource!] +} + +type Resource { + id: ID! + name: String! + tags: [String!]! +}""" +assert print_schema(schema) == schema_str +``` +*apischema* works out of the box with your data model. + +> This example and further ones are using *pytest* API because they are in fact run as tests in the library CI + +### Run the documentation examples + +All documentation examples are written using the last Python minor version — currently 3.10 — in order to provide up-to-date documentation. Because Python 3.10 specificities (like [PEP 585](https://www.python.org/dev/peps/pep-0604/)) are used, this version is "mandatory" to execute the examples as-is. + +In addition to *pytest*, some examples use third-party libraries like *SQLAlchemy* or *attrs*. All of this dependencies can be downloaded using the `examples` extra with +```shell +pip install apischema[examples] +``` + +Once dependencies are installed, you can simply copy-paste examples and execute them, using the proper Python version. + + + +%package help +Summary: Development documents and examples for apischema +Provides: python3-apischema-doc +%description help +# apischema + +JSON (de)serialization, GraphQL and JSON schema generation using Python typing. + +*apischema* makes your life easier when dealing with API data. + +## Documentation + +[https://wyfo.github.io/apischema/](https://wyfo.github.io/apischema/) + +## Install +```shell +pip install apischema +``` +It requires only Python 3.7+. *PyPy3* is also fully supported. + +## Why another library? + +(If you wonder how this differs from the *pydantic* library, see the [dedicated section of the documentation](https://wyfo.github.io/apischema/0.18/difference_with_pydantic) — there are many differences.) + +This library fulfills the following goals: + +- stay as close as possible to the standard library (dataclasses, typing, etc.) — as a consequence we do not need plugins for editors/linters/etc.; +- avoid object-oriented limitations — do not require a base class — thus handle easily every type (`Foo`, `list[Bar]`, `NewType(Id, int)`, etc.) the same way. +- be adaptable, provide tools to support any types (ORM, etc.); +- avoid dynamic things like using raw strings for attributes name - play nicely with your IDE. + +No known alternative achieves all of this, and apischema is also [(a lot) faster](https://wyfo.github.io/apischema/0.18/optimizations_and_benchmark#benchmark) than all of them. + +On top of that, because APIs are not only JSON, *apischema* is also a complete GraphQL library + +> Actually, *apischema* is even adaptable enough to enable support of competitor libraries in a few dozens of line of code ([pydantic support example](https://wyfo.github.io/apischema/0.18/examples/pydantic_support) using [conversions feature](https://wyfo.github.io/apischema/0.18/conversions)) + +## Example + +```python +from collections.abc import Collection +from dataclasses import dataclass, field +from uuid import UUID, uuid4 + +import pytest +from graphql import print_schema + +from apischema import ValidationError, deserialize, serialize +from apischema.graphql import graphql_schema +from apischema.json_schema import deserialization_schema + + +# Define a schema with standard dataclasses +@dataclass +class Resource: + id: UUID + name: str + tags: set[str] = field(default_factory=set) + + +# Get some data +uuid = uuid4() +data = {"id": str(uuid), "name": "wyfo", "tags": ["some_tag"]} +# Deserialize data +resource = deserialize(Resource, data) +assert resource == Resource(uuid, "wyfo", {"some_tag"}) +# Serialize objects +assert serialize(Resource, resource) == data +# Validate during deserialization +with pytest.raises(ValidationError) as err: # pytest checks exception is raised + deserialize(Resource, {"id": "42", "name": "wyfo"}) +assert err.value.errors == [ + {"loc": ["id"], "err": "badly formed hexadecimal UUID string"} +] +# Generate JSON Schema +assert deserialization_schema(Resource) == { + "$schema": "http://json-schema.org/draft/2020-12/schema#", + "type": "object", + "properties": { + "id": {"type": "string", "format": "uuid"}, + "name": {"type": "string"}, + "tags": { + "type": "array", + "items": {"type": "string"}, + "uniqueItems": True, + "default": [], + }, + }, + "required": ["id", "name"], + "additionalProperties": False, +} + + +# Define GraphQL operations +def resources(tags: Collection[str] | None = None) -> Collection[Resource] | None: + ... + + +# Generate GraphQL schema +schema = graphql_schema(query=[resources], id_types={UUID}) +schema_str = """\ +type Query { + resources(tags: [String!]): [Resource!] +} + +type Resource { + id: ID! + name: String! + tags: [String!]! +}""" +assert print_schema(schema) == schema_str +``` +*apischema* works out of the box with your data model. + +> This example and further ones are using *pytest* API because they are in fact run as tests in the library CI + +### Run the documentation examples + +All documentation examples are written using the last Python minor version — currently 3.10 — in order to provide up-to-date documentation. Because Python 3.10 specificities (like [PEP 585](https://www.python.org/dev/peps/pep-0604/)) are used, this version is "mandatory" to execute the examples as-is. + +In addition to *pytest*, some examples use third-party libraries like *SQLAlchemy* or *attrs*. All of this dependencies can be downloaded using the `examples` extra with +```shell +pip install apischema[examples] +``` + +Once dependencies are installed, you can simply copy-paste examples and execute them, using the proper Python version. + + + +%prep +%autosetup -n apischema-0.18.0 + +%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-apischema -f filelist.lst +%dir %{python3_sitearch}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Fri May 05 2023 Python_Bot <Python_Bot@openeuler.org> - 0.18.0-1 +- Package Spec generated @@ -0,0 +1 @@ +874a2ac3cd542013230e522990fb6700 apischema-0.18.0.tar.gz |