fetter


Namefetter JSON
Version 1.1.0 PyPI version JSON
download
home_pageNone
SummarySystem-wide Python package discovery, validation, and allow-listing.
upload_time2024-11-11 16:48:41
maintainerChristopher Ariza
docs_urlNone
authorChristopher Ariza
requires_python>=3.9
licenseNone
keywords python-package allow-listing vulnerability scanning
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # fetter

<a href="https://github.com/fetter-io/fetter-rs/actions/workflows/ci.yml">
    <img style="display: inline!important" src="https://img.shields.io/github/actions/workflow/status/fetter-io/fetter-rs/ci.yml?branch=default&label=CI&logo=Github"></img>
</a>
<a href="https://crates.io/crates/fetter">
    <img src="https://img.shields.io/crates/v/fetter?label=crates.io&logo=rust"></img>
</a>
<a href="https://pypi.org/project/fetter/">
    <img src="https://img.shields.io/pypi/v/fetter?label=PyPI&logo=pypi"></img>
</a>
<!-- <a href="https://crates.io/crates/fetter">
    <img src="https://img.shields.io/crates/d/fetter?label=Downloads&logo=rust"></img>
</a> -->

## 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](#Using-fetter-with-pre-commit).
* ๐Ÿš€ 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](https://crates.io/crates/fetter)), `fetter` is easily installed via a Python package ([pypi](https://pypi.org/project/fetter)):

```shell
$ pip install fetter
$ fetter --help
```

Alternatively, as `fetter` can operate on multiple virtual environments, installation via [`pipx`](https://pipx.pypa.io) might be desirable:

```shell
$ pipx install fetter
$ fetter --version
```



## Using `fetter` from the command line

For complete command-line documentation, see [CLI Documentation](#Command-Line-Interface-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.

```shell
$ fetter scan
```

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

```shell
$ 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.

```shell
$ 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.

```shell
$ 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

```shell
$ 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:

```shell
$ 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:

```shell
$ fetter -e python3 validate --bound requirements.txt --superset --subset
```

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

```shell
$ 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](https://github.com/fetter-io/fetter-rs/blob/default/doc/articles/swppc/swppc.md).




## Using `fetter` with pre-commit

Two `fetter` commands can be run via [pre-commit](https://pre-commit.com/) 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`.


```yaml
repos:
- repo: https://github.com/fetter-io/fetter-rs
  rev: v1.1.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.

```yaml
repos:
- repo: https://github.com/fetter-io/fetter-rs
  rev: v1.1.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`

- Description: 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`

- Description: 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`

- Description: 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`

- Description: 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`

- Description: Validate if packages conform to a specified validation target.
- Options
  - `--bound, -b <FILE>`: Path or URL to the file containing bound requirements.
  - `--bound-options <OPTIONS>`: Names of additional optional dependency groups.
  - `--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`

- Description: 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`

- Description: 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`

- Description: 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`

- Description: 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`

- Description: Purge packages that are invalid based on dependency specification.
- Options
  - `--bound, -b <FILE>`: Path or URL to the file containing bound requirements.
  - `--bound-options <OPTIONS>`: Names of additional optional dependency groups.
  - `--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.1.0

Implemented `bound-options` to permit selecting optional dependencies in pyproject.toml files.

### 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.








            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "fetter",
    "maintainer": "Christopher Ariza",
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "python-package, allow-listing, vulnerability scanning",
    "author": "Christopher Ariza",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/df/28/e719b7b976e7c8200f5f433ce83e61776c2ca492928ea701e778430dbe22/fetter-1.1.0.tar.gz",
    "platform": null,
    "description": "# fetter\n\n<a href=\"https://github.com/fetter-io/fetter-rs/actions/workflows/ci.yml\">\n    <img style=\"display: inline!important\" src=\"https://img.shields.io/github/actions/workflow/status/fetter-io/fetter-rs/ci.yml?branch=default&label=CI&logo=Github\"></img>\n</a>\n<a href=\"https://crates.io/crates/fetter\">\n    <img src=\"https://img.shields.io/crates/v/fetter?label=crates.io&logo=rust\"></img>\n</a>\n<a href=\"https://pypi.org/project/fetter/\">\n    <img src=\"https://img.shields.io/pypi/v/fetter?label=PyPI&logo=pypi\"></img>\n</a>\n<!-- <a href=\"https://crates.io/crates/fetter\">\n    <img src=\"https://img.shields.io/crates/d/fetter?label=Downloads&logo=rust\"></img>\n</a> -->\n\n## System-wide Python package discovery, validation, and allow-listing.\n\n\nThe `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.\n\n\n* \ud83d\udd0e System Scanning: Finds Python packages across system environments.\n* \u2696\ufe0f Package Validation: Checks installed packages against requirements.txt, pyproject.toml, or lock files sourced locally, via URLs, or via `git` repositories.\n* \ud83d\udee1\ufe0f Vulnerability Audit: Scans packages for security vulnerabilites in the Open Source Vulnerability database.\n* \u2699\ufe0f CI Integration: Validate and audit with `pre-commit` [hooks](#Using-fetter-with-pre-commit).\n* \ud83d\ude80 Fast: Multi-threaded Rust implementation.\n* \ud83e\udea2 Bound Requirements: Derive lock-file-like bound requirements from observed system packages.\n* \ud83e\uddf9 Search and Purge: Find and remove packages across environments.\n* \ud83e\udde9 Flexible Output: Display results in terminal or export to delimited files.\n\n\n\n\n## Installing `fetter`\n\nWhile available as a pure Rust binary ([crates](https://crates.io/crates/fetter)), `fetter` is easily installed via a Python package ([pypi](https://pypi.org/project/fetter)):\n\n```shell\n$ pip install fetter\n$ fetter --help\n```\n\nAlternatively, as `fetter` can operate on multiple virtual environments, installation via [`pipx`](https://pipx.pypa.io) might be desirable:\n\n```shell\n$ pipx install fetter\n$ fetter --version\n```\n\n\n\n## Using `fetter` from the command line\n\nFor complete command-line documentation, see [CLI Documentation](#Command-Line-Interface-Documentation).\n\nBy 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.\n\n```shell\n$ fetter scan\n```\n\nTo limit scanning to `site-packages` directories associated with a specific Python executable, the `--exe` (or `-e`) argument can be supplied.\n\n```shell\n$ fetter -e python3 scan\nPackage                   Site\ncertifi-2024.8.30         ~/.env-wp/lib/python3.12/site-packages\ncharset_normalizer-3.4.0  ~/.env-wp/lib/python3.12/site-packages\nidna-3.10                 ~/.env-wp/lib/python3.12/site-packages\njinja2-3.1.3              ~/.env-wp/lib/python3.12/site-packages\nmarkupsafe-2.1.5          ~/.env-wp/lib/python3.12/site-packages\npip-21.1.1                ~/.env-wp/lib/python3.12/site-packages\nrequests-2.32.3           ~/.env-wp/lib/python3.12/site-packages\nsetuptools-56.0.0         ~/.env-wp/lib/python3.12/site-packages\nurllib3-2.2.3             ~/.env-wp/lib/python3.12/site-packages\nzipp-3.18.1               ~/.env-wp/lib/python3.12/site-packages\n```\n\nThis evnironment was built from this \"requirements.txt\":\n\n```\njinja2==3.1.3\nzipp==3.18.1\nrequests==2.32.3\n```\n\nTo 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.\n\n```shell\n$ fetter -e python3 validate --bound requirements.txt\nPackage                   Dependency  Explain     Sites\ncertifi-2024.8.30                     Unrequired  ~/.env-wp/lib/python3.12/site-packages\ncharset_normalizer-3.4.0              Unrequired  ~/.env-wp/lib/python3.12/site-packages\nidna-3.10                             Unrequired  ~/.env-wp/lib/python3.12/site-packages\nmarkupsafe-2.1.5                      Unrequired  ~/.env-wp/lib/python3.12/site-packages\npip-21.1.1                            Unrequired  ~/.env-wp/lib/python3.12/site-packages\nsetuptools-56.0.0                     Unrequired  ~/.env-wp/lib/python3.12/site-packages\nurllib3-2.2.3                         Unrequired  ~/.env-wp/lib/python3.12/site-packages\n```\n\nThe `--superset` command can be provided to accept packages that are not defined in the bound requirements.\n\n```shell\n$ fetter -e python3 validate --bound requirements.txt --superset\n```\n\nIf we update `zipp` to version 3.20.2 and re-run validation, `fetter` will report these as \"Misdefined\" records\n\n```shell\n$ fetter -e python3 validate --bound requirements.txt --superset\nPackage      Dependency    Explain     Sites\nzipp-3.20.2  zipp==3.18.1  Misdefined  ~/.env-wp/lib/python3.12/site-packages\n```\n\nIf we remove the `zipp` package entirely, `fetter` identifies this as a \"Missing\" record:\n\n```shell\n$ fetter -e python3 validate --bound requirements.txt --superset\nPackage  Dependency    Explain  Sites\n         zipp==3.18.1  Missing\n```\n\nIf we want to permit the absence of specified packages, the `--subset` flag can be used:\n\n```shell\n$ fetter -e python3 validate --bound requirements.txt --superset --subset\n```\n\nUsing the `fetter audit` command, details are provided for every vulnerability associated with installed packages.\n\n```shell\n$ fetter -e python3 audit\nPackage            Vulnerabilities      Attribute  Value\njinja2-3.1.3       GHSA-h75v-3vvj-5mfj  URL        https://osv.dev/vulnerability/GHSA-h75v-3vvj-5mfj\n                                        Summary    Jinja vulnerable to HTML attribute injection when passing ...\n                                        Reference  https://nvd.nist.gov/vuln/detail/CVE-2024-34064\n                                        Severity   CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N\npip-21.1.1         GHSA-mq26-g339-26xf  URL        https://osv.dev/vulnerability/GHSA-mq26-g339-26xf\n                                        Summary    Command Injection in pip when used with Mercurial\n                                        Reference  https://nvd.nist.gov/vuln/detail/CVE-2023-5752\n                                        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\n                   PYSEC-2023-228       URL        https://osv.dev/vulnerability/PYSEC-2023-228\n                                        Reference  https://mail.python.org/archives/list/security-announce@py...\n                                        Severity   CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N\nsetuptools-56.0.0  GHSA-cx63-2mw6-8hw5  URL        https://osv.dev/vulnerability/GHSA-cx63-2mw6-8hw5\n                                        Summary    setuptools vulnerable to Command Injection via package URL\n                                        Reference  https://nvd.nist.gov/vuln/detail/CVE-2024-6345\n                                        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\n                   GHSA-r9hx-vwmv-q579  URL        https://osv.dev/vulnerability/GHSA-r9hx-vwmv-q579\n                                        Summary    pypa/setuptools vulnerable to Regular Expression Denial of...\n                                        Reference  https://nvd.nist.gov/vuln/detail/CVE-2022-40897\n                                        Severity   CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H\n                   PYSEC-2022-43012     URL        https://osv.dev/vulnerability/PYSEC-2022-43012\n                                        Reference  https://github.com/pypa/setuptools/blob/fe8a98e696241487ba...\nzipp-3.18.1        GHSA-jfmj-5v4g-7637  URL        https://osv.dev/vulnerability/GHSA-jfmj-5v4g-7637\n                                        Summary    zipp Denial of Service vulnerability\n                                        Reference  https://nvd.nist.gov/vuln/detail/CVE-2024-5569\n                                        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\n```\n\nFor additional discussion and examples of `fetter` commands and functionality, see [System-Wide Python Package Control](https://github.com/fetter-io/fetter-rs/blob/default/doc/articles/swppc/swppc.md).\n\n\n\n\n## Using `fetter` with pre-commit\n\nTwo `fetter` commands can be run via [pre-commit](https://pre-commit.com/) hooks for continuous integration of Python package controls.\n\n\n### Running `fetter validate` with `pre-commit`.\n\n\nThe `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`.\n\nThe `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.\n\nTo run `fetter validate` with `pre-commit`, add the following to your `.pre-commit-config.yaml`.\n\n\n```yaml\nrepos:\n- repo: https://github.com/fetter-io/fetter-rs\n  rev: v1.1.0\n  hooks:\n    - id: fetter-validate\n      args: [--bound, {FILE}, --superset, --subset]\n\n```\n\n\n### Running `fetter audit` with `pre-commit`.\n\nThe `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.\n\nTo 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.\n\n```yaml\nrepos:\n- repo: https://github.com/fetter-io/fetter-rs\n  rev: v1.1.0\n  hooks:\n    - id: fetter-audit\n```\n\n\n\n## Command-Line-Interface Documentation\n\n### Global Options\n\n- `--exe, -e <FILES>`: Provide zero or more executable paths to derive site package locations. If omitted, all discoverable executables will be used.\n- `--quiet, -q`: Disable logging and terminal animation.\n- `--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.\n\n### Command: `fetter scan`\n\n- Description: Scan the environment to report on installed packages.\n- Subcommands\n  - `display`: Show scan results in the terminal.\n  - `write`: Save scan results to a file.\n    - `--output, -o <FILE>`: Specify the output file.\n    - `--delimiter, -d <char>`: Set the delimiter for the file (default: `,`).\n\n### Command: `fetter search`\n\n- Description: Search the environment to report on installed packages based on a pattern.\n- Options\n  - `--pattern, -p <STRING>`: Specify a glob-like pattern to match packages.\n  - `--case`: Enable case-sensitive pattern matching.\n- Subcommands\n  - `display`: Show search results in the terminal.\n  - `write`: Save search results to a file.\n    - `--output, -o <FILE>`: Specify the output file.\n    - `--delimiter, -d <char>`: Set the delimiter for the file (default: `,`).\n\n### Command: `fetter count`\n\n- Description: Count discovered executables, sites, and packages.\n- Subcommands\n  - `display`: Show count results in the terminal.\n  - `write`: Save count results to a file.\n    - `--output, -o <FILE>`: Specify the output file.\n    - `--delimiter, -d <char>`: Set the delimiter for the file (default: `,`).\n\n### Command: `fetter derive`\n\n- Description: Derive new requirements from discovered packages.\n- Options\n  - `--anchor, -a <BOUND>`: Set the nature of the bound in the derived requirements. (Use a value from `CliAnchor`)\n- Subcommands\n  - `display`: Show derived requirements in the terminal.\n  - `write`: Save derived requirements to a file.\n    - `--output, -o <FILE>`: Specify the output file.\n\n### Command: `fetter validate`\n\n- Description: Validate if packages conform to a specified validation target.\n- Options\n  - `--bound, -b <FILE>`: Path or URL to the file containing bound requirements.\n  - `--bound-options <OPTIONS>`: Names of additional optional dependency groups.\n  - `--subset`: Allow the observed packages to be a subset of the bound requirements.\n  - `--superset`: Allow the observed packages to be a superset of the bound requirements.\n- Subcommands\n  - `display`: Show validation results in the terminal.\n  - `json`: Print validation results in JSON format.\n  - `write`: Save validation results to a file.\n    - `--output, -o <FILE>`: Specify the output file.\n    - `--delimiter, -d <char>`: Set the delimiter for the file (default: `,`).\n  - `exit`: Return an exit code (0 for success, customizable for errors).\n    - `--code, -c <INT>`: Specify the error code (default: `3`).\n\n### Command: `fetter audit`\n\n- Description: Search for security vulnerabilities in packages via the OSV DB.\n- Options\n  - `--pattern, -p <STRING>`: Specify a glob-like pattern to select packages (default: `*`).\n  - `--case`: Enable case-sensitive pattern matching.\n- Subcommands\n  - `display`: Show audit results in the terminal.\n  - `write`: Save audit results to a file.\n    - `--output, -o <FILE>`: Specify the output file.\n    - `--delimiter, -d <char>`: Set the delimiter for the file (default: `,`).\n\n### Command: `fetter unpack-count`\n\n- Description: Count all installed package artifacts.\n- Options\n  - `--pattern, -p <STRING>`: Specify a glob-like pattern to select packages (default: `*`).\n  - `--case`: Enable case-sensitive pattern matching.\n\n- Subcommands\n  - `display`: Show artifact counts in the terminal.\n  - `write`: Save artifact counts to a file.\n    - `--output, -o <FILE>`: Specify the output file.\n    - `--delimiter, -d <char>`: Set the delimiter for the file (default: `,`).\n\n### Command: `fetter unpack-files`\n\n- Description: List the file names of all installed package artifacts.\n- Options\n  - `--pattern, -p <STRING>`: Specify a glob-like pattern to select packages (default: `*`).\n  - `--case`: Enable case-sensitive pattern matching.\n- Subcommands\n  - `display`: Show artifact file names in the terminal.\n  - `write`: Save artifact file names to a file.\n    - `--output, -o <FILE>`: Specify the output file.\n    - `--delimiter, -d <char>`: Set the delimiter for the file (default: `,`).\n\n### Command: `fetter purge-pattern`\n\n- Description: Purge packages that match a specific pattern.\n- Options\n  - `--pattern, -p <STRING>`: Specify a glob-like pattern to select packages (default: `*`).\n  - `--case`: Enable case-sensitive pattern matching.\n\n### Command: `fetter purge-invalid`\n\n- Description: Purge packages that are invalid based on dependency specification.\n- Options\n  - `--bound, -b <FILE>`: Path or URL to the file containing bound requirements.\n  - `--bound-options <OPTIONS>`: Names of additional optional dependency groups.\n  - `--subset`: Allow the observed packages to be a subset of the bound requirements.\n  - `--superset`: Allow the observed packages to be a superset of the bound requirements.\n\n\n\n\n## What is New in Fetter\n\n### 1.1.0\n\nImplemented `bound-options` to permit selecting optional dependencies in pyproject.toml files.\n\n### 1.0.0\n\nImplemented home-path display abbreviation with `~`.\n\nHandle combining multiple `DepSpec` in producing `DepManifest`.\n\nAdded `--pattern` and `--case` options to `audit`.\n\nAdded support for creating `DepManifest` from pyproject.toml.\n\nPermit `DepManifest` to be retrieved from a URL.\n\n\n### 0.13.0\n\nAll subcommands now have their output sub-subcommands set to `display` by default.\n\nThe `validate` and `audit` subcommands now return a non-zero exit code when items are found.\n\nThe CLI now exits for unsupported platforms.\n\n\n### 0.12.0\n\nExtended `validate` and `audit` commands to return a non-zero error code if `display` prints records.\n\n\n### 0.11.0\n\nImplemented variable-width and colored terminal displays.\n\nImplemented terminal spinner for long-running commands.\n\nAdded `purge-invalid` and `purge-pattern` commands.\n\nSplit `unpack` command into `unpack-count` and `unpack-files`.\n\nAdded support to specify `--bound` with a git repository.\n\n\n### 0.10.0\n\nAdded `--user-site` flag to force inclusion of user site packages; otherwise, user site packages are only included if `ENABLE_USER_SITE` is set.\n\nReimplemented display and delimited table outputs to use a generic trait implementation.\n\n\n### 0.9.0\n\nSupport `--requirement` in requirements files.\n\n\n### 0.8.0\n\nPackage and DepSpec comparisons now remove user.\n\nPackage and DepSpec comparisons now accept matching either on requested_revision or commit_id.\n\nURLs are now shown in DepSpec displays.\n\nDelimited file output no longer pads spaces.\n\n\n### 0.7.0\n\nValidate display now shows paths properly.\n\nUpdated validate json output to terminate line and flush buffer.\n\n\n### 0.6.0\n\nPackage and dependency keys are case insensitive.\n\nImproved URL validation between dependency and package by removing user components.\n\nImproved validation JSON output to provided labelled objects.\n\nImproved valiation output to show sorted missing packages.\n\nRenamed validation explain values.\n\nImplemented support for nested requirements.txt.\n\n\n### 0.5.0\n\nImplemented search command with basic wildcard matching.\n\nImplemented `Arc`-wrapped `PathBuf` for sharable site paths.\n\nAdded explanation column to validation results.\n\nAdded support for both `--subset` and `--superset` validations.\n\nImplemented `ValidationDigest` for simplified JSON serialization.\n\nAdded `JSON` CLI output option for validation results.\n\n\n\n\n\n\n\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "System-wide Python package discovery, validation, and allow-listing.",
    "version": "1.1.0",
    "project_urls": {
        "Homepage": "https://github.com/fetter-io/fetter-py",
        "Issues": "https://github.com/fetter-io/fetter-py/issues",
        "Repository": "https://github.com/fetter-io/fetter-py.git"
    },
    "split_keywords": [
        "python-package",
        " allow-listing",
        " vulnerability scanning"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "30db2342faf836b4a6f89a203333126e2148aca786485f12760cb923a916e631",
                "md5": "151e27060fc2b5cd6ae2acb071381d23",
                "sha256": "0893180a82b7c22094d9ce572a364c7fa9e5348792bf9bf1ff11a927e14faf06"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp310-cp310-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "151e27060fc2b5cd6ae2acb071381d23",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 2107623,
            "upload_time": "2024-11-11T16:48:33",
            "upload_time_iso_8601": "2024-11-11T16:48:33.396657Z",
            "url": "https://files.pythonhosted.org/packages/30/db/2342faf836b4a6f89a203333126e2148aca786485f12760cb923a916e631/fetter-1.1.0-cp310-cp310-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8b57f6b76a6fa4515a320d906258cdfe6025506adf1ebc54cac4daa1e2401974",
                "md5": "87a4df63354701536b9931bd4ced2fea",
                "sha256": "669e46fc63a474c95bcecab6e24066c3d3ef461a5790deb7e261d3413f55733f"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "87a4df63354701536b9931bd4ced2fea",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 2012570,
            "upload_time": "2024-11-11T16:48:24",
            "upload_time_iso_8601": "2024-11-11T16:48:24.356983Z",
            "url": "https://files.pythonhosted.org/packages/8b/57/f6b76a6fa4515a320d906258cdfe6025506adf1ebc54cac4daa1e2401974/fetter-1.1.0-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f4874f7be67e0a9bd4d0df673b87818290fbe40f1c844c8caf97de6912a90936",
                "md5": "460127b9d0e708a4fcaaf3ac5f89360f",
                "sha256": "297181a35502fff989137a3b9e0ddc217d4c6a088e1b190b3d01548bf1b336cf"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "460127b9d0e708a4fcaaf3ac5f89360f",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 2071484,
            "upload_time": "2024-11-11T16:47:18",
            "upload_time_iso_8601": "2024-11-11T16:47:18.516427Z",
            "url": "https://files.pythonhosted.org/packages/f4/87/4f7be67e0a9bd4d0df673b87818290fbe40f1c844c8caf97de6912a90936/fetter-1.1.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "caa6c8f13e59f1855a232f7fbd50dc17017f0e890b52ca394fb039e176a6ef5f",
                "md5": "f1523a1a5740a87fb8634415d8197719",
                "sha256": "73113d5ec02f0f06a283e1d0e33b55375b23822fda7e7288298d2502b64c5dcc"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "f1523a1a5740a87fb8634415d8197719",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 2247999,
            "upload_time": "2024-11-11T16:48:02",
            "upload_time_iso_8601": "2024-11-11T16:48:02.045028Z",
            "url": "https://files.pythonhosted.org/packages/ca/a6/c8f13e59f1855a232f7fbd50dc17017f0e890b52ca394fb039e176a6ef5f/fetter-1.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5c0cbf4493f20f07af5e7ccb634cb7e079a48b4b08c8f70e39d5b818ddfd3fed",
                "md5": "ce0eb596b0e0baea84ec1fd41808173e",
                "sha256": "c8a96a6050417747a44c79509af20403a1fc3ed189d8cbafdb863c6107093e1f"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "ce0eb596b0e0baea84ec1fd41808173e",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 2398324,
            "upload_time": "2024-11-11T16:47:33",
            "upload_time_iso_8601": "2024-11-11T16:47:33.904933Z",
            "url": "https://files.pythonhosted.org/packages/5c/0c/bf4493f20f07af5e7ccb634cb7e079a48b4b08c8f70e39d5b818ddfd3fed/fetter-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b2ed94038e1a1988f887c73090dba13d192ca0841c8a8d4f121fbb8c5f59fdad",
                "md5": "1d1482ce31dca1d2e9a103933aa6ffc9",
                "sha256": "2395e87b77289be6a0f9d0aeea83645ab197aa2bc75f2fb9f9a876b2be97b2ad"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "1d1482ce31dca1d2e9a103933aa6ffc9",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 2383182,
            "upload_time": "2024-11-11T16:47:49",
            "upload_time_iso_8601": "2024-11-11T16:47:49.109894Z",
            "url": "https://files.pythonhosted.org/packages/b2/ed/94038e1a1988f887c73090dba13d192ca0841c8a8d4f121fbb8c5f59fdad/fetter-1.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0659218b3c57f4823a8bdad7320c31eb1dab823bf0cf5e343f06a439154a1e05",
                "md5": "f438069ec842e4ec9933288e0cd4205f",
                "sha256": "442db273b54ae4761aff151e3fdce08778a874320834bdf02e1acdac9728539b"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f438069ec842e4ec9933288e0cd4205f",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 2301326,
            "upload_time": "2024-11-11T16:48:13",
            "upload_time_iso_8601": "2024-11-11T16:48:13.151669Z",
            "url": "https://files.pythonhosted.org/packages/06/59/218b3c57f4823a8bdad7320c31eb1dab823bf0cf5e343f06a439154a1e05/fetter-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fe9400278c88d0b986f859defe0f04bd8ec7913ebd83d2c4c921a4a26653ccdc",
                "md5": "d878725d8e0c3313a3cb1f8680fc889b",
                "sha256": "da0f9be56c9625603e12aef7cf851911951281687edd9b176f26fca6a201e416"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp311-cp311-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d878725d8e0c3313a3cb1f8680fc889b",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 2107330,
            "upload_time": "2024-11-11T16:48:35",
            "upload_time_iso_8601": "2024-11-11T16:48:35.679953Z",
            "url": "https://files.pythonhosted.org/packages/fe/94/00278c88d0b986f859defe0f04bd8ec7913ebd83d2c4c921a4a26653ccdc/fetter-1.1.0-cp311-cp311-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ac1dd0f4dd430be580065a5f3bdc57425c2175bc4cd0e5bad77e06b599254704",
                "md5": "d36eaa1f4db675520652e1f71c4a6164",
                "sha256": "421f57aea4c4b55eedb0ac699ebd57f6276464f69dc8298760cd5ff19f2994da"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "d36eaa1f4db675520652e1f71c4a6164",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 2012182,
            "upload_time": "2024-11-11T16:48:26",
            "upload_time_iso_8601": "2024-11-11T16:48:26.595560Z",
            "url": "https://files.pythonhosted.org/packages/ac/1d/d0f4dd430be580065a5f3bdc57425c2175bc4cd0e5bad77e06b599254704/fetter-1.1.0-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "484a179875ce91c849d9b4a75eca9595e8c55df6392d751d254f752d77f336e6",
                "md5": "163eec521e8c358bd59767f8023cc87c",
                "sha256": "211faf558b5abdec48f153014db5a73dae8209f5df3fc87ad3f0e6c794f2664c"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "163eec521e8c358bd59767f8023cc87c",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 2071322,
            "upload_time": "2024-11-11T16:47:21",
            "upload_time_iso_8601": "2024-11-11T16:47:21.281131Z",
            "url": "https://files.pythonhosted.org/packages/48/4a/179875ce91c849d9b4a75eca9595e8c55df6392d751d254f752d77f336e6/fetter-1.1.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9b3dccd16818170e35462201cbca33d8f10678850235849519f9d6a9f07c4b9d",
                "md5": "50491181689a99b649acbc597cc03988",
                "sha256": "aba433a5461842f8d017df513f5a3f10f389ca6525d90edefe54e516ce691e48"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "50491181689a99b649acbc597cc03988",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 2247764,
            "upload_time": "2024-11-11T16:48:04",
            "upload_time_iso_8601": "2024-11-11T16:48:04.089960Z",
            "url": "https://files.pythonhosted.org/packages/9b/3d/ccd16818170e35462201cbca33d8f10678850235849519f9d6a9f07c4b9d/fetter-1.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fa5b8d839240d848380e7e0d28d5283c24cb8255408f9b25ed361128917b155e",
                "md5": "1c909bdd048dcfe75e65f623c7850e88",
                "sha256": "d1f2b72b0bbfe2d800428ba02d7dd87fc76cc3d4e387c2d6779367b56b0bb7f9"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "1c909bdd048dcfe75e65f623c7850e88",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 2398229,
            "upload_time": "2024-11-11T16:47:36",
            "upload_time_iso_8601": "2024-11-11T16:47:36.600349Z",
            "url": "https://files.pythonhosted.org/packages/fa/5b/8d839240d848380e7e0d28d5283c24cb8255408f9b25ed361128917b155e/fetter-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c38f38f844fe76307e952b8e93d07f66e1a877d5dbcdc13b9085c7c7907e8e8a",
                "md5": "61f89a6387d38be2f73ab4925d1c021f",
                "sha256": "2b219aad9a7282a00ddeab0f2817a72b620ba785111a1b2d2d3f2154d8682cbf"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "61f89a6387d38be2f73ab4925d1c021f",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 2382557,
            "upload_time": "2024-11-11T16:47:51",
            "upload_time_iso_8601": "2024-11-11T16:47:51.622404Z",
            "url": "https://files.pythonhosted.org/packages/c3/8f/38f844fe76307e952b8e93d07f66e1a877d5dbcdc13b9085c7c7907e8e8a/fetter-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "05407fbf3cfcb64f9a8932dd9707f8a0ab8500bdf343715d56e77d3c4eca65c6",
                "md5": "a11603077f20b343f7ffb18ac766f3cc",
                "sha256": "c2b1d77250514396a9acea95aab806687fb98abd7ee289c2274bdd609d86eb21"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a11603077f20b343f7ffb18ac766f3cc",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 2300837,
            "upload_time": "2024-11-11T16:48:15",
            "upload_time_iso_8601": "2024-11-11T16:48:15.432545Z",
            "url": "https://files.pythonhosted.org/packages/05/40/7fbf3cfcb64f9a8932dd9707f8a0ab8500bdf343715d56e77d3c4eca65c6/fetter-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3627a4797c83ea5aeaf14e3067b89ac7835958ef3e22b518180c3b33d1fea8d8",
                "md5": "b910c87ef6bf978d1deefdc2d0b16d4b",
                "sha256": "30d00e40fbaa71d4aa3883cc466b748ee98306552892ec69f0ac7191206f7175"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp312-cp312-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b910c87ef6bf978d1deefdc2d0b16d4b",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 2106776,
            "upload_time": "2024-11-11T16:48:37",
            "upload_time_iso_8601": "2024-11-11T16:48:37.668299Z",
            "url": "https://files.pythonhosted.org/packages/36/27/a4797c83ea5aeaf14e3067b89ac7835958ef3e22b518180c3b33d1fea8d8/fetter-1.1.0-cp312-cp312-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e3fd247d36525b02d2cfac73b2abbc1c7c7e25e2cffeebc8aed24fe5c2beda75",
                "md5": "1538c4f769ee582517e1e3ffccc829e8",
                "sha256": "b09aa61daa4265f60416db9afae9796003d494dda76482655efd7cdbc95588ee"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "1538c4f769ee582517e1e3ffccc829e8",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 2011914,
            "upload_time": "2024-11-11T16:48:28",
            "upload_time_iso_8601": "2024-11-11T16:48:28.540001Z",
            "url": "https://files.pythonhosted.org/packages/e3/fd/247d36525b02d2cfac73b2abbc1c7c7e25e2cffeebc8aed24fe5c2beda75/fetter-1.1.0-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ebc33c81dfafd2ff4daa8ae86ea50a4cc3fc1f50220e0fdd4898e6d5b791bbec",
                "md5": "795956621b2f53e8c0cd7ad028eb16d5",
                "sha256": "b4caf73d2f8772092dc65a2186f94b58d2b79079c53e680d11e317d843c2ba57"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "795956621b2f53e8c0cd7ad028eb16d5",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 2070385,
            "upload_time": "2024-11-11T16:47:23",
            "upload_time_iso_8601": "2024-11-11T16:47:23.796755Z",
            "url": "https://files.pythonhosted.org/packages/eb/c3/3c81dfafd2ff4daa8ae86ea50a4cc3fc1f50220e0fdd4898e6d5b791bbec/fetter-1.1.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c3ce438fe8a1e2fb08d226c4ff144ba5efd63885fc420c989f38fd79761d2d99",
                "md5": "25a492e8417be44425a4520ba9368eb2",
                "sha256": "8da1ff92889350af96b5322e73bbf4a21cb5da46a5aea85ec1329fa1089c0440"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "25a492e8417be44425a4520ba9368eb2",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 2246903,
            "upload_time": "2024-11-11T16:48:05",
            "upload_time_iso_8601": "2024-11-11T16:48:05.970241Z",
            "url": "https://files.pythonhosted.org/packages/c3/ce/438fe8a1e2fb08d226c4ff144ba5efd63885fc420c989f38fd79761d2d99/fetter-1.1.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "65f52b9cfb0e8e4dd729a1c7f31caee7be7aa5aeaa39cf1216d1d9b0bc187561",
                "md5": "fb3d4622bb731ace6a6fc799da9fe94b",
                "sha256": "6043bc61573999020ccdd78c49254ce1b02208cd8fe4fc723f8115297c2cb09e"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "fb3d4622bb731ace6a6fc799da9fe94b",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 2397598,
            "upload_time": "2024-11-11T16:47:39",
            "upload_time_iso_8601": "2024-11-11T16:47:39.969157Z",
            "url": "https://files.pythonhosted.org/packages/65/f5/2b9cfb0e8e4dd729a1c7f31caee7be7aa5aeaa39cf1216d1d9b0bc187561/fetter-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c61ef0e539233d959ca36d94f862393d98137bfac4b296c6ce8cdc66834c59a3",
                "md5": "2e9f86a161e8c66d8336a29d99960180",
                "sha256": "f1f1b05abf948bb7e652d61b7d2a317d71c325c0a3f5164146eeec2b0f6fb823"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "2e9f86a161e8c66d8336a29d99960180",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 2381063,
            "upload_time": "2024-11-11T16:47:53",
            "upload_time_iso_8601": "2024-11-11T16:47:53.683140Z",
            "url": "https://files.pythonhosted.org/packages/c6/1e/f0e539233d959ca36d94f862393d98137bfac4b296c6ce8cdc66834c59a3/fetter-1.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4b1e95c76608c46df93007b1ba1554624f114f2fb3231fb0140ef9f7a931784f",
                "md5": "3d07281f231159c893cf7174c1925cfe",
                "sha256": "56b7e811b6828ce9f0e6e225654101862458e55d0b732d1d80242b11aeb31f36"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "3d07281f231159c893cf7174c1925cfe",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 2300289,
            "upload_time": "2024-11-11T16:48:17",
            "upload_time_iso_8601": "2024-11-11T16:48:17.634126Z",
            "url": "https://files.pythonhosted.org/packages/4b/1e/95c76608c46df93007b1ba1554624f114f2fb3231fb0140ef9f7a931784f/fetter-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5b552cb8a5c13c6e93105c798e7d38da1ed6d7a6935d25c99664734a717cf890",
                "md5": "0dfb80e076296ac47f279af53af855fe",
                "sha256": "dfbd683accdcea82936e213c0a6fca3aad6597bb2b4af7a6cc69142a1857dab6"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp39-cp39-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "0dfb80e076296ac47f279af53af855fe",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 2107427,
            "upload_time": "2024-11-11T16:48:39",
            "upload_time_iso_8601": "2024-11-11T16:48:39.820862Z",
            "url": "https://files.pythonhosted.org/packages/5b/55/2cb8a5c13c6e93105c798e7d38da1ed6d7a6935d25c99664734a717cf890/fetter-1.1.0-cp39-cp39-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "007097d738c4ee0a1a5f7b6e573fc9ca60645191a1cea1772e77468ad22595dd",
                "md5": "eb3011a761582c251f859be4a373cb5e",
                "sha256": "8cdb0a7b97d02069c95a16697bbf58ee0aa0a9f322c8a566910357a6e09ccc04"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "eb3011a761582c251f859be4a373cb5e",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 2012422,
            "upload_time": "2024-11-11T16:48:30",
            "upload_time_iso_8601": "2024-11-11T16:48:30.412700Z",
            "url": "https://files.pythonhosted.org/packages/00/70/97d738c4ee0a1a5f7b6e573fc9ca60645191a1cea1772e77468ad22595dd/fetter-1.1.0-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c1dfc32ecd8414ff92f804352808d797de6d2f2b4063849d9ab3b7427878024c",
                "md5": "90d89b876dcdb90b0f801ead55cb919a",
                "sha256": "0fd57f135ff9c8d0aaef44132f0dba0b0d70bcecbdd97b5133f000006459fc6b"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "90d89b876dcdb90b0f801ead55cb919a",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 2071340,
            "upload_time": "2024-11-11T16:47:26",
            "upload_time_iso_8601": "2024-11-11T16:47:26.451140Z",
            "url": "https://files.pythonhosted.org/packages/c1/df/c32ecd8414ff92f804352808d797de6d2f2b4063849d9ab3b7427878024c/fetter-1.1.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "43b5c4e3b3c5fb7b8e82c0ed610cda5798ea7ff3a5dd61a012893eebb9a7a030",
                "md5": "47ae10d5220f87ce7503a9514ac7f464",
                "sha256": "f9449d95b1dbab4409073a5fb2fb27639de9ff08004e7efaaf38ee6929f86726"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "47ae10d5220f87ce7503a9514ac7f464",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 2247712,
            "upload_time": "2024-11-11T16:48:07",
            "upload_time_iso_8601": "2024-11-11T16:48:07.904195Z",
            "url": "https://files.pythonhosted.org/packages/43/b5/c4e3b3c5fb7b8e82c0ed610cda5798ea7ff3a5dd61a012893eebb9a7a030/fetter-1.1.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "19113f1e25623557a0964dfb02a49014d63e615354e372e0de41ddc994ab544b",
                "md5": "dbe089d735a8692577adee55b63d26e6",
                "sha256": "3f8ec9a4b6db692fae329cfc29c8d50559f73ad04eb0bc1698dd53990fa515db"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "dbe089d735a8692577adee55b63d26e6",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 2397585,
            "upload_time": "2024-11-11T16:47:42",
            "upload_time_iso_8601": "2024-11-11T16:47:42.166753Z",
            "url": "https://files.pythonhosted.org/packages/19/11/3f1e25623557a0964dfb02a49014d63e615354e372e0de41ddc994ab544b/fetter-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "72a84886e0cffe9770a37d375174184eca173683c28b73c73da9b1039534ef54",
                "md5": "cb30a80141edf4bd21d30933f3bd993f",
                "sha256": "0b490483704e02b9541dd215cc661abc2dda36ffa3c44488cac3d5f21be12f4b"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "cb30a80141edf4bd21d30933f3bd993f",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 2383019,
            "upload_time": "2024-11-11T16:47:55",
            "upload_time_iso_8601": "2024-11-11T16:47:55.672597Z",
            "url": "https://files.pythonhosted.org/packages/72/a8/4886e0cffe9770a37d375174184eca173683c28b73c73da9b1039534ef54/fetter-1.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7b27f21eddf36779ab2a4a2209bba29a9a2bbbdf81b0a13e823ba0c3030c6be2",
                "md5": "57c345ec591aae434098a386bb18897c",
                "sha256": "e9a7382db5ec5e2336367a07f0a7494b297866fe482360814cb53cb7e16f3791"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "57c345ec591aae434098a386bb18897c",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 2301193,
            "upload_time": "2024-11-11T16:48:20",
            "upload_time_iso_8601": "2024-11-11T16:48:20.374198Z",
            "url": "https://files.pythonhosted.org/packages/7b/27/f21eddf36779ab2a4a2209bba29a9a2bbbdf81b0a13e823ba0c3030c6be2/fetter-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e81e05ce86122a27726cd137787f119d3f7aa483407f74117bdc23dbdb77be16",
                "md5": "ba5f20ac166c97fbc47e7adbe5300235",
                "sha256": "3ae6f0cde47c89717a702201e571940185d3b563ad7774a1b619ebe57a0f55e5"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "ba5f20ac166c97fbc47e7adbe5300235",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.9",
            "size": 2072289,
            "upload_time": "2024-11-11T16:47:28",
            "upload_time_iso_8601": "2024-11-11T16:47:28.963085Z",
            "url": "https://files.pythonhosted.org/packages/e8/1e/05ce86122a27726cd137787f119d3f7aa483407f74117bdc23dbdb77be16/fetter-1.1.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "97d536e72f6bcd0462849c908e0deb398a4547325c2a3cadc475205ef0d956ff",
                "md5": "496182358dc0c9804986ecc1b7fa1185",
                "sha256": "79c9c9bd0fcaa21372c3bafacad448a5eb00d2e1744942ff87222e43cd0a0814"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "496182358dc0c9804986ecc1b7fa1185",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.9",
            "size": 2249082,
            "upload_time": "2024-11-11T16:48:11",
            "upload_time_iso_8601": "2024-11-11T16:48:11.156722Z",
            "url": "https://files.pythonhosted.org/packages/97/d5/36e72f6bcd0462849c908e0deb398a4547325c2a3cadc475205ef0d956ff/fetter-1.1.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c7784d472d850ae509bf42f9fb79907b3c71b7f3f2bee9d45405675542883f39",
                "md5": "ccef3e4292c45a7146a6db2e8e04adce",
                "sha256": "17010c24fac3dcd9984506cefd744f998bb51a1658ee47f8ec7f542dd501a0b0"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "ccef3e4292c45a7146a6db2e8e04adce",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.9",
            "size": 2399705,
            "upload_time": "2024-11-11T16:47:44",
            "upload_time_iso_8601": "2024-11-11T16:47:44.375907Z",
            "url": "https://files.pythonhosted.org/packages/c7/78/4d472d850ae509bf42f9fb79907b3c71b7f3f2bee9d45405675542883f39/fetter-1.1.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6eb1a6e85cd72d5dc64d557b95826aa74c9d5aa9ab1f7a2b73e564c24244ca82",
                "md5": "fe2e157e87acded0f60d52cbf70fd081",
                "sha256": "e212ce4749655878c40c7435dc47beb6453dc9ebb6b439f999e1f330d80e86fe"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "fe2e157e87acded0f60d52cbf70fd081",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.9",
            "size": 2384316,
            "upload_time": "2024-11-11T16:47:57",
            "upload_time_iso_8601": "2024-11-11T16:47:57.567456Z",
            "url": "https://files.pythonhosted.org/packages/6e/b1/a6e85cd72d5dc64d557b95826aa74c9d5aa9ab1f7a2b73e564c24244ca82/fetter-1.1.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a20608711f008ab516fc8a7d3c8757dbbeaf26470e221a39e991b63374ec16f4",
                "md5": "652c367657d571103402e59bcb400211",
                "sha256": "2e798cbb645dd6b098b4b1d963e631907d06f351000dab17a7ff1ddb9041cb49"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "652c367657d571103402e59bcb400211",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.9",
            "size": 2302354,
            "upload_time": "2024-11-11T16:48:22",
            "upload_time_iso_8601": "2024-11-11T16:48:22.415353Z",
            "url": "https://files.pythonhosted.org/packages/a2/06/08711f008ab516fc8a7d3c8757dbbeaf26470e221a39e991b63374ec16f4/fetter-1.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d1c4b2a674c511aca9856e579187e203de39f4bf4802d92fcbd319a3e09efc3e",
                "md5": "abe578a12b0e562411d04f7cdb33d36a",
                "sha256": "c4989d7be0a21e4477cb192bf5eec2e054f450cdf3e4964f96dd823c50f1af75"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "abe578a12b0e562411d04f7cdb33d36a",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.9",
            "size": 2072114,
            "upload_time": "2024-11-11T16:47:31",
            "upload_time_iso_8601": "2024-11-11T16:47:31.363781Z",
            "url": "https://files.pythonhosted.org/packages/d1/c4/b2a674c511aca9856e579187e203de39f4bf4802d92fcbd319a3e09efc3e/fetter-1.1.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6968ead659a27c935bcfe281584cc994bc6b7f47f27affa78cd869844fd0e084",
                "md5": "5f201bda7675aa34d3a07cc2ebff9314",
                "sha256": "3e965c59e67b2343de792bc6e2383670ca259be04888e7d7996f2b2c92a80a2f"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "5f201bda7675aa34d3a07cc2ebff9314",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.9",
            "size": 2399601,
            "upload_time": "2024-11-11T16:47:46",
            "upload_time_iso_8601": "2024-11-11T16:47:46.622992Z",
            "url": "https://files.pythonhosted.org/packages/69/68/ead659a27c935bcfe281584cc994bc6b7f47f27affa78cd869844fd0e084/fetter-1.1.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ef542c1918324f8a27958d34293e15dbd89b52bc4ede0c4a3373cdacbac5d7d2",
                "md5": "a9804a6750be55581cc8da6b07ca2c76",
                "sha256": "be90540edb417d0b8219a1b09c81432a7947b66ca4bd078d4e6c26f92d5e0728"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "a9804a6750be55581cc8da6b07ca2c76",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.9",
            "size": 2384425,
            "upload_time": "2024-11-11T16:47:59",
            "upload_time_iso_8601": "2024-11-11T16:47:59.881894Z",
            "url": "https://files.pythonhosted.org/packages/ef/54/2c1918324f8a27958d34293e15dbd89b52bc4ede0c4a3373cdacbac5d7d2/fetter-1.1.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "df28e719b7b976e7c8200f5f433ce83e61776c2ca492928ea701e778430dbe22",
                "md5": "dbea14cd80fd8ec08900b49729cb07ff",
                "sha256": "5f4f153508e9a6e49d78f3df33f06f2276c8fc764d6074ea2eecc33d7ceb6a2e"
            },
            "downloads": -1,
            "filename": "fetter-1.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "dbea14cd80fd8ec08900b49729cb07ff",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 34780,
            "upload_time": "2024-11-11T16:48:41",
            "upload_time_iso_8601": "2024-11-11T16:48:41.458930Z",
            "url": "https://files.pythonhosted.org/packages/df/28/e719b7b976e7c8200f5f433ce83e61776c2ca492928ea701e778430dbe22/fetter-1.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-11 16:48:41",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "fetter-io",
    "github_project": "fetter-py",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "fetter"
}
        
Elapsed time: 2.21206s