def view(request, version, path): result = classes.JSONRequest(request).load() if isinstance(result, HttpResponse): return result if version not in versions.index: return classes.ErrorJSONResponse("The given API version was not found.", status=404) if versions.index[version][1] not in ["default", "stable"]: return classes.ErrorJSONResponse("The given API version can not be used by yourself.", status=403) result = versions.index[version][0](result, path) if isinstance(result, HttpResponse): return result if isinstance(result, tuple): return classes.JSONResponse(*result) return classes.JSONResponse(result)
def view(self, request, path): for route, view in self.routes.items(): match = re.search(route, path) if match is not None: try: response = view(request, path, **match.groupdict()) except classes.DeepReturn as returned: response = returned.as_return() except: traceback.print_exc() return classes.ErrorJSONResponse("Internal server error.", status=500) if response is None: return classes.JSONResponse() return response return classes.ErrorJSONResponse("Route not found.", status=404)
def send_and_recv(socket, data, deep=True, json=True): if socket is None: resp = "Socket instance was not initialized." if json: resp = classes.ErrorJSONResponse(resp, status=503) if deep: raise classes.DeepReturn(resp) return resp sent = socket.send(data, block_recv=True) if not sent: socket.allow_send = True resp = "Failed to connect to the gateway." if json: resp = classes.ErrorJSONResponse(resp, status=503) if deep: raise classes.DeepReturn(resp) return resp recv = socket.recv() if recv[0] and recv[1]["success"]: return recv[1] elif recv[0]: resp = "Gateway Error: " + recv[1]["error"] if json: resp = classes.ErrorJSONResponse(resp, status=503) if deep: raise classes.DeepReturn(resp) return resp else: resp = "Failed to receive data from the gateway." if json: resp = classes.ErrorJSONResponse(resp, status=503) if deep: raise classes.DeepReturn(resp) return resp
def malformed(self, *args, **kwargs): return classes.ErrorJSONResponse("Malformed request.", status=400)