%global _empty_manifest_terminate_build 0 Name: python-singledispatchmethod Version: 1.0 Release: 1 Summary: Backport of @functools.singledispatchmethod to Python 2.7-3.7. License: MIT URL: https://github.com/ikalnytskyi/singledispatchmethod Source0: https://mirrors.nju.edu.cn/pypi/web/packages/be/e0/20ecc21453d7f052ee04d0d9b3305798e0f6afc619885c9aaee4ba86b25c/singledispatchmethod-1.0.tar.gz BuildArch: noarch %description Backport of ``@functools.singledispatchmethod`` decorator [1]_ from Python 3.8 to Python 2.7-3.7. These are merely ~30 lines of code, but why bother yourself with copypasta? $ pip install singledispatchmethod The decorator transforms a method into a single-dispatch [2]_ generic function [3]_. Note that since the dispatch happens on the type of the first non-self or non-cls argument, you have to create your function accordingly: from singledispatchmethod import singledispatchmethod class Negator: @singledispatchmethod def neg(self, arg): raise NotImplementedError("Cannot negate a") @neg.register def _(self, arg: int): return -arg @neg.register def _(self, arg: bool): return not arg ``@singledispatchmethod`` supports nesting with other decorators such as ``@classmethod``. However, in order to expose ``dispatcher.register``, ``@singledispatchmethod`` must be the *outer most* decorator. Here is the ``Negator`` class with the ``neg`` methods being class bound: from singledispatchmethod import singledispatchmethod class Negator: @singledispatchmethod @classmethod def neg(cls, arg): raise NotImplementedError("Cannot negate a") @neg.register @classmethod def _(cls, arg: int): return -arg @neg.register @classmethod def _(cls, arg: bool): return not arg The same pattern can be used for other similar decorators, such as ``@staticmethod`` or ``@abstractmethod``. Please note, since ``@singledispatchmethod`` decorator is based on ``@functools.singledispatch``, type annotations are supported by ``dispatcher.register`` only since Python 3.7. %package -n python3-singledispatchmethod Summary: Backport of @functools.singledispatchmethod to Python 2.7-3.7. Provides: python-singledispatchmethod BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-singledispatchmethod Backport of ``@functools.singledispatchmethod`` decorator [1]_ from Python 3.8 to Python 2.7-3.7. These are merely ~30 lines of code, but why bother yourself with copypasta? $ pip install singledispatchmethod The decorator transforms a method into a single-dispatch [2]_ generic function [3]_. Note that since the dispatch happens on the type of the first non-self or non-cls argument, you have to create your function accordingly: from singledispatchmethod import singledispatchmethod class Negator: @singledispatchmethod def neg(self, arg): raise NotImplementedError("Cannot negate a") @neg.register def _(self, arg: int): return -arg @neg.register def _(self, arg: bool): return not arg ``@singledispatchmethod`` supports nesting with other decorators such as ``@classmethod``. However, in order to expose ``dispatcher.register``, ``@singledispatchmethod`` must be the *outer most* decorator. Here is the ``Negator`` class with the ``neg`` methods being class bound: from singledispatchmethod import singledispatchmethod class Negator: @singledispatchmethod @classmethod def neg(cls, arg): raise NotImplementedError("Cannot negate a") @neg.register @classmethod def _(cls, arg: int): return -arg @neg.register @classmethod def _(cls, arg: bool): return not arg The same pattern can be used for other similar decorators, such as ``@staticmethod`` or ``@abstractmethod``. Please note, since ``@singledispatchmethod`` decorator is based on ``@functools.singledispatch``, type annotations are supported by ``dispatcher.register`` only since Python 3.7. %package help Summary: Development documents and examples for singledispatchmethod Provides: python3-singledispatchmethod-doc %description help Backport of ``@functools.singledispatchmethod`` decorator [1]_ from Python 3.8 to Python 2.7-3.7. These are merely ~30 lines of code, but why bother yourself with copypasta? $ pip install singledispatchmethod The decorator transforms a method into a single-dispatch [2]_ generic function [3]_. Note that since the dispatch happens on the type of the first non-self or non-cls argument, you have to create your function accordingly: from singledispatchmethod import singledispatchmethod class Negator: @singledispatchmethod def neg(self, arg): raise NotImplementedError("Cannot negate a") @neg.register def _(self, arg: int): return -arg @neg.register def _(self, arg: bool): return not arg ``@singledispatchmethod`` supports nesting with other decorators such as ``@classmethod``. However, in order to expose ``dispatcher.register``, ``@singledispatchmethod`` must be the *outer most* decorator. Here is the ``Negator`` class with the ``neg`` methods being class bound: from singledispatchmethod import singledispatchmethod class Negator: @singledispatchmethod @classmethod def neg(cls, arg): raise NotImplementedError("Cannot negate a") @neg.register @classmethod def _(cls, arg: int): return -arg @neg.register @classmethod def _(cls, arg: bool): return not arg The same pattern can be used for other similar decorators, such as ``@staticmethod`` or ``@abstractmethod``. Please note, since ``@singledispatchmethod`` decorator is based on ``@functools.singledispatch``, type annotations are supported by ``dispatcher.register`` only since Python 3.7. %prep %autosetup -n singledispatchmethod-1.0 %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-singledispatchmethod -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Tue Apr 11 2023 Python_Bot - 1.0-1 - Package Spec generated