diff options
author | vitalyisaev <vitalyisaev@ydb.tech> | 2023-11-30 13:26:22 +0300 |
---|---|---|
committer | vitalyisaev <vitalyisaev@ydb.tech> | 2023-11-30 15:44:45 +0300 |
commit | 0a98fece5a9b54f16afeb3a94b3eb3105e9c3962 (patch) | |
tree | 291d72dbd7e9865399f668c84d11ed86fb190bbf /contrib/python/humanfriendly/py3/README.rst | |
parent | cb2c8d75065e5b3c47094067cb4aa407d4813298 (diff) | |
download | ydb-0a98fece5a9b54f16afeb3a94b3eb3105e9c3962.tar.gz |
YQ Connector:Use docker-compose in integrational tests
Diffstat (limited to 'contrib/python/humanfriendly/py3/README.rst')
-rw-r--r-- | contrib/python/humanfriendly/py3/README.rst | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/contrib/python/humanfriendly/py3/README.rst b/contrib/python/humanfriendly/py3/README.rst new file mode 100644 index 0000000000..80145d564c --- /dev/null +++ b/contrib/python/humanfriendly/py3/README.rst @@ -0,0 +1,170 @@ +humanfriendly: Human friendly input/output in Python +==================================================== + +.. image:: https://github.com/xolox/python-humanfriendly/actions/workflows/test.yml/badge.svg?branch=master + :target: https://github.com/xolox/python-humanfriendly/actions + +.. image:: https://codecov.io/gh/xolox/python-humanfriendly/branch/master/graph/badge.svg?token=jYaj4T74TU + :target: https://codecov.io/gh/xolox/python-humanfriendly + +The functions and classes in the `humanfriendly` package can be used to make +text interfaces more user friendly. Some example features: + +- Parsing and formatting numbers, file sizes, pathnames and timespans in + simple, human friendly formats. + +- Easy to use timers for long running operations, with human friendly + formatting of the resulting timespans. + +- Prompting the user to select a choice from a list of options by typing the + option's number or a unique substring of the option. + +- Terminal interaction including text styling (`ANSI escape sequences`_), user + friendly rendering of usage messages and querying the terminal for its + size. + +The `humanfriendly` package is currently tested on Python 2.7, 3.5+ and PyPy +(2.7) on Linux and macOS. While the intention is to support Windows as well, +you may encounter some rough edges. + +.. contents:: + :local: + +Getting started +--------------- + +It's very simple to start using the `humanfriendly` package:: + + >>> from humanfriendly import format_size, parse_size + >>> from humanfriendly.prompts import prompt_for_input + >>> user_input = prompt_for_input("Enter a readable file size: ") + + Enter a readable file size: 16G + + >>> num_bytes = parse_size(user_input) + >>> print(num_bytes) + 16000000000 + >>> print("You entered:", format_size(num_bytes)) + You entered: 16 GB + >>> print("You entered:", format_size(num_bytes, binary=True)) + You entered: 14.9 GiB + +To get a demonstration of supported terminal text styles (based on +`ANSI escape sequences`_) you can run the following command:: + + $ humanfriendly --demo + +Command line +------------ + +.. A DRY solution to avoid duplication of the `humanfriendly --help' text: +.. +.. [[[cog +.. from humanfriendly.usage import inject_usage +.. inject_usage('humanfriendly.cli') +.. ]]] + +**Usage:** `humanfriendly [OPTIONS]` + +Human friendly input/output (text formatting) on the command +line based on the Python package with the same name. + +**Supported options:** + +.. csv-table:: + :header: Option, Description + :widths: 30, 70 + + + "``-c``, ``--run-command``","Execute an external command (given as the positional arguments) and render + a spinner and timer while the command is running. The exit status of the + command is propagated." + ``--format-table``,"Read tabular data from standard input (each line is a row and each + whitespace separated field is a column), format the data as a table and + print the resulting table to standard output. See also the ``--delimiter`` + option." + "``-d``, ``--delimiter=VALUE``","Change the delimiter used by ``--format-table`` to ``VALUE`` (a string). By default + all whitespace is treated as a delimiter." + "``-l``, ``--format-length=LENGTH``","Convert a length count (given as the integer or float ``LENGTH``) into a human + readable string and print that string to standard output." + "``-n``, ``--format-number=VALUE``","Format a number (given as the integer or floating point number ``VALUE``) with + thousands separators and two decimal places (if needed) and print the + formatted number to standard output." + "``-s``, ``--format-size=BYTES``","Convert a byte count (given as the integer ``BYTES``) into a human readable + string and print that string to standard output." + "``-b``, ``--binary``","Change the output of ``-s``, ``--format-size`` to use binary multiples of bytes + (base-2) instead of the default decimal multiples of bytes (base-10)." + "``-t``, ``--format-timespan=SECONDS``","Convert a number of seconds (given as the floating point number ``SECONDS``) + into a human readable timespan and print that string to standard output." + ``--parse-length=VALUE``,"Parse a human readable length (given as the string ``VALUE``) and print the + number of metres to standard output." + ``--parse-size=VALUE``,"Parse a human readable data size (given as the string ``VALUE``) and print the + number of bytes to standard output." + ``--demo``,"Demonstrate changing the style and color of the terminal font using ANSI + escape sequences." + "``-h``, ``--help``",Show this message and exit. + +.. [[[end]]] + +A note about size units +----------------------- + +When I originally published the `humanfriendly` package I went with binary +multiples of bytes (powers of two). It was pointed out several times that this +was a poor choice (see issue `#4`_ and pull requests `#8`_ and `#9`_) and thus +the new default became decimal multiples of bytes (powers of ten): + ++------+---------------+---------------+ +| Unit | Binary value | Decimal value | ++------+---------------+---------------+ +| KB | 1024 | 1000 + ++------+---------------+---------------+ +| MB | 1048576 | 1000000 | ++------+---------------+---------------+ +| GB | 1073741824 | 1000000000 | ++------+---------------+---------------+ +| TB | 1099511627776 | 1000000000000 | ++------+---------------+---------------+ +| etc | | | ++------+---------------+---------------+ + +The option to use binary multiples of bytes remains by passing the keyword +argument `binary=True` to the `format_size()`_ and `parse_size()`_ functions. + +Windows support +--------------- + +Windows 10 gained native support for ANSI escape sequences which means commands +like ``humanfriendly --demo`` should work out of the box (if your system is +up-to-date enough). If this doesn't work then you can install the colorama_ +package, it will be used automatically once installed. + +Contact +------- + +The latest version of `humanfriendly` is available on PyPI_ and GitHub_. The +documentation is hosted on `Read the Docs`_ and includes a changelog_. For bug +reports please create an issue on GitHub_. If you have questions, suggestions, +etc. feel free to send me an e-mail at `peter@peterodding.com`_. + +License +------- + +This software is licensed under the `MIT license`_. + +© 2021 Peter Odding. + +.. External references: +.. _#4: https://github.com/xolox/python-humanfriendly/issues/4 +.. _#8: https://github.com/xolox/python-humanfriendly/pull/8 +.. _#9: https://github.com/xolox/python-humanfriendly/pull/9 +.. _ANSI escape sequences: https://en.wikipedia.org/wiki/ANSI_escape_code +.. _changelog: https://humanfriendly.readthedocs.io/en/latest/changelog.html +.. _colorama: https://pypi.org/project/colorama +.. _format_size(): https://humanfriendly.readthedocs.io/en/latest/#humanfriendly.format_size +.. _GitHub: https://github.com/xolox/python-humanfriendly +.. _MIT license: https://en.wikipedia.org/wiki/MIT_License +.. _parse_size(): https://humanfriendly.readthedocs.io/en/latest/#humanfriendly.parse_size +.. _peter@peterodding.com: peter@peterodding.com +.. _PyPI: https://pypi.org/project/humanfriendly +.. _Read the Docs: https://humanfriendly.readthedocs.io |