In what follows python is an alias for python3.10
or any later version (python3.11 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
python -m pip install -e '.'With 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:
... pass
...we can obtain a signature of
- user-defined functions
>>> signature_from_callable(func) == PlainSignature( ... RequiredParameter( ... annotation=int, ... kind=ParameterKind.POSITIONAL_ONLY, ... 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, ... default=False, ... 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 bump-my-version.
Choose which version number category to bump following semver specification.
Test bumping version
bump-my-version bump --dry-run --verbose $CATEGORYwhere $CATEGORY is the target version number category name, possible
values are patch/minor/major.
Bump version
bump-my-version bump --verbose $CATEGORYThis will set version to major.minor.patch-alpha.
Test bumping version
bump-my-version bump --dry-run --verbose releaseBump version
bump-my-version bump --verbose releaseThis will set version to major.minor.patch.
Install dependencies
python -m pip install -r requirements-tests.txtPlain
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