Skip to content

Unexpected results when comparing two untangle.Element objects with the == operator #63

@amorimlb

Description

@amorimlb

Recently I had to check whether an item in a list of untangle.Element was inside a second list using the in operator. Turns out the result was very misleading:
Note: I know I shouldn't initialise an untangle.Element object like this (in my real life code I am using untangle.parse('file.xml') which creates a list of various untangle.Element), but this is the smallest syntactically correct code I could supply for this illustration.

import untangle
a = untangle.Element('a', '1')
b = untangle.Element('b', '1')
listA = [a, b]
c = untangle.Element('c', '1')
print(c in listA)

This prints True, but should print False as it does in:

a = object()
b = object()
listA = [a, b]
c = object()
print(c in listA)

So, since the in operator uses == to compare items, I thought it could be a problem with how == is being implemented in the Element class, which I think I confirmed by running:

import untangle
a = untangle.Element('a', '1')
b = untangle.Element('b', '1')
print(a == b)

This prints out True, but should print False, as this other code does:

a = object()
b = object()
print(a == b)

Using Python 3.6.8 and untangle 1.1.1
@adijbr contributed to these tests and bug report.
Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions