stchris / untangle

Converts XML to Python objects
MIT License
612 stars 83 forks source link

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

Open amorimlb opened 5 years ago

amorimlb commented 5 years ago

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!

stchris commented 4 years ago

You are right about this. The problem stems from the fact that untangle tries to be clever, so you can say object.attribute == "Foo".

I will have to think about how to fix this, if it is even possible without major breaking changes.

amorimlb commented 4 years ago

Ok, thanks for letting me know.

Lucas Amorim

On 18 Nov 2019, at 15:56, Christian Stefanescu notifications@github.com wrote:

You are right about this. The problem stems from the fact that untangle tries to be clever, so you can say object.attribute == "Foo".

I will have to think about how to fix this, if it is even possible without major breaking changes.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/stchris/untangle/issues/63?email_source=notifications&email_token=ABMNZRE4UGYXJAVQDAG7MBTQULQNPA5CNFSM4IKNCGUKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEELQVNQ#issuecomment-555158198, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABMNZRFQMCS4BETE7QFY5PDQULQNPANCNFSM4IKNCGUA.