summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-05 03:29:12 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-05 03:29:12 +0000
commitc9d2b168057af536dccdd472c9900dea1372ebe3 (patch)
tree5d471898bbf38fe3705531cbb79f8890d42ca5f6
parent7291935f8038d784107985b2002b8570617d7b5a (diff)
automatic import of python-apischemaopeneuler20.03
-rw-r--r--.gitignore1
-rw-r--r--python-apischema.spec452
-rw-r--r--sources1
3 files changed, 454 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..41d92d5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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
diff --git a/sources b/sources
new file mode 100644
index 0000000..a876a46
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+874a2ac3cd542013230e522990fb6700 apischema-0.18.0.tar.gz