[Bug 1877792] Re: jmespath/netaddr SyntaxWarning: "is" with a literal when installing ansible.

Łukasz Zemczak 1877792 at bugs.launchpad.net
Tue Oct 19 14:22:42 UTC 2021


Hello Edward, or anyone else affected,

Accepted python-netaddr into focal-proposed. The package will build now
and be available at https://launchpad.net/ubuntu/+source/python-
netaddr/0.7.19-3ubuntu1 in a few hours, and then in the -proposed
repository.

Please help us by testing this new package.  See
https://wiki.ubuntu.com/Testing/EnableProposed for documentation on how
to enable and use -proposed.  Your feedback will aid us getting this
update out to other Ubuntu users.

If this package fixes the bug for you, please add a comment to this bug,
mentioning the version of the package you tested, what testing has been
performed on the package and change the tag from verification-needed-
focal to verification-done-focal. If it does not fix the bug for you,
please add a comment stating that, and change the tag to verification-
failed-focal. In either case, without details of your testing we will
not be able to proceed.

Further information regarding the verification process can be found at
https://wiki.ubuntu.com/QATeam/PerformingSRUVerification .  Thank you in
advance for helping!

N.B. The updated package will be released to -updates after the bug(s)
fixed by this package have been verified and the package has been in
-proposed for a minimum of 7 days.

** Changed in: python-netaddr (Ubuntu Focal)
       Status: In Progress => Fix Committed

-- 
You received this bug notification because you are a member of Ubuntu
OpenStack, which is subscribed to python-netaddr in Ubuntu.
https://bugs.launchpad.net/bugs/1877792

Title:
  jmespath/netaddr SyntaxWarning: "is" with a literal when installing
  ansible.

Status in ansible package in Ubuntu:
  Invalid
Status in python-jmespath package in Ubuntu:
  Fix Released
Status in python-netaddr package in Ubuntu:
  Confirmed
Status in ansible source package in Bionic:
  Won't Fix
Status in python-jmespath source package in Bionic:
  Fix Committed
Status in python-netaddr source package in Bionic:
  In Progress
Status in ansible source package in Focal:
  Won't Fix
Status in python-jmespath source package in Focal:
  Fix Committed
Status in python-netaddr source package in Focal:
  Fix Committed
Status in ansible source package in Hirsute:
  Won't Fix
Status in python-jmespath source package in Hirsute:
  Fix Released
Status in python-netaddr source package in Hirsute:
  Confirmed
Status in ansible source package in Impish:
  Invalid
Status in python-jmespath source package in Impish:
  Fix Released
Status in python-netaddr source package in Impish:
  Confirmed
Status in python-jmespath package in Debian:
  Fix Released

