alecthomas / alecthomas/voluptuous

Hashable markers

Abierto
#87 5 comentarios 0 reacciones 0 asignados Ver en GitHub
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.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.