# 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"
}