Skip to main content

Human Readable

Project description

Human Readable

PyPI Status Python Version License

Read the documentation at https://human-readable.readthedocs.io/ Tests Codecov

pre-commit Black

Features

  • File size humanization.

  • List humanization.

  • Numbers humanization.

  • Time and dates humanization.

  • Internacionalization (i18n) to 20+ locales:

    • Abbreviated English (en_ABBR)
    • Brazilian Portuguese (pt_BR)
    • Dutch (nl_NL)
    • Finnish (fi_FI)
    • French (fr_FR)
    • German (de_DE)
    • Indonesian (id_ID)
    • Italian (it_IT)
    • Japanese (ja_JP)
    • Korean (ko_KR)
    • Persian (fa_IR)
    • Polish (pl_PL)
    • Portugal Portuguese (pt_PT)
    • Russian (ru_RU)
    • Simplified Chinese (zh_CN)
    • Slovak (sk_SK)
    • Spanish (es_ES)
    • Taiwan Chinese (zh_TW)
    • Turkish (tr_TR)
    • Ukrainian (uk_UA)
    • Vietnamese (vi_VI)

Requirements

  • It works in Python 3.8+.

Installation

You can install Human Readable via pip from PyPI:

$ pip install human-readable

Basic usage

Import the lib with:

import human_readable

Date and time humanization examples:

human_readable.time_of_day(17)
"afternoon"

import datetime as dt
human_readable.timing(dt.time(6, 59, 0))
"one minute to seven hours"

human_readable.timing(dt.time(21, 0, 40), formal=False)
"nine in the evening"

human_readable.time_delta(dt.timedelta(days=65))
"2 months"

human_readable.date_time(dt.datetime.now() - dt.timedelta(minutes=2))
"2 minutes ago"

human_readable.day(dt.date.today() - dt.timedelta(days=1))
"yesterday"

human_readable.date(dt.date(2019, 7, 2))
"Jul 02 2019"

human_readable.year(dt.date.today() + dt.timedelta(days=365))
"next year"

Precise time delta examples:

import datetime as dt
delta = dt.timedelta(seconds=3633, days=2, microseconds=123000)
human_readable.precise_delta(delta)
"2 days, 1 hour and 33.12 seconds"

human_readable.precise_delta(delta, minimum_unit="microseconds")
"2 days, 1 hour, 33 seconds and 123 milliseconds"

human_readable.precise_delta(delta, suppress=["days"], format="0.4f")
"49 hours and 33.1230 seconds"

File size humanization examples:

human_readable.file_size(1000000)
"1.0 MB"

human_readable.file_size(1000000, binary=True)
"976.6 KiB"

human_readable.file_size(1000000, gnu=True)
"976.6K"

Lists humanization examples:

human_readable.listing(["Alpha", "Bravo"], ",")
"Alpha, Bravo"

human_readable.listing(["Alpha", "Bravo", "Charlie"], ";", "or")
"Alpha; Bravo or Charlie"

Numbers humanization examples:

human_readable.int_comma(12345)
"12,345"

human_readable.int_word(123455913)
"123.5 million"

human_readable.int_word(12345591313)
"12.3 billion"

human_readable.ap_number(4)
"four"

human_readable.ap_number(41)
"41"

Floating point number humanization examples:

human_readable.fractional(1.5)
"1 1/2"

human_readable.fractional(0.3)
"3/10"

Scientific notation examples:

human_readable.scientific_notation(1000)
"1.00 x 10³"

human_readable.scientific_notation(5781651000, precision=4)
"5.7817 x 10⁹"

Complete instructions can be found at human-readable.readthedocs.io.

Localization

How to change locale at runtime:

import datetime as dt
human_readable.date_time(dt.timedelta(seconds=3))
'3 seconds ago'

_t = human_readable.i18n.activate("ru_RU")
human_readable.date_time(dt.timedelta(seconds=3))
'3 секунды назад'

human_readable.i18n.deactivate()
human_readable.date_time(dt.timedelta(seconds=3))
'3 seconds ago'

You can pass additional parameter path to activate to specify a path to search locales in.

human_readable.i18n.activate("xx_XX")
...
FileNotFoundError: [Errno 2] No translation file found for domain: 'human_readable'
human_readable.i18n.activate("pt_BR", path="path/to/my/portuguese/translation/")
<gettext.GNUTranslations instance ...>

You can see how to add a new locale on the Contributor Guide.

A special locale, en_ABBR, renderes abbreviated versions of output:

human_readable.date_time(datetime.timedelta(seconds=3))
3 seconds ago

human_readable.int_word(12345591313)
12.3 billion

human_readable.date_time(datetime.timedelta(seconds=86400*476))
1 year, 3 months ago

human_readable.i18n.activate('en_ABBR')
human_readable.date_time(datetime.timedelta(seconds=3))
3s

human_readable.int_word(12345591313)
12.3 B

human_readable.date_time(datetime.timedelta(seconds=86400*476))
1y 3M

Contributing

Contributions are very welcome. To learn more, see the Contributor Guide.

License

Distributed under the terms of the MIT license, Human Readable is free and open source software.

Issues

If you encounter any problems, please file an issue along with a detailed description.

Credits

This lib is based on original humanize with some added features such as listing, improved naming, documentation, functional tests, type-annotations, bug fixes and better localization.

This project was generated from @cjolowicz's Hypermodern Python Cookiecutter template.

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

human_readable-1.3.4.tar.gz (52.3 kB view details)

Uploaded Source

Built Distribution

human_readable-1.3.4-py3-none-any.whl (54.7 kB view details)

Uploaded Python 3

File details

Details for the file human_readable-1.3.4.tar.gz.

File metadata

  • Download URL: human_readable-1.3.4.tar.gz
  • Upload date:
  • Size: 52.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.4

File hashes

Hashes for human_readable-1.3.4.tar.gz
Algorithm Hash digest
SHA256 5726eac89066ec25d14447a173e645a855184645d024eb306705e2bfbb60f0c0
MD5 6d397539840afb7a5f2be6970e7542ce
BLAKE2b-256 f7a52e3e5ec9ae29d4626bd5f3800d0df369406f0ef68aacda94b365caad42e8

See more details on using hashes here.

File details

Details for the file human_readable-1.3.4-py3-none-any.whl.

File metadata

File hashes

Hashes for human_readable-1.3.4-py3-none-any.whl
Algorithm Hash digest
SHA256 e8b1211ddf98344b45cb4f3ce49957c9ec59639075e749ce6ce641144996a479
MD5 75cd4da0d6a9690acf3e352bfee496b6
BLAKE2b-256 e401b12c7541c566f92f659eadaa9439e223759aa04bfb993890871607338464

See more details on using hashes here.

Supported by

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