Coverage for postrfp/shared/init/sysconfig.py: 94%
31 statements
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-22 21:34 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-22 21:34 +0000
1import os
2import time
3import logging
4import logging.config
6from postrfp import conf
7from postrfp.conf.settings import AppSettings, RunMode
8from postrfp.jobs.executor import init_jobs_executor
9from postrfp.model.audit import visible
12config_log = logging.getLogger("postrfp.shared.utils.config")
15def configure_postrfp(env_file=None) -> "AppSettings":
16 if env_file:
17 # This is valid for Pydantic 2. MyPy error is presumably a bug
18 conf.CONF = AppSettings(_env_file=env_file) # type: ignore
19 else:
20 conf.CONF = AppSettings()
22 os.environ["TZ"] = "UTC"
23 time.tzset()
25 init_jobs_executor()
26 configure_logging()
27 log_setup_details(env_file)
28 visible.check_all_events_assigned()
29 return conf.CONF
32def log_setup_details(env_file):
33 config_log.info("\n postrfp configured: ")
34 if env_file is None:
35 config_log.info("-- No environment file provided, using default config")
36 else:
37 config_log.info("-- using settings env file: %s", env_file)
38 config_log.info("-- run_mode: %s", conf.CONF.run_mode)
39 config_log.info("-- db_url: %s", conf.CONF.conn_string())
40 config_log.info("-- mailer: %s" % conf.CONF.mailer)
41 config_log.info("-- email_to_override: %s" % conf.CONF.email_to_override)
42 if conf.CONF.postmark_api_key:
43 config_log.info("-- postmark-api-key set")
46def configure_logging(log_config_dict=None) -> None: # pragma: no cover
47 if log_config_dict is not None:
48 logging.config.dictConfig(log_config_dict)
49 return
50 from ...conf import logconf
52 # fmt: off
53 match conf.CONF.run_mode:
55 case RunMode.production:
56 email = "errors@supplierselect.com"
57 logconf.PRODUCTION["handlers"]["email"]["fromaddr"] = email
58 subject = "POSTRFP Error on %s" % conf.CONF.webapp_hostname
59 logconf.PRODUCTION["handlers"]["email"]["subject"] = subject
60 logging.config.dictConfig(logconf.PRODUCTION)
62 case RunMode.development:
63 logging.config.dictConfig(logconf.DEVELOPMENT)
65 case RunMode.test:
66 logging.config.dictConfig(logconf.TEST)
68 case _:
69 raise ValueError("Cannot configure logging without valid RunMode")