Bug description:
  [IMPACT]

  * Allow broader Ops/Eng team to consume Ansible from our packages
  instead of the upstream PyPi repositories in order to fix this
  warning.

  * Sanitize package installation:

  Setting up python3-jmespath (0.9.4-2) ...
  /usr/lib/python3/dist-packages/jmespath/visitor.py:32: SyntaxWarning: "is" with a literal. Did you mean "=="?

  Setting up python3-netaddr (0.7.19-3) ...
  /usr/lib/python3/dist-packages/netaddr/strategy/__init__.py:189: SyntaxWarning: "is not" with a literal. Did you mean "!="?
    if word_sep is not '':

  jmespath and netaddr are 2 runtime dependencies of ansible.

  The syntaxwarning while purely cosmetic, may mislead user and their
  trust in using a sane and tested package.

  [TEST CASE]

  * Install ansible with syntax fixed of netaddr and jmespath with py3.8
  * Install ansible with syntax fixed of netaddr and jmespath with py2

  It shouldn't report any syntaxwarning after both fixes.

  Extra test case:

  ** Scenario #1 **

  $ pull-lp-source python-jmespath

  $ cd python-jmespath*

  $ python3-coverage run jmespath/visitor.py
  jmespath/visitor.py:32: SyntaxWarning: "is" with a literal. Did you mean "=="?
    if x is 0 or x is 1:
  jmespath/visitor.py:32: SyntaxWarning: "is" with a literal. Did you mean "=="?
    if x is 0 or x is 1:
  jmespath/visitor.py:34: SyntaxWarning: "is" with a literal. Did you mean "=="?
    elif y is 0 or y is 1:
  jmespath/visitor.py:34: SyntaxWarning: "is" with a literal. Did you mean "=="?
    elif y is 0 or y is 1:
  jmespath/visitor.py:260: SyntaxWarning: "is" with a literal. Did you mean "=="?
    if original_result is 0:

  $ quilt push -a
  Applying patch 0001-satisfy-python38-syntaxwarning.patch
  patching file jmespath/visitor.py

  $ python3-coverage run jmespath/visitor.py

  ** Scenario #2 **

  $ pull-lp-source python-jmespath

  $ cd python-jmespath*

  $ nosetests3
  /tmp/jmes/f/python-jmespath-0.9.4/jmespath/visitor.py:32: SyntaxWarning: "is" with a literal. Did you mean "=="?
    if x is 0 or x is 1:
  /tmp/jmes/f/python-jmespath-0.9.4/jmespath/visitor.py:32: SyntaxWarning: "is" with a literal. Did you mean "=="?
    if x is 0 or x is 1:
  /tmp/jmes/f/python-jmespath-0.9.4/jmespath/visitor.py:34: SyntaxWarning: "is" with a literal. Did you mean "=="?
    elif y is 0 or y is 1:
  /tmp/jmes/f/python-jmespath-0.9.4/jmespath/visitor.py:34: SyntaxWarning: "is" with a literal. Did you mean "=="?
    elif y is 0 or y is 1:
  /tmp/jmes/f/python-jmespath-0.9.4/jmespath/visitor.py:260: SyntaxWarning: "is" with a literal. Did you mean "=="?
    if original_result is 0:
  .........................................
  ----------------------------------------------------------------------
  Ran 41 tests in 0.039s

  OK

  $ quilt push -a
  Applying patch 0001-satisfy-python38-syntaxwarning.patch
  patching file jmespath/visitor.py

  Now at patch 0001-satisfy-python38-syntaxwarning.patch

  $ nosetests3
  .........................................
  ----------------------------------------------------------------------
  Ran 41 tests in 0.021s

  OK

  $ nosetests
  .........................................
  ----------------------------------------------------------------------
  Ran 41 tests in 0.016s

  OK

  ** Scenario #3 **
  This could be reproduced outside python-jmespath as follows (a little script I have written to compare result between py2 and py3 :

  # reproducer_test.py
  ----
  def reproducer(x,y):
      if x is 0 or x is 1:
          return y is True or y is False
      elif y is 0 or y is 1:
          return x is True or x is False

  print(reproducer(1,0))
  print(reproducer(0,1))
  ---

  $ python2 reproducer_test.py
  False
  False

  $ python3 -W ignore reproducer_test.py
  False
  False

  $ python3 reproducer_test.py
  test.py:2: SyntaxWarning: "is" with a literal. Did you mean "=="?
    if x is 0 or x is 1:
  test.py:2: SyntaxWarning: "is" with a literal. Did you mean "=="?
    if x is 0 or x is 1:
  test.py:4: SyntaxWarning: "is" with a literal. Did you mean "=="?
    elif y is 0 or y is 1:
  test.py:4: SyntaxWarning: "is" with a literal. Did you mean "=="?
    elif y is 0 or y is 1:
  False
  False

  With the fix in a small scale (Again, using my reproducer_test.py):

  # reproducer_test.py
  ----
  def reproducer(x,y):
  #    if x is 0 or x is 1:
       if type(x) is int and (x == 0 or x == 1):
          return y is True or y is False
  #    elif y is 0 or y is 1:
       elif type(y) is int and (y == 0 or y == 1):
          return x is True or x is False

  print(reproducer(1,0))
  print(reproducer(0,1))
  ---

  # python2 reproducer_test.py
  False
  False

  $ python3 reproducer_test.py
  False
  False

  The above proves that it maintains compatibility in py2 while fixing
  the "SyntaxWarning "in py3.

  [WHERE PROBLEM COULD OCCURS]

  Risk: Low

  * The fix maintain backward compatibility tested with
  python3-coverage/python-coverage, and python3-nose/python-nose
  manually and didn't report any problem.

  This package lack of test suite and coverage for things that could
  have been easily avoided with proper test in place. There may or may
  not be other places in other code path generating syntax warning, as
  this is not well tested I'm afraid.

  In general, looking upstream:

  * No observed regression caused by this fix in upstream issues nor in
  the Ubuntu release where the fix has landed (Focal/Hirsute).

  * No other py3.8 commits (either fix and/or regression fix) found in
  the project git log.

  [OTHER INFORMATIONS]

  Upstream issue:
  https://github.com/jmespath/jmespath.py/issues/187

  Upstream commit:
  https://github.com/jmespath/jmespath.py/commit/56263b84cdb0feb7c8d54e426ec472f4dd0de44f

  [ORIGINAL DESCRIPTIONS]
  As reported upstream

  https://github.com/jmespath/jmespath.py/issues/201
  Problems installing jmespath in Ubuntu 20.04 LTS

  Setting up python3-jmespath (0.9.4-2) ...
  /usr/lib/python3/dist-packages/jmespath/visitor.py:32: SyntaxWarning: "is" with a literal. Did you mean "=="?

  Fixed upstream in
  https://github.com/jmespath/jmespath.py/commit/56263b84cdb0feb7c8d54e426ec472f4dd0de44f

  Impact: this causes applications like Ansible that have dependencies
  on python-jmespath to send out warnings. Caused by language changes in
  Python 3.8.

  System is Ubuntu 20.04 LTS on a Pi 4.

  emv at pinnatus:~$ apt-cache policy python3-jmespath
  python3-jmespath:
    Installed: 0.9.4-2
    Candidate: 0.9.4-2
    Version table:
   *** 0.9.4-2 500
          500 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 Packages
          100 /var/lib/dpkg/status

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/ansible/+bug/1877792/+subscriptions




More information about the Ubuntu-openstack-bugs mailing list