Compare commits

..

4 commits

Author SHA1 Message Date
D. Scott Boggs
467f6a77ae Use flask session store instead of DIYing 2025-05-31 09:12:23 -04:00
D. Scott Boggs
41f36b0fd7 login flow through ui 2025-05-31 09:12:20 -04:00
D. Scott Boggs
a481ae9526 add user database code 2025-05-31 09:11:22 -04:00
D. Scott Boggs
ae5893c22f add structured logging 2025-05-31 09:10:17 -04:00
3 changed files with 35 additions and 0 deletions

View file

@ -12,6 +12,7 @@ license = "AGPL-3.0-only"
dependencies = [
"flask",
"gunicorn",
"structlog",
"pymongo",
"scrypt",
"pyjwt",
@ -29,3 +30,6 @@ packages = ["roc_fnb"]
[project.scripts]
# Put scripts here
bootstrap-first-admin = "roc_fnb.scripts.bootstrap_first_admin:bootstrap_first_admin"
[tool.yapf]
based_on_style = "facebook"

View file

@ -0,0 +1 @@
from roc_fnb.util.logging import log

30
roc_fnb/util/logging.py Normal file
View file

@ -0,0 +1,30 @@
import logging
from os import environ
from structlog.processors import JSONRenderer, TimeStamper
from structlog.dev import ConsoleRenderer
import structlog
if not structlog.is_configured():
if (env := environ.get('ENV_MODE')) and env == 'production':
timestamper = TimeStamper(fmt="%Y-%m-%d %H:%M:%S", utc=True)
renderer: JSONRenderer | ConsoleRenderer = JSONRenderer()
else:
timestamper = TimeStamper(fmt="%Y-%m-%d %H:%M:%S", utc=False)
renderer = ConsoleRenderer()
structlog.configure(
processors=[
structlog.contextvars.merge_contextvars,
structlog.processors.add_log_level,
structlog.processors.StackInfoRenderer(),
structlog.dev.set_exc_info,
timestamper,
renderer,
],
wrapper_class=structlog.make_filtering_bound_logger(logging.NOTSET),
context_class=dict,
logger_factory=structlog.PrintLoggerFactory(),
cache_logger_on_first_use=False
)
log = structlog.get_logger()