Source code for clink.handler.dflow_err

import json

from clink.error.http import code_to_str
from clink.iface import ILv7Handler
from clink.mime import MIME_JSON
from clink.com import stamp
from clink.dflow import ExistError, NonExistError, FormatError, ExpiredError


@stamp()
[docs]class DflowErrorHandler(ILv7Handler): ''' Catch Data Flow error and make response message correspond with error '''
[docs] def handle(self, req, res, e): if isinstance(e, ExistError): res.status = 409 res.header = {} res.content_type = MIME_JSON res.body = json.dumps({ 'status': 409, 'status_name': code_to_str(409), 'message': e.indexes }).encode('utf-8') return True elif isinstance(e, NonExistError): res. status = 404 res.header = {} res.content_type = MIME_JSON res.body = json.dumps({ 'status': 404, 'status_name': code_to_str(404), 'message': e.indexes }).encode('utf-8') return True elif isinstance(e, FormatError): res.status = 400 res.header = {} res.content_type = MIME_JSON res.body = json.dumps({ 'status': 400, 'status_name': code_to_str(400), 'message': { 'name': e.name, 'value': str(e.value), 'schema': e.schema } }).encode('utf-8') return True elif isinstance(e, ExpiredError): res.status = 403 res.header = {} res.content_type = MIME_JSON res.body = json.dumps({ 'status': 403, 'status_name': code_to_str(403), 'message': e.indexes }).encode('utf-8') return True else: return False