← Back to team overview

sts-sponsors team mailing list archive

[Bug 1877792] [NEW] jmespath SyntaxWarning: "is" with a literal.

 

You have been subscribed to a public bug by Eric Desrochers (slashd):

[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 "=="?

[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@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

** Affects: ansible (Ubuntu)
     Importance: Undecided
         Status: Invalid

** Affects: python-jmespath (Ubuntu)
     Importance: Undecided
         Status: Fix Released

** Affects: ansible (Ubuntu Bionic)
     Importance: Undecided
         Status: Won't Fix

** Affects: python-jmespath (Ubuntu Bionic)
     Importance: Undecided
     Assignee: Eric Desrochers (slashd)
         Status: In Progress

** Affects: ansible (Ubuntu Focal)
     Importance: Undecided
         Status: Won't Fix

** Affects: python-jmespath (Ubuntu Focal)
     Importance: Undecided
     Assignee: Eric Desrochers (slashd)
         Status: In Progress

** Affects: ansible (Ubuntu Hirsute)
     Importance: Undecided
         Status: Won't Fix

** Affects: python-jmespath (Ubuntu Hirsute)
     Importance: Undecided
         Status: Fix Released

** Affects: ansible (Ubuntu Impish)
     Importance: Undecided
         Status: Invalid

** Affects: python-jmespath (Ubuntu Impish)
     Importance: Undecided
         Status: Fix Released

** Affects: python-jmespath (Debian)
     Importance: Unknown
         Status: Fix Released


** Tags: seg sts
-- 
jmespath SyntaxWarning: "is" with a literal. 
https://bugs.launchpad.net/bugs/1877792
You received this bug notification because you are a member of STS Sponsors, which is subscribed to the bug report.