* Thu Jul 21 2022 adrian.glaubitz@suse.com
- Update in SLE-15 (bsc#1199282, jsc#PM-3243, jsc#SLE-24629)
* Thu Nov 18 2021 adrian.glaubitz@suse.com
- Update to 10.0
* *Noteworthy changes:**
* Merged pull request `#45`_ to resolve the issue caused by the conditional
:pypi:`pyreadline` requirement on Windows not supporting Python 3.9+.
* Updated the readme to use Python 3 in the example (reported in issue `#56`_).
Also added a mention of the ``humanfriendly --demo`` command.
* Removed the ``humanfriendly.compat.unittest`` alias that presumably no-one is
using at this point; it had been rendered useless quite a long time ago
(requested in issue `#53`_).
* *Internal changes:**
* Merged pull request `#54`_ which migrates the :pypi:`humanfriendly` project
from Travis CI to GitHub Actions and from Coveralls.io to Codecov.
* Fixed a deprecation warning concerning ``setup.cfg`` and some Sphinx
documentation errors.
* Tue Aug 17 2021 adrian.glaubitz@suse.com
- Update to 9.2
Maintenance release:
* Merged pull request `#46`_ which fixes several :pypi:`flake8` warnings.
* Merged pull request `#49`_ which marks Python 3.9 support final.
* Merged pull request `#51`_ which helps to stabilize the test suite.
* Merged pull request `#52`_ which updates the :mod:`humanfriendly.sphinx`
module to include Sphinx extension metadata that has become mandatory in a
recent Sphinx release. After merging the pull request I added additional
metadata including the version.
- from version 9.1
* Added :func:`~humanfriendly.compat.on_macos()` function to detect Apple MacOS
(I need this in an upcoming :pypi:`coloredlogs` release and don't want to have
to think about how to detect MacOS again in the future π).
- from version 9.0
The major version number was bumped because the bug fix for
:func:`~humanfriendly.text.pluralize()` is backwards incompatible
and (even though this seems like very "cosmetic" functionality)
version numbers are cheap, so who cares π.
* *Bug fixes:**
* Changed :func:`~humanfriendly.format_number()` to properly support negative
numbers (as suggested in `issue #40`_).
* Changed :func:`~humanfriendly.text.pluralize()` to generate "1.5 seconds"
instead of "1.5 second" (as suggested in `issue #43`_).
* *Enhancements:**
* Enhanced :func:`~humanfriendly.text.concatenate()` to support ``conjunction``
and ``serial_comma`` keyword arguments (as suggested in `issue #30`_).
* Added :func:`~humanfriendly.text.pluralize_raw()` to select singular or
plural form without prefixing the count to the text that is returned.
- from version 8.2
* Added a simple case insensitive dictionary implementation, for details refer to
the new :mod:`humanfriendly.case` module.
* Thu Apr 23 2020 tchvatal@suse.com
- Fix build without python2
* Mon Mar 30 2020 mcalabkova@suse.com
- Update to 8.1
* Make it possible to opt out of the output capturing that
:func:`humanfriendly.testing.run_cli()` sets up by default.
* Improve feature parity between :class:`humanfriendly.testing.CaptureOutput`
and my :pypi:`capturer` package to the point where most of the
:pypi:`humanfriendly` test suite can now run without :pypi:`capturer`.
* Refactored the test suite to import all names separately instead of referring
to identifiers via their modules (my preferences have changed since this code
was written a long time ago).
* Adopt :func:`functools.wraps()` to make decorator functions more robust.
* Make the :class:`~humanfriendly.terminal.spinners.Spinner` class more
customizable. The interval at which spinners are updated and the characters
used to draw the animation of spinners can now be customized by callers.
This was triggered by `executor issue #2`_.
* Improve test skipping based on exception types.
* The "deprecated imports" feature provided by :mod:`humanfriendly.deprecation`
has been adopted to clean up the maze of (almost but not quite) cyclic import
dependencies between modules.
* HTML to ANSI functionality has been extracted to a new
:mod:`humanfriendly.terminal.html` module.
* Support for spinners has been extracted to a new
:mod:`humanfriendly.terminal.spinners` module.
* The use of positional arguments to initialize
:class:`~humanfriendly.terminal.spinners.Spinner` objects has been deprecated
using the new :func:`humanfriendly.deprecation.deprecated_args()` decorator
function.
* Added the :func:`humanfriendly.deprecation.deprecated_args()` decorator function
which makes it easy to switch from positional arguments to keyword arguments
without dropping backwards compatibility.
* Accept pluralized disk size units (`#26`_). I'm not claiming this is a full
solution to the problem, far from it. It does lessen the pain a bit (IMHO).
* Make sure the selected pager is available before trying to run it. While
testing :pypi:`humanfriendly` on Windows 10 I noticed that ``humanfriendly
* -help`` resulted in nothing but a traceback, because :man:`less` wasn't
available. That's not human friendly at all π (even if it is Windows π).
* Merge pull request `#24`_: Fix bug in :func:`~humanfriendly.parse_length()` that rounded floats.
* Merge pull request `#32`_: Update hyperlinks in readme.
* Merge pull request `#33`_: Drop support for Python 2.6 and 3.0-3.4
* Merge pull request `#35`_: SVG badge in readme.
* Merge pull request `#36`_: Add support for nanoseconds and microseconds time units
* Fixed :func:`~humanfriendly.tables.format_rst_table()` omission from
``humanfriendly.tables.__all__``.
* Start testing on Python 3.8 and 3.9-dev.
* Emit an ANSI reset code when :func:`humanfriendly.terminal.html.HTMLConverter.close()`
* Added the :func:`humanfriendly.terminal.html_to_ansi()` function which is a
* Added ``humanfriendly.testing.TestCase.assertRaises()`` enhancements.
* Define ``humanfriendly.text.__all__``.
* Sat Feb 15 2020 mcepl@suse.com
- Update to 6.1:
- Added a :pypy:`...` role for easy linking to packages on the
Python Package Index, for details refer to
:func:`humanfriendly.sphinx.pypi_role()`.
- Wasted quite a bit of time debugging a MacOS failure on
Travis CI caused by a broken man`pip` installation, fixed by
using get-pip.py to bootstrap an installation that actually
works wink.
- Enable :class:`~humanfriendly.testing.MockedProgram` to
customize the shell script code of mocked programs. This was
added to make it easy to mock a program that is expected to
generate specific output (I'm planning to use this in the
:pypi:`linux-utils` test suite).
- Defined __all__ for all public modules that previously lacked
"export control" and decided to bump the major version number
as a precaution:
- These changes should not have any impact on backwards
compatibility, unless I forgot entries, in which case
callers can get :exc:`~exceptions.ImportError`
exceptions...
- Imports of public modules were previously exported
(implicitly) and this pollutes code completion suggestions
which in turn can encourage bad practices (not importing
things using their "canonical" name).
- I started developing the humanfriendly package years before
I learned about the value of defining __all__ and so some
modules lacked a definition until now. I decided that now
was as good a time as any to add those definitions
innocent.
- Simplified the headings in docs/api.rst so that only the
module names remain. This was done because Sphinx doesn't
support nested links in HTML output and thus generated really
weird "Table of Contents" listings.
- Fixed the reStructuredText references in the documentation of
:func:`~humanfriendly.prompts.prompt_for_choice()`. This
function is imported from :mod:`humanfriendly.prompts` to
:mod:`humanfriendly` (for backwards compatibility) where it
can't use relative references to refer to the other functions
in the :mod:`humanfriendly.prompts` module.
- Embedded quite a few Python API references into recent
changelog entries, just because I could (I heart what
hyperlinks can do for the usability of technical
documentation, it gives a lot more context).
- Added custom :man:`...` role for easy linking to Linux manual
pages to the :mod:`humanfriendly.sphinx` module.
- Changed rendering of pretty tables to expand tab characters
to spaces: Until now pretty tables did not take the variable
width of tab characters into account which resulted in tables
whose "line drawing characters" were visually misaligned.
Tabs are now expanded to spaces using str.expandtabs().
- Stop testing on Python 2.6 and drop official support. The
world (including Travis CI) has moved on and preserving
Python 2.6 compatibility was clearly starting to drag the
project down...
- I decided to bump the major version number because each of
these changes can be considered backwards incompatible in one
way or another and version numbers are cheap anyway so there
stuck_out_tongue.
* Wed Dec 11 2019 tchvatal@suse.com
- Require full python stack for sqlite module
* Fri Mar 29 2019 tchvatal@suse.com
- Simplify the multibuild conditioning and name creation
* Tue Mar 12 2019 tchvatal@suse.com
- Update to 4.18:
* Added humanfriendly.text.generate_slug() function.
* Fixed "invalid escape sequence" DeprecationWarning (pointed out by Python >= 3.6).
* Thu Jan 31 2019 tchvatal@suse.com
- Update to 4.17:
* compatibility with python 3.7
* Wed Aug 29 2018 tchvatal@suse.com
- Move the Name declaration above lua code to work on Leap 42.3
* Fri Aug 17 2018 tchvatal@suse.com
- Update to 4.16.1:
* Added humanfriendly.text.compact_empty_lines() function.
* Enable optional html_to_ansi(data[, callback]) argument.
* Added a code sample and screenshot to the HTMLConverter documentation.
* Emit vertical whitespace for block tags like <div>, <p> and <pre> and post-process the generated output in __call__() to compact empty lines.
* Donβt pre-process preformatted text using the user defined text callback.
* Improve robustness against malformed HTML (previously an IndexError would be raised when a closing </a> tag was encountered without a corresponding opening <a> tag).
* Emit an ANSI reset code when HTMLConverter.close() is called and a style is still active (improves robustness against malformed HTML).
* Support for 24-bit (RGB) terminal colors. Works by accepting a tuple or list with three integers representing an RGB (red, green, blue) color.
* Support for italic text rendering on the terminal.
* Make format_timespan() accept datetime.timedelta objects (fixes #27).
* Add license key to setup.py script (pointed out to me in coloredlogs pull request #53).
* Added the Timer.sleep() method to sleep βno more thanβ the given number of seconds.
* Added the format_rst_table() function to render RST (reStructuredText) tables.
- Enable and make sure tests are run
* Tue Aug 14 2018 ms@suse.com
- Submission to SUSE:SLE-12-SP3:Update:PubClouds
This commit tracks the submission for fate#326575
and bsc#1103542
* Thu Feb 08 2018 adrian.glaubitz@suse.com
- Update to version 4.8
* Add coerce_pattern() function
* Improve code consistency
- From version 4.7
* Support background colors and 256 color mode
* Tests for output(), message() and warning()
- From version 4.6
* Support for bright terminal colors
- From version 4.5
* Extend byte ranges, add RAM output to command line
- From version 4.4.2
* Reduce clock source sensitivity* (MacOS on Travis CI)
* Fix `Double requirement given' error
* Try to fix Python 2.6 tests on Travis CI
* Change Sphinx documentation theme
* Bump copyright
* Try to enable MacOS builds on Travis CI
* Fix ImportError exception on Windows
- From version 4.4.1
* Include docs to sdist
* PEP-8 fail
* Change cli test from 1.05 mm to 1.05 km
* Another correction to test_cli
* Corrected CLI format_length test
* Aim for more CLI coverage
* Add CLI tests for format-byte
* Added size test cases
* Size 1z is now valid
- From version 4.4
* Add touch() to __all__
* Make touch() create intermediate directories
* Add humanfriendly.testing.touch() function
- From version 4.3
* Don't log duplicate output in run_cli()
- From version 4.2
* Reconfigure logging in run_cli()
- From version 4.1
* Always log stderr as well in run_cli()
- From version 4.0
* Improve humanfriendly.testing.run_cli() (backwards incompatible)
- From version 3.8
* Make it easy to mock the $HOME directory
- From version 3.7
* Customizable skipping of tests
* Added .pyc to .gitignore
* Added Exa, Zetta & Yotta prefixes and tests
* Added -S --format-bytes option to use powers of 1024 rather than 1000 from command line.
- From version 3.6.1
* Improve robustness of Patched{Attribute,Item}
- From version 3.6
* Make retry limit configurable
* Refactor makefile and Travis CI configuration
- From version 3.5
* Bug fix for TestCase.assertRaises()
* Enhance TestCase.assertRaises()
- From version 3.4.1
* Bug fix for Python 3 syntax incompatibility
- From version 3.4
* Promote command line test function to public API
- From version 3.3
* Add humanfriendly.testing module (unittest helpers)
* Add humanfriendly.text.random_string() function
* Define humanfriendly.text.__all__
* Reorder functions in humanfriendly.text alphabetically
- From version 3.2
* Auto-encode terminal output to avoid encoding errors
* Remove unused import
- From version 3.1
* Improve usage message parsing and rendering
- From version 3.0
* Add Python 3.6 to tested versions
* Silence flake8 complaints
* Add min, mins tests
* Support min, mins abbreviations for minutes
- From version 2.4
* Restore Python 3 compatibility
* Make usage() and show_pager() more user friendly
* Remove redundant :py: prefixes in docstrings
* Improve docstrings in setup.py
- From version 2.3.2
* Bug fix: Don't hard code conditional dependencies in wheels
- From version 2.3.1
* Fix parse_usage() tripping up on commas in option labels
* Break test suite to reproduce parse_usage() bug
- From version 2.3
* Switch to monotonic clock for timers
* Bump copyright
* Minor improvements to setup script
* Improve intersphinx references
* s/readthedocs.org/readthedocs.io/g
- From version 2.2.1
* Fix timers being awkward as context managers
* Reproduce timers being awkward as context managers
* Minor improvements to reStructuredText in docstrings
- From version 2.2
* Fix parse_date() choking on Unicode strings
* Reproduce parse_date() bug in test suite
* Fix flake8 warning
* Only use readline hints in prompts when stdin is tty
* Wed Sep 06 2017 toddrme2178@gmail.com
- Implement single-spec version.
- Update to version 4.4.1
* No changelog
* Mon Oct 10 2016 mardnh@gmx.de
- Update to version 2.1
* Release 2.1: Support for sanitizing terminal output
* Support for sanitizing terminal output
* Merge #12: Update README.rst for new unit behaviour
* Update README.rst for new unit behaviour
* Release 2.0: Proper support for IEEE 1541 definitions of units? (fixes #4, merges #8 and #9)
* Proper support for IEEE 1541 definitions of units?
* Merge #9: Add note about IEEE 1541 definitions of units
* Merge #8: Allow correct behavior of 'parse_size' and 'format_size'
* Stop clearing coverage data on Travis CI :-)
* Release 1.44.9 (fixes #10 and #11)
* Restore Python 2.6 compatibility (#10 and #11)
* Resolve timespan formatting issues (#10 and #11)
* Reproduce timespan formatting issues reported in #10 and #11
* Refactor makefile, switch to py.test, wheel support, etc.
* Release 1.44.8 (fixes #7)
* Don't test tags on Travis CI
* Fix issue #7
* Reproduce issue #7 in test suite
* Minor improvements to setup script
* Add note about IEEE 1541 definitions of units
* Added unit tests
* Implemented correct handling of prefixes based on IEEE 1540
- Fix source url
- Minor specfile cleanup
* Wed Jun 01 2016 okurz@suse.com
- Update to official release 1.44.7
Minor improvements to usage message reformatting
Remove undocumented .strip() from join_lines()
Why I noticed this: It has the potential to eat significant white
space in usage messages that are marked up in reStructuredText syntax.
Why I decided to change it: The behavior isn't documented and on
second thought I wouldn't expect a function called join_lines()
to strip any and all leading/trailing white space.
Improve usage message parsing algorithm (also add a proper test)
Refer to test_parse_usage_tricky() for an example of a usage message that
is now parsed correctly but would previously confuse the dumb "parsing"
algorithm in parse_usage().
Make usage message parsing a bit more strict
Admittedly this needs a lot more love to make it more robust but
I lack the time to implement this at the moment. Some day soon! :-)
Unbreak conditional importlib dependency*
* https://travis-ci.org/xolox/python-humanfriendly/builds/110585766
Kind of strange that everything worked fine locally. Then again,
I've never used wheel compatible conditional dependencies before
so of course my first attempt was bound to fail in same way :-s.
Make conditional importlib dependency compatible with wheels*
While running tox tests of another project of mine that uses the
humanfriendly package I noticed a traceback when importing the
humanfriendly package (because importlib was missing). After some
digging I found that tox uses pip to install packages and pip converts
source distributions to wheel distributions before/during installation,
thereby dropping the conditional importlib dependency.
Fix non-fatal log format error in prompt_for_choice()
Add humanfriendly.sphinx module
* Mon Jan 25 2016 okurz@suse.de
- initial package