Skip to content

lycantropos/paradigm

Repository files navigation

paradigm

In what follows python is an alias for python3.10 or any later version (python3.11 and so on).

Installation

Install the latest pip & setuptools packages versions

python -m pip install --upgrade pip setuptools

User

Download and install the latest stable version from PyPI repository

python -m pip install --upgrade paradigm

Developer

Download the latest version from GitHub repository

git clone https://github.com/lycantropos/paradigm.git
cd paradigm

Install

python -m pip install -e '.'

Usage

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

Development

Bumping version

Preparation

Install bump-my-version.

Pre-release

Choose which version number category to bump following semver specification.

Test bumping version

bump-my-version bump --dry-run --verbose $CATEGORY

where $CATEGORY is the target version number category name, possible values are patch/minor/major.

Bump version

bump-my-version bump --verbose $CATEGORY

This will set version to major.minor.patch-alpha.

Release

Test bumping version

bump-my-version bump --dry-run --verbose release

Bump version

bump-my-version bump --verbose release

This will set version to major.minor.patch.

Running tests

Install dependencies

python -m pip install -r requirements-tests.txt

Plain

pytest

Inside Docker container:

  • with CPython
    docker-compose --file docker-compose.cpython.yml up
  • with PyPy
    docker-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 CPython
    .\run-tests.ps1
    or
    .\run-tests.ps1 cpython
  • with PyPy
    .\run-tests.ps1 pypy

About

Python objects metadata parser (functions/classes/methods signatures)

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages