Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_no_asttokens_spy():
if NO_ASTTOKENS:
with pytest.raises(Exception, match="birdseye doesn't support this version of Python"):
spy(test_is_deep_arg)
def __call__(self, *args, **kwargs):
if NO_ASTTOKENS:
raise Exception("birdseye doesn't support this version of Python")
try:
import birdseye
except ImportError:
raise Exception("You must install birdseye separately to use spy: pip install birdseye")
# Decorator without parentheses
if no_args_decorator(args, kwargs):
return self._trace(args[0])
# Decorator with parentheses and perhaps arguments
def decorator(func):
return self._trace(func, *args, **kwargs)
return decorator
def __init__(self, pp_object, args, deep):
self.config = pp_object.config
self.args = args
depth = getattr(self.config.thread_local, 'depth', 0)
frame = inspect.currentframe().f_back.f_back
self.event = Event(FrameInfo(frame), 'log', None, depth)
formatted = self.config.formatter.format_log(self.event)
self.config.write(formatted)
self.returns = None
try:
assert not NO_ASTTOKENS
self.call = call = Source.executing(frame).node
assert isinstance(call, ast.Call)
assert len(args) == len(call.args)
except Exception:
if deep:
self.returns = args[0] = args[0]()
for i, arg in enumerate(args):
self.write_placeholder(i, arg)
else:
if deep:
call_arg = only(call.args)
assert isinstance(call_arg, ast.Lambda), "You must pass a lambda DIRECTLY to pp.deep, not as a result of any other expression"
self.returns = self.deep_pp(call_arg.body, frame)
else:
self.plain_pp(args, call.args)
def __call__(self, *args, **kwargs):
if NO_ASTTOKENS:
raise Exception("birdseye doesn't support this version of Python")
try:
import birdseye
except ImportError:
raise Exception("You must install birdseye separately to use spy: pip install birdseye")
# Decorator without parentheses
if no_args_decorator(args, kwargs):
return self._trace(args[0])
# Decorator with parentheses and perhaps arguments
def decorator(func):
return self._trace(func, *args, **kwargs)
return decorator
def format_executing_node_exception(self, event):
try:
assert not NO_ASTTOKENS
node = Source.executing(event.frame).node
assert node
description = {
ast.Call: 'calling',
ast.Subscript: 'subscripting',
ast.Attribute: 'getting attribute',
ast.Compare: 'comparing',
}.get(type(node), 'evaluating')
source = event.source.get_text_with_indentation(node)
plain_prefix = '!!! When {}: '.format(description)
prefix = '{c.red}{}{c.reset}'.format(plain_prefix, c=self.c)
return indented_lines(
prefix,
source,
plain_prefix=plain_prefix
def format_executing_node_exception(self, event):
try:
assert not NO_ASTTOKENS
node = Source.executing(event.frame).node
assert node
description = {
ast.Call: 'calling',
ast.Subscript: 'subscripting',
ast.Attribute: 'getting attribute',
ast.Compare: 'comparing',
}.get(type(node), 'evaluating')
source = event.source.get_text_with_indentation(node)
plain_prefix = u'!!! When {}: '.format(description)
prefix = u'{c.red}{}{c.reset}'.format(plain_prefix, c=self.c)
return indented_lines(
prefix,
source,
plain_prefix=plain_prefix