%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:
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
pip, 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 '')
>>> Toto(this_or_that=1, anything=2, maybe_not=0)
TypeError: Expected type 'typing.Union[bool, NoneType]' for attribute 'maybe_not' but received type '')
>>> Toto(this_or_that=1, anything=2, name=3)
TypeError: Expected type '' for attribute 'name' but received type '')
>>> Toto(this_or_that=1, anything=2, value=3.0)
TypeError: Expected type '' for attribute 'value' but received type '')
>>> 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:
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
pip, 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 '')
>>> Toto(this_or_that=1, anything=2, maybe_not=0)
TypeError: Expected type 'typing.Union[bool, NoneType]' for attribute 'maybe_not' but received type '')
>>> Toto(this_or_that=1, anything=2, name=3)
TypeError: Expected type '' for attribute 'name' but received type '')
>>> Toto(this_or_that=1, anything=2, value=3.0)
TypeError: Expected type '' for attribute 'value' but received type '')
>>> 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:
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
pip, 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 '')
>>> Toto(this_or_that=1, anything=2, maybe_not=0)
TypeError: Expected type 'typing.Union[bool, NoneType]' for attribute 'maybe_not' but received type '')
>>> Toto(this_or_that=1, anything=2, name=3)
TypeError: Expected type '' for attribute 'name' but received type '')
>>> Toto(this_or_that=1, anything=2, value=3.0)
TypeError: Expected type '' for attribute 'value' but received type '')
>>> 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 - 1.0.0.post1-1
- Package Spec generated