diff options
Diffstat (limited to 'python-dataclass-dict-convert.spec')
| -rw-r--r-- | python-dataclass-dict-convert.spec | 296 |
1 files changed, 296 insertions, 0 deletions
diff --git a/python-dataclass-dict-convert.spec b/python-dataclass-dict-convert.spec new file mode 100644 index 0000000..11f64c9 --- /dev/null +++ b/python-dataclass-dict-convert.spec @@ -0,0 +1,296 @@ +%global _empty_manifest_terminate_build 0 +Name: python-dataclass-dict-convert +Version: 1.7.1 +Release: 1 +Summary: Convert between Dataclasses and dict/json +License: MIT +URL: https://gitlab.ilabt.imec.be/wvdemeer/dataclass-dict-convert +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/5d/f0/5e9c066557c40813be27106aaa51cc72050cc61dde168b9b4a4525eb82cd/dataclass-dict-convert-1.7.1.tar.gz +BuildArch: noarch + +Requires: python3-dateutil +Requires: python3-stringcase + +%description +# Dataclass Dict Convert + +This library converts between python [dataclasses](https://docs.python.org/3/library/dataclasses.html#dataclasses.dataclass) and dicts (and json). + +It was created because when using the [dataclasses-json](https://pypi.org/project/dataclasses-json/) library for my use case, I ran into limitations and performance issues. +(There's also [typed-json-dataclass](https://pypi.org/project/typed-json-dataclass) but I haven't evaluated that library.) + +Since creating this library, I've discovered [Pydentic](https://pypi.org/project/pydentic/), which is a much more professional library, that in 99% of cases will be much more suitable than this library. +So I strongly recommend using Pydentic. If you use `dataclass-dict-convert`, beware that it is poorly maintained, not very well documented, may contain some bugs, and has some strange edge cases where it doesn't work. + +`dataclass-dict-convert` supports lists, optionals, dicts, enums, nested dataclasses, etc. +It handles dates using RFC3339 (and enforces timezones and timezone aware `datetime`). + +Example: + +```python +from dataclasses import dataclass +from stringcase import camelcase +from typing import Optional, List + +from dataclass_dict_convert import dataclass_dict_convert + + +@dataclass_dict_convert(dict_letter_case=camelcase) +@dataclass(frozen=True) +class TestB: + an_int: int + a_str: str + a_float: float + a_bool: bool + + +@dataclass_dict_convert(dict_letter_case=camelcase) +@dataclass(frozen=True) +class Test: + nestedClass: TestB + nestedInOpt: Optional[TestB] + nestedInList: List[TestB] + + +the_instanceB1 = TestB(1, 'foo', 0.1, True) +the_instanceB2 = TestB(2, 'bar', 0.2, False) +the_instanceB3 = TestB(3, 'baz', 0.3, True) +the_instanceB4 = TestB(4, 'huh', 0.4, False) +the_instance = Test(the_instanceB1, the_instanceB2, [the_instanceB3, the_instanceB4]) +the_dict = { + 'nestedClass': {'anInt': 1, 'aStr': 'foo', 'aFloat': 0.1, 'aBool': True, }, + 'nestedInOpt': {'anInt': 2, 'aStr': 'bar', 'aFloat': 0.2, 'aBool': False, }, + 'nestedInList': [ + {'anInt': 3, 'aStr': 'baz', 'aFloat': 0.3, 'aBool': True, }, + {'anInt': 4, 'aStr': 'huh', 'aFloat': 0.4, 'aBool': False, }, + ], +} + +expected = the_dict +actual = the_instance.to_dict() +assert actual == expected + +expected = the_instance +actual = Test.from_dict(the_dict) +assert actual == expected +``` + +The library also includes: +- RFC3339 tools (the default format for converting datetime to string), +- dataclass type checking tools +- dataclass copy method generator +- dataclass multiline repr (replace auto generated repr for dataclasses by a multiline version) + +Links: +- Gitlab: https://gitlab.ilabt.imec.be/wvdemeer/dataclass-dict-convert +- PyPi: https://pypi.org/project/dataclass-dict-convert/ + + + + +%package -n python3-dataclass-dict-convert +Summary: Convert between Dataclasses and dict/json +Provides: python-dataclass-dict-convert +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-dataclass-dict-convert +# Dataclass Dict Convert + +This library converts between python [dataclasses](https://docs.python.org/3/library/dataclasses.html#dataclasses.dataclass) and dicts (and json). + +It was created because when using the [dataclasses-json](https://pypi.org/project/dataclasses-json/) library for my use case, I ran into limitations and performance issues. +(There's also [typed-json-dataclass](https://pypi.org/project/typed-json-dataclass) but I haven't evaluated that library.) + +Since creating this library, I've discovered [Pydentic](https://pypi.org/project/pydentic/), which is a much more professional library, that in 99% of cases will be much more suitable than this library. +So I strongly recommend using Pydentic. If you use `dataclass-dict-convert`, beware that it is poorly maintained, not very well documented, may contain some bugs, and has some strange edge cases where it doesn't work. + +`dataclass-dict-convert` supports lists, optionals, dicts, enums, nested dataclasses, etc. +It handles dates using RFC3339 (and enforces timezones and timezone aware `datetime`). + +Example: + +```python +from dataclasses import dataclass +from stringcase import camelcase +from typing import Optional, List + +from dataclass_dict_convert import dataclass_dict_convert + + +@dataclass_dict_convert(dict_letter_case=camelcase) +@dataclass(frozen=True) +class TestB: + an_int: int + a_str: str + a_float: float + a_bool: bool + + +@dataclass_dict_convert(dict_letter_case=camelcase) +@dataclass(frozen=True) +class Test: + nestedClass: TestB + nestedInOpt: Optional[TestB] + nestedInList: List[TestB] + + +the_instanceB1 = TestB(1, 'foo', 0.1, True) +the_instanceB2 = TestB(2, 'bar', 0.2, False) +the_instanceB3 = TestB(3, 'baz', 0.3, True) +the_instanceB4 = TestB(4, 'huh', 0.4, False) +the_instance = Test(the_instanceB1, the_instanceB2, [the_instanceB3, the_instanceB4]) +the_dict = { + 'nestedClass': {'anInt': 1, 'aStr': 'foo', 'aFloat': 0.1, 'aBool': True, }, + 'nestedInOpt': {'anInt': 2, 'aStr': 'bar', 'aFloat': 0.2, 'aBool': False, }, + 'nestedInList': [ + {'anInt': 3, 'aStr': 'baz', 'aFloat': 0.3, 'aBool': True, }, + {'anInt': 4, 'aStr': 'huh', 'aFloat': 0.4, 'aBool': False, }, + ], +} + +expected = the_dict +actual = the_instance.to_dict() +assert actual == expected + +expected = the_instance +actual = Test.from_dict(the_dict) +assert actual == expected +``` + +The library also includes: +- RFC3339 tools (the default format for converting datetime to string), +- dataclass type checking tools +- dataclass copy method generator +- dataclass multiline repr (replace auto generated repr for dataclasses by a multiline version) + +Links: +- Gitlab: https://gitlab.ilabt.imec.be/wvdemeer/dataclass-dict-convert +- PyPi: https://pypi.org/project/dataclass-dict-convert/ + + + + +%package help +Summary: Development documents and examples for dataclass-dict-convert +Provides: python3-dataclass-dict-convert-doc +%description help +# Dataclass Dict Convert + +This library converts between python [dataclasses](https://docs.python.org/3/library/dataclasses.html#dataclasses.dataclass) and dicts (and json). + +It was created because when using the [dataclasses-json](https://pypi.org/project/dataclasses-json/) library for my use case, I ran into limitations and performance issues. +(There's also [typed-json-dataclass](https://pypi.org/project/typed-json-dataclass) but I haven't evaluated that library.) + +Since creating this library, I've discovered [Pydentic](https://pypi.org/project/pydentic/), which is a much more professional library, that in 99% of cases will be much more suitable than this library. +So I strongly recommend using Pydentic. If you use `dataclass-dict-convert`, beware that it is poorly maintained, not very well documented, may contain some bugs, and has some strange edge cases where it doesn't work. + +`dataclass-dict-convert` supports lists, optionals, dicts, enums, nested dataclasses, etc. +It handles dates using RFC3339 (and enforces timezones and timezone aware `datetime`). + +Example: + +```python +from dataclasses import dataclass +from stringcase import camelcase +from typing import Optional, List + +from dataclass_dict_convert import dataclass_dict_convert + + +@dataclass_dict_convert(dict_letter_case=camelcase) +@dataclass(frozen=True) +class TestB: + an_int: int + a_str: str + a_float: float + a_bool: bool + + +@dataclass_dict_convert(dict_letter_case=camelcase) +@dataclass(frozen=True) +class Test: + nestedClass: TestB + nestedInOpt: Optional[TestB] + nestedInList: List[TestB] + + +the_instanceB1 = TestB(1, 'foo', 0.1, True) +the_instanceB2 = TestB(2, 'bar', 0.2, False) +the_instanceB3 = TestB(3, 'baz', 0.3, True) +the_instanceB4 = TestB(4, 'huh', 0.4, False) +the_instance = Test(the_instanceB1, the_instanceB2, [the_instanceB3, the_instanceB4]) +the_dict = { + 'nestedClass': {'anInt': 1, 'aStr': 'foo', 'aFloat': 0.1, 'aBool': True, }, + 'nestedInOpt': {'anInt': 2, 'aStr': 'bar', 'aFloat': 0.2, 'aBool': False, }, + 'nestedInList': [ + {'anInt': 3, 'aStr': 'baz', 'aFloat': 0.3, 'aBool': True, }, + {'anInt': 4, 'aStr': 'huh', 'aFloat': 0.4, 'aBool': False, }, + ], +} + +expected = the_dict +actual = the_instance.to_dict() +assert actual == expected + +expected = the_instance +actual = Test.from_dict(the_dict) +assert actual == expected +``` + +The library also includes: +- RFC3339 tools (the default format for converting datetime to string), +- dataclass type checking tools +- dataclass copy method generator +- dataclass multiline repr (replace auto generated repr for dataclasses by a multiline version) + +Links: +- Gitlab: https://gitlab.ilabt.imec.be/wvdemeer/dataclass-dict-convert +- PyPi: https://pypi.org/project/dataclass-dict-convert/ + + + + +%prep +%autosetup -n dataclass-dict-convert-1.7.1 + +%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-dataclass-dict-convert -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Mon May 15 2023 Python_Bot <Python_Bot@openeuler.org> - 1.7.1-1 +- Package Spec generated |
