Warning
This document is for an in-development version of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.
Source code for galaxy.util.expressions
"""
Expression evaluation support.
For the moment this depends on python's eval. In the future it should be
replaced with a "safe" parser.
"""
from collections import MutableMapping
from itertools import chain
[docs]class ExpressionContext(MutableMapping):
[docs]    def __init__(self, dict, parent=None):
        """
        Create a new expression context that looks for values in the
        container object 'dict', and falls back to 'parent'
        """
        self.dict = dict
        self.parent = parent
    def __delitem__(self, key):
        if key in self.dict:
            del self.dict[key]
        elif self.parent is not None and key in self.parent:
            del self.parent[key]
    def __iter__(self):
        return chain(iter(self.dict), iter(self.parent or []))
    def __len__(self):
        return len(self.dict) + len(self.parent or [])
    def __getitem__(self, key):
        if key in self.dict:
            return self.dict[key]
        if self.parent is not None and key in self.parent:
            return self.parent[key]
        raise KeyError(key)
    def __setitem__(self, key, value):
        self.dict[key] = value
    def __contains__(self, key):
        if key in self.dict:
            return True
        if self.parent is not None and key in self.parent:
            return True
        return False
    def __str__(self):
        return str(self.dict)
    def __bool__(self):
        if not self.dict and not self.parent:
            return False
        return True
    __nonzero__ = __bool__