def test_pin_find(self): # ensure Pin will find the first available pin # Override service obj_a = self.Obj() pin = Pin(service='service-a') pin.onto(obj_a) # Override service obj_b = self.Obj() pin = Pin(service='service-b') pin.onto(obj_b) # No Pin set obj_c = self.Obj() # We find the first pin (obj_b) pin = Pin._find(obj_c, obj_b, obj_a) assert pin is not None assert pin.service == 'service-b' # We find the first pin (obj_a) pin = Pin._find(obj_a, obj_b, obj_c) assert pin is not None assert pin.service == 'service-a' # We don't find a pin if none is there pin = Pin._find(obj_c, obj_c, obj_c) assert pin is None
def traced_jsonify(wrapped, instance, args, kwargs): pin = Pin._find(wrapped, instance, get_current_app()) if not pin or not pin.enabled(): return wrapped(*args, **kwargs) with pin.tracer.trace('flask.jsonify'): return wrapped(*args, **kwargs)
def traced_render_template(wrapped, instance, args, kwargs): """Wrapper for flask.templating.render_template""" pin = Pin._find(wrapped, instance, get_current_app()) if not pin or not pin.enabled(): return wrapped(*args, **kwargs) with pin.tracer.trace('flask.render_template', span_type=http.TEMPLATE): return wrapped(*args, **kwargs)
def traced_blueprint_add_url_rule(wrapped, instance, args, kwargs): pin = Pin._find(wrapped, instance) if not pin: return wrapped(*args, **kwargs) def _wrap(rule, endpoint=None, view_func=None, **kwargs): if view_func: pin.clone().onto(view_func) return wrapped(rule, endpoint=endpoint, view_func=view_func, **kwargs) return _wrap(*args, **kwargs)
def traced_render(wrapped, instance, args, kwargs): """ Wrapper for flask.templating._render This wrapper is used for setting template tags on the span. This method is called for render_template or render_template_string """ pin = Pin._find(wrapped, instance, get_current_app()) # DEV: `get_current_span` will verify `pin` is valid and enabled first span = get_current_span(pin) if not span: return wrapped(*args, **kwargs) def _wrap(template, context, app): name = getattr(template, 'name', None) or config.flask.get('template_default_name') span.resource = name span.set_tag('flask.template_name', name) return wrapped(*args, **kwargs) return _wrap(*args, **kwargs)
def wrapper(wrapped, instance, args, kwargs): pin = Pin._find(wrapped, instance, get_current_app()) if not pin or not pin.enabled(): return wrapped(*args, **kwargs) return func(pin, wrapped, instance, args, kwargs)