Skip to main content

System-wide Python package discovery, validation, and allow-listing.

Project description

fetter

System-wide Python package discovery, validation, and allow-listing.

The fetter command-line tool scans and validates Python packages across virtual environments or entire systems, ensuring packages conform to specified requirements or lock files. It identifies unapproved or vulnerable packages, supports continuous integration through 'pre-commit', and offers excellent performance thanks to a multi-threaded Rust implementation.

  • 🔎 System Scanning: Finds Python packages across system environments.
  • ⚖️ Package Validation: Checks installed packages against requirements.txt, pyproject.toml, or lock files sourced locally, via URLs, or via git repositories.
  • 🛡️ Vulnerability Audit: Scans packages for security vulnerabilites in the Open Source Vulnerability database.
  • ⚙️ CI Integration: Validate and audit with pre-commit hooks.
  • 🚀 Fast: Multi-threaded Rust implementation.
  • 🪢 Bound Requirements: Derive lock-file-like bound requirements from observed system packages.
  • 🧹 Search and Purge: Find and remove packages across environments.
  • 🧩 Flexible Output: Display results in terminal or export to delimited files.

Installing fetter

While available as a pure Rust binary (crates), fetter is easily installed via a Python package (pypi):

$ pip install fetter
$ fetter --help

Alternatively, as fetter can operate on multiple virtual environments, installation via pipx might be desirable:

$ pipx install fetter
$ fetter --version

Using fetter from the command line

For complete command-line documentation, see CLI Documentation.

By default, fetter will search for all packages in site-packages directories discoverable from all Python executables found in the system or user virtual environments. Depending on your system, this command might take several seconds.

$ fetter scan

To limit scanning to site-packages directories associated with a specific Python executable, the --exe (or -e) argument can be supplied.

$ fetter -e python3 scan
Package                   Site
certifi-2024.8.30         ~/.env-wp/lib/python3.12/site-packages
charset_normalizer-3.4.0  ~/.env-wp/lib/python3.12/site-packages
idna-3.10                 ~/.env-wp/lib/python3.12/site-packages
jinja2-3.1.3              ~/.env-wp/lib/python3.12/site-packages
markupsafe-2.1.5          ~/.env-wp/lib/python3.12/site-packages
pip-21.1.1                ~/.env-wp/lib/python3.12/site-packages
requests-2.32.3           ~/.env-wp/lib/python3.12/site-packages
setuptools-56.0.0         ~/.env-wp/lib/python3.12/site-packages
urllib3-2.2.3             ~/.env-wp/lib/python3.12/site-packages
zipp-3.18.1               ~/.env-wp/lib/python3.12/site-packages

This evnironment was built from this "requirements.txt":

jinja2==3.1.3
zipp==3.18.1
requests==2.32.3

To validate that the installed packages match the packages specified in "requirements.txt", we can use the fetter validate command, again targeting our active Python with -e python3, and providing "requirements.txt" to the --bound argument.

$ fetter -e python3 validate --bound requirements.txt
Package                   Dependency  Explain     Sites
certifi-2024.8.30                     Unrequired  ~/.env-wp/lib/python3.12/site-packages
charset_normalizer-3.4.0              Unrequired  ~/.env-wp/lib/python3.12/site-packages
idna-3.10                             Unrequired  ~/.env-wp/lib/python3.12/site-packages
markupsafe-2.1.5                      Unrequired  ~/.env-wp/lib/python3.12/site-packages
pip-21.1.1                            Unrequired  ~/.env-wp/lib/python3.12/site-packages
setuptools-56.0.0                     Unrequired  ~/.env-wp/lib/python3.12/site-packages
urllib3-2.2.3                         Unrequired  ~/.env-wp/lib/python3.12/site-packages

The --superset command can be provided to accept packages that are not defined in the bound requirements.

$ fetter -e python3 validate --bound requirements.txt --superset

If we update zipp to version 3.20.2 and re-run validation, fetter will report these as "Misdefined" records

