Re: How to check something is in a list with rich-comparison objects?

2009-09-16 Thread Jason
I will raise this with pysvn, if I can ever find their issue reporting
system.

In the meantime, I suppose I can only do this by traversing the list
with a loop and catching exceptions. Ugly, but seems to be the only
way.

On Sep 16, 2:39 am, Gabriel Genellina gagsl-...@yahoo.com.ar
wrote:
 Looks like a bug in pysvn. Some class (whatever  
 pysvn.wc_notify_action.status_completed is) is not well written. When  
 compared against something unknown, it should return NotImplemented  
 instead of raising AttributeError.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How to check something is in a list with rich-comparison objects?

2009-09-16 Thread Gabriel Genellina
En Wed, 16 Sep 2009 03:36:32 -0300, Jason jason.hee...@gmail.com  
escribió:



On Sep 16, 2:39 am, Gabriel Genellina gagsl-...@yahoo.com.ar
wrote:
Looks like a bug in pysvn. Some class (whatever  
pysvn.wc_notify_action.status_completed is) is not well written. When  
compared against something unknown, it should return NotImplemented  
instead of raising AttributeError.


(top posting corrected)


I will raise this with pysvn, if I can ever find their issue reporting
system.

In the meantime, I suppose I can only do this by traversing the list
with a loop and catching exceptions. Ugly, but seems to be the only
way.


You might use a list subclass and override its __contains__ method (and  
perhaps index() too). It's the same ugly code, but at least expressions  
like:


'foo' in some_list

would still work.

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list


Re: How to check something is in a list with rich-comparison objects?

2009-09-16 Thread Steven D'Aprano
On Wed, 16 Sep 2009 03:57:30 -0300, Gabriel Genellina wrote:

 En Wed, 16 Sep 2009 03:36:32 -0300, Jason jason.hee...@gmail.com
 escribió:
 
 On Sep 16, 2:39 am, Gabriel Genellina gagsl-...@yahoo.com.ar wrote:
 Looks like a bug in pysvn. Some class (whatever
 pysvn.wc_notify_action.status_completed is) is not well written. When
 compared against something unknown, it should return NotImplemented
 instead of raising AttributeError.
 
 (top posting corrected)
 
 I will raise this with pysvn, if I can ever find their issue reporting
 system.

 In the meantime, I suppose I can only do this by traversing the list
 with a loop and catching exceptions. Ugly, but seems to be the only
 way.
 
 You might use a list subclass and override its __contains__ method (and
 perhaps index() too). It's the same ugly code, but at least expressions
 like:
 
 'foo' in some_list
 
 would still work.


Or you can wrap each item in an object that does the right thing.

# untested
class Wrapper:
# Thin wrapper to make equals comparisons work correctly
def __init__(self, payload):
self.payload = payload
def __eq__(self, other):
payload = self.payload
try:
return payload.__eq__(other)
except AttributeError:
return other.__eq__(payload)

some_list = map(Wrapper, some_list)



-- 
Steven
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How to check something is in a list with rich-comparison objects?

2009-09-16 Thread Terry Reedy

Jason wrote:

I will raise this with pysvn, if I can ever find their issue reporting
system.

In the meantime, I suppose I can only do this by traversing the list
with a loop and catching exceptions. Ugly, but seems to be the only
way.

On Sep 16, 2:39 am, Gabriel Genellina gagsl-...@yahoo.com.ar
wrote:
Looks like a bug in pysvn. Some class (whatever  
pysvn.wc_notify_action.status_completed is) is not well written. When  
compared against something unknown, it should return NotImplemented  
instead of raising AttributeError.


--
http://mail.python.org/mailman/listinfo/python-list


Re: How to check something is in a list with rich-comparison objects?

2009-09-15 Thread Gabriel Genellina
En Tue, 15 Sep 2009 11:18:33 -0300, Jason jason.hee...@gmail.com  
escribió:



Comparing a string to the enumerations in pysvn gives me an attribute
error, because they've overloaded the rich compare methods:


import pysvn
string in [pysvn.wc_notify_action.status_completed, string]

Traceback (most recent call last):
  File stdin, line 1, in module
AttributeError: expecting wc_notify_action object for rich compare

Is there a simple way around this?


Looks like a bug in pysvn. Some class (whatever  
pysvn.wc_notify_action.status_completed is) is not well written. When  
compared against something unknown, it should return NotImplemented  
instead of raising AttributeError.


py class BadBoy(object):
...   foo = 1
...   #
...   def __eq__(self, other):
... if not isinstance(other, BadBoy):
...   raise TypeError, expecting BadBoy object for rich compare
... return self.foo==other.foo
...
py hello in [BadBoy(), hello]
Traceback (most recent call last):
  File stdin, line 1, in module
  File stdin, line 6, in __eq__
TypeError: expecting BadBoy object for rich compare
py
py class GoodBoy(object):
...   foo = 1
...   #
...   def __eq__(self, other):
... if not isinstance(other, GoodBoy):
...   return NotImplemented
... return self.foo==other.foo
...
py hello in [GoodBoy(), hello]
True

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list