# Path: pycnic/data.py
# STATUSES = {
#         200: "200 OK",
#         201: "201 Created",
#         202: "202 Accepted",
#         204: "204 No Content",
#         206: "206 Partial Content",
#         207: "207 Multi-Status",
#         208: "208 Already Reported",
#         226: "226 IM Used",
#         300: "300 Multiple Choices",
#         301: "301 Moved Permanently",
#         302: "302 Found",
#         303: "303 See Other",
#         304: "304 Not Modified",
#         305: "305 Use Proxy",
#         307: "307 Temporary Redirect",
#         308: "308 Permanent Redirect",
#         400: "400 Bad Request",
#         401: "401 Unauthorized",
#         402: "402 Payment Required",
#         403: "403 Forbidden",
#         404: "404 Not Found",
#         405: "405 Method Not Allowed",
#         406: "406 Not Acceptable",
#         407: "407 Proxy Authentication Required",
#         408: "408 Request Timeout",
#         409: "409 Conflict",
#         410: "410 Gone",
#         411: "411 Length Required",
#         412: "412 Precondition Failed",
#         413: "413 Payload Too Large",
#         414: "414 URI Too Long",
#         415: "415 Unsupported Media Type",
#         416: "416 Range Not Satisfiable",
#         417: "417 Expectation Failed",
#         421: "421 Misdirected Request",
#         422: "422 Unprocessable Entity",
#         423: "423 Locked",
#         424: "424 Failed Dependency",
#         425: "425 Too Early",
#         426: "426 Upgrade Required",
#         428: "428 Precondition Required",
#         429: "429 Too Many Requests",
#         431: "431 Request Header Fields Too Large",
#         451: "451 Unavailable For Legal Reasons",
#         500: "500 Internal Server Error",
#         501: "501 Not Implemented",
#         502: "502 Bad Gateway",
#         503: "503 Service Unavailable",
#         504: "504 Gateway Timeout",
#         505: "505 HTTP Version Not Supported",
#         506: "506 Variant Also Negotiates",
#         507: "507 Insufficient Storage",
#         508: "508 Loop Detected",
#         510: "510 Not Extended",
#         577: "577 Unknown Status",
# }


import re
import traceback
import json
import logging
from . import utils
from .data import STATUSES
from . import errors

        self.environ = environ
        self.start = start_response
        self.response.set_header("Content-Type", "application/json")

    def __iter__(self):
        try:
            if self.before:
                self.before()
            resp = self.delegate()
            if self.after:
                self.after()
            headers = self.response.headers
            if self.headers:
                headers += self.headers
            self.start(self.response.status, headers)

        except errors.HTTPError as err:
            self.response.status_code = err.status_code
            headers = [("Content-Type", "application/json")]
            if self.headers:
                headers += self.headers
            if err.headers:
                headers += err.headers
            self.start(self.response.status, headers)
            resp = err.response()

        except Exception as err:
            self.logger.exception(err)
            headers = [("Content-Type", "application/json")]

# Path: pycnic/data.py
# STATUSES = {
#         200: "200 OK",
#         201: "201 Created",
#         202: "202 Accepted",
#         204: "204 No Content",
#         206: "206 Partial Content",
#         207: "207 Multi-Status",
#         208: "208 Already Reported",
#         226: "226 IM Used",
#         300: "300 Multiple Choices",
#         301: "301 Moved Permanently",
#         302: "302 Found",
#         303: "303 See Other",
#         304: "304 Not Modified",
#         305: "305 Use Proxy",
#         307: "307 Temporary Redirect",
#         308: "308 Permanent Redirect",
#         400: "400 Bad Request",
#         401: "401 Unauthorized",
#         402: "402 Payment Required",
#         403: "403 Forbidden",
#         404: "404 Not Found",
#         405: "405 Method Not Allowed",
#         406: "406 Not Acceptable",
#         407: "407 Proxy Authentication Required",
#         408: "408 Request Timeout",
#         409: "409 Conflict",
#         410: "410 Gone",
#         411: "411 Length Required",
#         412: "412 Precondition Failed",
#         413: "413 Payload Too Large",
#         414: "414 URI Too Long",
#         415: "415 Unsupported Media Type",
#         416: "416 Range Not Satisfiable",
#         417: "417 Expectation Failed",
#         421: "421 Misdirected Request",
#         422: "422 Unprocessable Entity",
#         423: "423 Locked",
#         424: "424 Failed Dependency",
#         425: "425 Too Early",
#         426: "426 Upgrade Required",
#         428: "428 Precondition Required",
#         429: "429 Too Many Requests",
#         431: "431 Request Header Fields Too Large",
#         451: "451 Unavailable For Legal Reasons",
#         500: "500 Internal Server Error",
#         501: "501 Not Implemented",
#         502: "502 Bad Gateway",
#         503: "503 Service Unavailable",
#         504: "504 Gateway Timeout",
#         505: "505 HTTP Version Not Supported",
#         506: "506 Variant Also Negotiates",
#         507: "507 Insufficient Storage",
#         508: "508 Loop Detected",
#         510: "510 Not Extended",
#         577: "577 Unknown Status",
# }


# Path: pycnic/core.py
import re
import traceback
import json
import logging
from . import utils
from .data import STATUSES
from . import errors


        self.environ = environ
        self.start = start_response
        self.response.set_header("Content-Type", "application/json")

    def __iter__(self):
        try:
            if self.before:
                self.before()
            resp = self.delegate()
            if self.after:
                self.after()
            headers = self.response.headers
            if self.headers:
                headers += self.headers
            self.start(self.response.status, headers)

        except errors.HTTPError as err:
            self.response.status_code = err.status_code
            headers = [("Content-Type", "application/json")]
            if self.headers:
                headers += self.headers
            if err.headers:
                headers += err.headers
            self.start(self.response.status, headers)
            resp = err.response()

        except Exception as err:
            self.logger.exception(err)
            headers = [("Content-Type", "application/json")]

            self.start(STATUSES[500], headers)