41 lines
1,015 B
Python
41 lines
1,015 B
Python
from flask import Flask
|
|
from flask_cors import CORS
|
|
|
|
from .labthing import LabThing
|
|
from .exceptions import JSONExceptionHandler
|
|
|
|
|
|
def create_app(
|
|
import_name,
|
|
prefix: str = "",
|
|
title: str = "",
|
|
description: str = "",
|
|
version: str = "0.0.0",
|
|
handle_errors: bool = True,
|
|
handle_cors: bool = True,
|
|
flask_kwargs: dict = {},
|
|
):
|
|
app = Flask(import_name, **flask_kwargs)
|
|
app.url_map.strict_slashes = False
|
|
|
|
# Handle CORS
|
|
if handle_cors:
|
|
cors_handler = CORS(app, resources=r"{prefix}/*")
|
|
|
|
# Handle errors
|
|
if handle_errors:
|
|
error_handler = JSONExceptionHandler()
|
|
error_handler.init_app(app)
|
|
|
|
# Create a LabThing
|
|
labthing = LabThing(
|
|
app, prefix=prefix, title=title, description=description, version=version
|
|
)
|
|
|
|
# Store references to added-in handlers
|
|
if cors_handler:
|
|
labthing.handlers["cors"] = cors_handler
|
|
if error_handler:
|
|
labthing.handlers["error"] = error_handler
|
|
|
|
return app, labthing
|