Coverage for versioalueet/__init__.py: 100.00%

38 statements  

« prev     ^ index     » next       coverage.py v7.6.10, created at 2025-01-08 06:11:21 +00:00

1"""Version ranges (Finnish: versioalueet).""" 

2 

3import datetime as dti 

4import logging 

5import os 

6import pathlib 

7from typing import no_type_check 

8 

9# [[[fill git_describe()]]] 

10__version__ = '2025.1.8+parent.g03f55e57' 

11# [[[end]]] (checksum: 4023bc54672e4b17235d6b57269210da) 

12__version_info__ = tuple( 

13 e if '-' not in e else e.split('-')[0] for part in __version__.split('+') for e in part.split('.') if e != 'parent' 

14) 

15 

16__all__: list[str] = [ 

17 'APP_ALIAS', 

18 'APP_ENV', 

19 'APP_NAME', 

20 'DEBUG', 

21 'DEFAULT_CONFIG_NAME', # TODO - add capability and harmonize processing 

22 'ENCODING', 

23 'ENCODING_ERRORS_POLICY', 

24 'QUIET', # TODO - harmonize processing 

25 'STRICT', # TODO - add mode and harmonize processing 

26 'VERBOSE', # TODO - harmonize processing 

27 'VERSION', 

28 'VERSION_INFO', 

29] 

30 

31APP_ALIAS = str(pathlib.Path(__file__).parent.name) 

32APP_ENV = APP_ALIAS.upper() 

33APP_NAME = locals()['__doc__'] 

34DEBUG = bool(os.getenv(f'{APP_ENV}_DEBUG', '')) 

35VERBOSE = bool(os.getenv(f'{APP_ENV}_VERBOSE', '')) 

36QUIET = False 

37STRICT = bool(os.getenv(f'{APP_ENV}_STRICT', '')) 

38ENCODING = 'utf-8' 

39ENCODING_ERRORS_POLICY = 'ignore' 

40DEFAULT_CONFIG_NAME = f'.{APP_ALIAS}.json' 

41 

42DEFAULT_LF_ONLY = 'YES' 

43log = logging.getLogger() # Module level logger is sufficient 

44LOG_FOLDER = pathlib.Path('logs') 

45LOG_FILE = f'{APP_ALIAS}.log' 

46LOG_PATH = pathlib.Path(LOG_FOLDER, LOG_FILE) if LOG_FOLDER.is_dir() else pathlib.Path(LOG_FILE) 

47LOG_LEVEL = logging.INFO 

48 

49TS_FORMAT_LOG = '%Y-%m-%dT%H:%M:%S' 

50TS_FORMAT_PAYLOADS = '%Y-%m-%d %H:%M:%S.%f UTC' 

51 

52VERSION = __version__ 

53VERSION_INFO = __version_info__ 

54 

55 

56@no_type_check 

57def formatTime_RFC3339(self, record, datefmt=None): # noqa 

58 """HACK A DID ACK we could inject .astimezone() to localize ...""" 

59 return dti.datetime.fromtimestamp(record.created, dti.timezone.utc).isoformat() # pragma: no cover 

60 

61 

62@no_type_check 

63def init_logger(name=None, level=None): 

64 """Initialize module level logger""" 

65 global log # pylint: disable=global-statement 

66 

67 log_format = { 

68 'format': '%(asctime)s %(levelname)s [%(name)s]: %(message)s', 

69 'datefmt': TS_FORMAT_LOG, 

70 # 'filename': LOG_PATH, 

71 'level': LOG_LEVEL if level is None else level, 

72 } 

73 logging.Formatter.formatTime = formatTime_RFC3339 

74 logging.basicConfig(**log_format) 

75 log = logging.getLogger(APP_ENV if name is None else name) 

76 log.propagate = True 

77 

78 

79init_logger(name=APP_ENV, level=logging.DEBUG if DEBUG else None)