| 1 | """ |
|---|
| 2 | Expression evaluation support. |
|---|
| 3 | |
|---|
| 4 | For the moment this depends on python's eval. In the future it should be |
|---|
| 5 | replaced with a "safe" parser. |
|---|
| 6 | """ |
|---|
| 7 | |
|---|
| 8 | from UserDict import DictMixin |
|---|
| 9 | |
|---|
| 10 | class ExpressionContext( object, DictMixin ): |
|---|
| 11 | def __init__( self, dict, parent=None ): |
|---|
| 12 | """ |
|---|
| 13 | Create a new expression context that looks for values in the |
|---|
| 14 | container object 'dict', and falls back to 'parent' |
|---|
| 15 | """ |
|---|
| 16 | self.dict = dict |
|---|
| 17 | self.parent = parent |
|---|
| 18 | def __getitem__( self, key ): |
|---|
| 19 | if key in self.dict: |
|---|
| 20 | return self.dict[key] |
|---|
| 21 | if self.parent is not None and key in self.parent: |
|---|
| 22 | return self.parent[key] |
|---|
| 23 | raise KeyError( key ) |
|---|
| 24 | def __contains__( self, key ): |
|---|
| 25 | if key in self.dict: |
|---|
| 26 | return True |
|---|
| 27 | if self.parent is not None and key in self.parent: |
|---|
| 28 | return True |
|---|
| 29 | return False |
|---|
| 30 | def __str__( self ): |
|---|
| 31 | return str( self.dict ) |
|---|
| 32 | |
|---|