alecthomas / alecthomas/voluptuous
Hashable markers
- 主要言語
- Python
- スター
- 1.9k
- フォーク
- 237
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
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.
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
評価
この issue はまだ評価されていません。