$ fetter -e python3 validate --bound requirements.txt --superset
Package      Dependency    Explain     Sites
zipp-3.20.2  zipp==3.18.1  Misdefined  ~/.env-wp/lib/python3.12/site-packages

If we remove the zipp package entirely, fetter identifies this as a "Missing" record:

$ fetter -e python3 validate --bound requirements.txt --superset
Package  Dependency    Explain  Sites
         zipp==3.18.1  Missing

If we want to permit the absence of specified packages, the --subset flag can be used:

fetter -e python3 validate --bound requirements.txt --superset --subset

Using the fetter audit command, details are provided for every vulnerability associated with installed packages.

$ fetter -e python3 audit
Package            Vulnerabilities      Attribute  Value
jinja2-3.1.3       GHSA-h75v-3vvj-5mfj  URL        https://osv.dev/vulnerability/GHSA-h75v-3vvj-5mfj
                                        Summary    Jinja vulnerable to HTML attribute injection when passing ...
                                        Reference  https://nvd.nist.gov/vuln/detail/CVE-2024-34064
                                        Severity   CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N
pip-21.1.1         GHSA-mq26-g339-26xf  URL        https://osv.dev/vulnerability/GHSA-mq26-g339-26xf
                                        Summary    Command Injection in pip when used with Mercurial
                                        Reference  https://nvd.nist.gov/vuln/detail/CVE-2023-5752
                                        Severity   CVSS:4.0/AV:L/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA
                   PYSEC-2023-228       URL        https://osv.dev/vulnerability/PYSEC-2023-228
                                        Reference  https://mail.python.org/archives/list/security-announce@py...
                                        Severity   CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N
setuptools-56.0.0  GHSA-cx63-2mw6-8hw5  URL        https://osv.dev/vulnerability/GHSA-cx63-2mw6-8hw5
                                        Summary    setuptools vulnerable to Command Injection via package URL
                                        Reference  https://nvd.nist.gov/vuln/detail/CVE-2024-6345
                                        Severity   CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA
                   GHSA-r9hx-vwmv-q579  URL        https://osv.dev/vulnerability/GHSA-r9hx-vwmv-q579
                                        Summary    pypa/setuptools vulnerable to Regular Expression Denial of...
                                        Reference  https://nvd.nist.gov/vuln/detail/CVE-2022-40897
                                        Severity   CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
                   PYSEC-2022-43012     URL        https://osv.dev/vulnerability/PYSEC-2022-43012
                                        Reference  https://github.com/pypa/setuptools/blob/fe8a98e696241487ba...
zipp-3.18.1        GHSA-jfmj-5v4g-7637  URL        https://osv.dev/vulnerability/GHSA-jfmj-5v4g-7637
                                        Summary    zipp Denial of Service vulnerability
                                        Reference  https://nvd.nist.gov/vuln/detail/CVE-2024-5569
                                        Severity   CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA

For additional discussion and examples of fetter commands and functionality, see System-Wide Python Package Control.

Using fetter with pre-commit

Two fetter commands can be run via pre-commit hooks for continuous integration of Python package controls.

Running fetter validate with pre-commit.

The fetter validate command permits validating that the actually installed Python packages in the current environment are what are defined to be installed, as specified by a requirements.txt file, a pyproject.toml file, or a lock file such as one produced by uv.

The fetter validate command takes a required argument, --bound, to specify that path or URL to the file to be used to define the bound requirements. The optional --superset argument permits packages not defined in the bound requirements to be present. The optional --subset argument permits not all packages in the bound requirements to be present.

To run fetter validate with pre-commit, add the following to your .pre-commit-config.yaml.

repos:
- repo: https://github.com/fetter-io/fetter-rs
  rev: v1.0.0
  hooks:
    - id: fetter-validate
      args: [--bound, {FILE}, --superset, --subset]

Running fetter audit with pre-commit.

The fetter audit command will check for cybersecurity vulnerabilities issued for all installed Python packages in the current environment. Vulnerabilities are searched for in the Open Source Vulnerability (OSV) database.

