Skip to main content

Simple callable argument inspection & filtering

This project has been archived.

The maintainers of this project have marked this project as archived. No new releases are expected.

Project description

Project Status: Unsupported – The project has reached a stable, usable state but the author(s) have ceased all work on it. A new maintainer may be desired. CI Status coverage pyversions MIT License

GitHub | PyPI | Issues | Changelog

argset provides a simple interface for determining whether a callable takes an argument with a given name, filtering a dict of potential arguments down to just those that a callable accepts, and determining any required arguments that are missing from a dict of potential arguments.

Installation

argset requires Python 3.8 or higher. Just use pip for Python 3 (You have pip, right?) to install argset and its dependencies:

python3 -m pip install argset

Examples

Inspecting a function’s arguments:

>>> from argset import argset
>>> def my_func(foo, bar):
...     print(f"foo={foo!r}")
...     print(f"bar={bar!r}")
...
>>> a = argset(my_func)
>>> "foo" in a
True
>>> "quux" in a
False

Filtering a set of arguments to just those accepted by the function:

>>> a.select({"foo": 42, "bar": 23, "quux": 17})
{'foo': 42, 'bar': 23}
>>> my_func(**a.select({"foo": 42, "bar": 23, "quux": 17}))
foo=42
bar=23

Same as above, but now the function takes **kwargs:

>>> from argset import argset
>>> def my_func2(foo, **kwargs):
...     print(f"foo={foo!r}")
...     for k, v in kwargs.items():
...          print(f"{k}={v!r}")
...
>>> a2 = argset(my_func2)
>>> "foo" in a2
True
>>> "quux" in a2
True
>>> a2.select({"foo": 42, "bar": 23, "quux": 17})
{'foo': 42, 'bar': 23, 'quux': 17}
>>> my_func2(**a2.select({"foo": 42, "bar": 23, "quux": 17}))
foo=42
bar=23
quux=17

API

argset(func: Callable) -> ArgSet

Inspects a callable and returns a summary of its arguments as an ArgSet

class ArgSet

A representation of the arguments taken by a callable. It has the following attributes & properties:

required_positional_only: int

The number of arguments that are positional-only and do not have default values

optional_positional_only: int

The number of arguments that are positional-only and have a default value

positional_only: int

The total number of positional-only arguments

required_args: frozenset[str]

The names of all positional-or-keyword or keyword-only arguments that do not have default values

optional_args: frozenset[str]

The names of all positional-or-keyword or keyword-only arguments that have default values

argnames: frozenset[str]

The names of all positional-or-keyword or keyword-only arguments

takes_args: bool

Whether the callable has an argument of the form *args

takes_kwargs: bool

Whether the callable has an argument of the form **kwargs

ArgSet objects support the in operator; an expression of the form argname in a returns True iff argname is in a.argnames or a.takes_kwargs is True.

ArgSet objects have the following methods:

ArgSet.select(kwargs: Dict[str, Any]) -> Dict[str, Any]

Returns all items in kwargs where the key is the name of a positional-or-keyword or keyword-only argument accepted by the callable. If takes_kwargs is True, the return value is a copy of kwargs.

ArgSet.missing(kwargs: Dict[str, Any]) -> FrozenSet[str]

Returns all keys in required_args that do not appear in kwargs

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

argset-0.1.1.post1.tar.gz (5.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

argset-0.1.1.post1-py3-none-any.whl (5.1 kB view details)

Uploaded Python 3

File details

Details for the file argset-0.1.1.post1.tar.gz.

File metadata

  • Download URL: argset-0.1.1.post1.tar.gz
  • Upload date:
  • Size: 5.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for argset-0.1.1.post1.tar.gz
Algorithm Hash digest
SHA256 c2b65b7a11f5d4d100c7df9fed774df13dd10d2a1dbbf21881e496bbb8ed87bf
MD5 87444ad6a9c75d3e7083f447cac3775f
BLAKE2b-256 052a2de8543f155c71d66d943f7c924ac8135503414c1b3fb79350763cd8b3b9

See more details on using hashes here.

File details

Details for the file argset-0.1.1.post1-py3-none-any.whl.

File metadata

  • Download URL: argset-0.1.1.post1-py3-none-any.whl
  • Upload date:
  • Size: 5.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for argset-0.1.1.post1-py3-none-any.whl
Algorithm Hash digest
SHA256 49e05570cf97c39c002c1e3d689fb21e11a1f29eb44529d073c1e13a64c8df32
MD5 48615db84121df0ef8872d446a1f165e
BLAKE2b-256 73df1a4eb2d1a4b030413d7997e3447567dcbbe69100bcb623ffb4321adf636a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page