py/objstr: Fix handling of OP_MODULO with namedtuple.

This fix handles attrtuple as well, eg. os.uname().  A test case has been
added in basics/attrtuple2.py.

Fixes issue #16969.

Signed-off-by: Yoctopuce dev <dev@yoctopuce.com>
This commit is contained in:
Yoctopuce dev
2025-03-20 12:03:59 +01:00
committed by Damien George
parent 8faa6bafdc
commit 0d2c18c299
5 changed files with 33 additions and 5 deletions

View File

@@ -0,0 +1,25 @@
# test os.uname() attrtuple, if available
try:
import os
except ImportError:
print("SKIP")
raise SystemExit
try:
u = os.uname()
except AttributeError:
print("SKIP")
raise SystemExit
# test printing of attrtuple
print(str(u).find("machine=") > 0)
# test read attr
print(isinstance(u.machine, str))
# test str modulo operator for attrtuple
impl_str = ("%s " * len(u)) % u
test_str = ""
for val in u:
test_str += val + " "
print(impl_str == test_str)

View File

@@ -21,6 +21,9 @@ for t in T(1, 2), T(bar=1, foo=2):
print(isinstance(t, tuple))
# a NamedTuple can be used as a tuple
print("(%d, %d)" % t)
# Check tuple can compare equal to namedtuple with same elements
print(t == (t[0], t[1]), (t[0], t[1]) == t)