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

1import os 

2import time 

3import logging 

4import logging.config 

5 

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 

10 

11 

12config_log = logging.getLogger("postrfp.shared.utils.config") 

13 

14 

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() 

21 

22 os.environ["TZ"] = "UTC" 

23 time.tzset() 

24 

25 init_jobs_executor() 

26 configure_logging() 

27 log_setup_details(env_file) 

28 visible.check_all_events_assigned() 

29 return conf.CONF 

30 

31 

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") 

44 

45 

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 

51 

52 # fmt: off 

53 match conf.CONF.run_mode: 

54 

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) 

61 

62 case RunMode.development: 

63 logging.config.dictConfig(logconf.DEVELOPMENT) 

64 

65 case RunMode.test: 

66 logging.config.dictConfig(logconf.TEST) 

67 

68 case _: 

69 raise ValueError("Cannot configure logging without valid RunMode")