summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--python-dataclass-dict-convert.spec296
-rw-r--r--sources1
3 files changed, 298 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..988f62e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/dataclass-dict-convert-1.7.1.tar.gz
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
diff --git a/sources b/sources
new file mode 100644
index 0000000..3fb0f0f
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+971e385a52511549e602f3fc4ff06831 dataclass-dict-convert-1.7.1.tar.gz