To run fetter audit with pre-commit, add the following to your .pre-commit-config.yaml. Note that, as searching vulnerabilities can take time, this hook is likely better deployed as a pre-push rather than a pre-commit hook.

repos:
- repo: https://github.com/fetter-io/fetter-rs
  rev: v1.0.0
  hooks:
    - id: fetter-audit

Command Line Interface Documentation

Global Options

  • --exe, -e <FILES>: Provide zero or more executable paths to derive site package locations. If omitted, all discoverable executables will be used.
  • --quiet, -q: Disable logging and terminal animation.
  • --user_site: Force inclusion of the user site-packages, even if it is not activated. Defaults to only including if the interpreter is configured to use it.

Command: fetter scan

Scan the environment to report on installed packages.

Subcommands

  • display: Show scan results in the terminal.
  • write: Save scan results to a file.
    • --output, -o <FILE>: Specify the output file.
    • --delimiter, -d <char>: Set the delimiter for the file (default: ,).

Command: fetter search

Search the environment to report on installed packages based on a pattern.

Options

  • --pattern, -p <STRING>: Specify a glob-like pattern to match packages.
  • --case: Enable case-sensitive pattern matching.

Subcommands

  • display: Show search results in the terminal.
  • write: Save search results to a file.
    • --output, -o <FILE>: Specify the output file.
    • --delimiter, -d <char>: Set the delimiter for the file (default: ,).

Command: fetter count

Count discovered executables, sites, and packages.

Subcommands

  • display: Show count results in the terminal.
  • write: Save count results to a file.
    • --output, -o <FILE>: Specify the output file.
    • --delimiter, -d <char>: Set the delimiter for the file (default: ,).

Command: fetter derive

Derive new requirements from discovered packages.

Options

  • --anchor, -a <BOUND>: Set the nature of the bound in the derived requirements. (Use a value from CliAnchor)

Subcommands

  • display: Show derived requirements in the terminal.
  • write: Save derived requirements to a file.
    • --output, -o <FILE>: Specify the output file.

Command: fetter validate

Validate if packages conform to a specified validation target.

Options

  • --bound, -b <FILE>: Path to the file containing bound requirements.
  • --subset: Allow the observed packages to be a subset of the bound requirements.
  • --superset: Allow the observed packages to be a superset of the bound requirements.

Subcommands

  • display: Show validation results in the terminal.
  • json: Print validation results in JSON format.
  • write: Save validation results to a file.
    • --output, -o <FILE>: Specify the output file.
    • --delimiter, -d <char>: Set the delimiter for the file (default: ,).
  • exit: Return an exit code (0 for success, customizable for errors).
    • --code, -c <INT>: Specify the error code (default: 3).

Command: fetter audit

Search for security vulnerabilities in packages via the OSV DB.

Options

  • --pattern, -p <STRING>: Specify a glob-like pattern to select packages (default: *).
  • --case: Enable case-sensitive pattern matching.

Subcommands

  • display: Show audit results in the terminal.
  • write: Save audit results to a file.
    • --output, -o <FILE>: Specify the output file.
    • --delimiter, -d <char>: Set the delimiter for the file (default: ,).

Command: fetter unpack_count

Count all installed package artifacts.

Options

  • --pattern, -p <STRING>: Specify a glob-like pattern to select packages (default: *).
  • --case: Enable case-sensitive pattern matching.

Subcommands

  • display: Show artifact counts in the terminal.
  • write: Save artifact counts to a file.
    • --output, -o <FILE>: Specify the output file.
    • --delimiter, -d <char>: Set the delimiter for the file (default: ,).

Command: fetter unpack_files

List the file names of all installed package artifacts.

Options

  • --pattern, -p <STRING>: Specify a glob-like pattern to select packages (default: *).
  • --case: Enable case-sensitive pattern matching.

Subcommands

  • display: Show artifact file names in the terminal.
  • write: Save artifact file names to a file.
    • --output, -o <FILE>: Specify the output file.
    • --delimiter, -d <char>: Set the delimiter for the file (default: ,).

