def call_has_props(call, props):

    for prop, expected_value in props.items():
        actual_value = getattr(call, prop)
        if actual_value != expected_value:
            logging.info(
                '%s::%s property mismatch, %s: expected=%r; actual=%r',
                call.service,
                call.method,
                prop,
                expected_value,
                actual_value)
            return False

    return True
Check defined expressions for valid structure, check for infinite recursive definitions.
dataset/ETHPy150Open softlayer/softlayer-python/SoftLayer/testing/__init__.py/call_has_props--crossover with--dataset/ETHPy150Open ipython/ipython-py3k/IPython/external/pyparsing/_pyparsing.py/ParserElement.validate