alecthomas / alecthomas/voluptuous
Hashable markers
- Lenguaje dominante
- Python
- Estrellas
- 1.9k
- Forks
- 237
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
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.
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Evaluación
Este issue todavía no se ha evaluado.