Command: fetter purge_pattern

Purge packages that match a specific pattern.

Options

  • --pattern, -p <STRING>: Specify a glob-like pattern to select packages (default: *).
  • --case: Enable case-sensitive pattern matching.

Command: fetter purge_invalid

Purge packages that are invalid based on dependency specification.

Options

  • --bound, -b <FILE>: Path to the file containing bound requirements.
  • --subset: Allow the observed packages to be a subset of the bound requirements.
  • --superset: Allow the observed packages to be a superset of the bound requirements.

What is New in Fetter

1.0.0

Implemented home-path display abbreviation with ~.

Handle combining multiple DepSpec in producing DepManifest.

Added --pattern and --case options to audit.

Added support for creating DepManifest from pyproject.toml.

Permit DepManifest to be retrieved from a URL.

0.13.0

All subcommands now have their output sub-subcommands set to display by default.

The validate and audit subcommands now return a non-zero exit code when items are found.

The CLI now exits for unsupported platforms.

0.12.0

Extended validate and audit commands to return a non-zero error code if display prints records.

0.11.0

Implemented variable-width and colored terminal displays.

Implemented terminal spinner for long-running commands.

Added purge-invalid and purge-pattern commands.

Split unpack command into unpack-count and unpack-files.

Added support to specify --bound with a git repository.

0.10.0

Added --user-site flag to force inclusion of user site packages; otherwise, user site packages are only included if ENABLE_USER_SITE is set.

Reimplemented display and delimited table outputs to use a generic trait implementation.

0.9.0

Support --requirement in requirements files.

0.8.0

Package and DepSpec comparisons now remove user.

Package and DepSpec comparisons now accept matching either on requested_revision or commit_id.

URLs are now shown in DepSpec displays.

Delimited file output no longer pads spaces.

0.7.0

Validate display now shows paths properly.

Updated validate json output to terminate line and flush buffer.

0.6.0

Package and dependency keys are case insensitive.

Improved URL validation between dependency and package by removing user components.

Improved validation JSON output to provided labelled objects.

Improved valiation output to show sorted missing packages.

Renamed validation explain values.

Implemented support for nested requirements.txt.

0.5.0

Implemented search command with basic wildcard matching.

Implemented Arc-wrapped PathBuf for sharable site paths.

Added explanation column to validation results.

Added support for both --subset and --superset validations.

Implemented ValidationDigest for simplified JSON serialization.

Added JSON CLI output option for validation results.

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

fetter-1.0.0.tar.gz (34.7 kB view details)

Uploaded Source

Built Distributions

fetter-1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

fetter-1.0.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.4 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ s390x

