Skip to content

Commit

Permalink
Make pushsource compatible with attrs version 22.2.0
Browse files Browse the repository at this point in the history
Since new attrs version release, pub tests have begun failing with the
error "TypeError: keywords must be strings". Attrs have added an "alias"
parameter to each attribute[1], which is used in the attrs's "evolve"
method to construct a new instance. This causes issues with the attribute
"from", which has some special logic implemented in order to be usable
at all[2]. The attribute "from" is generated from "from_", copying all
its parameters. Since "alias" is a new parameter, it isn't copied and
thus its value is set no "None". attrs's "evolve" method uses **kwargs
to create a new instance, and it sets one of the keys in **kwargs to
"None" (from alias). Keys in **kwargs must be strings, which causes the
TypeError. It can be fixed by also setting "alias" in the newly created
"from" attribute. In case of "from_", it has the same value as "name"
parameter ("from_"), which is why we don't want to copy it from the old
attribute, but explicitly set it to "from" (otherwise it would be
"from_"). The change should be backwards compatible with older versions
of attrs.

[1] python-attrs/attrs#950
[2] release-engineering#108
  • Loading branch information
querti committed Jan 5, 2023
1 parent 8d9cd3b commit 91e713a
Showing 1 changed file with 2 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/pushsource/_impl/model/erratum_fixup.py
Expand Up @@ -53,6 +53,8 @@ def __init__(self, delegate, attrs_old_to_new):
# (we do this dynamically to cope with differences between ancient and newer
# versions of attrs library)
attr_kwargs = {"name": new_name}
if hasattr(old_attr, "alias"):
attr_kwargs["alias"] = new_name
for argname in [
"default",
"validator",
Expand Down

0 comments on commit 91e713a

Please sign in to comment.