Name | databind JSON |
Version |
4.5.0
JSON |
| download |
home_page | |
Summary | Databind is a library inspired by jackson-databind to de-/serialize Python dataclasses. The `databind` package will install the full suite of databind packages. Compatible with Python 3.8 and newer. |
upload_time | 2024-03-19 19:50:46 |
maintainer | |
docs_url | None |
author | Niklas Rosenstein |
requires_python | >=3.8.0,<4.0.0 |
license | MIT |
keywords |
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
<p align="center"><img src="https://i.imgur.com/KkWFne2.png" width="256px"></p>
<h1 align="center">databind</h1>
<p align="center">
<img src="https://img.shields.io/pypi/pyversions/databind?style=flat" alt="Python versions">
<a href="https://pypi.org/project/databind/"><img src="https://img.shields.io/pypi/v/databind?flat"></a>
<a href="https://NiklasRosenstein.github.io/python-databind/"><img src="https://img.shields.io/badge/Documentation-blue?style=flat&logo=gitbook&logoColor=white" alt="Documentation"></a>
</p>
The `databind` package provides a (de)serialization framework that understands most native Python types as well as
dataclasses, as well as an implementation for serialize to/from JSON-like nested data structures.
Databind is intended mostly for flexible and easy to use configuration loading. It does __not__ try achieve
high-performance; you should look towards e.g. [mashumaro](https://pypi.org/project/mashumaro/) for this usecase.
### Example
```python
@dataclass
class Server:
host: str
port: int
@dataclass
class Config:
server: Server
from databind.json import dump, load
dict_payload = {"server": {"host": "localhost", "port": 8080}}
loaded = Config(server=Server(host="localhost", port=8080))
assert load(dict_payload, Config) == loaded
assert dump(loaded, Config) == dict_payload
```
## Features ✨
[typeapi]: https://github.com/NiklasRosenstein/python-typeapi
* Support for a plethora of builtin types, including `Enum`, `Decimal`, `UUID`, `Path`, `datetime`, `date`,
`time`, `timedelta`
* Support for multiple union serialization modes (nested, flat, keyed, `typing.Literal`)
* Support for generic types, e.g. `load([{"name": "Jane Doe"}], list[Person])`
* Support for new-style type hints in older Python versions when using forward refererences (strings or
`__future__.annotations`) thanks to [typeapi][]
* [PEP 604 - Allow writing union types as X | Y](https://www.python.org/dev/peps/pep-0604/)
* [PEP585 - Type Hinting Generics in Standard Collections](https://www.python.org/dev/peps/pep-0585/))
* Support for customized serialization and deserialization of types
* Support for flattening fields of a nested dataclass or collecting remaining fields in a `dict`
* Full runtime type checking during serialization
* Use "settings" to customize serialization behaviour
* As global settings per `load()`/`dump()` call: `load(..., settings=[ExtraKeys(True)])`
* As class-level settings using a decorator: `@Union(style=Union.FLAT)` or `@ExtraKeys(True)`
* As type-hint level settings using `typing.Annotated` (or `typing_extensions.Annotated`):
`full_name: Annotated[str, Alias("fullName")]` or `FullNameField = Annotated[str, Alias("fullName")]`
## Notable release notes
### 4.5.0
* Merged `databind.core` and `databind.json` packages into `databind`. The old PyPI packages will remain as proxies
until the next minor version.
* Dropped support for Python 3.6 and 3.7.
---
<p align="center">Copyright © 2022 – Niklas Rosenstein</p>
Raw data
{
"_id": null,
"home_page": "",
"name": "databind",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8.0,<4.0.0",
"maintainer_email": "",
"keywords": "",
"author": "Niklas Rosenstein",
"author_email": "rosensteinniklas@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/8e/96/56874267390cc90bc5bba49af251ec7ba6b1f5673ea27010c251e79cbaf3/databind-4.5.0.tar.gz",
"platform": null,
"description": "<p align=\"center\"><img src=\"https://i.imgur.com/KkWFne2.png\" width=\"256px\"></p>\n\n<h1 align=\"center\">databind</h1>\n\n<p align=\"center\">\n <img src=\"https://img.shields.io/pypi/pyversions/databind?style=flat\" alt=\"Python versions\">\n <a href=\"https://pypi.org/project/databind/\"><img src=\"https://img.shields.io/pypi/v/databind?flat\"></a>\n <a href=\"https://NiklasRosenstein.github.io/python-databind/\"><img src=\"https://img.shields.io/badge/Documentation-blue?style=flat&logo=gitbook&logoColor=white\" alt=\"Documentation\"></a>\n</p>\n\nThe `databind` package provides a (de)serialization framework that understands most native Python types as well as\ndataclasses, as well as an implementation for serialize to/from JSON-like nested data structures.\n\nDatabind is intended mostly for flexible and easy to use configuration loading. It does __not__ try achieve\nhigh-performance; you should look towards e.g. [mashumaro](https://pypi.org/project/mashumaro/) for this usecase.\n\n### Example\n\n```python\n@dataclass\nclass Server:\n host: str\n port: int\n\n@dataclass\nclass Config:\n server: Server\n\nfrom databind.json import dump, load\n\ndict_payload = {\"server\": {\"host\": \"localhost\", \"port\": 8080}}\nloaded = Config(server=Server(host=\"localhost\", port=8080))\n\nassert load(dict_payload, Config) == loaded\nassert dump(loaded, Config) == dict_payload\n```\n\n## Features \u2728\n\n [typeapi]: https://github.com/NiklasRosenstein/python-typeapi\n\n* Support for a plethora of builtin types, including `Enum`, `Decimal`, `UUID`, `Path`, `datetime`, `date`,\n `time`, `timedelta`\n* Support for multiple union serialization modes (nested, flat, keyed, `typing.Literal`)\n* Support for generic types, e.g. `load([{\"name\": \"Jane Doe\"}], list[Person])`\n* Support for new-style type hints in older Python versions when using forward refererences (strings or\n `__future__.annotations`) thanks to [typeapi][]\n * [PEP 604 - Allow writing union types as X | Y](https://www.python.org/dev/peps/pep-0604/)\n * [PEP585 - Type Hinting Generics in Standard Collections](https://www.python.org/dev/peps/pep-0585/))\n* Support for customized serialization and deserialization of types\n* Support for flattening fields of a nested dataclass or collecting remaining fields in a `dict`\n* Full runtime type checking during serialization\n* Use \"settings\" to customize serialization behaviour\n * As global settings per `load()`/`dump()` call: `load(..., settings=[ExtraKeys(True)])`\n * As class-level settings using a decorator: `@Union(style=Union.FLAT)` or `@ExtraKeys(True)`\n * As type-hint level settings using `typing.Annotated` (or `typing_extensions.Annotated`):\n `full_name: Annotated[str, Alias(\"fullName\")]` or `FullNameField = Annotated[str, Alias(\"fullName\")]`\n\n## Notable release notes\n\n### 4.5.0\n\n* Merged `databind.core` and `databind.json` packages into `databind`. The old PyPI packages will remain as proxies\n until the next minor version.\n* Dropped support for Python 3.6 and 3.7.\n\n---\n\n<p align=\"center\">Copyright © 2022 – Niklas Rosenstein</p>\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Databind is a library inspired by jackson-databind to de-/serialize Python dataclasses. The `databind` package will install the full suite of databind packages. Compatible with Python 3.8 and newer.",
"version": "4.5.0",
"project_urls": null,
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "26d2e66db578ff400c4194e805ee0a33f9ed3c7085c3c65195c01f49091c2b8b",
"md5": "8c0e2a2d9a42e2312ecaf559b42f2b80",
"sha256": "68afe8df968a05f67fedf914b6a8ea9159c18a44a2d6d4fd716e2edd94d87f67"
},
"downloads": -1,
"filename": "databind-4.5.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8c0e2a2d9a42e2312ecaf559b42f2b80",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8.0,<4.0.0",
"size": 49149,
"upload_time": "2024-03-19T19:50:39",
"upload_time_iso_8601": "2024-03-19T19:50:39.861469Z",
"url": "https://files.pythonhosted.org/packages/26/d2/e66db578ff400c4194e805ee0a33f9ed3c7085c3c65195c01f49091c2b8b/databind-4.5.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8e9656874267390cc90bc5bba49af251ec7ba6b1f5673ea27010c251e79cbaf3",
"md5": "4ec3e7ab115e6d010a5a68ca9ebf5bfa",
"sha256": "75ddfed49f86a95101fee2712b10f17708fc4f60f0ac3a5d0409afce2bd7ecdf"
},
"downloads": -1,
"filename": "databind-4.5.0.tar.gz",
"has_sig": false,
"md5_digest": "4ec3e7ab115e6d010a5a68ca9ebf5bfa",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8.0,<4.0.0",
"size": 42833,
"upload_time": "2024-03-19T19:50:46",
"upload_time_iso_8601": "2024-03-19T19:50:46.353972Z",
"url": "https://files.pythonhosted.org/packages/8e/96/56874267390cc90bc5bba49af251ec7ba6b1f5673ea27010c251e79cbaf3/databind-4.5.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-03-19 19:50:46",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "databind"
}