Skip to main content

A tiny library to make your outputs more beautiful

Project description

prettyfmt

prettyfmt is a tiny library to make your outputs, logs, and __str__() representations slightly more beautiful.

It offers simple but general functions for formatting and abbreviating objects and dataclasses, dicts, words and phrases, filenames, titles, long strings, timestamps, ages, and sizes.

Basically it's just a set of tiny convenience wrappers for humanize and strif.

Installation

# Use pip
pip install prettyfmt
# Or poetry
poetry add prettyfmt

Usage

See pydoc for details on all functions.

from prettyfmt import *

# Simple abbreviations of objects:
abbrev_obj({"a": "very " * 100 + "long", "b": 23})
🢂 "{a='very very very very very very very very very very very very ver…', b=23}"

abbrev_obj(["word " * i for i in range(10)], field_max_len=10, list_max_len=4)
🢂 "['', 'word ', 'word word ', 'word word…', …]"

# Abbreviate by character length.
abbrev_str("very " * 100 + "long", 32)
🢂 'very very very very very very v…'

# Abbreviate by character length but don't break words.
abbrev_on_words("very " * 100 + "long", 30)
🢂 'very very very very very very…'

# My favorite, abbreviate but don't break words and keep a few words
# on the end since they might be useful.
abbrev_phrase_in_middle("very " * 100 + "long", 40)
🢂 'very very very very … very very very long'

# This makes it very handy for cleaning up document titles.
ugly_title = "A  Very\tVery Very Needlessly Long  {Strange} Document Title [final edited draft23]"
🢂 sanitize_title(ugly_title)
'A Very Very Very Needlessly Long Strange Document Title final edited draft23'
abbrev_phrase_in_middle(sanitize_title(ugly_title))
🢂 'A Very Very Very Needlessly Long Strange … final edited draft23'

# Then you can slugify to get nice filenames or URLs.
from slugify import slugify
slugify(abbrev_phrase_in_middle(sanitize_title(ugly_title)))
🢂 'a-very-very-very-needlessly-long-strange-final-edited-draft23'

# Ages in seconds or deltas.
# Note we use a sensible single numeral to keep things brief, e.g.
# "33 days ago" and not the messier "1 month and 3 days ago".
# This is important in file listings, etc, where we want to optimize
# for space and legibility.
fmt_age(60 * 60 * 24 * 33)
🢂 '33 days ago'

fmt_age(60 * 60 * 24 * 33, brief=True)
🢂 '33d ago'

# Sizes
fmt_size_human(12000000)
🢂 '11.4M'

fmt_size_dual(12000000)
🢂 '11.4M (12000000 bytes)'

# Helpful making __str__() methods or printing output:
fmt_words("Hello", None, "", "world!")
🢂 'Hello world!'

fmt_paras(fmt_words("Hello", "world!"), "", "Goodbye.")
🢂 'Hello world!\n\nGoodbye.'

# Example of `abbrev_obj` to customize __str__().
# Allows sorting and truncating based on key and value.
@dataclass
class MyThing:
   file_path: Path
   title: str
   url: str
   body: str

   def __str__(self) -> str:
      return abbrev_obj(
            self,
            # Put an abbreviated title first, then the file path, then the url.
            key_filter={
               "title": 64,
               "file_path": 0,
               "url": 128,
            },
      )

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

prettyfmt-0.1.3.tar.gz (8.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

prettyfmt-0.1.3-py3-none-any.whl (8.2 kB view details)

Uploaded Python 3

File details

Details for the file prettyfmt-0.1.3.tar.gz.

File metadata

  • Download URL: prettyfmt-0.1.3.tar.gz
  • Upload date:
  • Size: 8.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for prettyfmt-0.1.3.tar.gz
Algorithm Hash digest
SHA256 c0105478fdd6f1f81c2e19cc77d56c1abe0fbb6f650ae638b93afcef01e5ac47
MD5 fe8e1872d3965e8ff21b0215391a46d0
BLAKE2b-256 ab6393c05379b8bf3df1353882edcd1f772ef5ed2417dd01739181fe9d31d2ef

See more details on using hashes here.

Provenance

The following attestation bundles were made for prettyfmt-0.1.3.tar.gz:

Publisher: publish.yml on jlevy/prettyfmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file prettyfmt-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: prettyfmt-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 8.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for prettyfmt-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 5ff25ed4b19c61542d12ed1fc82685edabd9a2dcb9bd078c72a36e35852b26de
MD5 4890d1bf8dd33168f985bd447be43c7e
BLAKE2b-256 a3865152c1547430c81e2448a174c1610de39fe87c35a7105819f7d4f44179ab

See more details on using hashes here.

Provenance

The following attestation bundles were made for prettyfmt-0.1.3-py3-none-any.whl:

Publisher: publish.yml on jlevy/prettyfmt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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