ka-uts-com 1.0.0.240823__py3-none-any.whl → 2.0.0.250407__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- build/lib/ka_uts_com/__version__.py +1 -1
- build/lib/ka_uts_com/base/app_.py +50 -0
- build/lib/ka_uts_com/base/cfg_.py +35 -0
- build/lib/ka_uts_com/base/exit_.py +37 -0
- build/lib/ka_uts_com/base/log_.py +131 -0
- build/lib/ka_uts_com/com.py +91 -192
- build/lib/ka_uts_com/data/log.std.yml +107 -0
- build/lib/ka_uts_com/data/{log.standard.yml → log.usr.yml} +47 -27
- build/lib/ka_uts_com/decorators/dec.py +13 -0
- build/lib/ka_uts_com/fnc.py +29 -24
- build/lib/ka_uts_com/ioc/jinja2_.py +42 -0
- build/lib/ka_uts_com/ioc/yaml_.py +30 -0
- build/lib/ka_uts_com/log.py +48 -25
- build/lib/ka_uts_com/timer.py +24 -27
- build/lib/ka_uts_com/utils/aoeqstmt.py +37 -0
- build/lib/ka_uts_com/{date.py → utils/date.py} +4 -4
- build/lib/ka_uts_com/utils/doeq.py +99 -0
- build/lib/ka_uts_com/utils/pacmod.py +123 -0
- build/lib/ka_uts_com/{str.py → utils/str.py} +36 -39
- ka_uts_com/__version__.py +1 -1
- ka_uts_com/base/app_.py +50 -0
- ka_uts_com/base/cfg_.py +35 -0
- ka_uts_com/base/exit_.py +37 -0
- ka_uts_com/base/log_.py +131 -0
- ka_uts_com/com.py +91 -192
- ka_uts_com/data/log.std.yml +107 -0
- ka_uts_com/data/{log.standard.yml → log.usr.yml} +47 -27
- ka_uts_com/decorators/dec.py +13 -0
- ka_uts_com/fnc.py +29 -24
- ka_uts_com/ioc/jinja2_.py +42 -0
- ka_uts_com/ioc/yaml_.py +30 -0
- ka_uts_com/log.py +48 -25
- ka_uts_com/timer.py +24 -27
- ka_uts_com/utils/aoeqstmt.py +37 -0
- ka_uts_com/{date.py → utils/date.py} +4 -4
- ka_uts_com/utils/doeq.py +99 -0
- ka_uts_com/utils/pacmod.py +123 -0
- ka_uts_com/{str.py → utils/str.py} +36 -39
- ka_uts_com-2.0.0.250407.dist-info/METADATA +1611 -0
- ka_uts_com-2.0.0.250407.dist-info/RECORD +49 -0
- {ka_uts_com-1.0.0.240823.dist-info → ka_uts_com-2.0.0.250407.dist-info}/WHEEL +1 -1
- {ka_uts_com-1.0.0.240823.dist-info → ka_uts_com-2.0.0.250407.dist-info/licenses}/LICENSE.txt +1 -2
- build/lib/dist/ka_uts_com-1.0.0.240823-py3-none-any.whl +0 -0
- build/lib/dist/ka_uts_com-1.0.0.240823.tar.gz +0 -0
- build/lib/ka_uts_com/aeq.py +0 -87
- build/lib/ka_uts_com/argv.py +0 -49
- build/lib/ka_uts_com/data/log.personal.yml +0 -93
- build/lib/ka_uts_com/ioc.py +0 -57
- build/lib/ka_uts_com/pacmod.py +0 -111
- dist/ka_uts_com-1.0.0.240823-py3-none-any.whl +0 -0
- dist/ka_uts_com-1.0.0.240823.tar.gz +0 -0
- ka_uts_com/aeq.py +0 -87
- ka_uts_com/argv.py +0 -49
- ka_uts_com/data/log.personal.yml +0 -93
- ka_uts_com/ioc.py +0 -57
- ka_uts_com/pacmod.py +0 -111
- ka_uts_com-1.0.0.240823.dist-info/METADATA +0 -943
- ka_uts_com-1.0.0.240823.dist-info/RECORD +0 -41
- {ka_uts_com-1.0.0.240823.dist-info → ka_uts_com-2.0.0.250407.dist-info}/top_level.txt +0 -0
ka_uts_com/com.py
CHANGED
@@ -1,222 +1,121 @@
|
|
1
1
|
# coding=utf-8
|
2
|
+
from typing import Any
|
2
3
|
|
4
|
+
import os
|
5
|
+
import time
|
3
6
|
import calendar
|
7
|
+
import importlib.resources as resources
|
4
8
|
import logging
|
5
9
|
import logging.config
|
6
10
|
from logging import Logger
|
7
|
-
|
8
|
-
import os
|
9
|
-
import time
|
10
11
|
from datetime import datetime
|
11
12
|
|
12
|
-
from ka_uts_com.
|
13
|
-
from ka_uts_com.
|
14
|
-
from ka_uts_com.
|
15
|
-
|
16
|
-
from
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
13
|
+
from ka_uts_com.utils.aoeqstmt import AoEqStmt
|
14
|
+
from ka_uts_com.utils.pacmod import PacMod
|
15
|
+
from ka_uts_com.base.app_ import App_
|
16
|
+
from ka_uts_com.base.cfg_ import Cfg_
|
17
|
+
from ka_uts_com.base.exit_ import Exit_
|
18
|
+
from ka_uts_com.base.log_ import Log_
|
19
|
+
|
20
|
+
TyAny = Any
|
21
|
+
TyDateTime = datetime
|
22
|
+
TyTimeStamp = int
|
23
|
+
TyArr = list[Any]
|
24
|
+
TyBool = bool
|
25
|
+
TyDic = dict[Any, Any]
|
26
|
+
TyLogger = Logger
|
27
|
+
|
28
|
+
TnAny = None | Any
|
29
|
+
TnArr = None | TyArr
|
30
|
+
TnDic = None | TyDic
|
31
|
+
TnTimeStamp = None | TyTimeStamp
|
32
|
+
TnDateTime = None | TyDateTime
|
33
|
+
TnStr = None | str
|
27
34
|
|
28
35
|
|
29
|
-
class
|
30
|
-
"""
|
36
|
+
class Com:
|
37
|
+
"""Communication Class
|
31
38
|
"""
|
32
39
|
sw_init: bool = False
|
33
|
-
|
34
|
-
|
35
|
-
|
40
|
+
dir_dat: TnStr = None
|
41
|
+
tenant: TnStr = None
|
42
|
+
log_type: TnStr = None
|
43
|
+
cmd: TnStr = None
|
44
|
+
d_com_pacmod: TyDic = {}
|
45
|
+
d_app_pacmod: TyDic = {}
|
46
|
+
path_bin = None
|
47
|
+
path_log_cfg = None
|
36
48
|
|
37
|
-
|
38
|
-
def read(pacmod: T_Dic, filename: str) -> Any:
|
39
|
-
"""Read log file path with jinja2
|
40
|
-
"""
|
41
|
-
# path: str = Pacmod.Path.Log.sh_cfg(filename=filename)
|
42
|
-
path: str = Pacmod.sh_path_cfg_log(filename=filename)
|
43
|
-
tenant: str = pacmod['tenant']
|
44
|
-
package: str = pacmod['package']
|
45
|
-
module: str = pacmod['module']
|
46
|
-
pid = Com.pid
|
47
|
-
ts: TN_DT = Com.ts_start
|
48
|
-
cfg = Jinja2.read(
|
49
|
-
path, tenant=tenant,
|
50
|
-
package=package, module=module,
|
51
|
-
pid=pid, ts=ts)
|
52
|
-
return cfg
|
49
|
+
pid = None
|
53
50
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
level = logging.DEBUG
|
60
|
-
else:
|
61
|
-
level = logging.INFO
|
62
|
-
cls.cfg['handlers']['main_debug_console']['level'] = level
|
63
|
-
cls.cfg['handlers']['main_debug_file']['level'] = level
|
51
|
+
ts: TnTimeStamp
|
52
|
+
ts_start: TnDateTime = None
|
53
|
+
ts_end: TnDateTime = None
|
54
|
+
ts_etime: TnDateTime = None
|
55
|
+
d_timer: TyDic = {}
|
64
56
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
cls.cfg = cls.read(Com.pacmod_curr, cls.logfile)
|
70
|
-
sw_debug: Any = kwargs.get('sw_debug')
|
71
|
-
cls.set_level(sw_debug)
|
72
|
-
logging.config.dictConfig(cls.cfg)
|
73
|
-
cls.log = logging.getLogger('main')
|
57
|
+
cfg: TnDic = None
|
58
|
+
Log = logging.getLogger('dummy_logger')
|
59
|
+
App: Any = None
|
60
|
+
Exit: Any = None
|
74
61
|
|
75
62
|
@classmethod
|
76
|
-
def
|
63
|
+
def init(cls, app_cls, kwargs: TyDic):
|
64
|
+
""" set log and application (module) configuration
|
65
|
+
"""
|
77
66
|
if cls.sw_init:
|
78
|
-
return
|
79
|
-
cls.
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
log: Logger = logging.getLogger('dummy_logger')
|
67
|
+
return
|
68
|
+
cls.sw_init = True
|
69
|
+
cls.dir_dat = kwargs.get('dir_dat', '/data')
|
70
|
+
cls.tenant = kwargs.get('tenant')
|
71
|
+
cls.log_type = kwargs.get('log_type', 'std')
|
72
|
+
cls.cmd = kwargs.get('cmd')
|
73
|
+
cls.d_com_pacmod = PacMod.sh_d_pacmod(cls)
|
74
|
+
cls.d_app_pacmod = PacMod.sh_d_pacmod(app_cls)
|
75
|
+
|
76
|
+
cls.ts = calendar.timegm(time.gmtime())
|
77
|
+
cls.pid = os.getpid()
|
90
78
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
package: str = pacmod['package']
|
95
|
-
module: str = pacmod['module']
|
96
|
-
return Jinja2.read(
|
97
|
-
path, package=package, module=module, person=person,
|
98
|
-
pid=Com.pid, ts=Com.ts_start)
|
79
|
+
# print(f"Com.init cls.tenanat = {cls.tenant}")
|
80
|
+
# print(f"Com.init cls.cmd = {cls.cmd}")
|
81
|
+
# print(f"Com.init kwargs = {kwargs}")
|
99
82
|
|
100
|
-
|
101
|
-
|
102
|
-
if sw_debug:
|
103
|
-
level = logging.DEBUG
|
104
|
-
else:
|
105
|
-
level = logging.INFO
|
106
|
-
cls.cfg['handlers'][f'{person}_debug_console']['level'] = level
|
107
|
-
cls.cfg['handlers'][f'{person}_debug_file']['level'] = level
|
83
|
+
cls.set_path_bin()
|
84
|
+
cls.set_path_log_cfg()
|
108
85
|
|
109
|
-
|
110
|
-
|
111
|
-
cls.
|
112
|
-
cls.
|
113
|
-
logging.config.dictConfig(cls.cfg)
|
114
|
-
cls.log = logging.getLogger(person)
|
86
|
+
cls.Log = Log_.sh(cls, **kwargs)
|
87
|
+
cls.cfg = Cfg_.sh(cls, **kwargs)
|
88
|
+
cls.App = App_.sh(cls, **kwargs)
|
89
|
+
cls.Exit = Exit_.sh(**kwargs)
|
115
90
|
|
116
91
|
@classmethod
|
117
|
-
def
|
118
|
-
|
119
|
-
|
120
|
-
cls
|
121
|
-
return
|
122
|
-
|
92
|
+
def sh_kwargs(cls, app_cls, d_parms, *args) -> TyDic:
|
93
|
+
_kwargs: TyDic = AoEqStmt.sh_d_eq(*args, d_parms=d_parms)
|
94
|
+
cls.init(app_cls, _kwargs)
|
95
|
+
_kwargs['com'] = cls
|
96
|
+
return _kwargs
|
123
97
|
|
124
|
-
class Cfg:
|
125
|
-
"""Configuration Class
|
126
|
-
"""
|
127
98
|
@classmethod
|
128
|
-
def
|
129
|
-
"""
|
130
|
-
file otherwise the objects notation {package}.data to
|
131
|
-
locate the package data directory is invalid
|
99
|
+
def set_path_bin(cls):
|
100
|
+
""" show directory
|
132
101
|
"""
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
"""Mongo DB Class
|
139
|
-
"""
|
140
|
-
client = None
|
141
|
-
|
142
|
-
|
143
|
-
class App:
|
144
|
-
"""Aplication Class
|
145
|
-
"""
|
146
|
-
sw_init: T_Bool = False
|
147
|
-
httpmod: T_Any = None
|
148
|
-
sw_replace_keys: TN_Bool = None
|
149
|
-
keys: TN_Arr = None
|
150
|
-
reqs: T_Dic = {}
|
151
|
-
app: T_Dic = {}
|
152
|
-
|
153
|
-
@classmethod
|
154
|
-
def init(cls, **kwargs) -> Any:
|
155
|
-
cls.sw_init = True
|
156
|
-
cls.httpmod = kwargs.get('httpmod')
|
157
|
-
cls.sw_replace_keys = kwargs.get('sw_replace_keys', False)
|
158
|
-
try:
|
159
|
-
if cls.sw_replace_keys:
|
160
|
-
pacmod = kwargs.get('pacmod_curr')
|
161
|
-
# cls.keys = Yaml.read(Pacmod.Pmd.sh_path_keys(pacmod))
|
162
|
-
cls.keys = Yaml.read(Pacmod.sh_path_keys_yaml(pacmod))
|
163
|
-
except Exception as e:
|
164
|
-
if Com.Log is not None:
|
165
|
-
fnc_error: Callable = Com.Log.error
|
166
|
-
fnc_error(e, exc_info=True)
|
167
|
-
raise
|
168
|
-
return cls
|
169
|
-
|
170
|
-
@classmethod
|
171
|
-
def sh(cls, **kwargs) -> Any:
|
172
|
-
if cls.sw_init:
|
173
|
-
return cls
|
174
|
-
cls.init(**kwargs)
|
175
|
-
return cls
|
176
|
-
|
177
|
-
|
178
|
-
class Exit:
|
179
|
-
"""Exit Class
|
180
|
-
"""
|
181
|
-
sw_critical: bool = False
|
182
|
-
sw_stop: bool = False
|
183
|
-
sw_interactive: bool = False
|
184
|
-
|
185
|
-
|
186
|
-
class Com:
|
187
|
-
"""Communication Class
|
188
|
-
"""
|
189
|
-
sw_init: bool = False
|
190
|
-
cfg: TN_Dic = None
|
191
|
-
pid = None
|
192
|
-
pacmod_curr: T_Dic = {}
|
193
|
-
|
194
|
-
ts_start: None | datetime = None
|
195
|
-
ts_end: None | datetime = None
|
196
|
-
ts_etime: None | datetime = None
|
197
|
-
d_timer: Dict = {}
|
198
|
-
|
199
|
-
# Log = None
|
200
|
-
Log: Logger = logging.getLogger('dummy_logger')
|
201
|
-
App = None
|
202
|
-
Exit = Exit
|
102
|
+
package = cls.d_app_pacmod['package']
|
103
|
+
path = resources.files(package).joinpath("bin")
|
104
|
+
if path.is_file():
|
105
|
+
cls.path_bin = path
|
106
|
+
# raise ModuleNotFoundError
|
203
107
|
|
204
108
|
@classmethod
|
205
|
-
def
|
206
|
-
"""
|
109
|
+
def set_path_log_cfg(cls):
|
110
|
+
""" show directory
|
207
111
|
"""
|
208
|
-
|
112
|
+
package = cls.d_app_pacmod['package']
|
113
|
+
path = resources.files(package).joinpath(f"data/log.{cls.log_type}.yml")
|
114
|
+
if path.is_file():
|
115
|
+
cls.path_log_cfg = path
|
209
116
|
return
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
cls.cfg = Cfg.init(cls.pacmod_curr)
|
217
|
-
log_type = kwargs.get('log_type', 'standard')
|
218
|
-
if log_type == 'standard':
|
219
|
-
cls.Log = LogStandard.sh(**kwargs)
|
220
|
-
else:
|
221
|
-
cls.Log = LogPersonal.sh(**kwargs)
|
222
|
-
cls.App = App.sh(**kwargs)
|
117
|
+
package = cls.d_com_pacmod['package']
|
118
|
+
path = resources.files(package).joinpath(f"data/log.{cls.log_type}.yml")
|
119
|
+
if path.is_file():
|
120
|
+
cls.path_log_cfg = path
|
121
|
+
# raise ModuleNotFoundError
|
@@ -0,0 +1,107 @@
|
|
1
|
+
version: 1
|
2
|
+
|
3
|
+
disable_existing_loggers: False
|
4
|
+
|
5
|
+
# root:
|
6
|
+
# level: DEBUG
|
7
|
+
# handlers:
|
8
|
+
# - debug_console
|
9
|
+
# - debug_file
|
10
|
+
|
11
|
+
loggers:
|
12
|
+
|
13
|
+
# standard logger
|
14
|
+
std:
|
15
|
+
# level: NOTSET
|
16
|
+
level: DEBUG
|
17
|
+
handlers:
|
18
|
+
- std_debug_console
|
19
|
+
- std_error_file
|
20
|
+
- std_warning_file
|
21
|
+
- std_debug_file
|
22
|
+
- std_info_file
|
23
|
+
- std_log_file
|
24
|
+
|
25
|
+
handlers:
|
26
|
+
|
27
|
+
std_debug_console:
|
28
|
+
class: 'logging.StreamHandler'
|
29
|
+
level: DEBUG
|
30
|
+
formatter: std_debug
|
31
|
+
stream: 'ext://sys.stderr'
|
32
|
+
|
33
|
+
# std_info_rotating_file_handler:
|
34
|
+
# class: 'logging.handlers.RotatingFileHandler'
|
35
|
+
# level: INFO
|
36
|
+
# formatter: info
|
37
|
+
# filename: 'info.rotating.log'
|
38
|
+
# mode: 'a'
|
39
|
+
# maxBytes: 1048576 # 1MB
|
40
|
+
# backupCount: 10
|
41
|
+
# encoding: utf8
|
42
|
+
|
43
|
+
std_error_file:
|
44
|
+
class: 'logging.FileHandler'
|
45
|
+
level: ERROR
|
46
|
+
formatter: std_error
|
47
|
+
filename: '{{dir_run_errs}}/errs_{{pid}}_{{ts}}.log'
|
48
|
+
mode: 'a'
|
49
|
+
|
50
|
+
std_warning_file:
|
51
|
+
class: 'logging.FileHandler'
|
52
|
+
level: WARNING
|
53
|
+
formatter: std_warning
|
54
|
+
filename: '{{dir_run_wrns}}/wrns_{{pid}}_{{ts}}.log'
|
55
|
+
mode: 'a'
|
56
|
+
|
57
|
+
std_debug_file:
|
58
|
+
class: 'logging.FileHandler'
|
59
|
+
level: DEBUG
|
60
|
+
formatter: std_debug
|
61
|
+
filename: '{{dir_run_debs}}/debs_{{pid}}_{{ts}}.log'
|
62
|
+
mode: 'a'
|
63
|
+
|
64
|
+
std_info_file:
|
65
|
+
class: 'logging.FileHandler'
|
66
|
+
level: INFO
|
67
|
+
formatter: std_info
|
68
|
+
filename: '{{dir_run_infs}}/infs_{{pid}}_{{ts}}.log'
|
69
|
+
mode: 'a'
|
70
|
+
|
71
|
+
std_log_file:
|
72
|
+
class: 'logging.FileHandler'
|
73
|
+
level: INFO
|
74
|
+
formatter: std_log
|
75
|
+
filename: '{{dir_run_logs}}/logs_{{pid}}_{{ts}}.log'
|
76
|
+
mode: 'a'
|
77
|
+
|
78
|
+
std_critical_mail:
|
79
|
+
class: 'logging.handlers.SMTPHandler'
|
80
|
+
level: CRITICAL
|
81
|
+
formatter: std_critical
|
82
|
+
mailhost : localhost
|
83
|
+
fromaddr: 'monitoring@domain.com'
|
84
|
+
toaddrs:
|
85
|
+
- 'dev@domain.com'
|
86
|
+
- 'qa@domain.com'
|
87
|
+
subject: 'Critical error with application name'
|
88
|
+
|
89
|
+
|
90
|
+
formatters:
|
91
|
+
|
92
|
+
std_warning:
|
93
|
+
format: '%(asctime)-15s %(levelname)s-%(name)s-%(process)d::%(module)s.%(funcName)s|%(lineno)s:: %(message)s'
|
94
|
+
datefmt: '%Y-%m-%d %H:%M:%S'
|
95
|
+
std_error:
|
96
|
+
format: '%(asctime)-15s %(levelname)s-%(name)s-%(process)d::%(module)s.%(funcName)s|%(lineno)s:: %(message)s'
|
97
|
+
datefmt: '%Y-%m-%d %H:%M:%S'
|
98
|
+
std_debug:
|
99
|
+
format: '%(asctime)-15s %(levelname)s-%(name)s-%(process)d::%(module)s.%(funcName)s|%(lineno)s:: %(message)s'
|
100
|
+
datefmt: '%Y-%m-%d %H:%M:%S'
|
101
|
+
std_info:
|
102
|
+
format: '%(asctime)s-%(levelname)s-%(name)s::%(module)s|%(lineno)s:: %(message)s'
|
103
|
+
std_log:
|
104
|
+
format: '%(asctime)s-%(levelname)s-%(name)s::%(module)s|%(lineno)s:: %(message)s'
|
105
|
+
std_critical:
|
106
|
+
format: '%(asctime)-15s %(levelname)s-%(name)s-%(process)d::%(module)s.%(funcName)s|%(lineno)s:: %(message)s'
|
107
|
+
datefmt: '%Y-%m-%d %H:%M:%S'
|
@@ -1,5 +1,4 @@
|
|
1
1
|
version: 1
|
2
|
-
|
3
2
|
disable_existing_loggers: False
|
4
3
|
|
5
4
|
# root:
|
@@ -10,25 +9,27 @@ disable_existing_loggers: False
|
|
10
9
|
|
11
10
|
loggers:
|
12
11
|
|
13
|
-
#
|
14
|
-
|
12
|
+
# user logger
|
13
|
+
usr:
|
15
14
|
# level: NOTSET
|
16
15
|
level: DEBUG
|
17
16
|
handlers:
|
18
|
-
-
|
19
|
-
-
|
20
|
-
-
|
21
|
-
-
|
17
|
+
- usr_debug_console
|
18
|
+
- usr_error_file
|
19
|
+
- usr_warning_file
|
20
|
+
- usr_debug_file
|
21
|
+
- usr_info_file
|
22
|
+
- usr_log_file
|
22
23
|
|
23
24
|
handlers:
|
24
25
|
|
25
|
-
|
26
|
+
usr_debug_console:
|
26
27
|
class: 'logging.StreamHandler'
|
27
28
|
level: DEBUG
|
28
|
-
formatter:
|
29
|
+
formatter: usr_debug
|
29
30
|
stream: 'ext://sys.stderr'
|
30
31
|
|
31
|
-
#
|
32
|
+
# person_info_rotating_file_handler:
|
32
33
|
# class: 'logging.handlers.RotatingFileHandler'
|
33
34
|
# level: INFO
|
34
35
|
# formatter: info
|
@@ -38,31 +39,45 @@ handlers:
|
|
38
39
|
# backupCount: 10
|
39
40
|
# encoding: utf8
|
40
41
|
|
41
|
-
|
42
|
+
usr_error_file:
|
43
|
+
class: 'logging.FileHandler'
|
44
|
+
level: ERROR
|
45
|
+
formatter: usr_error
|
46
|
+
filename: '{{dir_run_errs}}/errs_{{pid}}_{{ts}}.log'
|
47
|
+
mode: 'a'
|
48
|
+
|
49
|
+
usr_warning_file:
|
50
|
+
class: 'logging.FileHandler'
|
51
|
+
level: ERROR
|
52
|
+
formatter: usr_warning
|
53
|
+
filename: '{{dir_run_wrns}}/wrns_{{pid}}_{{ts}}.log'
|
54
|
+
mode: 'a'
|
55
|
+
|
56
|
+
usr_debug_file:
|
42
57
|
class: 'logging.FileHandler'
|
43
58
|
level: DEBUG
|
44
|
-
formatter:
|
45
|
-
filename: '
|
59
|
+
formatter: usr_debug
|
60
|
+
filename: '{{dir_run_debs}}/debs_{{pid}}_{{ts}}.log'
|
46
61
|
mode: 'a'
|
47
62
|
|
48
|
-
|
63
|
+
usr_info_file:
|
49
64
|
class: 'logging.FileHandler'
|
50
65
|
level: INFO
|
51
|
-
formatter:
|
52
|
-
filename: '
|
66
|
+
formatter: usr_info
|
67
|
+
filename: '{{dir_run_infs}}/infs_{{pid}}_{{ts}}.log'
|
53
68
|
mode: 'a'
|
54
69
|
|
55
|
-
|
70
|
+
usr_log_file:
|
56
71
|
class: 'logging.FileHandler'
|
57
|
-
level:
|
58
|
-
formatter:
|
59
|
-
filename: '
|
72
|
+
level: INFO
|
73
|
+
formatter: usr_log
|
74
|
+
filename: '{{dir_run_logs}}/logs_{{pid}}_{{ts}}.log'
|
60
75
|
mode: 'a'
|
61
76
|
|
62
|
-
|
77
|
+
usr_critical_mail:
|
63
78
|
class: 'logging.handlers.SMTPHandler'
|
64
79
|
level: CRITICAL
|
65
|
-
formatter:
|
80
|
+
formatter: usr_critical
|
66
81
|
mailhost : localhost
|
67
82
|
fromaddr: 'monitoring@domain.com'
|
68
83
|
toaddrs:
|
@@ -73,14 +88,19 @@ handlers:
|
|
73
88
|
|
74
89
|
formatters:
|
75
90
|
|
76
|
-
|
77
|
-
format: '%(asctime)s-%(levelname)s-%(name)s::%(module)s|%(lineno)s:: %(message)s'
|
78
|
-
main_debug:
|
91
|
+
usr_errs:
|
79
92
|
format: '%(asctime)-15s %(levelname)s-%(name)s-%(process)d::%(module)s.%(funcName)s|%(lineno)s:: %(message)s'
|
80
93
|
datefmt: '%Y-%m-%d %H:%M:%S'
|
81
|
-
|
94
|
+
usr_wrns:
|
82
95
|
format: '%(asctime)-15s %(levelname)s-%(name)s-%(process)d::%(module)s.%(funcName)s|%(lineno)s:: %(message)s'
|
83
96
|
datefmt: '%Y-%m-%d %H:%M:%S'
|
84
|
-
|
97
|
+
usr_debs:
|
98
|
+
format: '%(asctime)-15s %(levelname)s-%(name)s-%(process)d::%(module)s.%(funcName)s|%(lineno)s:: %(message)s'
|
99
|
+
datefmt: '%Y-%m-%d %H:%M:%S'
|
100
|
+
usr_infs:
|
101
|
+
format: '%(asctime)s-%(levelname)s-%(name)s::%(module)s|%(lineno)s:: %(message)s'
|
102
|
+
usr_logs:
|
103
|
+
format: '%(asctime)s-%(levelname)s-%(name)s::%(module)s|%(lineno)s:: %(message)s'
|
104
|
+
usr_critical:
|
85
105
|
format: '%(asctime)-15s %(levelname)s-%(name)s-%(process)d::%(module)s.%(funcName)s|%(lineno)s:: %(message)s'
|
86
106
|
datefmt: '%Y-%m-%d %H:%M:%S'
|
ka_uts_com/fnc.py
CHANGED
@@ -1,37 +1,42 @@
|
|
1
1
|
# coding=utf-8
|
2
|
+
from collections.abc import Callable
|
3
|
+
from typing import Any
|
2
4
|
|
3
|
-
|
5
|
+
TyArr = list[Any]
|
6
|
+
TyCallable = Callable[..., Any]
|
7
|
+
TyDic = dict[Any, Any]
|
8
|
+
TyArrDic = TyArr | TyDic
|
9
|
+
TyDoC = dict[str, TyCallable]
|
10
|
+
TyMsg = str
|
4
11
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
TN_Str = None | str
|
9
|
-
TN_Callable = None | Callable
|
12
|
+
TnStr = None | str
|
13
|
+
TnDoC = None | TyDoC
|
14
|
+
TnCallable = None | TyCallable
|
10
15
|
|
11
16
|
|
12
17
|
class Fnc:
|
13
|
-
"""
|
18
|
+
"""
|
19
|
+
Functions
|
14
20
|
"""
|
15
21
|
@staticmethod
|
16
|
-
def
|
17
|
-
|
18
|
-
msg = f"key {key} is None or empty string"
|
19
|
-
raise Exception(msg)
|
20
|
-
_fnc: TN_Callable = d_key2fnc.get(key)
|
21
|
-
if not _fnc:
|
22
|
-
msg = f"key {key} is not defined in function table {d_key2fnc}"
|
23
|
-
raise Exception(msg)
|
24
|
-
else:
|
25
|
-
return _fnc
|
22
|
+
def identity(obj: Any) -> Any:
|
23
|
+
return obj
|
26
24
|
|
27
25
|
@staticmethod
|
28
|
-
def
|
26
|
+
def sh(doc: TnDoC, key: TnStr) -> TyCallable:
|
27
|
+
if not doc:
|
28
|
+
msg = f"function table: {doc} is not defined"
|
29
|
+
raise Exception(msg)
|
29
30
|
if not key:
|
30
|
-
msg = f"key {key} is
|
31
|
+
msg = f"key: {key} is not defined"
|
31
32
|
raise Exception(msg)
|
32
|
-
|
33
|
-
if not
|
34
|
-
msg = f"key {key} is not defined in function table {
|
33
|
+
fnc: TnCallable = doc.get(key)
|
34
|
+
if not fnc:
|
35
|
+
msg = f"key: {key} is not defined in function table: {doc}"
|
35
36
|
raise Exception(msg)
|
36
|
-
|
37
|
-
|
37
|
+
return fnc
|
38
|
+
|
39
|
+
@classmethod
|
40
|
+
def ex(cls, doc: TnDoC, key: TnStr, args_kwargs: TyArrDic) -> Any:
|
41
|
+
fnc: TyCallable = cls.sh(doc, key)
|
42
|
+
return fnc(args_kwargs)
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# coding=utf-8
|
2
|
+
# from collections.abc import Callable
|
3
|
+
from typing import Any
|
4
|
+
|
5
|
+
import os
|
6
|
+
import yaml
|
7
|
+
import jinja2
|
8
|
+
# import logging
|
9
|
+
# import logging.config
|
10
|
+
from logging import Logger
|
11
|
+
|
12
|
+
TyAny = Any
|
13
|
+
TyDic = dict[Any, Any]
|
14
|
+
TyLogger = Logger
|
15
|
+
|
16
|
+
TnDic = None | TyDic
|
17
|
+
|
18
|
+
|
19
|
+
class Jinja2_:
|
20
|
+
|
21
|
+
""" Manage Object to Json file affilitation
|
22
|
+
"""
|
23
|
+
@staticmethod
|
24
|
+
def read_template(path: str) -> Any:
|
25
|
+
directory, file = os.path.split(path)
|
26
|
+
env = jinja2.Environment(loader=jinja2.FileSystemLoader(directory))
|
27
|
+
return env.get_template(file)
|
28
|
+
|
29
|
+
@classmethod
|
30
|
+
def read(cls, path: str, log: TyLogger, **kwargs) -> Any:
|
31
|
+
try:
|
32
|
+
# read jinja template from file
|
33
|
+
template = cls.read_template(path)
|
34
|
+
# render template as yaml string
|
35
|
+
template_rendered = template.render(kwargs)
|
36
|
+
# load yaml string into object
|
37
|
+
obj: Any = yaml.safe_load(template_rendered)
|
38
|
+
return obj
|
39
|
+
except IOError as exc:
|
40
|
+
log.error(exc, exc_info=True)
|
41
|
+
# log.error(f"No such file or directory: {path}")
|
42
|
+
raise
|