• 
      

    Fix a behavioral change in build_email_address() on Python 3.

    Review Request #11679 — Created June 25, 2021 and submitted

    Information

    Djblets
    release-2.x

    Reviewers

    build_email_address() has always been a wrapper around Python's
    formataddr(), which historically has taken a name and e-mail address
    and built a resulting string in the form of name <email>. It handled
    putting quotes around the name, if needed, and escaped certain
    characters.

    Python 3 extended the behavior to convert full names with Unicode values
    into escaped =?=utf-8?...=?= strings. This is fine for formataddr(),
    since it's there to create suitable header values, but it's not what we
    wanted in this function.

    This change rewrites build_email_address() to do its own e-mail
    building. The logic is roughly the same as Python's implementation. The
    meat of it is the usage of their regexes for escaping or quoting, which
    we can still pull in fine.

    Unit tests were added to check the results when using Unicode
    characters, ensuring behavior remains consistent across Python versions.

    Unit tests pass on Python 2 and 3.

    Summary ID
    Fix a behavioral change in build_email_address() on Python 3.
    `build_email_address()` has always been a wrapper around Python's `formataddr()`, which historically has taken a name and e-mail address and built a resulting string in the form of `name <email>`. It handled putting quotes around the name, if needed, and escaped certain characters. Python 3 extended the behavior to convert full names with Unicode values into escaped `=?=utf-8?...=?=` strings. This is fine for `formataddr()`, since it's there to create suitable header values, but it's not what we wanted in this function. This change rewrites `build_email_address()` to do its own e-mail building. The logic is roughly the same as Python's implementation. The meat of it is the usage of their regexes for escaping or quoting, which we can still pull in fine. Unit tests were added to check the results when using Unicode characters, ensuring behavior remains consistent across Python versions.
    d66b52b120852a186afcb2d3c1ec211cfd332cd3
    david
    1. Ship It!
    2. 
        
    chipx86
    Review request changed
    Status:
    Completed
    Change Summary:
    Pushed to release-2.x (4fd5aa1)