def on_new_response(event): response = event.response request = event.request # Compute the request processing time in msec (-1 if unknown) current = utils.msec_time() duration = current - getattr(request, '_received_at', current - 1) isotimestamp = datetime.fromtimestamp(current / 1000).isoformat() # Bind infos for request summary logger. logger.bind(time=isotimestamp, code=response.status_code, t=duration) # Ouput application request summary. if not hasattr(request, 'parent'): logger.info('request.summary')
def on_new_response(event): response = event.response request = event.request # Compute the request processing time in msec (-1 if unknown) current = utils.msec_time() duration = current - getattr(request, '_received_at', current - 1) isotimestamp = datetime.fromtimestamp(current/1000).isoformat() # Bind infos for request summary logger. logger.bind(time=isotimestamp, code=response.status_code, t=duration) # Ouput application request summary. if not hasattr(request, 'parent'): logger.info('request.summary')
def http_error(httpexception, errno=None, code=None, error=None, message=None, info=None, details=None): """Return a JSON formated response matching the error protocol. :param httpexception: Instance of :mod:`~pyramid:pyramid.httpexceptions` :param errno: stable application-level error number (e.g. 109) :param code: matches the HTTP status code (e.g 400) :param error: string description of error type (e.g. "Bad request") :param message: context information (e.g. "Invalid request parameters") :param info: information about error (e.g. URL to troubleshooting) :param details: additional structured details (conflicting record) :returns: the formatted response object :rtype: pyramid.httpexceptions.HTTPException """ errno = errno or ERRORS.UNDEFINED if isinstance(errno, Enum): errno = errno.value # Track error number for request summary logger.bind(errno=errno) body = { "code": code or httpexception.code, "errno": errno, "error": error or httpexception.title } if message is not None: body['message'] = message if info is not None: body['info'] = info if details is not None: body['details'] = details response = httpexception response.body = json.dumps(body).encode("utf-8") response.content_type = 'application/json' return response
def on_policy_selected(event): authn_type = event.policy_name.lower() event.request.authn_type = authn_type event.request.selected_userid = event.userid # Add authentication info to context. logger.bind(uid=event.userid, authn_type=authn_type)