ka-uts-com 1.0.0.240823__py3-none-any.whl → 1.0.1.250131__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/dist/ka_uts_com-1.0.1.250131-py3-none-any.whl +0 -0
- build/lib/dist/ka_uts_com-1.0.1.250131.tar.gz +0 -0
- build/lib/ka_uts_com/__version__.py +1 -1
- build/lib/ka_uts_com/base/app_.py +51 -0
- build/lib/ka_uts_com/base/cfg_.py +27 -0
- build/lib/ka_uts_com/base/exit_.py +37 -0
- build/lib/ka_uts_com/base/log_.py +115 -0
- build/lib/ka_uts_com/com.py +42 -192
- build/lib/ka_uts_com/data/{log.standard.yml → log.std.yml} +3 -3
- build/lib/ka_uts_com/data/{log.personal.yml → log.usr.yml} +34 -42
- 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 +32 -20
- build/lib/ka_uts_com/timer.py +17 -24
- build/lib/ka_uts_com/utils/aoeqstmt.py +39 -0
- build/lib/ka_uts_com/{date.py → utils/date.py} +4 -4
- build/lib/ka_uts_com/utils/doeq.py +99 -0
- {ka_uts_com → build/lib/ka_uts_com/utils}/pacmod.py +30 -34
- build/lib/ka_uts_com/utils/py.typed +0 -0
- build/lib/ka_uts_com/{str.py → utils/str.py} +36 -39
- dist/ka_uts_com-1.0.1.250131-py3-none-any.whl +0 -0
- dist/ka_uts_com-1.0.1.250131.tar.gz +0 -0
- ka_uts_com/__version__.py +1 -1
- ka_uts_com/base/app_.py +51 -0
- ka_uts_com/base/cfg_.py +27 -0
- ka_uts_com/base/exit_.py +37 -0
- ka_uts_com/base/log_.py +115 -0
- ka_uts_com/com.py +42 -192
- ka_uts_com/data/{log.standard.yml → log.std.yml} +3 -3
- ka_uts_com/data/{log.personal.yml → log.usr.yml} +34 -42
- 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 +32 -20
- ka_uts_com/timer.py +17 -24
- ka_uts_com/utils/aoeqstmt.py +39 -0
- ka_uts_com/{date.py → utils/date.py} +4 -4
- ka_uts_com/utils/doeq.py +99 -0
- {build/lib/ka_uts_com → ka_uts_com/utils}/pacmod.py +30 -34
- ka_uts_com/utils/py.typed +0 -0
- ka_uts_com/{str.py → utils/str.py} +36 -39
- ka_uts_com-1.0.1.250131.dist-info/METADATA +1628 -0
- ka_uts_com-1.0.1.250131.dist-info/RECORD +55 -0
- {ka_uts_com-1.0.0.240823.dist-info → ka_uts_com-1.0.1.250131.dist-info}/WHEEL +1 -1
- 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/ioc.py +0 -57
- 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/ioc.py +0 -57
- 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-1.0.1.250131.dist-info/licenses}/LICENSE.txt +0 -0
- {ka_uts_com-1.0.0.240823.dist-info → ka_uts_com-1.0.1.250131.dist-info}/top_level.txt +0 -0
build/lib/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
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# coding=utf-8
|
2
|
+
import yaml
|
3
|
+
|
4
|
+
from typing import Any
|
5
|
+
TyAny = Any
|
6
|
+
TyArr = list[Any]
|
7
|
+
TyDic = dict[Any, Any]
|
8
|
+
|
9
|
+
TnAny = None | Any
|
10
|
+
|
11
|
+
|
12
|
+
class Yaml_:
|
13
|
+
""" Manage Object to Yaml file affilitation
|
14
|
+
"""
|
15
|
+
@staticmethod
|
16
|
+
def read(path: str, log) -> TnAny:
|
17
|
+
try:
|
18
|
+
with open(path) as fd:
|
19
|
+
# The Loader parameter handles the conversion from YAML
|
20
|
+
# scalar values to Python object format
|
21
|
+
obj = yaml.load(fd, Loader=yaml.SafeLoader)
|
22
|
+
return obj
|
23
|
+
except FileNotFoundError:
|
24
|
+
log.error(f"No such file or directory: {path}")
|
25
|
+
except IOError:
|
26
|
+
# if Com.Log is not None:
|
27
|
+
# fnc_error = Com.Log.error
|
28
|
+
# fnc_error(exc, exc_info=True)
|
29
|
+
raise
|
30
|
+
return None
|
build/lib/ka_uts_com/log.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
from ka_uts_com.com import Com
|
2
|
-
|
3
|
-
|
2
|
+
from typing import Any
|
3
|
+
TyDic = dict[Any, Any]
|
4
4
|
|
5
5
|
|
6
6
|
class Log:
|
@@ -8,56 +8,68 @@ class Log:
|
|
8
8
|
"""
|
9
9
|
class Eq:
|
10
10
|
|
11
|
-
@staticmethod
|
12
|
-
def sh(key: Any, value: Any) -> str:
|
13
|
-
""" Show Key, Value as Equate
|
14
|
-
"""
|
15
|
-
return f"{key} = {value}"
|
16
|
-
|
17
11
|
@classmethod
|
18
12
|
def debug(cls, key: Any, value: Any) -> None:
|
19
|
-
Log.debug(
|
13
|
+
Log.debug(f"{key} = {value}", stacklevel=3)
|
20
14
|
|
21
15
|
@classmethod
|
22
16
|
def error(cls, key: Any, value: Any) -> None:
|
23
|
-
Log.error(
|
17
|
+
Log.error(f"{key} = {value}", stacklevel=3)
|
24
18
|
|
25
19
|
@classmethod
|
26
20
|
def info(cls, key: Any, value: Any) -> None:
|
27
|
-
Log.info(
|
21
|
+
Log.info(f"{key} = {value}", stacklevel=3)
|
28
22
|
|
29
23
|
@classmethod
|
30
24
|
def warning(cls, key: Any, value: Any) -> None:
|
31
|
-
Log.warning(
|
25
|
+
Log.warning(f"{key} = {value}", stacklevel=3)
|
26
|
+
|
27
|
+
class Dic:
|
28
|
+
|
29
|
+
@classmethod
|
30
|
+
def debug(cls, dic: TyDic) -> None:
|
31
|
+
for key, value in dic.items():
|
32
|
+
Log.debug(f"{key} = {value}", stacklevel=3)
|
33
|
+
|
34
|
+
@classmethod
|
35
|
+
def error(cls, dic: TyDic) -> None:
|
36
|
+
for key, value in dic.items():
|
37
|
+
Log.error(f"{key} = {value}", stacklevel=3)
|
38
|
+
|
39
|
+
@classmethod
|
40
|
+
def info(cls, dic: TyDic) -> None:
|
41
|
+
for key, value in dic.items():
|
42
|
+
Log.info(f"{key} = {value}", stacklevel=3)
|
43
|
+
|
44
|
+
@classmethod
|
45
|
+
def warning(cls, dic: TyDic) -> None:
|
46
|
+
for key, value in dic.items():
|
47
|
+
Log.warning(f"{key} = {value}", stacklevel=3)
|
32
48
|
|
33
49
|
@staticmethod
|
34
50
|
def debug(*args, **kwargs) -> None:
|
35
51
|
if kwargs is None:
|
36
52
|
kwargs = {}
|
37
53
|
kwargs['stacklevel'] = kwargs.get('stacklevel', 2)
|
38
|
-
|
39
|
-
fnc_debug(*args, **kwargs)
|
54
|
+
Com.Log.debug(*args, **kwargs)
|
40
55
|
|
41
56
|
@staticmethod
|
42
57
|
def error(*args, **kwargs) -> None:
|
43
58
|
if kwargs is None:
|
44
59
|
kwargs = {}
|
45
60
|
kwargs['stacklevel'] = kwargs.get('stacklevel', 2)
|
46
|
-
|
47
|
-
fnc_error(*args, **kwargs)
|
61
|
+
Com.Log.error(*args, **kwargs)
|
48
62
|
|
49
63
|
@staticmethod
|
50
64
|
def info(*args, **kwargs) -> None:
|
51
65
|
if kwargs is None:
|
52
66
|
kwargs = {}
|
53
67
|
kwargs['stacklevel'] = kwargs.get('stacklevel', 2)
|
54
|
-
|
55
|
-
fnc_info(*args, **kwargs)
|
68
|
+
Com.Log.info(*args, **kwargs)
|
56
69
|
|
57
70
|
@staticmethod
|
58
71
|
def warning(*args, **kwargs) -> None:
|
59
72
|
if kwargs is None:
|
60
73
|
kwargs = {}
|
61
74
|
kwargs['stacklevel'] = kwargs.get('stacklevel', 2)
|
62
|
-
|
63
|
-
fnc_warning(*args, **kwargs)
|
75
|
+
Com.Log.warning(*args, **kwargs)
|
build/lib/ka_uts_com/timer.py
CHANGED
@@ -1,25 +1,22 @@
|
|
1
1
|
# coding=utf-8
|
2
|
-
|
3
2
|
from datetime import datetime
|
4
3
|
|
5
4
|
from ka_uts_com.com import Com
|
6
5
|
from ka_uts_com.log import Log
|
7
6
|
|
8
|
-
from typing import Any
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
TN_Str = None | T_Str
|
7
|
+
from typing import Any
|
8
|
+
TyAny = Any
|
9
|
+
TyArr = list[Any]
|
10
|
+
TyDic = dict[Any, Any]
|
11
|
+
TyStr = str
|
12
|
+
TnAny = None | TyAny
|
13
|
+
TnStr = None | TyStr
|
16
14
|
|
17
15
|
|
18
16
|
class Timestamp:
|
19
17
|
|
20
18
|
@staticmethod
|
21
|
-
def sh_elapse_time_sec(
|
22
|
-
end: Any, start: TN_Any) -> TN_Any:
|
19
|
+
def sh_elapse_time_sec(end: Any, start: TnAny) -> TnAny:
|
23
20
|
if start is None:
|
24
21
|
return None
|
25
22
|
return end.timestamp()-start.timestamp()
|
@@ -29,12 +26,11 @@ class Timer:
|
|
29
26
|
""" Timer Management
|
30
27
|
"""
|
31
28
|
@staticmethod
|
32
|
-
def sh_task_id(
|
33
|
-
class_id: Any, parms: TN_Any, separator: T_Str) -> T_Str:
|
29
|
+
def sh_task_id(d_pacmod: TyDic, class_id: Any, parms: TnAny, sep: TyStr) -> TyStr:
|
34
30
|
""" start Timer
|
35
31
|
"""
|
36
|
-
package =
|
37
|
-
module =
|
32
|
+
package = d_pacmod.get('package')
|
33
|
+
module = d_pacmod.get('module')
|
38
34
|
if isinstance(class_id, str):
|
39
35
|
class_name = class_id
|
40
36
|
else:
|
@@ -43,28 +39,25 @@ class Timer:
|
|
43
39
|
parms = ""
|
44
40
|
else:
|
45
41
|
parms = f" {parms}"
|
46
|
-
arr:
|
42
|
+
arr: TyArr = []
|
47
43
|
for item in [package, module, class_name, parms]:
|
48
44
|
if not item:
|
49
45
|
continue
|
50
46
|
arr.append(item)
|
51
|
-
return
|
47
|
+
return sep.join(arr)
|
52
48
|
|
53
49
|
@classmethod
|
54
|
-
def start(
|
55
|
-
cls, class_id: T_Any,
|
56
|
-
parms: TN_Any = None, separator: T_Str = ".") -> None:
|
50
|
+
def start(cls, class_id: TyAny, parms: TnAny = None, sep: TyStr = ".") -> None:
|
57
51
|
""" start Timer
|
58
52
|
"""
|
59
|
-
task_id = cls.sh_task_id(class_id, parms,
|
53
|
+
task_id = cls.sh_task_id(Com.d_pacmod, class_id, parms, sep)
|
60
54
|
Com.d_timer[task_id] = datetime.now()
|
61
55
|
|
62
56
|
@classmethod
|
63
|
-
def end(cls, class_id:
|
64
|
-
parms: TN_Any = None, separator: T_Str = ".") -> None:
|
57
|
+
def end(cls, class_id: TyAny, parms: TnAny = None, sep: TyStr = ".") -> None:
|
65
58
|
""" end Timer
|
66
59
|
"""
|
67
|
-
task_id = cls.sh_task_id(class_id, parms,
|
60
|
+
task_id = cls.sh_task_id(Com.d_pacmod, class_id, parms, sep)
|
68
61
|
start = Com.d_timer.get(task_id)
|
69
62
|
end = datetime.now()
|
70
63
|
elapse_time_sec = Timestamp.sh_elapse_time_sec(end, start)
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# coding=utf-8
|
2
|
+
from ka_uts_com.utils.doeq import DoEq
|
3
|
+
|
4
|
+
from typing import Any
|
5
|
+
TyArr = list[Any]
|
6
|
+
TyDic = dict[Any, Any]
|
7
|
+
|
8
|
+
TnArr = None | TyArr
|
9
|
+
TnDic = None | TyDic
|
10
|
+
TnStr = None | str
|
11
|
+
|
12
|
+
|
13
|
+
class AoEqStmt:
|
14
|
+
""" Dictionary of Equates
|
15
|
+
"""
|
16
|
+
@staticmethod
|
17
|
+
def init_d_eq(a_eqstmt: TyArr) -> TyDic:
|
18
|
+
d_eq = {}
|
19
|
+
for s_eq in a_eqstmt[1:]:
|
20
|
+
a_eq = s_eq.split('=')
|
21
|
+
if len(a_eq) == 1:
|
22
|
+
d_eq['cmd'] = a_eq[0]
|
23
|
+
else:
|
24
|
+
d_eq[a_eq[0]] = a_eq[1]
|
25
|
+
d_eq[a_eq[0]] = a_eq[1]
|
26
|
+
return d_eq
|
27
|
+
|
28
|
+
@classmethod
|
29
|
+
def sh_d_eq(cls, a_eqstmt: TyArr, **kwargs) -> TyDic:
|
30
|
+
""" show equates dictionary
|
31
|
+
"""
|
32
|
+
root_cls = kwargs.get('root_cls')
|
33
|
+
d_parms: TnDic = kwargs.get('d_parms')
|
34
|
+
_sh_prof = kwargs.get('sh_prof')
|
35
|
+
d_eq: TyDic = cls.init_d_eq(a_eqstmt)
|
36
|
+
d_eq_new: TyDic = DoEq.verify(d_eq, d_parms)
|
37
|
+
DoEq._set_d_pacmod(d_eq_new, root_cls)
|
38
|
+
DoEq._set_sh_prof(d_eq_new, _sh_prof)
|
39
|
+
return d_eq_new
|
@@ -1,15 +1,15 @@
|
|
1
1
|
from datetime import datetime
|
2
2
|
from datetime import date
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
TyDate = date
|
5
|
+
TnDate = None | TyDate
|
6
|
+
TnStr = None | str
|
7
7
|
|
8
8
|
|
9
9
|
class Date:
|
10
10
|
|
11
11
|
@staticmethod
|
12
|
-
def sh(datestring:
|
12
|
+
def sh(datestring: TnStr, fmt: str) -> TnDate:
|
13
13
|
if not datestring:
|
14
14
|
return None
|
15
15
|
return datetime.strptime(datestring, fmt).date()
|
@@ -0,0 +1,99 @@
|
|
1
|
+
# coding=utf-8
|
2
|
+
from collections.abc import Callable
|
3
|
+
from typing import Any
|
4
|
+
|
5
|
+
from ka_uts_com.utils.pacmod import PacMod
|
6
|
+
from ka_uts_com.utils.str import Str
|
7
|
+
from ka_uts_com.utils.date import Date
|
8
|
+
|
9
|
+
|
10
|
+
TyArr = list[Any]
|
11
|
+
TyCall = Callable[..., Any]
|
12
|
+
TyDic = dict[Any, Any]
|
13
|
+
TyStr = str
|
14
|
+
|
15
|
+
TnArr = None | TyArr
|
16
|
+
TnDic = None | TyDic
|
17
|
+
TnStr = None | TyStr
|
18
|
+
|
19
|
+
|
20
|
+
class DoEq:
|
21
|
+
""" Manage Commandline Arguments
|
22
|
+
"""
|
23
|
+
@classmethod
|
24
|
+
def sh_value(cls, key: str, value: Any, d_valid_parms: TnDic) -> Any:
|
25
|
+
|
26
|
+
# print(f"key = {key}, type(key) = {type(key)}")
|
27
|
+
# print(f"value = {value}, type(value) = {type(value)}")
|
28
|
+
if not d_valid_parms:
|
29
|
+
return value
|
30
|
+
_type: TnStr = d_valid_parms.get(key)
|
31
|
+
# print(f"_type = {_type}")
|
32
|
+
if not _type:
|
33
|
+
return value
|
34
|
+
if isinstance(_type, str):
|
35
|
+
match _type:
|
36
|
+
case 'int':
|
37
|
+
value = int(value)
|
38
|
+
case 'bool':
|
39
|
+
value = Str.sh_boolean(value)
|
40
|
+
case 'dict':
|
41
|
+
value = Str.sh_dic(value)
|
42
|
+
case 'list':
|
43
|
+
value = Str.sh_arr(value)
|
44
|
+
case '%Y-%m-%d':
|
45
|
+
value = Date.sh(value, _type)
|
46
|
+
case '_':
|
47
|
+
match _type[0]:
|
48
|
+
case '[', '{':
|
49
|
+
_obj = Str.sh_dic(_type)
|
50
|
+
if value not in _obj:
|
51
|
+
msg = (f"parameter={key} value={value} is invalid; "
|
52
|
+
f"valid values are={_obj}")
|
53
|
+
raise Exception(msg)
|
54
|
+
|
55
|
+
# print(f"value = {value}, type(value) = {type(value)}")
|
56
|
+
return value
|
57
|
+
|
58
|
+
@staticmethod
|
59
|
+
def _set_d_pacmod(d_eq: TyDic, root_cls) -> None:
|
60
|
+
""" set current pacmod dictionary
|
61
|
+
"""
|
62
|
+
tenant = d_eq.get('tenant')
|
63
|
+
d_eq['d_pacmod'] = PacMod.sh_d_pacmod(root_cls, tenant)
|
64
|
+
|
65
|
+
@staticmethod
|
66
|
+
def _set_sh_prof(d_eq: TyDic, sh_prof: TyCall | Any) -> None:
|
67
|
+
""" set current pacmod dictionary
|
68
|
+
"""
|
69
|
+
if callable(sh_prof):
|
70
|
+
d_eq['sh_prof'] = sh_prof()
|
71
|
+
else:
|
72
|
+
d_eq['sh_prof'] = sh_prof
|
73
|
+
|
74
|
+
@classmethod
|
75
|
+
def verify(cls, d_eq: TyDic, d_parms: TnDic) -> TyDic:
|
76
|
+
if d_parms is None:
|
77
|
+
return d_eq
|
78
|
+
if 'cmd' in d_eq:
|
79
|
+
_d_valid_parms = d_parms
|
80
|
+
_cmd = d_eq['cmd']
|
81
|
+
_valid_commands = list(d_parms.keys())
|
82
|
+
if _cmd not in _valid_commands:
|
83
|
+
msg = (f"Wrong command: {_cmd}; "
|
84
|
+
f"valid commands are: {_valid_commands}")
|
85
|
+
raise Exception(msg)
|
86
|
+
_d_valid_parms = d_parms[_cmd]
|
87
|
+
else:
|
88
|
+
_d_valid_parms = d_parms
|
89
|
+
if _d_valid_parms is None:
|
90
|
+
return d_eq
|
91
|
+
|
92
|
+
d_eq_new = {}
|
93
|
+
for key, value in d_eq.items():
|
94
|
+
if key not in _d_valid_parms:
|
95
|
+
msg = (f"Wrong parameter: {key}; "
|
96
|
+
f"valid parameters are: {_d_valid_parms}")
|
97
|
+
raise Exception(msg)
|
98
|
+
d_eq_new[key] = cls.sh_value(key, value, _d_valid_parms)
|
99
|
+
return d_eq_new
|
@@ -1,26 +1,25 @@
|
|
1
1
|
# coding=utf-8
|
2
|
+
from typing import Any
|
2
3
|
|
3
4
|
from os import path as os_path
|
4
5
|
import pkg_resources
|
5
6
|
|
6
|
-
|
7
|
+
TyArr = list[Any]
|
8
|
+
TyDic = dict[Any, Any]
|
9
|
+
TnDic = None | TyDic
|
7
10
|
|
8
|
-
T_Arr = List[Any]
|
9
|
-
T_Dic = Dict[Any, Any]
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
class Pacmod:
|
12
|
+
class PacMod:
|
15
13
|
""" Package Module Management
|
16
14
|
"""
|
17
|
-
|
15
|
+
@staticmethod
|
16
|
+
def sh_d_pacmod(root_cls, tenant: Any) -> TyDic:
|
18
17
|
""" Show Pacmod Dictionary
|
19
18
|
"""
|
20
|
-
a_pacmod:
|
19
|
+
a_pacmod: TyArr = root_cls.__module__.split(".")
|
21
20
|
package = a_pacmod[0]
|
22
21
|
module = a_pacmod[1]
|
23
|
-
d_pacmod:
|
22
|
+
d_pacmod: TyDic = {}
|
24
23
|
d_pacmod['tenant'] = tenant
|
25
24
|
d_pacmod['package'] = package
|
26
25
|
d_pacmod['module'] = module
|
@@ -30,42 +29,42 @@ class Pacmod:
|
|
30
29
|
# """ Configuration Sub Class of Package Module Class
|
31
30
|
# """
|
32
31
|
@staticmethod
|
33
|
-
def sh_path_cfg_yaml(
|
32
|
+
def sh_path_cfg_yaml(d_pacmod: TyDic) -> str:
|
34
33
|
""" show directory
|
35
34
|
"""
|
36
|
-
package =
|
37
|
-
module =
|
35
|
+
package = d_pacmod['package']
|
36
|
+
module = d_pacmod['module']
|
38
37
|
|
39
|
-
|
38
|
+
directory: str = f"{package}.data"
|
40
39
|
|
41
40
|
# print(f"dir = {dir}")
|
42
41
|
# print(f"package = {package}")
|
43
42
|
# print(f"module = {module}")
|
44
43
|
|
45
|
-
path = pkg_resources.resource_filename(
|
44
|
+
path: str = pkg_resources.resource_filename(directory, f"{module}.yml")
|
46
45
|
return path
|
47
46
|
|
48
47
|
@staticmethod
|
49
48
|
def sh_path_keys_yaml(
|
50
|
-
|
49
|
+
d_pacmod: TyDic, filename: str = 'keys.yml') -> str:
|
51
50
|
""" show directory
|
52
51
|
"""
|
53
|
-
package =
|
54
|
-
|
55
|
-
path = pkg_resources.resource_filename(
|
52
|
+
package = d_pacmod['package']
|
53
|
+
directory = f"{package}.data"
|
54
|
+
path: str = pkg_resources.resource_filename(directory, filename)
|
56
55
|
return path
|
57
56
|
|
58
57
|
@staticmethod
|
59
|
-
def sh_pacmod_type(
|
58
|
+
def sh_pacmod_type(d_pacmod: TyDic, type_: str) -> str:
|
60
59
|
""" show Data File Path
|
61
60
|
"""
|
62
|
-
package =
|
63
|
-
module =
|
61
|
+
package = d_pacmod['package']
|
62
|
+
module = d_pacmod['module']
|
64
63
|
return f"/data/{package}/{module}/{type_}"
|
65
64
|
|
66
65
|
@classmethod
|
67
66
|
def sh_file_path(
|
68
|
-
cls,
|
67
|
+
cls, d_pacmod: TyDic, type_: str, suffix: str,
|
69
68
|
pid: Any, ts: Any, **kwargs) -> str:
|
70
69
|
""" show type specific path
|
71
70
|
"""
|
@@ -79,11 +78,8 @@ class Pacmod:
|
|
79
78
|
if sw_run_pid_ts is None:
|
80
79
|
sw_run_pid_ts = True
|
81
80
|
|
82
|
-
|
83
|
-
_dir: str = cls.sh_pacmod_type(pacmod, type_)
|
81
|
+
_dir: str = cls.sh_pacmod_type(d_pacmod, type_)
|
84
82
|
if sw_run_pid_ts:
|
85
|
-
# pid = str(Com.pid)
|
86
|
-
# ts = str(Com.ts_start)
|
87
83
|
file_path = os_path.join(
|
88
84
|
_dir, f"{filename_}_{pid}_{ts}.{suffix}")
|
89
85
|
else:
|
@@ -92,20 +88,20 @@ class Pacmod:
|
|
92
88
|
|
93
89
|
@classmethod
|
94
90
|
def sh_pattern(
|
95
|
-
cls,
|
91
|
+
cls, d_pacmod: TyDic, type_: str, suffix: str, **kwargs) -> str:
|
96
92
|
""" show type specific path
|
97
93
|
"""
|
98
94
|
filename = kwargs.get('filename')
|
99
|
-
|
100
|
-
path = os_path.join(
|
95
|
+
_directory: str = cls.sh_pacmod_type(d_pacmod, type_)
|
96
|
+
path = os_path.join(_directory, f"{filename}*.{suffix}")
|
101
97
|
return path
|
102
98
|
|
103
99
|
@staticmethod
|
104
|
-
def sh_path_cfg_log(
|
100
|
+
def sh_path_cfg_log(d_pacmod: TnDic = None, filename: str = 'log.yml'):
|
105
101
|
""" show directory
|
106
102
|
"""
|
107
|
-
if
|
108
|
-
|
103
|
+
if d_pacmod is None:
|
104
|
+
d_pacmod = {'package': 'ka_uts_com', 'module': 'com'}
|
109
105
|
return pkg_resources.resource_filename(
|
110
|
-
f"{
|
106
|
+
f"{d_pacmod['package']}.data", filename
|
111
107
|
)
|
File without changes
|