• 
      

    Update force_bytes and force_unicode to support casting objects to strings.

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

    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.

    Summary ID
    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.
    f0ec00cf06f36a3498cec8727d2243e72b235373
    Description From Last Updated

    Can we be specific here that this means "str or bytes"? For a minute I was thinking this was str …

    daviddavid

    Can we be specific here that this means "str or bytes"? For a minute I was thinking this was str …

    daviddavid
    david
    1. 
        
    2. rbtools/utils/encoding.py (Diff revision 1)
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       

      Neat!

    3. rbtools/utils/encoding.py (Diff revision 1)
       
       
      Show all issues

      Can we be specific here that this means "str or bytes"? For a minute I was thinking this was str only, which was quite confusing.

    4. rbtools/utils/encoding.py (Diff revision 1)
       
       
      Show all issues

      Can we be specific here that this means "str or bytes"? For a minute I was thinking this was str only, which was quite confusing.

    5. 
        
    chipx86
    david
    1. Ship It!
    2. 
        
    chipx86
    Review request changed
    Status:
    Completed
    Change Summary:
    Pushed to release-5.x (e0fe507)
    chipx86
    Review request changed
    Status:
    Completed
    Change Summary:
    Pushed to master (e0fe507)