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
« prev ^ index » next coverage.py v7.6.10, created at 2025-01-08 06:11:21 +00:00
1"""Version ranges (Finnish: versioalueet)."""
3import datetime as dti
4import logging
5import os
6import pathlib
7from typing import no_type_check
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)
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]
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'
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
49TS_FORMAT_LOG = '%Y-%m-%dT%H:%M:%S'
50TS_FORMAT_PAYLOADS = '%Y-%m-%d %H:%M:%S.%f UTC'
52VERSION = __version__
53VERSION_INFO = __version_info__
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
62@no_type_check
63def init_logger(name=None, level=None):
64 """Initialize module level logger"""
65 global log # pylint: disable=global-statement
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
79init_logger(name=APP_ENV, level=logging.DEBUG if DEBUG else None)