# Imports import logging log = logging.getLogger(__name__) # Exports __all__ = ( "Context", "Variable", ) # Classes class Context(object): """A collection of context variables.""" def __init__(self): """Initialize the context.""" self.is_loaded = False self.variables = dict() def __getattr__(self, item): return self.variables.get(item) def add(self, name, value, **kwargs): """Add a variable to the context. :param name: The name of the variable. :type name: str :param value: The value of the variable. :rtype: scripttease.lib.contexts.Variable kwargs are passed to instantiate the Variable. """ v = Variable(name, value, **kwargs) self.variables[name] = v return v def append(self, variable): """Append a variable to the context. :param variable: The variable to be added to the context. :type variable: scripttease.lib.contexts.Variable """ self.variables[variable.name] = variable def mapping(self): """Get the context as a dictionary. :rtype: dict """ d = dict() for name, variable in self.variables.items(): d[name] = variable.value return d class Variable(object): """An individual variable.""" def __init__(self, name, value, environment=None, **kwargs): """Initialize a variable. :param name: The name of the variable. :type name: str :param value: The value of the variable. :param environment: The environment in which the variable is used. :type environment: str kwargs are available as dynamic attributes. """ self.environment = environment self.name = name self.value = value self.attributes = kwargs def __getattr__(self, item): return self.attributes.get(item) def __str__(self): return str(self.value)