-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathapp.py
More file actions
55 lines (41 loc) · 1.79 KB
/
app.py
File metadata and controls
55 lines (41 loc) · 1.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import logging
from typing import Any
import wireup.integration.flask
from asgiref.wsgi import WsgiToAsgi
from flask import Flask
from mangum import Mangum
from mangum.types import LambdaContext, LambdaEvent
from eligibility_signposting_api import audit, repos, services
from eligibility_signposting_api.config.config import config, init_logging
from eligibility_signposting_api.error_handler import handle_exception
from eligibility_signposting_api.views import eligibility_blueprint
from eligibility_signposting_api.wrapper import validate_request_params
init_logging()
logger = logging.getLogger(__name__)
def main() -> None: # pragma: no cover
"""Run the Flask app as a local process."""
app = create_app()
app.run(debug=config()["log_level"] == logging.DEBUG)
@validate_request_params()
def lambda_handler(event: LambdaEvent, context: LambdaContext) -> dict[str, Any]: # pragma: no cover
"""Run the Flask app as an AWS Lambda."""
app = create_app()
app.debug = config()["log_level"] == logging.DEBUG
handler = Mangum(WsgiToAsgi(app), lifespan="off")
handler.config["text_mime_types"].append("application/fhir+json")
return handler(event, context)
def create_app() -> Flask:
app = Flask(__name__)
logger.info("app created")
# Register views & error handler
app.register_blueprint(eligibility_blueprint, url_prefix="/patient-check")
app.register_error_handler(Exception, handle_exception)
# Set up dependency injection using wireup
container = wireup.create_sync_container(
service_modules=[services, repos, audit], parameters={**app.config, **config()}
)
wireup.integration.flask.setup(container, app)
logger.info("app ready", extra={"config": {**app.config, **config()}})
return app
if __name__ == "__main__":
main()