fetter-1.0.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (2.4 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

fetter-1.0.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (2.2 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ i686

fetter-1.0.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.1 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

fetter-1.0.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.4 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ s390x

fetter-1.0.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (2.4 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

fetter-1.0.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.1 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

fetter-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

fetter-1.0.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.4 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x

fetter-1.0.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (2.4 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

fetter-1.0.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (2.2 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686

fetter-1.0.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.1 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARMv7l

fetter-1.0.0-cp312-cp312-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

fetter-1.0.0-cp312-cp312-macosx_10_12_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.12 macOS 10.12+ x86-64

fetter-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

fetter-1.0.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.4 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

fetter-1.0.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (2.4 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

fetter-1.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (2.2 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

fetter-1.0.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.1 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARMv7l

fetter-1.0.0-cp311-cp311-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

fetter-1.0.0-cp311-cp311-macosx_10_12_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.11 macOS 10.12+ x86-64

fetter-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

fetter-1.0.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.4 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

fetter-1.0.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (2.4 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

fetter-1.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (2.2 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

fetter-1.0.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.1 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARMv7l

fetter-1.0.0-cp310-cp310-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

fetter-1.0.0-cp310-cp310-macosx_10_12_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.10 macOS 10.12+ x86-64

fetter-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

fetter-1.0.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.4 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

fetter-1.0.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (2.4 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

fetter-1.0.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (2.2 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

fetter-1.0.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.1 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARMv7l

fetter-1.0.0-cp39-cp39-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

fetter-1.0.0-cp39-cp39-macosx_10_12_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.9 macOS 10.12+ x86-64

File details

Details for the file fetter-1.0.0.tar.gz.

File metadata

  • Download URL: fetter-1.0.0.tar.gz
  • Upload date:
  • Size: 34.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.7.4

File hashes

Hashes for fetter-1.0.0.tar.gz
Algorithm Hash digest
SHA256 4feab639afd0caaaa2d6820d490765a32d2ae3568c21850b36ba8dcbe02065da
MD5 86c015ff03ff6d64ee28ee02ec9bd684
BLAKE2b-256 f81f53688d629e37351c79736afeea7f3bfda91e474b4de9ac9589c188432722

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 859286e8436a57f7d6eb87a19e38369721c3094c01e99eb9c5ec38b72f98d6d4
MD5 881a68270ee998e21a9fae380bd7df83
BLAKE2b-256 941159d8661d9849b17e752a795c3d7cf4aa71a77e597dac450e94848252c148

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 91db28760e60bd7e4dce131851f7e8ab731e98bebc61b02e0c377c5c3c684841
MD5 8e3eae52484650bff53b54950ece15fb
BLAKE2b-256 830069471ce9635f68eef2063e3f6279506e41d30fbc55c1f2e7c0a414f9f21c

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 00b508bce6dd3fe6f7c3b6a4bc7596b590a40588be8aec03cc1f80f84b669fc3
MD5 26b11cd5df355f6a02be9229aad784ee
BLAKE2b-256 a00f968fb6c9a7aaad8196f97496a0dd33b2975628a68473d06df0416e40436b

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 89f5f7bdea461e052475222345299278b70dca526f782b007e01ab1e910af9e7
MD5 f6612055cf9c1b1a80e2d2a0dd0b6b7e
BLAKE2b-256 f8ee064c08f6b3cc056827ee21fc9b5113433fcf720be73005fdf553acf52ec8

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 4558ac4c3e7cb7c75f98a30e6127e5b1e075bb9c1b6fb0b4165b2c0ba53fb4fd
MD5 415cd40f51635f7315402c8f6986fb36
BLAKE2b-256 7f64c13c3d07cb8ccec4967d505e2721bbccaac65704aa9132a5c09676abdd2b

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 30516aa429c26d55cbb5971b0767d94007ee54731659f7ee4f880de4d1ec4b2c
MD5 b2e4403b9b3db63e3b822084fc73bbc2
BLAKE2b-256 06eb55350c4891996b0af3da81db91541e67e9b6c279311aae9f0f99dc6ee066

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 2850f605862a8c9b37ac6b1df119a508699231c6f412f85555134f9690b92dae
MD5 f1e0826f69aeebc02144d2b583bcc156
BLAKE2b-256 3178b9ef548b25ffde6d48daeaebd732dbb8d75ea55f7751113ea01eb59dec65

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 bfa6e21644247c6e71361bf45ff46245e41937988afa723b0b7d5efec013f91f
MD5 f0a5b63ee5790058b4fca43bca6730da
BLAKE2b-256 e830cadca18257f71ddd6587648e31a4776b94b90fcdee2a972a0d9ad4752df3

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4371cf6d638c2ad32eadd0deec3bdb3fea55bfda23a4766a773f82ff9ed0ecb3
MD5 2110b6e467bce61964934b81be08546c
BLAKE2b-256 dceeb1007c156080601ef1aba6faf1d15a734af3da7bc6de306585289b2cb7f4

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 fc2c1ae8c4563357b8dd94eae20a0a1fb433a59d98639970afa06a741fc452f9
MD5 9a35a7ca9b03d84888cc799a2b8178f0
BLAKE2b-256 2e7b7652598186309753bc005dba00954ebb30968dfe0328036b9bf2365adebc

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 e7711c743dffc2ec69efda882f52a4b9f69596129f06c99743b40797a6ce0d66
MD5 02d0b11df03254d0b7cba8a75d1e1e21
BLAKE2b-256 24722773318bffc5864716772f5015d40ce01106acbf4b057fba198e4b5ef3e0

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 7569a03bb152915cca588f6b89ce7c765185fe77d207d15784572994cb334519
MD5 4967fecbe5ee3cce72547f03041827a1
BLAKE2b-256 88d9d75d25719b27d8492472802448f6d6af765c2cd4c33d438b4306bb170918

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 a91867b1a6fa0e1b83a5a6d7fbcf7446bb13e0cb1e0f77e0e756e8401d26a098
MD5 49922172421c1e75e0000d44c304856d
BLAKE2b-256 b1415803b1b03147faea47f4cf48f1131c98d9bace467be3ffdfb488773fb457

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ee1edb56ee05274181a58e13f3310fc23a75b830656251598494761dde481513
MD5 d8cb724d702836c857e6599848f03b3a
BLAKE2b-256 515743afd4fb68b716766f180da70fea400a4b255da86dd21e846c504de26d96

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 843a42b1efcbc791cab1da0761eff45849c0ceb280b809cc7141c5d4e6b8f9ab
MD5 ba0414a4f2b39800110384ab5c25c510
BLAKE2b-256 5f850edf0b80d3060a6432116b78c9eefb68dbee97bc7970d9eae0568df9c169

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 018cfd1c1e61023d8fa0ebe40e651b64249b89a733726b640611ddcb5c9e4bf0
MD5 a0a4f874dd71253098306c416a6e24d3
BLAKE2b-256 095488a8be3330ec95b8429a80f43851094aae2353763753815bcc15ca5580b1

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 acae011f2ee21acd87f5c3e934635dbe24c46939ee9c97cb68f330d6ef89187e
MD5 ac87d31a2cf946905c93315b5652e4d9
BLAKE2b-256 619da4f7c2bc6413c09a11d89d2a72ffd4757d88d62562348436cc5a2b90458a

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 6f37eba0d749d787121a4f046c7a50e29ae252298ad170b5be268b1427919d01
MD5 624c9050c4a1684d6f69d0e6d114d1d7
BLAKE2b-256 905eeea77767c335eff785b7849c7d63e3c51d9f13dae5d391708be670e1fa3d

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 d4b0aa3e2a45a3b7b754813d08d5a0d8527f5f485c2a5879d1198e107a6ae014
MD5 a3aef373794a40e02734ba041ed390fb
BLAKE2b-256 2e83029d48530ea55693800541e8e3cdc45df2e2260828435545470a39c898b2

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 6d78a61c2905d6ae11c31768c9fc410c907d128fc49c3882810e3155a8538786
MD5 d278a92244a748874c7a3eeb917d6eee
BLAKE2b-256 a05dd137d3b19d460308fdbb1eca2a166ab7951bfeee4e3c458db9619f067531

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8a79117b714a673e0c05f48a7bd7119f4e5e95444f6507084dad7b75af53fb27
MD5 bc8af185e6f14ee5ab239c72ff7ce77f
BLAKE2b-256 61faf04df02350d71a1e6d621099f7ef1fbeeedf615312e357a9f2290bcac824

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 edc30f5b01fc4a9bb3f0240ab8bdcf737e2d8f5057d5aae3f34f768d371dedb5
MD5 3e75b6920255d3301dad70e8ae3534df
BLAKE2b-256 70b3852d07f36f00e2bdc99a18d9f0bb9be75757717e0331dd6f122b91db1434

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 22bae428d1756ea8b62fc2b3ce404f8e74f0182ca0bbdc848fbdae65bbe388d6
MD5 19347f078c045de1075c49c24bb2af0a
BLAKE2b-256 e8a8cafe641390202098b71efbb56a5c21596ccce6e88bb52cd5b01217d691ac

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 c3123ee3b7551275a5e4781383fbbdd0dfd5892a24423bd80b529c8d1d9eed09
MD5 46458b3bc74dc5bc9a64c5ffec73e71e
BLAKE2b-256 4d9ec7c239417a8774def4a735b3c1b0fc37d965af938f652d9f138a8f7b9ce0

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 ac6a36c73a473679771c71645ef03ef289ad9465c0d083f942717622bcc0311d
MD5 af7bebafca43146ef718d38c84028f27
BLAKE2b-256 5ad1025149ebb49af05ef8a52f8bfbbe517f2ae6cdf9cbf2154ab378b7ef36ad

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 83e243965f5ca1e965e137b9653e316717aded93b4cf93b474fedbfd43fe368b
MD5 467a6fae218eef902871e94946c2bc13
BLAKE2b-256 b5ebc9ab2c6f32fd80bd796606ee8ba7cc1aff1c8fb90abc6d20683a1f877f26

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 d7ce260307023a9a1aa1e12ec8e9124f219a3506618969e09c25afe43e57f139
MD5 3cbc44a45502d3c6fa93002a9a978751
BLAKE2b-256 3a2bb992c941deff814014d9820f1a95866512524c31d78df95e6f391babec9e

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 840bb24fdf0c35b3bb15b58d22ff988e862ea800518a70196a6822a61c9dad84
MD5 9b6446f1b904ca96763116a704afc352
BLAKE2b-256 03a463c8d6be0109adadc5c5cacfe8849c882474e52521e4e1385714686e6c19

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 098b7d7cd5e415e1b8786e9fab9cd892f4b7fde3ef74957697ae72690c99c96d
MD5 999a39bae0aae8db7263075176d03da0
BLAKE2b-256 e92f5bbdc9480fcceeda897e13ae31660e9598e1b1f15ff18eaa2f895d541e67

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 576ca6bc8729d7a0657e1acf7edf9b2404ddb3132e788195e1dc346367020efd
MD5 8c33c045a1effac42ff635d48028a74b
BLAKE2b-256 e91aca0504fdc665944c537a4ece29cc67528c2e79ecd386a70d08c92e6a312b

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 e5e110ba4e7ac913e8c5ea42208bd02abdeca5de09c6c83a45649501a48579b7
MD5 ce25064d5d9ff9996aa33283e7c5ab25
BLAKE2b-256 75fdd5dde62e3736068a19b427b778d3d3af7e253304951d48cc8ae14e39d622

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 ee66fb67181ebff30e1030e9447dcd9e0751487775cf278f3ab6d1a3df5f29e2
MD5 f3f4dcc49449d115d3ad2a96bd0c5897
BLAKE2b-256 e99d3b3568bdad20719bc098624a28b2b879bd7f0d24fb320bbe71530d33808b

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 fc998d129da1d1a8d8a72a6419ee5081b61d220c00253ea5b38923ff33543a56
MD5 5ef4985021e05a1d43c8b460c113e522
BLAKE2b-256 5b19f562ecba180ce82744c366401dcefa2ad73bcc07ec7eea5a6f3b71e8db25

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 2e5b6fed8d77f12ad55af99539d09dd33ef2292aca9603e2fbcdad1296c7bd45
MD5 42a8319b2e3f74ff8f35c8be513c34cb
BLAKE2b-256 12613d38acb23481f5f617a239153abe18a911030cfdb64b29bd3356a6ed11da

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2a50e4d29f87196c670ff2f8156477b8f5aefa47c5459f101eed44c8c7659f9f
MD5 fe36ba5a9e32e4d80c4421f9a9845e94
BLAKE2b-256 5a34344cdea77f8c34ef8fef848321add1b0c0122f87b45d5470e6a398e6c963

See more details on using hashes here.

File details

Details for the file fetter-1.0.0-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for fetter-1.0.0-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 452c1a886d110f357363c3ce2a72f765826e7f7edeef34084efabd5ef53a660f
MD5 095876bb8fd4799de913d1159072936f
BLAKE2b-256 6d2e139736e81e06304b0350c2248bcb741624d472117b5d79ed9bd072d67eb1

See more details on using hashes here.

Supported by

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