In what follows python is an alias for python3.8 or pypy3.8
or any later version (python3.9, pypy3.9 and so on).
Install the latest pip & setuptools packages versions
python -m pip install --upgrade pip setuptoolsDownload and install the latest stable version from PyPI repository
python -m pip install --upgrade paradigmDownload the latest version from GitHub repository
git clone https://github.com/lycantropos/paradigm.git
cd paradigmInstall dependencies
python -m pip install -r requirements.txtInstall
python setup.py installWith setup
>>> import typing
>>> from paradigm.base import (OptionalParameter,
... ParameterKind,
... PlainSignature,
... RequiredParameter,
... signature_from_callable)
>>> from typing_extensions import Self
>>> class UpperOut:
... def __init__(self, outfile: typing.IO[typing.AnyStr]) -> None:
... self._outfile = outfile
...
... def write(self, s: typing.AnyStr) -> None:
... self._outfile.write(s.upper())
...
... def __getattr__(self, name: str) -> typing.Any:
... return getattr(self._outfile, name)
>>> def func(foo: int, bar: float, *, baz: bool = False, **kwargs: str) -> None:
... passwe can obtain a signature of
- user-defined functions
>>> signature_from_callable(func) == PlainSignature( ... RequiredParameter(annotation=int, ... kind=ParameterKind.POSITIONAL_OR_KEYWORD, ... name='foo'), ... RequiredParameter(annotation=float, ... kind=ParameterKind.POSITIONAL_OR_KEYWORD, ... name='bar'), ... OptionalParameter(annotation=bool, ... default=False, ... kind=ParameterKind.KEYWORD_ONLY, ... name='baz'), ... OptionalParameter(annotation=str, ... kind=ParameterKind.VARIADIC_KEYWORD, ... name='kwargs'), ... returns=None ... ) True
- user-defined classes
>>> signature_from_callable(UpperOut) == PlainSignature( ... RequiredParameter(annotation=typing.IO[typing.AnyStr], ... kind=ParameterKind.POSITIONAL_OR_KEYWORD, ... name='outfile'), ... returns=Self ... ) True
- user-defined classes methods
>>> signature_from_callable(UpperOut.write) == PlainSignature( ... RequiredParameter(annotation=typing.Any, ... kind=ParameterKind.POSITIONAL_OR_KEYWORD, ... name='self'), ... RequiredParameter(annotation=typing.AnyStr, ... kind=ParameterKind.POSITIONAL_OR_KEYWORD, ... name='s'), ... returns=None ... ) True
- built-in functions
>>> signature_from_callable(any) == PlainSignature( ... RequiredParameter(annotation=typing.Iterable[object], ... kind=ParameterKind.POSITIONAL_ONLY, ... name='__iterable'), ... returns=bool ... ) True
- built-in classes
>>> signature_from_callable(bool) == PlainSignature( ... OptionalParameter(annotation=object, ... kind=ParameterKind.POSITIONAL_ONLY, ... name='__o'), ... returns=Self ... ) True
- built-in classes methods
>>> signature_from_callable(float.hex) == PlainSignature( ... RequiredParameter(annotation=Self, ... kind=ParameterKind.POSITIONAL_ONLY, ... name='self'), ... returns=str ... ) True
Install bump2version.
Choose which version number category to bump following semver specification.
Test bumping version
bump2version --dry-run --verbose $CATEGORYwhere $CATEGORY is the target version number category name, possible
values are patch/minor/major.
Bump version
bump2version --verbose $CATEGORYThis will set version to major.minor.patch-alpha.
Test bumping version
bump2version --dry-run --verbose releaseBump version
bump2version --verbose releaseThis will set version to major.minor.patch.
Install dependencies
python -m pip install -r requirements-tests.txtPlainSignature
pytestInside Docker container:
- with
CPythondocker-compose --file docker-compose.cpython.yml up
- with
PyPydocker-compose --file docker-compose.pypy.yml up
Bash script (e.g. can be used in Git hooks):
-
with
CPython./run-tests.sh
or
./run-tests.sh cpython
-
with
PyPy./run-tests.sh pypy
PowerShell script (e.g. can be used in Git hooks):
- with
CPythonor.\run-tests.ps1.\run-tests.ps1 cpython - with
PyPy.\run-tests.ps1 pypy