alecthomas / alecthomas/voluptuous

Hashable markers

オープン
#87 コメント 5 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
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 はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。