Skip to content

Commit

Permalink
error handlers
Browse files Browse the repository at this point in the history
  • Loading branch information
miguelgrinberg committed Apr 19, 2019
1 parent 52f2d0c commit 0f2c749
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 11 deletions.
9 changes: 6 additions & 3 deletions examples/gpio.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,12 @@
}
function onLoad() {
showMessage();
var form = getCookie('form').split(',')
document.getElementById('pin').selectedIndex = parseInt(form[0]);
document.getElementById(form[1]).checked = true;
var form = getCookie('form');
if (form) {
form = form.split(',')
document.getElementById('pin').selectedIndex = parseInt(form[0]);
document.getElementById(form[1]).checked = true;
}
}
</script>
</head>
Expand Down
37 changes: 29 additions & 8 deletions microdot.py
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,7 @@ def match(self, path):
class Microdot():
def __init__(self) :
self.url_map = []
self.error_handlers = {}

def route(self, url_pattern, methods=None):
def decorated(f):
Expand All @@ -251,6 +252,12 @@ def decorated(f):
return f
return decorated

def errorhandler(self, status_code_or_exception_class):
def decorated(f):
self.error_handlers[status_code_or_exception_class] = f
return f
return decorated

def run(self, host='0.0.0.0', port=5000):
s = socket.socket()
ai = socket.getaddrinfo(host, port)
Expand All @@ -271,14 +278,28 @@ def run(self, host='0.0.0.0', port=5000):
if args is not None:
f = route_handler
break
if f:
resp = f(req, **args)
if isinstance(resp, tuple):
resp = Response(*resp)
elif not isinstance(resp, Response):
resp = Response(resp)
resp.write(req.client_stream)
req.close()
try:
if f:
resp = f(req, **args)
elif 404 in self.error_handlers:
resp = self.error_handlers[404](req)
else:
resp = 'Not found', 404
except Exception as exc:
resp = None
if exc.__class__ in self.error_handlers:
try:
resp = self.error_handlers[exc.__class__](req, exc)
except:
pass
if resp is None:
resp = 'Internal server error', 500
if isinstance(resp, tuple):
resp = Response(*resp)
elif not isinstance(resp, Response):
resp = Response(resp)
resp.write(req.client_stream)
req.close()


redirect = Response.redirect
Expand Down

0 comments on commit 0f2c749

Please sign in to comment.