prettypretty


Nameprettypretty JSON
Version 0.10.0 PyPI version JSON
download
home_pagehttps://crates.io/crates/prettypretty
SummaryApplying 2020s color science to 1970s terminal user interfaces
upload_time2024-07-12 13:14:46
maintainerNone
docs_urlNone
authorRobert Grimm <rgrimm@alum.mit.edu>
requires_python>=3.11
licenseApache 2.0
keywords awesome terminal color ansi escape code terminal user interface
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Pretty 🌸 Pretty

[![Run Tests](https://github.com/apparebit/prettypretty/actions/workflows/ci.yml/badge.svg)](https://github.com/apparebit/prettypretty/actions/workflows/ci.yml)
[![Publish to GitHub Pages](https://github.com/apparebit/prettypretty/actions/workflows/gh-pages.yml/badge.svg)](https://github.com/apparebit/prettypretty/actions/workflows/gh-pages.yml)
[![Build Wheels](https://github.com/apparebit/prettypretty/actions/workflows/dist.yml/badge.svg)](https://github.com/apparebit/prettypretty/actions/workflows/dist.yml)

\[ [**Documentation**](https://docs.rs/prettypretty/latest/prettypretty/)
 | [**Rust Crate**](https://crates.io/crates/prettypretty)
 | [**Python Package**](https://pypi.org/project/prettypretty/)
 | [**Repository**](https://github.com/apparebit/prettypretty)
\]

🎖️ As featured on [Real Python #211](https://realpython.com/podcasts/rpp/211/)

Prettypretty is a Rust library with optional Python integration that brings
2020s color science to 1970s terminals for building awesome terminal user
interfaces (TUIs). The intended benefits are twofold:

  * You get to design and build the TUI with all the expressivity and
    convenience of high-resolution color and [color
    spaces](https://lab.ardov.me/spaces-3d), including the perceptually uniform
    [Oklab](https://bottosson.github.io/posts/oklab/) whether in Cartesian or
    polar form, with original or [revised
    lightness](https://bottosson.github.io/posts/colorpicker/#intermission---a-new-lightness-estimate-for-oklab).
  * Prettypretty takes care of reconciling the intended appearance with the
    capabilities of the terminal, the current runtime context including light or
    dark mode, and the user's preferences, whether they lean
    [FORCE_COLOR](https://force-color.org) or [NO_COLOR](https://no-color.org).

To make that possible, prettypretty provides simple abstractions for terminal
and high-resolution colors alike, facilitates seamless conversion between them
and common color spaces, and implements state-of-the-art algorithms for
[gamut-mapping](https://www.w3.org/TR/css-color-4/#gamut-mapping), [color
interpolation](https://www.w3.org/TR/css-color-4/#interpolation), [perceptual
contrast](https://github.com/Myndex/apca-w3), as well as its own hue- and
lightness-based downsampling for optimal selection of ANSI colors.


## Python Integration

The optional Python integration is enabled with the `pyffi` feature flag and
relies on [PyO3](https://pyo3.rs/v0.22.0/) and [Maturin](https://www.maturin.rs)
for building an extension module with the same functionality. Only where the
Rust library uses trait implementations, the Python module [uses dedicated
methods](https://github.com/apparebit/prettypretty/blob/main/prettypretty/color.pyi).
Also, where the Rust library currently is BYO(T)IO, that is, bring your own
(terminal) I/O, the Python library comes with a powerful terminal abstraction
that makes, say, querying the terminal [for the current color
theme](https://github.com/apparebit/prettypretty/blob/61fb6d7c364c0d083e1073ead146834c1e0bc56d/prettypretty/terminal.py#L1039)
a breeze.

The [Python documentation](https://apparebit.github.io/prettypretty/python/)
covers the functionality that currently is Python-only. Over time, I expect to
port those features to Rust as well.


## Minimum Supported Rust and Python Versions

Prettypretty leverages both programming languages to their fullest and hence
requires relatively recent versions:

  * According to [cargo-msrv](https://github.com/foresterre/cargo-msrv), **the
    minimum supported Rust version is 1.77.2**.
  * According to [vermin](https://github.com/netromdk/vermin), **the minimum
    supported Python version is 3.11.0.**

I expect that, as the project matures, the version lag between minimum and
latest versions will grow, as it should.


## Scripts

Besides the [documentation](https://apparebit.github.io/prettypretty/), a good
starting point for familiarizing yourself with prettypretty are the scripts:

  * [prettypretty.progress](https://github.com/apparebit/prettypretty/blob/main/prettypretty/progress.py)
    illustrates the library's use on the example of a progress bar in less than
    100 lines of Python. The finished progress bar is shown below for both light
    and dark themes.

    <img src="https://raw.githubusercontent.com/apparebit/prettypretty/main/docs/figures/progress-bar-light.png"
         alt="a complete, green progress bar under light mode" width=293>
    <img src="https://raw.githubusercontent.com/apparebit/prettypretty/main/docs/figures/progress-bar-dark.png"
         alt="a complete, green progress bar under dark mode" width=298>

  * [prettypretty.plot](https://github.com/apparebit/prettypretty/blob/main/prettypretty/plot.py)
    charts colors on the chroma/hue plane of Oklab, if you don't feed it colors
    defaulting to your terminal's current color scheme. Here's the one for the
    basic theme in Apple's Terminal.app:

    <img src="https://raw.githubusercontent.com/apparebit/prettypretty/main/docs/figures/terminal.app-basic.svg"
         alt="colors from the basic theme for Apple's Terminal.app in Oklch" width=300px>

  * [prettypretty.grid](https://github.com/apparebit/prettypretty/blob/main/prettypretty/grid.py)
    visualizes perceptual contrast and color downsampling strategies,
    exhaustively for the 6x6x6 RGB cube embedded in 8-bit color and selectively
    for 32x32 slices through the much bigger 24-bit RGB cube.

    <img src="https://raw.githubusercontent.com/apparebit/prettypretty/main/docs/figures/rgb6-background.png"
         alt="a grid visualizing the 6x6x6 embedded RGB cube" width=300px>


## Acknowledgements

I wrote much of prettypretty over a two-month period in 2024. Twice. I first
implemented the core color routines in Python and then I did so again in Rust.
At this point, only the Rust version survives. But Python remains a tier-1
runtime target for prettypretty. Two things really helped with getting this
project started. First, I had been toying with different approaches to terminal
styles for a while and knew what I was looking for. Second, I benefitted
tremendously from [Lea Verou](http://lea.verou.me/)'s and [Chris
Lilley](https://svgees.us/)'s work on the [Color.js](https://colorjs.io) library
and [CSS Color 4](https://www.w3.org/TR/css-color-4/) specification.
Prettypretty directly reuses Color.js' formulae for conversion between color
spaces and implements several CSS Color 4 algorithms.

---

Copyright 2024 Robert Grimm. The code in this repository has been released as
open source under the [Apache
2.0](https://github.com/apparebit/prettypretty/blob/main/LICENSE) license.


            

Raw data

            {
    "_id": null,
    "home_page": "https://crates.io/crates/prettypretty",
    "name": "prettypretty",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.11",
    "maintainer_email": null,
    "keywords": "awesome, terminal, color, ANSI escape code, terminal user interface",
    "author": "Robert Grimm <rgrimm@alum.mit.edu>",
    "author_email": "Robert Grimm <rgrimm@alum.mit.edu>",
    "download_url": "https://files.pythonhosted.org/packages/e6/1c/f09a853f6ff6ded7884d5091e0045592440827238025d3c520a9a4b9e5aa/prettypretty-0.10.0.tar.gz",
    "platform": null,
    "description": "# Pretty \ud83c\udf38 Pretty\n\n[![Run Tests](https://github.com/apparebit/prettypretty/actions/workflows/ci.yml/badge.svg)](https://github.com/apparebit/prettypretty/actions/workflows/ci.yml)\n[![Publish to GitHub Pages](https://github.com/apparebit/prettypretty/actions/workflows/gh-pages.yml/badge.svg)](https://github.com/apparebit/prettypretty/actions/workflows/gh-pages.yml)\n[![Build Wheels](https://github.com/apparebit/prettypretty/actions/workflows/dist.yml/badge.svg)](https://github.com/apparebit/prettypretty/actions/workflows/dist.yml)\n\n\\[ [**Documentation**](https://docs.rs/prettypretty/latest/prettypretty/)\n | [**Rust Crate**](https://crates.io/crates/prettypretty)\n | [**Python Package**](https://pypi.org/project/prettypretty/)\n | [**Repository**](https://github.com/apparebit/prettypretty)\n\\]\n\n\ud83c\udf96\ufe0f As featured on [Real Python #211](https://realpython.com/podcasts/rpp/211/)\n\nPrettypretty is a Rust library with optional Python integration that brings\n2020s color science to 1970s terminals for building awesome terminal user\ninterfaces (TUIs). The intended benefits are twofold:\n\n  * You get to design and build the TUI with all the expressivity and\n    convenience of high-resolution color and [color\n    spaces](https://lab.ardov.me/spaces-3d), including the perceptually uniform\n    [Oklab](https://bottosson.github.io/posts/oklab/) whether in Cartesian or\n    polar form, with original or [revised\n    lightness](https://bottosson.github.io/posts/colorpicker/#intermission---a-new-lightness-estimate-for-oklab).\n  * Prettypretty takes care of reconciling the intended appearance with the\n    capabilities of the terminal, the current runtime context including light or\n    dark mode, and the user's preferences, whether they lean\n    [FORCE_COLOR](https://force-color.org) or [NO_COLOR](https://no-color.org).\n\nTo make that possible, prettypretty provides simple abstractions for terminal\nand high-resolution colors alike, facilitates seamless conversion between them\nand common color spaces, and implements state-of-the-art algorithms for\n[gamut-mapping](https://www.w3.org/TR/css-color-4/#gamut-mapping), [color\ninterpolation](https://www.w3.org/TR/css-color-4/#interpolation), [perceptual\ncontrast](https://github.com/Myndex/apca-w3), as well as its own hue- and\nlightness-based downsampling for optimal selection of ANSI colors.\n\n\n## Python Integration\n\nThe optional Python integration is enabled with the `pyffi` feature flag and\nrelies on [PyO3](https://pyo3.rs/v0.22.0/) and [Maturin](https://www.maturin.rs)\nfor building an extension module with the same functionality. Only where the\nRust library uses trait implementations, the Python module [uses dedicated\nmethods](https://github.com/apparebit/prettypretty/blob/main/prettypretty/color.pyi).\nAlso, where the Rust library currently is BYO(T)IO, that is, bring your own\n(terminal) I/O, the Python library comes with a powerful terminal abstraction\nthat makes, say, querying the terminal [for the current color\ntheme](https://github.com/apparebit/prettypretty/blob/61fb6d7c364c0d083e1073ead146834c1e0bc56d/prettypretty/terminal.py#L1039)\na breeze.\n\nThe [Python documentation](https://apparebit.github.io/prettypretty/python/)\ncovers the functionality that currently is Python-only. Over time, I expect to\nport those features to Rust as well.\n\n\n## Minimum Supported Rust and Python Versions\n\nPrettypretty leverages both programming languages to their fullest and hence\nrequires relatively recent versions:\n\n  * According to [cargo-msrv](https://github.com/foresterre/cargo-msrv), **the\n    minimum supported Rust version is 1.77.2**.\n  * According to [vermin](https://github.com/netromdk/vermin), **the minimum\n    supported Python version is 3.11.0.**\n\nI expect that, as the project matures, the version lag between minimum and\nlatest versions will grow, as it should.\n\n\n## Scripts\n\nBesides the [documentation](https://apparebit.github.io/prettypretty/), a good\nstarting point for familiarizing yourself with prettypretty are the scripts:\n\n  * [prettypretty.progress](https://github.com/apparebit/prettypretty/blob/main/prettypretty/progress.py)\n    illustrates the library's use on the example of a progress bar in less than\n    100 lines of Python. The finished progress bar is shown below for both light\n    and dark themes.\n\n    <img src=\"https://raw.githubusercontent.com/apparebit/prettypretty/main/docs/figures/progress-bar-light.png\"\n         alt=\"a complete, green progress bar under light mode\" width=293>\n    <img src=\"https://raw.githubusercontent.com/apparebit/prettypretty/main/docs/figures/progress-bar-dark.png\"\n         alt=\"a complete, green progress bar under dark mode\" width=298>\n\n  * [prettypretty.plot](https://github.com/apparebit/prettypretty/blob/main/prettypretty/plot.py)\n    charts colors on the chroma/hue plane of Oklab, if you don't feed it colors\n    defaulting to your terminal's current color scheme. Here's the one for the\n    basic theme in Apple's Terminal.app:\n\n    <img src=\"https://raw.githubusercontent.com/apparebit/prettypretty/main/docs/figures/terminal.app-basic.svg\"\n         alt=\"colors from the basic theme for Apple's Terminal.app in Oklch\" width=300px>\n\n  * [prettypretty.grid](https://github.com/apparebit/prettypretty/blob/main/prettypretty/grid.py)\n    visualizes perceptual contrast and color downsampling strategies,\n    exhaustively for the 6x6x6 RGB cube embedded in 8-bit color and selectively\n    for 32x32 slices through the much bigger 24-bit RGB cube.\n\n    <img src=\"https://raw.githubusercontent.com/apparebit/prettypretty/main/docs/figures/rgb6-background.png\"\n         alt=\"a grid visualizing the 6x6x6 embedded RGB cube\" width=300px>\n\n\n## Acknowledgements\n\nI wrote much of prettypretty over a two-month period in 2024. Twice. I first\nimplemented the core color routines in Python and then I did so again in Rust.\nAt this point, only the Rust version survives. But Python remains a tier-1\nruntime target for prettypretty. Two things really helped with getting this\nproject started. First, I had been toying with different approaches to terminal\nstyles for a while and knew what I was looking for. Second, I benefitted\ntremendously from [Lea Verou](http://lea.verou.me/)'s and [Chris\nLilley](https://svgees.us/)'s work on the [Color.js](https://colorjs.io) library\nand [CSS Color 4](https://www.w3.org/TR/css-color-4/) specification.\nPrettypretty directly reuses Color.js' formulae for conversion between color\nspaces and implements several CSS Color 4 algorithms.\n\n---\n\nCopyright 2024 Robert Grimm. The code in this repository has been released as\nopen source under the [Apache\n2.0](https://github.com/apparebit/prettypretty/blob/main/LICENSE) license.\n\n",
    "bugtrack_url": null,
    "license": "Apache 2.0",
    "summary": "Applying 2020s color science to 1970s terminal user interfaces",
    "version": "0.10.0",
    "project_urls": {
        "Homepage": "https://crates.io/crates/prettypretty",
        "documentation": "https://apparebit.github.io/prettypretty/",
        "package": "https://pypi.org/project/prettypretty/",
        "repository": "https://github.com/apparebit/prettypretty"
    },
    "split_keywords": [
        "awesome",
        " terminal",
        " color",
        " ansi escape code",
        " terminal user interface"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a3f2611931cecb61eeb750757e0b687940d7eaeae2794f2a4dccefc3350653a2",
                "md5": "3bbcfbe3d507f8ac2e76e8a70f321b3d",
                "sha256": "063e32019266c90225cf076bbf72bb4850ad21c3a72602b356287bf5dc792c42"
            },
            "downloads": -1,
            "filename": "prettypretty-0.10.0-cp311-abi3-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "3bbcfbe3d507f8ac2e76e8a70f321b3d",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.11",
            "size": 420680,
            "upload_time": "2024-07-12T13:20:19",
            "upload_time_iso_8601": "2024-07-12T13:20:19.413309Z",
            "url": "https://files.pythonhosted.org/packages/a3/f2/611931cecb61eeb750757e0b687940d7eaeae2794f2a4dccefc3350653a2/prettypretty-0.10.0-cp311-abi3-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7db5350bdb9cbbb8db84101e6451c5ff933f7c6bd84d935e495170e36c4bd330",
                "md5": "db5bbf6e1f693593978a7c2006fd3222",
                "sha256": "1051d60117bd4c9c9d053dd57d85b32dfa34c0b21c560f535899969ccb5c8569"
            },
            "downloads": -1,
            "filename": "prettypretty-0.10.0-cp311-abi3-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "db5bbf6e1f693593978a7c2006fd3222",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.11",
            "size": 416738,
            "upload_time": "2024-07-12T13:20:17",
            "upload_time_iso_8601": "2024-07-12T13:20:17.555864Z",
            "url": "https://files.pythonhosted.org/packages/7d/b5/350bdb9cbbb8db84101e6451c5ff933f7c6bd84d935e495170e36c4bd330/prettypretty-0.10.0-cp311-abi3-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "26942d84507054207a9d924b649d1911cf35ffc1ad9b4f745966e4d159227cbc",
                "md5": "fc0d7650e222334f76b7ee388522461d",
                "sha256": "e5450a1c26cf052c8a1c9726a50742245ed9e0ef9da17f9aa393249e96cf66b1"
            },
            "downloads": -1,
            "filename": "prettypretty-0.10.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "fc0d7650e222334f76b7ee388522461d",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.11",
            "size": 482932,
            "upload_time": "2024-07-12T13:20:00",
            "upload_time_iso_8601": "2024-07-12T13:20:00.276281Z",
            "url": "https://files.pythonhosted.org/packages/26/94/2d84507054207a9d924b649d1911cf35ffc1ad9b4f745966e4d159227cbc/prettypretty-0.10.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "10da776adf84ae4ea635564d594a7a2b70bbd25e0c98b7453d61a447b0c928c4",
                "md5": "0ab2989476b4dc536c4454803a000279",
                "sha256": "a77f6250160591f66cf482f6e41ed3e2c6b28bf1db2e93f906566c0030dc1d4f"
            },
            "downloads": -1,
            "filename": "prettypretty-0.10.0-cp311-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "0ab2989476b4dc536c4454803a000279",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.11",
            "size": 484289,
            "upload_time": "2024-07-12T13:20:02",
            "upload_time_iso_8601": "2024-07-12T13:20:02.869891Z",
            "url": "https://files.pythonhosted.org/packages/10/da/776adf84ae4ea635564d594a7a2b70bbd25e0c98b7453d61a447b0c928c4/prettypretty-0.10.0-cp311-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "28a6ecfce4d9ee4485360a2bf11e1625feffbe01e5a68d7aa3adb211ffcacc68",
                "md5": "c77e678c9c864edcb90e31ecced70845",
                "sha256": "50f04b84a72694fd9e9bf509df9aa897d85ee6a464be9217f224b9d782a6be94"
            },
            "downloads": -1,
            "filename": "prettypretty-0.10.0-cp311-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "c77e678c9c864edcb90e31ecced70845",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.11",
            "size": 512769,
            "upload_time": "2024-07-12T13:20:09",
            "upload_time_iso_8601": "2024-07-12T13:20:09.416638Z",
            "url": "https://files.pythonhosted.org/packages/28/a6/ecfce4d9ee4485360a2bf11e1625feffbe01e5a68d7aa3adb211ffcacc68/prettypretty-0.10.0-cp311-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5654c61a34411525aede6f8f399517697ff9fc6d9ae97ff04009de27de2bce89",
                "md5": "66a4c2699e2f23fe589b1d814e8eedf6",
                "sha256": "73b0da9fe1ecb21fe836dd0e17d0d5e1c2fb44a1f152b8a1d037e39044706b6d"
            },
            "downloads": -1,
            "filename": "prettypretty-0.10.0-cp311-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "66a4c2699e2f23fe589b1d814e8eedf6",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.11",
            "size": 552660,
            "upload_time": "2024-07-12T13:20:11",
            "upload_time_iso_8601": "2024-07-12T13:20:11.556004Z",
            "url": "https://files.pythonhosted.org/packages/56/54/c61a34411525aede6f8f399517697ff9fc6d9ae97ff04009de27de2bce89/prettypretty-0.10.0-cp311-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "030056557bb839ce12ddb009d0f0997e70d74565f97e402522ebdb219144954f",
                "md5": "35397c91ee1e9db5028f8b89d4c23f85",
                "sha256": "131081caa1eabcd69d5163c1c9db5bbc4e19b005e219112535739bc13d5030fc"
            },
            "downloads": -1,
            "filename": "prettypretty-0.10.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "35397c91ee1e9db5028f8b89d4c23f85",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.11",
            "size": 469383,
            "upload_time": "2024-07-12T13:20:15",
            "upload_time_iso_8601": "2024-07-12T13:20:15.609098Z",
            "url": "https://files.pythonhosted.org/packages/03/00/56557bb839ce12ddb009d0f0997e70d74565f97e402522ebdb219144954f/prettypretty-0.10.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4c390ca85677a37b5e2a344e791512740e99e3514f026992f3dabd672fd8ce0d",
                "md5": "9e7fcaa65690a84d0a63d5066d2157c0",
                "sha256": "2960b7de189f4794173568286e4d5c4d9c850f8a2cc0da408b29ffd44751d82c"
            },
            "downloads": -1,
            "filename": "prettypretty-0.10.0-cp311-abi3-manylinux_2_5_i686.manylinux1_i686.whl",
            "has_sig": false,
            "md5_digest": "9e7fcaa65690a84d0a63d5066d2157c0",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.11",
            "size": 487871,
            "upload_time": "2024-07-12T13:20:13",
            "upload_time_iso_8601": "2024-07-12T13:20:13.301396Z",
            "url": "https://files.pythonhosted.org/packages/4c/39/0ca85677a37b5e2a344e791512740e99e3514f026992f3dabd672fd8ce0d/prettypretty-0.10.0-cp311-abi3-manylinux_2_5_i686.manylinux1_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fa92cb9d37cf610b7c6855493d79e1a415adbc5d84f4287bd48f21ee344b21cf",
                "md5": "1a43a0c867f471502440cb0d608c9545",
                "sha256": "85d8dae033ddc934e85e11090d3d6b85ac18f6cc853b82728f7fc1850791b237"
            },
            "downloads": -1,
            "filename": "prettypretty-0.10.0-cp311-abi3-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "1a43a0c867f471502440cb0d608c9545",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.11",
            "size": 661725,
            "upload_time": "2024-07-12T13:20:21",
            "upload_time_iso_8601": "2024-07-12T13:20:21.231986Z",
            "url": "https://files.pythonhosted.org/packages/fa/92/cb9d37cf610b7c6855493d79e1a415adbc5d84f4287bd48f21ee344b21cf/prettypretty-0.10.0-cp311-abi3-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "67cd03a37ad579669df20f266178a3f55447347fd85f4f86433fc73f827cce3d",
                "md5": "110c52935212c90fb5a971f5da148c0b",
                "sha256": "f9c001189429e1cb23ed714ddc83983c39211730e9c98357b2c8cd153bff8dfc"
            },
            "downloads": -1,
            "filename": "prettypretty-0.10.0-cp311-abi3-musllinux_1_2_armv7l.whl",
            "has_sig": false,
            "md5_digest": "110c52935212c90fb5a971f5da148c0b",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.11",
            "size": 746733,
            "upload_time": "2024-07-12T13:20:23",
            "upload_time_iso_8601": "2024-07-12T13:20:23.457428Z",
            "url": "https://files.pythonhosted.org/packages/67/cd/03a37ad579669df20f266178a3f55447347fd85f4f86433fc73f827cce3d/prettypretty-0.10.0-cp311-abi3-musllinux_1_2_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ea74cd4af4c9c626e1ea4ea94096f8df6f2fba4fdd2a650aedc1bb7cd48f32c9",
                "md5": "545145679a2d00461ec3cc264c2f76d1",
                "sha256": "c6143cda1f649df98a691a87250f96387e1f350890e579109db55a6172f003fc"
            },
            "downloads": -1,
            "filename": "prettypretty-0.10.0-cp311-abi3-musllinux_1_2_i686.whl",
            "has_sig": false,
            "md5_digest": "545145679a2d00461ec3cc264c2f76d1",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.11",
            "size": 662422,
            "upload_time": "2024-07-12T13:20:26",
            "upload_time_iso_8601": "2024-07-12T13:20:26.301223Z",
            "url": "https://files.pythonhosted.org/packages/ea/74/cd4af4c9c626e1ea4ea94096f8df6f2fba4fdd2a650aedc1bb7cd48f32c9/prettypretty-0.10.0-cp311-abi3-musllinux_1_2_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "91d5af3880b4281628ceafb4b6124549f7b6244e4388db83060f1f9d0e2f0212",
                "md5": "742d39cad3802e231de0bc07604d4d9a",
                "sha256": "7e57f330d3a10a83553dcaf97764f3b376fa2a38dc3e32ade7c424e176b06e2e"
            },
            "downloads": -1,
            "filename": "prettypretty-0.10.0-cp311-abi3-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "742d39cad3802e231de0bc07604d4d9a",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.11",
            "size": 639310,
            "upload_time": "2024-07-12T13:20:28",
            "upload_time_iso_8601": "2024-07-12T13:20:28.613962Z",
            "url": "https://files.pythonhosted.org/packages/91/d5/af3880b4281628ceafb4b6124549f7b6244e4388db83060f1f9d0e2f0212/prettypretty-0.10.0-cp311-abi3-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "38c4932f8948b9974778d8c45d2213a1d39786291421c3f4e4fd63b25b516933",
                "md5": "9c847e9a3618f1ec9e2b3473341fe83a",
                "sha256": "834fb7e25a492ea42d0de44e2da21b7261917fc8e84432a54667b05c2b888b55"
            },
            "downloads": -1,
            "filename": "prettypretty-0.10.0-cp311-abi3-win32.whl",
            "has_sig": false,
            "md5_digest": "9c847e9a3618f1ec9e2b3473341fe83a",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.11",
            "size": 304186,
            "upload_time": "2024-07-12T13:20:32",
            "upload_time_iso_8601": "2024-07-12T13:20:32.744428Z",
            "url": "https://files.pythonhosted.org/packages/38/c4/932f8948b9974778d8c45d2213a1d39786291421c3f4e4fd63b25b516933/prettypretty-0.10.0-cp311-abi3-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0ad47ef90f680aa960e4e81b36033f6caeff3176fc8267746216df3ab258ea48",
                "md5": "b6cbfc870940f1884692ed144d256657",
                "sha256": "61b0c32cd606698677730932ad74c0cf24f19ba8703339335c8569f69a687bee"
            },
            "downloads": -1,
            "filename": "prettypretty-0.10.0-cp311-abi3-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "b6cbfc870940f1884692ed144d256657",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.11",
            "size": 316619,
            "upload_time": "2024-07-12T13:20:31",
            "upload_time_iso_8601": "2024-07-12T13:20:31.124244Z",
            "url": "https://files.pythonhosted.org/packages/0a/d4/7ef90f680aa960e4e81b36033f6caeff3176fc8267746216df3ab258ea48/prettypretty-0.10.0-cp311-abi3-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e61cf09a853f6ff6ded7884d5091e0045592440827238025d3c520a9a4b9e5aa",
                "md5": "ffa63fbb8c2dd82024c1f753942db9c7",
                "sha256": "3e8cd13920f381ee538dbfffa24f46b3aab758049985d6e152b5f32c385c98dc"
            },
            "downloads": -1,
            "filename": "prettypretty-0.10.0.tar.gz",
            "has_sig": false,
            "md5_digest": "ffa63fbb8c2dd82024c1f753942db9c7",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.11",
            "size": 104683,
            "upload_time": "2024-07-12T13:14:46",
            "upload_time_iso_8601": "2024-07-12T13:14:46.768965Z",
            "url": "https://files.pythonhosted.org/packages/e6/1c/f09a853f6ff6ded7884d5091e0045592440827238025d3c520a9a4b9e5aa/prettypretty-0.10.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-07-12 13:14:46",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "apparebit",
    "github_project": "prettypretty",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "prettypretty"
}
        
Elapsed time: 0.31882s