Source code for contracts.testing.test_pickling

from .utils import check_contracts_fail
from contracts import ContractNotRespected, parse, Contract
from contracts.test_registrar import (semantic_fail_examples,
    contract_fail_examples, good_examples)
import pickle


[docs]def check_exception_pickable(contract, value): exception = check_contracts_fail(contract, value) assert isinstance(exception, Exception) try: s = pickle.dumps(exception) pickle.loads(s) except TypeError as e: print('While pickling: %s' % exception) raise e
# msg = 'Could not pickle exception.\n' # msg += str(exception) # msg += 'Raised: %s' % e # raise Exception(msg)
[docs]def test_exceptions_are_pickable(): for contract, value, exact in semantic_fail_examples: # @UnusedVariable yield check_contracts_fail, contract, value, ContractNotRespected #ContractSemanticError for contract, value, exact in contract_fail_examples: # @UnusedVariable yield check_contracts_fail, contract, value, ContractNotRespected
[docs]def check_contract_pickable(contract): c = parse(contract) assert isinstance(c, Contract) try: s = pickle.dumps(c) c2 = pickle.loads(s) except TypeError as e: msg = 'Could not pickle contract.\n' msg += '- string: %s\n' % c msg += '- repr: %r\n' % c msg += 'Exception: %s' % e raise Exception(msg) assert c == c2
[docs]def test_contracts_are_pickable(): allc = (good_examples + semantic_fail_examples + contract_fail_examples) for contract, _, _ in allc: if isinstance(contract, list): for c in contract: yield check_contract_pickable, c else: yield check_contract_pickable, contract