Source code for contracts.library.separate_context
from ..interface import Contract
from ..syntax import add_contract, W, contract_expression, Literal, Group
[docs]class SeparateContext(Contract):
def __init__(self, contract, where=None):
assert isinstance(contract, Contract)
Contract.__init__(self, where)
self.contract = contract
[docs] def check_contract(self, context, value, silent):
copy = context.copy()
self.contract._check_contract(copy, value, silent)
def __str__(self):
return '$(%s)' % self.contract
def __repr__(self):
return 'SeparateContext(%r)' % self.contract
[docs] @staticmethod
def parse_action(s, loc, tokens):
where = W(s, loc)
return SeparateContext(tokens[0]['child'], where=where)
sepcon = (Group(Literal('$') + Literal('(') -
contract_expression('child') - Literal(')')))
sepcon.setParseAction(SeparateContext.parse_action)
sepcon.setName('Context separation construct')
add_contract(sepcon)