246 lines
9.1 KiB
Plaintext
246 lines
9.1 KiB
Plaintext
Metadata-Version: 2.1
|
|
Name: jsons
|
|
Version: 1.6.3
|
|
Summary: For serializing Python objects to JSON (dicts) and back
|
|
Home-page: https://github.com/ramonhagenaars/jsons
|
|
Author: Ramon Hagenaars
|
|
Author-email: ramon.hagenaars@gmail.com
|
|
License: MIT
|
|
Classifier: Intended Audience :: Developers
|
|
Classifier: License :: OSI Approved :: MIT License
|
|
Classifier: Operating System :: OS Independent
|
|
Classifier: Natural Language :: English
|
|
Classifier: Programming Language :: Python
|
|
Classifier: Programming Language :: Python :: 3
|
|
Classifier: Programming Language :: Python :: 3.5
|
|
Classifier: Programming Language :: Python :: 3.6
|
|
Classifier: Programming Language :: Python :: 3.7
|
|
Classifier: Programming Language :: Python :: 3.8
|
|
Classifier: Programming Language :: Python :: 3.9
|
|
Classifier: Programming Language :: Python :: 3.10
|
|
Requires-Python: >=3.5
|
|
Description-Content-Type: text/markdown
|
|
License-File: LICENSE
|
|
Requires-Dist: typish (>=1.9.2)
|
|
Provides-Extra: test
|
|
Requires-Dist: attrs ; extra == 'test'
|
|
Requires-Dist: coverage ; extra == 'test'
|
|
Requires-Dist: codecov ; extra == 'test'
|
|
Requires-Dist: pytest ; extra == 'test'
|
|
Requires-Dist: scons ; extra == 'test'
|
|
Requires-Dist: dataclasses ; (python_version == "3.6") and extra == 'test'
|
|
Requires-Dist: tzdata ; (python_version >= "3.9") and extra == 'test'
|
|
|
|
[](https://img.shields.io/pypi/pyversions/jsons.svg)
|
|
[](https://pepy.tech/project/jsons)
|
|
[](https://badge.fury.io/py/jsons)
|
|
[](https://codecov.io/gh/ramonhagenaars/jsons)
|
|
[](https://scrutinizer-ci.com/g/ramonhagenaars/jsons/?branch=master)
|
|
|
|
|
|
<p align='center'>
|
|
<a href='https://jsons.readthedocs.io/en/latest/'>
|
|
<img width='150' src='https://github.com/ramonhagenaars/jsons/raw/master/resources/jsons-logo.svg?sanitize=true' />
|
|
</a>
|
|
</p>
|
|
|
|
- *Turn Python objects into dicts or (json)strings and back*
|
|
- *No changes required to your objects*
|
|
- *Easily customizable and extendable*
|
|
- *Works with dataclasses, attrs and POPOs*
|
|
|
|
💗 this lib? Leave a ★ and tell your colleagues!
|
|
|
|
Example of a model to serialize:
|
|
|
|
```python
|
|
>>> @dataclass
|
|
... class Person:
|
|
... name: str
|
|
... birthday: datetime
|
|
...
|
|
>>> p = Person('Guido van Rossum', birthday_guido)
|
|
```
|
|
|
|
Example of using jsons to serialize:
|
|
|
|
```python
|
|
>>> out = jsons.dump(p)
|
|
>>> out
|
|
{'birthday': '1956-01-31T12:00:00Z', 'name': 'Guido van Rossum'}
|
|
```
|
|
|
|
Example of using jsons to deserialize:
|
|
|
|
```python
|
|
>>> p2 = jsons.load(out, Person)
|
|
>>> p2
|
|
Person(name='Guido van Rossum', birthday=datetime.datetime(1956, 1, 31, 12, 0, tzinfo=datetime.timezone.utc))
|
|
```
|
|
|
|
# Installation
|
|
|
|
pip install jsons
|
|
|
|
# Usage
|
|
|
|
```python
|
|
import jsons
|
|
|
|
some_instance = jsons.load(some_dict, SomeClass) # Deserialization
|
|
some_dict = jsons.dump(some_instance) # Serialization
|
|
```
|
|
|
|
In some cases, you have instances that contain other instances that need (de)serialization, for instance with lists or dicts. You can use the
|
|
`typing` classes for this as is demonstrated below.
|
|
|
|
```python
|
|
from typing import List, Tuple
|
|
import jsons
|
|
|
|
# For more complex deserialization with generic types, use the typing module
|
|
list_of_tuples = jsons.load(some_dict, List[Tuple[AClass, AnotherClass]])
|
|
```
|
|
|
|
(For more examples, see the
|
|
[FAQ](https://jsons.readthedocs.io/en/latest/faq.html))
|
|
|
|
# Documentation
|
|
|
|
- [Main documentation](https://jsons.readthedocs.io/en/latest/)
|
|
- [API docs](https://jsons.readthedocs.io/en/latest/api.html)
|
|
- [FAQ](https://jsons.readthedocs.io/en/latest/faq.html)
|
|
|
|
# Meta
|
|
|
|
## Recent updates
|
|
|
|
### 1.6.3
|
|
|
|
- Bugfix: a string was sometimes unintentionally parsed into a datetime.
|
|
|
|
### 1.6.2
|
|
|
|
- Bugfix: `fork_inst`s were not propagated in `default_list_deserializer` (thanks to patrickguenther).
|
|
|
|
### 1.6.1
|
|
|
|
- Bugfix: Loading dicts with hashed keys could cause an error due to being loaded twice (thanks to georgeharker).
|
|
- Bugfix: IntEnums were not serialized with their names when `use_enum_name=True` (thanks to georgeharker).
|
|
- Bugfix: Named tuples did not use `typing.get_type_hints` for getting the types, causing trouble in future annotations (thanks to georgeharker).
|
|
|
|
### 1.6.0
|
|
|
|
- Feature: Support for Python3.10.
|
|
- Feature: Support for `attrs`.
|
|
|
|
### 1.5.1
|
|
|
|
- Bugfix: `ZoneInfo` failed to dump if attached to a `datetime`.
|
|
|
|
### 1.5.0
|
|
|
|
- Feature: Support for `ZoneInfo` on Python3.9+.
|
|
- Change: microseconds are no longer stripped by default (thanks to pietrodn).
|
|
|
|
### 1.4.2
|
|
|
|
- Bugfix: get_origin did not work with python3.9+ parameterized collections (e.g. `dict[str, str]`).
|
|
|
|
### 1.4.1
|
|
|
|
- Bugfix: Types of attributes that are not in the constructor were not properly looked for. See issue #128.
|
|
|
|
### 1.4.0
|
|
|
|
- Feature: DefaultDicts can now be deserialized.
|
|
- Feature: Dicts with any (hashable) key can now be dumped and loaded.
|
|
- Feature: Suppress specific warnings.
|
|
- Bugfix: Loading a verbose-serialized object in a list could sometimes deserialize that object as a parent class.
|
|
- Bugfix: Unwanted stringification of NoneValues is now prevented in Optionals and Unions with NoneType.
|
|
- Bugfix: Fixed a bug with postponed annotations and dataclasses. See also [Issue34776](https://bugs.python.org/issue34776).
|
|
- Bugfix: Types of attributes that are not in the constructor are now looked for in __annotations__.
|
|
|
|
### 1.3.1
|
|
|
|
- Bugfix: Fixed bug where classmethods were included in the serialized result.
|
|
|
|
### 1.3.0
|
|
|
|
- Feature: Added `warn_on_fail` parameter to `default_list_deserializer` that allows to continue deserialization upon errors.
|
|
- Feature: Added `transform` that can transform an object to an object of another type.
|
|
- Feature: Added serializer and deserializer for `pathlib.Path` (thanks to alexmirrington).
|
|
- Change: When loading a list fails, the error message now points to the failing index.
|
|
- Bugfix: Fixed bug when dumping an object with an innerclass.
|
|
|
|
### 1.2.0
|
|
|
|
- Bugfix: Fixed bug with postponed typehints (PEP-563).
|
|
- Bugfix: Loading an invalid value targeting an optional did not raise.
|
|
- Bugfix: Loading a dict did not properly pass key_transformers.
|
|
- Bugfix: Loading a namedtuple did not properly use key_transformers.
|
|
- Bugfix: Utilized `__annotations__` in favor `_field_types` because of deprecation as of 3.8.
|
|
|
|
### 1.1.2
|
|
|
|
- Feature: Added `__version__` which can be imported from `jsons`
|
|
- Bugfix: Dumping a tuple with ellipsis failed in strict mode.
|
|
|
|
### 1.1.1
|
|
|
|
- Feature: Added a serializer for ``Union`` types.
|
|
- Change: Exceptions are more clear upon deserialization failure (thanks to haluzpav).
|
|
- Change: You can no longer announce a class with a custom name.
|
|
- Bugfix: Fixed dumping optional attributes.
|
|
- Bugfix: Dataclasses inheriting from ``JsonSerializable`` always dumped their attributes as if in strict mode.
|
|
|
|
### 1.1.0
|
|
|
|
- Feature: Added ``strict`` parameter to ``dump`` to indicate that dumping a certain ``cls`` will ignore any extra data.
|
|
- Feature: When using ``dump(obj, cls=x)``, ``x`` can now be any class (previously, only a class with ``__slots__``).
|
|
- Feature: Support for dumping ``Decimal`` (thanks to herdigiorgi).
|
|
- Feature: Primitives are now cast if possible when dumping (e.g. ``dump(5, str)``).
|
|
- Feature: Dumping iterables with generic types (e.g. ``dump(obj, List[str])``) will now dump with respect to that types (if ``strict``)
|
|
- Feature: The ``default_dict`` serializer now optionally accepts types: ``Optional[Dict[str, type]]``.
|
|
- Change: Improved performance when dumping using ``strict=True`` (up to 4 times faster!).
|
|
- Bugfix: ``set_validator`` with multiple types did not work.
|
|
|
|
### 1.0.0
|
|
|
|
- Feature: Added a serializer/deserializer for `time`.
|
|
- Feature: Added a serializer/deserializer for `timezone`.
|
|
- Feature: Added a serializer/deserializer for `timedelta`.
|
|
- Feature: Added a serializer/deserializer for `date`.
|
|
- Bugfix: Dumping verbose did not store the types of dicts (`Dict[K,
|
|
V]`).
|
|
- Bugfix: Loading with `List` (no generic type) failed.
|
|
- Bugfix: Loading with `Dict` (no generic type) failed.
|
|
- Bugfix: Loading with `Tuple` (no generic type) failed.
|
|
|
|
|
|
## Contributors
|
|
|
|
Special thanks to the following contributors of code, discussions or
|
|
suggestions:
|
|
|
|
[patrickguenther](https://github.com/patrickguenther),
|
|
[davetapley](https://github.com/davetapley),
|
|
[pietrodn](https://github.com/pietrodn),
|
|
[georgeharker](https://github.com/georgeharker),
|
|
[aecay](https://github.com/aecay),
|
|
[bibz](https://github.com/bibz),
|
|
[thijss](https://github.com/Thijss),
|
|
[alexmirrington](https://github.com/alexmirrington),
|
|
[tirkarthi](https://github.com/tirkarthi),
|
|
[marksomething](https://github.com/marksomething),
|
|
[herdigiorgi](https://github.com/herdigiorgi),
|
|
[jochembroekhoff](https://github.com/jochembroekhoff),
|
|
[robinklaassen](https://github.com/robinklaassen),
|
|
[ahmetkucuk](https://github.com/ahmetkucuk),
|
|
[casparjespersen](https://github.com/casparjespersen),
|
|
[cypreess](https://github.com/cypreess),
|
|
[gastlich](https://github.com/gastlich),
|
|
[jmolinski](https://github.com/jmolinski),
|
|
[haluzpav](https://github.com/haluzpav),
|
|
[finetuned89](https://github.com/finetuned89)
|