summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--python-enforce-typing.spec249
-rw-r--r--sources1
3 files changed, 251 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..af8007b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/enforce-typing-1.0.0.post1.tar.gz
diff --git a/python-enforce-typing.spec b/python-enforce-typing.spec
new file mode 100644
index 0000000..8e2390f
--- /dev/null
+++ b/python-enforce-typing.spec
@@ -0,0 +1,249 @@
+%global _empty_manifest_terminate_build 0
+Name: python-enforce-typing
+Version: 1.0.0.post1
+Release: 1
+Summary: An easy to use decorator to enforce static typing for function and dataclasses.
+License: GPL
+URL: https://github.com/matchawine/python-enforce-typing
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/c0/7e/aa1aef70bafe87d88184c20f140596995127ecc7949ca50410b43993ee10/enforce-typing-1.0.0.post1.tar.gz
+BuildArch: noarch
+
+
+%description
+Adds a simple decorator `enforce_types` that enables enforcing strict
+typing on a function or dataclass using annotations.
+
+Works with collection types and subtypes for example `Dict[str,
+Tuple[int, int]]`, and with special types as `Optional` and `Any`.
+
+Seeing as this uses type annotations from
+[PEP 484](https://www.python.org/dev/peps/pep-0484/), \>=Python 3.5 is
+required.
+
+PyPi project page: <https://pypi.org/project/enforce-typing/>
+
+Heavily inspired from [this SO post](https://stackoverflow.com/questions/50563546/validating-detailed-types-in-python-dataclasses/50622643#50622643) so credit goes mostly to him.
+
+## Installation
+
+Other than downloading from PyPi with
+<span class="title-ref">pip</span>, you may also clone the repository
+and run the usual setuptools process:
+
+ $> git clone https://github.com/matchawine/python-enforce-typing.git && cd python-enforce-typing
+ $> python setup.py {build,install}
+
+## Usage
+
+``` python
+from typing import Any, Union, Optional
+from dataclasses import dataclass
+from enforce_typing import enforce_types
+
+@enforce_types
+@dataclass(frozen=True)
+class Toto(object):
+ this_or_that: Union[str, int]
+ anything: Any
+ name: str = ""
+ value: int = 1
+ maybe_not: Optional[bool] = None
+
+>>> Toto(this_or_that=list(), anything=2)
+TypeError: Expected type 'typing.Union[str, int]' for attribute 'this_or_that' but received type '<class 'list'>')
+
+>>> Toto(this_or_that=1, anything=2, maybe_not=0)
+TypeError: Expected type 'typing.Union[bool, NoneType]' for attribute 'maybe_not' but received type '<class 'int'>')
+
+>>> Toto(this_or_that=1, anything=2, name=3)
+TypeError: Expected type '<class 'str'>' for attribute 'name' but received type '<class 'int'>')
+
+>>> Toto(this_or_that=1, anything=2, value=3.0)
+TypeError: Expected type '<class 'int'>' for attribute 'value' but received type '<class 'float'>')
+
+>>> Toto(this_or_that=1, anything=2)
+Toto(this_or_that=1, anything=2, name='', value=1, maybe_not=None)
+
+>>> Toto(this_or_that="titi", anything=list(), maybe_not=False)
+Toto(this_or_that='titi', anything=[], name='', value=1, maybe_not=False)
+```
+
+
+
+
+%package -n python3-enforce-typing
+Summary: An easy to use decorator to enforce static typing for function and dataclasses.
+Provides: python-enforce-typing
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-enforce-typing
+Adds a simple decorator `enforce_types` that enables enforcing strict
+typing on a function or dataclass using annotations.
+
+Works with collection types and subtypes for example `Dict[str,
+Tuple[int, int]]`, and with special types as `Optional` and `Any`.
+
+Seeing as this uses type annotations from
+[PEP 484](https://www.python.org/dev/peps/pep-0484/), \>=Python 3.5 is
+required.
+
+PyPi project page: <https://pypi.org/project/enforce-typing/>
+
+Heavily inspired from [this SO post](https://stackoverflow.com/questions/50563546/validating-detailed-types-in-python-dataclasses/50622643#50622643) so credit goes mostly to him.
+
+## Installation
+
+Other than downloading from PyPi with
+<span class="title-ref">pip</span>, you may also clone the repository
+and run the usual setuptools process:
+
+ $> git clone https://github.com/matchawine/python-enforce-typing.git && cd python-enforce-typing
+ $> python setup.py {build,install}
+
+## Usage
+
+``` python
+from typing import Any, Union, Optional
+from dataclasses import dataclass
+from enforce_typing import enforce_types
+
+@enforce_types
+@dataclass(frozen=True)
+class Toto(object):
+ this_or_that: Union[str, int]
+ anything: Any
+ name: str = ""
+ value: int = 1
+ maybe_not: Optional[bool] = None
+
+>>> Toto(this_or_that=list(), anything=2)
+TypeError: Expected type 'typing.Union[str, int]' for attribute 'this_or_that' but received type '<class 'list'>')
+
+>>> Toto(this_or_that=1, anything=2, maybe_not=0)
+TypeError: Expected type 'typing.Union[bool, NoneType]' for attribute 'maybe_not' but received type '<class 'int'>')
+
+>>> Toto(this_or_that=1, anything=2, name=3)
+TypeError: Expected type '<class 'str'>' for attribute 'name' but received type '<class 'int'>')
+
+>>> Toto(this_or_that=1, anything=2, value=3.0)
+TypeError: Expected type '<class 'int'>' for attribute 'value' but received type '<class 'float'>')
+
+>>> Toto(this_or_that=1, anything=2)
+Toto(this_or_that=1, anything=2, name='', value=1, maybe_not=None)
+
+>>> Toto(this_or_that="titi", anything=list(), maybe_not=False)
+Toto(this_or_that='titi', anything=[], name='', value=1, maybe_not=False)
+```
+
+
+
+
+%package help
+Summary: Development documents and examples for enforce-typing
+Provides: python3-enforce-typing-doc
+%description help
+Adds a simple decorator `enforce_types` that enables enforcing strict
+typing on a function or dataclass using annotations.
+
+Works with collection types and subtypes for example `Dict[str,
+Tuple[int, int]]`, and with special types as `Optional` and `Any`.
+
+Seeing as this uses type annotations from
+[PEP 484](https://www.python.org/dev/peps/pep-0484/), \>=Python 3.5 is
+required.
+
+PyPi project page: <https://pypi.org/project/enforce-typing/>
+
+Heavily inspired from [this SO post](https://stackoverflow.com/questions/50563546/validating-detailed-types-in-python-dataclasses/50622643#50622643) so credit goes mostly to him.
+
+## Installation
+
+Other than downloading from PyPi with
+<span class="title-ref">pip</span>, you may also clone the repository
+and run the usual setuptools process:
+
+ $> git clone https://github.com/matchawine/python-enforce-typing.git && cd python-enforce-typing
+ $> python setup.py {build,install}
+
+## Usage
+
+``` python
+from typing import Any, Union, Optional
+from dataclasses import dataclass
+from enforce_typing import enforce_types
+
+@enforce_types
+@dataclass(frozen=True)
+class Toto(object):
+ this_or_that: Union[str, int]
+ anything: Any
+ name: str = ""
+ value: int = 1
+ maybe_not: Optional[bool] = None
+
+>>> Toto(this_or_that=list(), anything=2)
+TypeError: Expected type 'typing.Union[str, int]' for attribute 'this_or_that' but received type '<class 'list'>')
+
+>>> Toto(this_or_that=1, anything=2, maybe_not=0)
+TypeError: Expected type 'typing.Union[bool, NoneType]' for attribute 'maybe_not' but received type '<class 'int'>')
+
+>>> Toto(this_or_that=1, anything=2, name=3)
+TypeError: Expected type '<class 'str'>' for attribute 'name' but received type '<class 'int'>')
+
+>>> Toto(this_or_that=1, anything=2, value=3.0)
+TypeError: Expected type '<class 'int'>' for attribute 'value' but received type '<class 'float'>')
+
+>>> Toto(this_or_that=1, anything=2)
+Toto(this_or_that=1, anything=2, name='', value=1, maybe_not=None)
+
+>>> Toto(this_or_that="titi", anything=list(), maybe_not=False)
+Toto(this_or_that='titi', anything=[], name='', value=1, maybe_not=False)
+```
+
+
+
+
+%prep
+%autosetup -n enforce-typing-1.0.0.post1
+
+%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-enforce-typing -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Wed May 10 2023 Python_Bot <Python_Bot@openeuler.org> - 1.0.0.post1-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..72cf51e
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+7bad80e84559be98dd6891cad61bcdb5 enforce-typing-1.0.0.post1.tar.gz