alecthomas / alecthomas/voluptuous

Hashable markers

Ouverte
#87 5 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
Python
Étoiles
1.9k
Forks
237
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

Currently, markers are not correctly hashable and comparable, so after a schema is defined, it's impossible to make changes to it:

``` python
from voluptuous import Optional, Any
d['a'] = Any(None, d['a'])
```

This raises an exception, since `Optional('a') != 'a'`, and their hashes differ. [Explanation](http://stackoverflow.com/questions/4901815/object-as-a-dictionary-key)

```
Traceback (most recent call last):
File "test.py", line 17, in
d['a'] = Any(None, d['a'])
KeyError: 'a'
```

I suggest to add the following to markers:

``` python
class Marker(object):
# ...
def __hash__(self):
return hash(self.schema)

def __eq__(self, other):
return self.schema == (other.schema if isinstance(other, Marker) else other)
```

Now they are correctly hashable and compare equal with strings.

There is a dangerous issue that it `schema` argument is not hashable -- it will fail.. but those markers are only used with dictionary keys anyway, which must be hashable.

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.