# Pretty 🌸 Terminals
[](https://github.com/apparebit/prettypretty/actions/workflows/ci.yml)
[](https://github.com/apparebit/prettypretty/actions/workflows/gh-pages.yml)
## Pretty 🌸 Tty
\[ [**Docs.rs**](https://docs.rs/prettypretty/latest/prettytty/)
| [**GitHub Pages**](https://apparebit.github.io/prettypretty/prettytty/)
| [**Rust Crate**](https://crates.io/crates/prettytty)
| [**Repository**](https://github.com/apparebit/prettypretty)
\]
Prettytty is a **lightweight and flexible terminal library** for Rust that has
only one low-level dependency, i.e., [`libc`](https://crates.io/crates/libc) on
Unix and [`windows-sys`](https://crates.io/crates/windows-sys) on Windows. Its
API is clean and simple: Open a [`Connection`] to the terminal and share it
across threads as needed. Write [`Command`]s to [`Output`]. Read [`Query`]
responses from [`Input`]. [`Scan::read_token`] takes care of low-level UTF-8 and
ANSI escape sequence decoding and [`Query::parse`] turns token payloads into
objects. A [`cmd`] library with 70+ built-in commands covers basic needs and
then some.
[`cmd`]: https://apparebit.github.io/prettypretty/prettytty/cmd/index.html
[`Command`]: https://apparebit.github.io/prettypretty/prettytty/trait.Command.html
[`Connection`]: https://apparebit.github.io/prettypretty/prettytty/struct.Connection.html
[`Input`]: https://apparebit.github.io/prettypretty/prettytty/struct.Input.html
[`Output`]: https://apparebit.github.io/prettypretty/prettytty/struct.Output.html
[`Query`]: https://apparebit.github.io/prettypretty/prettytty/trait.Query.html
[`Query::parse`]: https://apparebit.github.io/prettypretty/prettytty/trait.Query.html#method.parse
[`Scan`]: https://apparebit.github.io/prettypretty/prettytty/trait.Scan.html
[`Scan::read_token`]: https://apparebit.github.io/prettypretty/prettytty/trait.Scan.html#method.read_token
----
## Pretty 🌸 Pretty:
\[ [**Docs.rs**](https://docs.rs/prettypretty/latest/prettypretty/)
| [**GitHub Pages**](https://apparebit.github.io/prettypretty/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/)
🎖️ Inspired [iTerm2's color preferences](https://raw.githubusercontent.com/apparebit/prettypretty/main/docs/figures/iterm2-color-preferences.jpg)
Prettypretty is a Rust library with optional Python bindings that applies
**2020s color science to 1970s terminals** to facilitate scalable user
interfaces. However, instead of progressive enhancement, it primarily relies on
graceful degradation from high-resolution colors down to more limited terminal
colors.
The **three steps for better terminal styles** are:
1. Fluently declare high-resolution styles.
2. Let prettypretty adjust styles to terminal capabilities and user preferences at
program startup.
3. Use adjusted styles at will.
Prettypretty seamlessly integrates with
[prettytty](https://crates.io/crates/prettytty) for **querying the terminal for
its current color theme**. It then uses said color theme to produce more
accurate results when converting high resultion colors down to 256 or 16
terminal colors. The integration also is entirely optional, controlled by the
`tty` feature, and fairly small, requiring about 80 lines of code for
[`Theme::query`](https://apparebit.github.io/prettypretty/prettypretty/theme/struct.Theme.html#method.query).
Hence integration with another terminal library should be easy enough.
As far as colors are concerned, prettypretty comes with all the expressivity and
convenience of **high-resolution, floating point colors 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).
It further 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/__init__.pyi).
While prettytty takes care of terminal access for Rust, the Python version of
prettypretty has its own terminal abstraction, with its own Pythonic interface.
## Scripts Using Prettypretty
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/src/deepdive/colortheme/terminal.app-colors.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>
* [prettypretty.viz3d](https://github.com/apparebit/prettypretty/blob/main/prettypretty/viz3d.py)
traces the boundaries of the *visual gamut* in 3D and saves the
corresponding point cloud or mesh in [PLY
format](https://en.wikipedia.org/wiki/PLY_(file_format)). The screenshot
below shows [Vedo](https://vedo.embl.es)'s rendering.
<img src="https://raw.githubusercontent.com/apparebit/prettypretty/main/docs/figures/visual-gamut.jpg"
alt="a 3D visualization of the gamut for visible light,
somewhat shaped like a fat, squat hot pocket" 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-2025 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/68/de/eb08e9c0bf58356a1be00bb78df8b0986aad34abca281ee3f907b3a75d72/prettypretty-0.11.1.tar.gz",
"platform": null,
"description": "# Pretty \ud83c\udf38 Terminals\n\n[](https://github.com/apparebit/prettypretty/actions/workflows/ci.yml)\n[](https://github.com/apparebit/prettypretty/actions/workflows/gh-pages.yml)\n\n## Pretty \ud83c\udf38 Tty\n\n\\[ [**Docs.rs**](https://docs.rs/prettypretty/latest/prettytty/)\n| [**GitHub Pages**](https://apparebit.github.io/prettypretty/prettytty/)\n| [**Rust Crate**](https://crates.io/crates/prettytty)\n| [**Repository**](https://github.com/apparebit/prettypretty)\n\\]\n\nPrettytty is a **lightweight and flexible terminal library** for Rust that has\nonly one low-level dependency, i.e., [`libc`](https://crates.io/crates/libc) on\nUnix and [`windows-sys`](https://crates.io/crates/windows-sys) on Windows. Its\nAPI is clean and simple: Open a [`Connection`] to the terminal and share it\nacross threads as needed. Write [`Command`]s to [`Output`]. Read [`Query`]\nresponses from [`Input`]. [`Scan::read_token`] takes care of low-level UTF-8 and\nANSI escape sequence decoding and [`Query::parse`] turns token payloads into\nobjects. A [`cmd`] library with 70+ built-in commands covers basic needs and\nthen some.\n\n\n[`cmd`]: https://apparebit.github.io/prettypretty/prettytty/cmd/index.html\n[`Command`]: https://apparebit.github.io/prettypretty/prettytty/trait.Command.html\n[`Connection`]: https://apparebit.github.io/prettypretty/prettytty/struct.Connection.html\n[`Input`]: https://apparebit.github.io/prettypretty/prettytty/struct.Input.html\n[`Output`]: https://apparebit.github.io/prettypretty/prettytty/struct.Output.html\n[`Query`]: https://apparebit.github.io/prettypretty/prettytty/trait.Query.html\n[`Query::parse`]: https://apparebit.github.io/prettypretty/prettytty/trait.Query.html#method.parse\n[`Scan`]: https://apparebit.github.io/prettypretty/prettytty/trait.Scan.html\n[`Scan::read_token`]: https://apparebit.github.io/prettypretty/prettytty/trait.Scan.html#method.read_token\n\n----\n\n\n## Pretty \ud83c\udf38 Pretty:\n\n\\[ [**Docs.rs**](https://docs.rs/prettypretty/latest/prettypretty/)\n| [**GitHub Pages**](https://apparebit.github.io/prettypretty/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\n\ud83c\udf96\ufe0f Inspired [iTerm2's color preferences](https://raw.githubusercontent.com/apparebit/prettypretty/main/docs/figures/iterm2-color-preferences.jpg)\n\nPrettypretty is a Rust library with optional Python bindings that applies\n**2020s color science to 1970s terminals** to facilitate scalable user\ninterfaces. However, instead of progressive enhancement, it primarily relies on\ngraceful degradation from high-resolution colors down to more limited terminal\ncolors.\n\nThe **three steps for better terminal styles** are:\n\n 1. Fluently declare high-resolution styles.\n 2. Let prettypretty adjust styles to terminal capabilities and user preferences at\n program startup.\n 3. Use adjusted styles at will.\n\nPrettypretty seamlessly integrates with\n[prettytty](https://crates.io/crates/prettytty) for **querying the terminal for\nits current color theme**. It then uses said color theme to produce more\naccurate results when converting high resultion colors down to 256 or 16\nterminal colors. The integration also is entirely optional, controlled by the\n`tty` feature, and fairly small, requiring about 80 lines of code for\n[`Theme::query`](https://apparebit.github.io/prettypretty/prettypretty/theme/struct.Theme.html#method.query).\nHence integration with another terminal library should be easy enough.\n\nAs far as colors are concerned, prettypretty comes with all the expressivity and\nconvenience of **high-resolution, floating point colors and [color\nspaces](https://lab.ardov.me/spaces-3d)**, including the perceptually uniform\n[Oklab](https://bottosson.github.io/posts/oklab/), whether in Cartesian or polar\nform, with original or [revised\nlightness](https://bottosson.github.io/posts/colorpicker/#intermission---a-new-lightness-estimate-for-oklab).\nIt further 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/__init__.pyi).\nWhile prettytty takes care of terminal access for Rust, the Python version of\nprettypretty has its own terminal abstraction, with its own Pythonic interface.\n\n\n## Scripts Using Prettypretty\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/src/deepdive/colortheme/terminal.app-colors.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 * [prettypretty.viz3d](https://github.com/apparebit/prettypretty/blob/main/prettypretty/viz3d.py)\n traces the boundaries of the *visual gamut* in 3D and saves the\n corresponding point cloud or mesh in [PLY\n format](https://en.wikipedia.org/wiki/PLY_(file_format)). The screenshot\n below shows [Vedo](https://vedo.embl.es)'s rendering.\n\n <img src=\"https://raw.githubusercontent.com/apparebit/prettypretty/main/docs/figures/visual-gamut.jpg\"\n alt=\"a 3D visualization of the gamut for visible light,\n somewhat shaped like a fat, squat hot pocket\" 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-2025 Robert Grimm. The code in this repository has been released\nas open 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.11.1",
"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": "4872fb3faf4918e5c01f89d411c6f2cfc017458e949162fb7d6899db29f51e2f",
"md5": "7faced118e1b45fe52606b70d3ec2b2b",
"sha256": "cef0eca83293a4c2ebf0fca6447419a4bc9d7bcc92470b4f4fba2520524de08e"
},
"downloads": -1,
"filename": "prettypretty-0.11.1-cp311-abi3-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "7faced118e1b45fe52606b70d3ec2b2b",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 615913,
"upload_time": "2025-02-01T23:13:09",
"upload_time_iso_8601": "2025-02-01T23:13:09.820724Z",
"url": "https://files.pythonhosted.org/packages/48/72/fb3faf4918e5c01f89d411c6f2cfc017458e949162fb7d6899db29f51e2f/prettypretty-0.11.1-cp311-abi3-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c5ebc98de1130b58811cadb370bba68baefe501dfea8578903198647e4c0b8a9",
"md5": "77851cee4df1d0ef8806af44221775ce",
"sha256": "ddea78273c55b9d7032a4c04fda0e658d3aca0e138c4fba93b737cec347211af"
},
"downloads": -1,
"filename": "prettypretty-0.11.1-cp311-abi3-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "77851cee4df1d0ef8806af44221775ce",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 599085,
"upload_time": "2025-02-01T23:13:07",
"upload_time_iso_8601": "2025-02-01T23:13:07.768957Z",
"url": "https://files.pythonhosted.org/packages/c5/eb/c98de1130b58811cadb370bba68baefe501dfea8578903198647e4c0b8a9/prettypretty-0.11.1-cp311-abi3-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d5033e690739a070f54a4ef4d9b4c25cee52a5f4581f4bc1260bf7e0aa7aaec4",
"md5": "7b59bb1b0b83692628d0134675cc5f7d",
"sha256": "3df7c98876b1276fc71ba64ded84250caf1e5c3aba755e41b2418d44a39e938f"
},
"downloads": -1,
"filename": "prettypretty-0.11.1-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "7b59bb1b0b83692628d0134675cc5f7d",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 633165,
"upload_time": "2025-02-01T23:12:54",
"upload_time_iso_8601": "2025-02-01T23:12:54.742546Z",
"url": "https://files.pythonhosted.org/packages/d5/03/3e690739a070f54a4ef4d9b4c25cee52a5f4581f4bc1260bf7e0aa7aaec4/prettypretty-0.11.1-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6fa604f2e4128522da9d6e9e3a8d4565f0e4279889572a8674494eee166c9031",
"md5": "1797c17e4e3518dc7641c96a4d0a8b21",
"sha256": "6a170ccd0c031efe1ba719a2b83b06432f65168b4aae93fa08ee6d4ed398263d"
},
"downloads": -1,
"filename": "prettypretty-0.11.1-cp311-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"has_sig": false,
"md5_digest": "1797c17e4e3518dc7641c96a4d0a8b21",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 644913,
"upload_time": "2025-02-01T23:12:57",
"upload_time_iso_8601": "2025-02-01T23:12:57.143907Z",
"url": "https://files.pythonhosted.org/packages/6f/a6/04f2e4128522da9d6e9e3a8d4565f0e4279889572a8674494eee166c9031/prettypretty-0.11.1-cp311-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "99470d109c685298ca922c3458999126899b5643bdbecbdf5a71dc35047c9084",
"md5": "f402fe54e8b1710b29c2ad89e78d14be",
"sha256": "be9a571fe5d195b7f33c5e8c811cf01700c4ed03e15337bcdccb02f2a25afe1e"
},
"downloads": -1,
"filename": "prettypretty-0.11.1-cp311-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "f402fe54e8b1710b29c2ad89e78d14be",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 691727,
"upload_time": "2025-02-01T23:12:59",
"upload_time_iso_8601": "2025-02-01T23:12:59.226238Z",
"url": "https://files.pythonhosted.org/packages/99/47/0d109c685298ca922c3458999126899b5643bdbecbdf5a71dc35047c9084/prettypretty-0.11.1-cp311-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1456da3589883b3034244826dc0f046f8264db6259885bfea98e0d7ca433e8d2",
"md5": "2e044c844bb9f33d847d270ad2204826",
"sha256": "e7bcfec2028bde323e422b58bbbcc4496a80a476b329201b40ab5c9c469877c0"
},
"downloads": -1,
"filename": "prettypretty-0.11.1-cp311-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"has_sig": false,
"md5_digest": "2e044c844bb9f33d847d270ad2204826",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 716124,
"upload_time": "2025-02-01T23:13:01",
"upload_time_iso_8601": "2025-02-01T23:13:01.641077Z",
"url": "https://files.pythonhosted.org/packages/14/56/da3589883b3034244826dc0f046f8264db6259885bfea98e0d7ca433e8d2/prettypretty-0.11.1-cp311-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ce6db7bcc6e3ed967dd96d5cb392402075c490cd9eab65bb2ff49938ff60cd19",
"md5": "fc60005b1c54b8146496f51626b7d8c7",
"sha256": "2d8bd9b2416f68c09e9aa89269b1db0074f8400d85dd39716d0e8da8ad22412d"
},
"downloads": -1,
"filename": "prettypretty-0.11.1-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "fc60005b1c54b8146496f51626b7d8c7",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 635469,
"upload_time": "2025-02-01T23:13:05",
"upload_time_iso_8601": "2025-02-01T23:13:05.642950Z",
"url": "https://files.pythonhosted.org/packages/ce/6d/b7bcc6e3ed967dd96d5cb392402075c490cd9eab65bb2ff49938ff60cd19/prettypretty-0.11.1-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "46cb3d7a84c9eac83cc9716445ca17bfe181717c948a150f34f2d8c3bdc29221",
"md5": "a18cb80f256f314d2d164069440c85dc",
"sha256": "597128a7b2e67aab7439310a41553db459673b5a1b22309ac4ae305d32f48934"
},
"downloads": -1,
"filename": "prettypretty-0.11.1-cp311-abi3-manylinux_2_5_i686.manylinux1_i686.whl",
"has_sig": false,
"md5_digest": "a18cb80f256f314d2d164069440c85dc",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 678153,
"upload_time": "2025-02-01T23:13:04",
"upload_time_iso_8601": "2025-02-01T23:13:04.066130Z",
"url": "https://files.pythonhosted.org/packages/46/cb/3d7a84c9eac83cc9716445ca17bfe181717c948a150f34f2d8c3bdc29221/prettypretty-0.11.1-cp311-abi3-manylinux_2_5_i686.manylinux1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a6d78d245507a2f35c5ea92d3cf216921becef322b59cb49e7f79bdabc1eb57c",
"md5": "d2f7791cd1430e9948439ce37d5e6d31",
"sha256": "3f551a929c7754f9c2fb5cee236e4a35bf6dea4391d8f13bc9a2dcdf20ab8720"
},
"downloads": -1,
"filename": "prettypretty-0.11.1-cp311-abi3-musllinux_1_2_aarch64.whl",
"has_sig": false,
"md5_digest": "d2f7791cd1430e9948439ce37d5e6d31",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 805990,
"upload_time": "2025-02-01T23:13:12",
"upload_time_iso_8601": "2025-02-01T23:13:12.046080Z",
"url": "https://files.pythonhosted.org/packages/a6/d7/8d245507a2f35c5ea92d3cf216921becef322b59cb49e7f79bdabc1eb57c/prettypretty-0.11.1-cp311-abi3-musllinux_1_2_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ede6331209cfe2b465bdc238f1f9a5ba8cd3e03382780daed1a96c8c317aeefc",
"md5": "b2e154e22b5df092d76da394814ab567",
"sha256": "46a816362c454232b41acd146f0f9f0d53a5cffd9f0b6857732e138b6b2fd1cb"
},
"downloads": -1,
"filename": "prettypretty-0.11.1-cp311-abi3-musllinux_1_2_armv7l.whl",
"has_sig": false,
"md5_digest": "b2e154e22b5df092d76da394814ab567",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 900255,
"upload_time": "2025-02-01T23:13:15",
"upload_time_iso_8601": "2025-02-01T23:13:15.395197Z",
"url": "https://files.pythonhosted.org/packages/ed/e6/331209cfe2b465bdc238f1f9a5ba8cd3e03382780daed1a96c8c317aeefc/prettypretty-0.11.1-cp311-abi3-musllinux_1_2_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9d9f7c56b1e771602f8724d647d10acd2e39977add8526480ab33193238f808c",
"md5": "47a2b8f5e0006e7e533650de09d8cd11",
"sha256": "cbd3d4343af83cbbc34fcbc9c0b8e92590178294e09189fabab73aecd8963bbe"
},
"downloads": -1,
"filename": "prettypretty-0.11.1-cp311-abi3-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "47a2b8f5e0006e7e533650de09d8cd11",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 838873,
"upload_time": "2025-02-01T23:13:17",
"upload_time_iso_8601": "2025-02-01T23:13:17.609598Z",
"url": "https://files.pythonhosted.org/packages/9d/9f/7c56b1e771602f8724d647d10acd2e39977add8526480ab33193238f808c/prettypretty-0.11.1-cp311-abi3-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2060f56a5cb756ed08e5e856ad4f30b0680784715b2984268708aaa7f919a5fb",
"md5": "853a43eb2dc5f931d3cd039df65f22e7",
"sha256": "1ed91494c76917cf340c4e7121842e89f864f7832dd33fcb511df5f800c63bd1"
},
"downloads": -1,
"filename": "prettypretty-0.11.1-cp311-abi3-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "853a43eb2dc5f931d3cd039df65f22e7",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 801417,
"upload_time": "2025-02-01T23:13:19",
"upload_time_iso_8601": "2025-02-01T23:13:19.018160Z",
"url": "https://files.pythonhosted.org/packages/20/60/f56a5cb756ed08e5e856ad4f30b0680784715b2984268708aaa7f919a5fb/prettypretty-0.11.1-cp311-abi3-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b405f8906bc1e755bf4002f7b3b86467e14ccdc320740d6b4e2eed06ea33ebbd",
"md5": "433365cdf518022c040d900b9f07a569",
"sha256": "8215ba2e5262b4bc17e80cbc502ce0e3ad5d450db5cc922b93f3bd3ebd2c3e64"
},
"downloads": -1,
"filename": "prettypretty-0.11.1-cp311-abi3-win32.whl",
"has_sig": false,
"md5_digest": "433365cdf518022c040d900b9f07a569",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 447223,
"upload_time": "2025-02-01T23:13:23",
"upload_time_iso_8601": "2025-02-01T23:13:23.838026Z",
"url": "https://files.pythonhosted.org/packages/b4/05/f8906bc1e755bf4002f7b3b86467e14ccdc320740d6b4e2eed06ea33ebbd/prettypretty-0.11.1-cp311-abi3-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1a078fb7ab8e8cb0eb9239c1e1cdf2fbcae58200523489536bd7d9e55c7923cd",
"md5": "7c2d01a83e61c93bfaa8a9fe842074a2",
"sha256": "9ebdb119baaf95b3f70bfd30fc71757cdaf2385ce25fa9dd0085f03da1ad2d9c"
},
"downloads": -1,
"filename": "prettypretty-0.11.1-cp311-abi3-win_amd64.whl",
"has_sig": false,
"md5_digest": "7c2d01a83e61c93bfaa8a9fe842074a2",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 465706,
"upload_time": "2025-02-01T23:13:21",
"upload_time_iso_8601": "2025-02-01T23:13:21.750982Z",
"url": "https://files.pythonhosted.org/packages/1a/07/8fb7ab8e8cb0eb9239c1e1cdf2fbcae58200523489536bd7d9e55c7923cd/prettypretty-0.11.1-cp311-abi3-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "68deeb08e9c0bf58356a1be00bb78df8b0986aad34abca281ee3f907b3a75d72",
"md5": "69be02b3adda446f023d00ccb65e3c82",
"sha256": "0d5f8cd591c896f846459bdca6d4ebb9d964e6189c6c35de1c313254432173bb"
},
"downloads": -1,
"filename": "prettypretty-0.11.1.tar.gz",
"has_sig": false,
"md5_digest": "69be02b3adda446f023d00ccb65e3c82",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 196677,
"upload_time": "2025-02-01T23:13:20",
"upload_time_iso_8601": "2025-02-01T23:13:20.396472Z",
"url": "https://files.pythonhosted.org/packages/68/de/eb08e9c0bf58356a1be00bb78df8b0986aad34abca281ee3f907b3a75d72/prettypretty-0.11.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-02-01 23:13:20",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "apparebit",
"github_project": "prettypretty",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "prettypretty"
}