91 lines
2.7 KiB
Python
91 lines
2.7 KiB
Python
import logging
|
|
from werkzeug.exceptions import BadRequest
|
|
from flask import url_for, Blueprint
|
|
|
|
def blueprint_for_module(module_name, api_ver=2, suffix=""):
|
|
return Blueprint(blueprint_name_for_module(module_name, api_ver=api_ver, suffix=suffix), module_name)
|
|
|
|
def blueprint_name_for_module(module_name, api_ver=2, suffix=""):
|
|
bp_name = module_name.split('.')[-1]
|
|
return f"v{api_ver}_{bp_name}_blueprint{suffix}"
|
|
|
|
class JsonResponse:
|
|
def __init__(self, request):
|
|
"""
|
|
Object to wrap up simple functionality for parsing a JSON response.
|
|
"""
|
|
# Try to load as json
|
|
try:
|
|
self.json = (
|
|
request.get_json()
|
|
) #: dict: Dictionary representation of request JSON
|
|
# If malformed JSON is passed, make an empty dictionary
|
|
except BadRequest as e:
|
|
logging.error(e)
|
|
self.json = {}
|
|
|
|
if self.json is None:
|
|
self.json = {}
|
|
|
|
# Store raw response data
|
|
self.data = request.get_data() #: str: String representation of request data
|
|
|
|
if self.data is None:
|
|
self.data = ""
|
|
|
|
def param(self, key, default=None, convert=None):
|
|
"""
|
|
Check if a key exists in a JSON/dictionary payload, and returns it.
|
|
|
|
Args:
|
|
key (str): JSON key to look for
|
|
default: Value to return if no matching key-value pair is found.
|
|
convert: Converter function. By passing a type, the value will be converted to that type.
|
|
**Use with caution!**
|
|
"""
|
|
# If no JSON payload exists, make an empty dictionary
|
|
if not self.json:
|
|
self.json = {}
|
|
|
|
if key in self.json:
|
|
val = self.json[key]
|
|
else:
|
|
val = default
|
|
|
|
if convert and (val is not None):
|
|
val = convert(val)
|
|
return val
|
|
|
|
|
|
def gen(camera):
|
|
"""Video streaming generator function."""
|
|
while True:
|
|
# the obtained frame is a jpeg
|
|
frame = camera.get_frame()
|
|
|
|
yield (b"--frame\r\n" b"Content-Type: image/jpeg\r\n\r\n" + frame + b"\r\n")
|
|
|
|
|
|
def get_bool(get_arg):
|
|
"""Convert GET request argument string to a Python bool"""
|
|
if get_arg == "true" or get_arg == "True" or get_arg == "1":
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
|
|
def list_routes(app):
|
|
output = {}
|
|
for rule in app.url_map.iter_rules():
|
|
|
|
options = {}
|
|
for arg in rule.arguments:
|
|
options[arg] = "[{0}]".format(arg)
|
|
|
|
endpoint = rule.endpoint
|
|
methods = list(rule.methods)
|
|
url = url_for(rule.endpoint, **options)
|
|
line = {"endpoint": endpoint, "methods": methods}
|
|
output[url] = line
|
|
|
|
return output
|