Update force_bytes and force_unicode to support casting objects to strings.

Review Request #13033 — Created May 10, 2023 and submitted — Latest diff uploaded

Information

RBTools
release-5.x

Reviewers

force_bytes() and force_unicode() now take a strings_only boolean
argument, which defaults to True for backwards-compatibility. When set
to False, these functions can take any arbitrary object and try to
turn it into a string.

force_bytes() will look for a __bytes__() dunder method, using that to
get the result, and then falling back on __str__().

force_unicode() will just look for __str__(). Since every object has
this, it will technically work with any object.

Typing has been updated to provide overloads based on the strings_only
parameter, helping to ensure callers receive type warnings if they
provide something other than a string without opting into
strings_only=False.

Unit tests have been added to cover this module.

Unit tests pass.

Tested this with some upcoming fixes for command output rendering.

Diff Revision 1

This is not the most recent revision of the diff. The latest diff is revision 2. See what's changed.

orig
1
2

Commits

First Last Summary ID Author
Update force_bytes and force_unicode to support casting objects to strings.
`force_bytes()` and `force_unicode()` now take a `strings_only` boolean argument, which defaults to `True` for backwards-compatibility. When set to `False`, these functions can take any arbitrary object and try to turn it into a string. `force_bytes()` will look for a `__bytes__()` dunder method, using that to get the result, and then falling back on `__str__()`. `force_unicode()` will just look for `__str__()`. Since every object has this, it will technically work with any object. Typing has been updated to provide overloads based on the `strings_only` parameter, helping to ensure callers receive type warnings if they provide something other than a string without opting into `strings_only=False`. Unit tests have been added to cover this module.
69129cd131e7176fcb0e6fe1f5aab6443c3b6cc7 Christian Hammond
rbtools/utils/encoding.py
rbtools/utils/tests/test_encoding.py
Loading...