automizor 0.4.0__py3-none-any.whl → 0.4.1__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.
- automizor/__init__.py +1 -1
- automizor/job/_job.py +1 -1
- automizor/log/__init__.py +95 -0
- automizor/log/_log.py +91 -0
- automizor/storage/__init__.py +7 -6
- automizor/storage/_storage.py +4 -4
- automizor/vault/_container.py +1 -1
- {automizor-0.4.0.dist-info → automizor-0.4.1.dist-info}/METADATA +2 -2
- automizor-0.4.1.dist-info/RECORD +17 -0
- automizor-0.4.0.dist-info/RECORD +0 -15
- {automizor-0.4.0.dist-info → automizor-0.4.1.dist-info}/LICENSE +0 -0
- {automizor-0.4.0.dist-info → automizor-0.4.1.dist-info}/WHEEL +0 -0
- {automizor-0.4.0.dist-info → automizor-0.4.1.dist-info}/top_level.txt +0 -0
automizor/__init__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
version = "0.4.
|
1
|
+
version = "0.4.1"
|
automizor/job/_job.py
CHANGED
@@ -111,7 +111,7 @@ class Job:
|
|
111
111
|
data[name] = value
|
112
112
|
|
113
113
|
with open(file_path, "w", encoding="utf-8") as file:
|
114
|
-
json.dump(data, file, ensure_ascii=False
|
114
|
+
json.dump(data, file, ensure_ascii=False)
|
115
115
|
|
116
116
|
def _read_file_context(self) -> dict:
|
117
117
|
with open(self._context_file, "r", encoding="utf-8") as file:
|
@@ -0,0 +1,95 @@
|
|
1
|
+
from functools import lru_cache
|
2
|
+
|
3
|
+
from ._log import JSON
|
4
|
+
|
5
|
+
|
6
|
+
@lru_cache
|
7
|
+
def _get_log():
|
8
|
+
from ._log import Log
|
9
|
+
|
10
|
+
return Log()
|
11
|
+
|
12
|
+
|
13
|
+
def debug(msg: JSON):
|
14
|
+
"""
|
15
|
+
Writes a debug log message with a level of "DEBUG".
|
16
|
+
|
17
|
+
Parameters:
|
18
|
+
msg (JSON): The log message to write. This can be a string, number, boolean, dictionary,
|
19
|
+
list, or None.
|
20
|
+
"""
|
21
|
+
|
22
|
+
_get_log().write_log("DEBUG", msg)
|
23
|
+
|
24
|
+
|
25
|
+
def info(msg: JSON):
|
26
|
+
"""
|
27
|
+
Writes an info log message with a level of "INFO".
|
28
|
+
|
29
|
+
Parameters:
|
30
|
+
msg (JSON): The log message to write. This can be a string, number, boolean, dictionary,
|
31
|
+
list, or None.
|
32
|
+
"""
|
33
|
+
|
34
|
+
_get_log().write_log("INFO", msg)
|
35
|
+
|
36
|
+
|
37
|
+
def warning(msg: JSON):
|
38
|
+
"""
|
39
|
+
Writes a warning log message with a level of "WARNING".
|
40
|
+
|
41
|
+
Parameters:
|
42
|
+
msg (JSON): The log message to write. This can be a string, number, boolean, dictionary,
|
43
|
+
list, or None.
|
44
|
+
"""
|
45
|
+
|
46
|
+
_get_log().write_log("WARNING", msg)
|
47
|
+
|
48
|
+
|
49
|
+
def error(msg: JSON):
|
50
|
+
"""
|
51
|
+
Writes an error log message with a level of "ERROR".
|
52
|
+
|
53
|
+
Parameters:
|
54
|
+
msg (JSON): The log message to write. This can be a string, number, boolean, dictionary,
|
55
|
+
list, or None.
|
56
|
+
"""
|
57
|
+
|
58
|
+
_get_log().write_log("ERROR", msg)
|
59
|
+
|
60
|
+
|
61
|
+
def critical(msg: JSON):
|
62
|
+
"""
|
63
|
+
Writes a critical log message with a level of "CRITICAL".
|
64
|
+
|
65
|
+
Parameters:
|
66
|
+
msg (JSON): The log message to write. This can be a string, number, boolean, dictionary,
|
67
|
+
list, or None.
|
68
|
+
"""
|
69
|
+
|
70
|
+
_get_log().write_log("CRITICAL", msg)
|
71
|
+
|
72
|
+
|
73
|
+
def set_level(level: str):
|
74
|
+
"""
|
75
|
+
Set the log level for filtering log messages.
|
76
|
+
|
77
|
+
Parameters:
|
78
|
+
level (str): The log level to set. Valid log levels are "DEBUG", "INFO",
|
79
|
+
"WARNING", "ERROR", and "CRITICAL".
|
80
|
+
|
81
|
+
Raises:
|
82
|
+
ValueError: If an invalid log level is provided.
|
83
|
+
"""
|
84
|
+
|
85
|
+
_get_log().set_level(level)
|
86
|
+
|
87
|
+
|
88
|
+
__all__ = [
|
89
|
+
"debug",
|
90
|
+
"info",
|
91
|
+
"warning",
|
92
|
+
"error",
|
93
|
+
"critical",
|
94
|
+
"set_level",
|
95
|
+
]
|
automizor/log/_log.py
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
import json
|
2
|
+
import os
|
3
|
+
from typing import Dict, List, Union
|
4
|
+
|
5
|
+
LOG_LEVELS = {
|
6
|
+
"DEBUG": 1,
|
7
|
+
"INFO": 2,
|
8
|
+
"WARNING": 3,
|
9
|
+
"ERROR": 4,
|
10
|
+
"CRITICAL": 5,
|
11
|
+
}
|
12
|
+
|
13
|
+
JSON = Union[str, int, float, bool, None, Dict[str, "JSON"], List["JSON"]]
|
14
|
+
|
15
|
+
|
16
|
+
class Log:
|
17
|
+
"""
|
18
|
+
`Log` is a class that facilitates logging messages to a local file, which can be
|
19
|
+
useful for debugging and monitoring purposes. It provides a simple interface for
|
20
|
+
writing log messages with different levels, such as "info", "warning", "error", etc.
|
21
|
+
|
22
|
+
The log messages are stored in a JSON file, which can be easily parsed and analyzed
|
23
|
+
later. This class does not provide any log rotation or cleanup mechanisms, so it is
|
24
|
+
recommended to manage log files manually or use external log management tools.
|
25
|
+
|
26
|
+
Example usage:
|
27
|
+
|
28
|
+
.. code-block:: python
|
29
|
+
|
30
|
+
from automizor import log
|
31
|
+
|
32
|
+
# Set log level to INFO
|
33
|
+
log.set_level("INFO")
|
34
|
+
|
35
|
+
# Write a log message
|
36
|
+
log.info({"key": "value"})
|
37
|
+
"""
|
38
|
+
|
39
|
+
def __init__(self):
|
40
|
+
self.level = "INFO"
|
41
|
+
|
42
|
+
def set_level(self, level: str):
|
43
|
+
"""
|
44
|
+
Set the log level for filtering log messages.
|
45
|
+
|
46
|
+
Parameters:
|
47
|
+
level (str): The log level to set. Valid log levels are "DEBUG", "INFO",
|
48
|
+
"WARNING", "ERROR", and "CRITICAL".
|
49
|
+
|
50
|
+
Raises:
|
51
|
+
ValueError: If an invalid log level is provided.
|
52
|
+
"""
|
53
|
+
|
54
|
+
if level not in LOG_LEVELS:
|
55
|
+
raise ValueError(f"Invalid log level: {level}")
|
56
|
+
|
57
|
+
self.level = level
|
58
|
+
|
59
|
+
def write_log(self, level: str, msg: JSON):
|
60
|
+
"""
|
61
|
+
Write a log message with the specified log level.
|
62
|
+
|
63
|
+
Parameters:
|
64
|
+
level (str): The log level of the message. Valid log levels are "DEBUG", "INFO",
|
65
|
+
"WARNING", "ERROR", and "CRITICAL".
|
66
|
+
msg (JSON): The log message to write. This can be a string, number, boolean, dictionary,
|
67
|
+
list, or None.
|
68
|
+
|
69
|
+
Raises:
|
70
|
+
ValueError: If an invalid log level is provided.
|
71
|
+
"""
|
72
|
+
|
73
|
+
if level not in LOG_LEVELS:
|
74
|
+
raise ValueError(f"Invalid log level: {level}")
|
75
|
+
|
76
|
+
if LOG_LEVELS[level] < LOG_LEVELS[self.level]:
|
77
|
+
return
|
78
|
+
|
79
|
+
data = []
|
80
|
+
file_path = "output/log.json"
|
81
|
+
try:
|
82
|
+
if os.path.exists(file_path):
|
83
|
+
with open(file_path, "r", encoding="utf-8") as file:
|
84
|
+
data = json.load(file)
|
85
|
+
except json.JSONDecodeError:
|
86
|
+
pass
|
87
|
+
|
88
|
+
data.append({"level": level, "msg": msg})
|
89
|
+
|
90
|
+
with open(file_path, "w", encoding="utf-8") as file:
|
91
|
+
json.dump(data, file, ensure_ascii=False)
|
automizor/storage/__init__.py
CHANGED
@@ -2,6 +2,7 @@ import json
|
|
2
2
|
import mimetypes
|
3
3
|
from functools import lru_cache
|
4
4
|
from pathlib import Path
|
5
|
+
from typing import List
|
5
6
|
|
6
7
|
from ._storage import JSON
|
7
8
|
|
@@ -13,7 +14,7 @@ def _get_storage():
|
|
13
14
|
return Storage()
|
14
15
|
|
15
16
|
|
16
|
-
def list_assets() ->
|
17
|
+
def list_assets() -> List[str]:
|
17
18
|
"""
|
18
19
|
Retrieves a list of all asset names.
|
19
20
|
|
@@ -25,7 +26,7 @@ def list_assets() -> list[str]:
|
|
25
26
|
return storage.list_assets()
|
26
27
|
|
27
28
|
|
28
|
-
def delete_asset(name: str)
|
29
|
+
def delete_asset(name: str):
|
29
30
|
"""
|
30
31
|
Deletes the specified asset.
|
31
32
|
|
@@ -98,7 +99,7 @@ def get_text(name: str) -> str:
|
|
98
99
|
return storage.get_text(name)
|
99
100
|
|
100
101
|
|
101
|
-
def set_bytes(name: str, data: bytes, content_type="application/octet-stream")
|
102
|
+
def set_bytes(name: str, data: bytes, content_type="application/octet-stream"):
|
102
103
|
"""
|
103
104
|
Uploads raw bytes as an asset.
|
104
105
|
|
@@ -112,7 +113,7 @@ def set_bytes(name: str, data: bytes, content_type="application/octet-stream") -
|
|
112
113
|
storage.set_bytes(name, data, content_type)
|
113
114
|
|
114
115
|
|
115
|
-
def set_file(name: str, path: str, content_type: str = None)
|
116
|
+
def set_file(name: str, path: str, content_type: str = None):
|
116
117
|
"""
|
117
118
|
Uploads a file as an asset.
|
118
119
|
|
@@ -132,7 +133,7 @@ def set_file(name: str, path: str, content_type: str = None) -> None:
|
|
132
133
|
storage.set_bytes(name, content, content_type)
|
133
134
|
|
134
135
|
|
135
|
-
def set_json(name: str, value: JSON, **kwargs)
|
136
|
+
def set_json(name: str, value: JSON, **kwargs):
|
136
137
|
"""
|
137
138
|
Uploads JSON data as an asset.
|
138
139
|
|
@@ -149,7 +150,7 @@ def set_json(name: str, value: JSON, **kwargs) -> None:
|
|
149
150
|
storage.set_bytes(name, content, content_type)
|
150
151
|
|
151
152
|
|
152
|
-
def set_text(name: str, text: str)
|
153
|
+
def set_text(name: str, text: str):
|
153
154
|
"""
|
154
155
|
Uploads text content as an asset.
|
155
156
|
|
automizor/storage/_storage.py
CHANGED
@@ -85,7 +85,7 @@ class Storage:
|
|
85
85
|
raise AutomizorError("Failed to list assets") from exc
|
86
86
|
return asset_names
|
87
87
|
|
88
|
-
def delete_asset(self, name: str)
|
88
|
+
def delete_asset(self, name: str):
|
89
89
|
"""
|
90
90
|
Deletes the specified asset.
|
91
91
|
|
@@ -181,7 +181,7 @@ class Storage:
|
|
181
181
|
|
182
182
|
return self._download_file(name, mode="text")
|
183
183
|
|
184
|
-
def set_bytes(self, name: str, content: bytes, content_type: str)
|
184
|
+
def set_bytes(self, name: str, content: bytes, content_type: str):
|
185
185
|
"""
|
186
186
|
Uploads the specified content as a new asset.
|
187
187
|
|
@@ -200,7 +200,7 @@ class Storage:
|
|
200
200
|
except NotFound:
|
201
201
|
self._create_asset(name, content, content_type)
|
202
202
|
|
203
|
-
def _create_asset(self, name: str, content: bytes, content_type: str)
|
203
|
+
def _create_asset(self, name: str, content: bytes, content_type: str):
|
204
204
|
"""
|
205
205
|
Creates a new asset with the specified content.
|
206
206
|
|
@@ -269,7 +269,7 @@ class Storage:
|
|
269
269
|
except Exception as exc:
|
270
270
|
raise AutomizorError("Failed to get asset URL") from exc
|
271
271
|
|
272
|
-
def _update_asset(self, name: str, content: bytes, content_type: str)
|
272
|
+
def _update_asset(self, name: str, content: bytes, content_type: str):
|
273
273
|
"""
|
274
274
|
Updates the specified asset with new content.
|
275
275
|
|
automizor/vault/_container.py
CHANGED
@@ -45,7 +45,7 @@ class SecretContainer:
|
|
45
45
|
"""Secret.keys() -> a set-like object providing a view on secret's keys."""
|
46
46
|
return self.value.keys()
|
47
47
|
|
48
|
-
def update(self, pairs: Dict[str, Any])
|
48
|
+
def update(self, pairs: Dict[str, Any]):
|
49
49
|
"""Update the secret's dictionary with the key-value pairs from pairs."""
|
50
50
|
self.value.update(pairs)
|
51
51
|
|
@@ -1,8 +1,8 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: automizor
|
3
|
-
Version: 0.4.
|
3
|
+
Version: 0.4.1
|
4
4
|
Summary: Python Automizor framework
|
5
|
-
Home-page: https://github.com/automizor/automizor
|
5
|
+
Home-page: https://github.com/automizor/automizor-python
|
6
6
|
Author: Christian Fischer
|
7
7
|
Author-email: christian@automizor.io
|
8
8
|
License: Apache License
|
@@ -0,0 +1,17 @@
|
|
1
|
+
automizor/__init__.py,sha256=FBeN5tbWV0BpBmjJ3d3pzaNRlEg_Blp421Tbg8X3cAI,18
|
2
|
+
automizor/exceptions.py,sha256=P5imySIOtG3ZIk2kh41Yod4RnlgTj7Vf0P3M-RuxQJs,1382
|
3
|
+
automizor/job/__init__.py,sha256=DNRuT6cyPQBaPRG4vNalCmEvcJQl-73b5ZDFOfNOwIg,1019
|
4
|
+
automizor/job/_job.py,sha256=_-ehqPwJdY89mWm3_VAuh7KRJdv-8iUu6iMAzwGLHM0,5235
|
5
|
+
automizor/log/__init__.py,sha256=SVCIoKAQfXMIb99_204dgSqFSHO9T74RXpTZq33akKc,1978
|
6
|
+
automizor/log/_log.py,sha256=CI40pFMhSymeIcBFUoW3zIvYd2WMLDxekNapNIra62M,2651
|
7
|
+
automizor/storage/__init__.py,sha256=bEY2R0Vk0cqscKYNnX-MM222XrxbLXOvOSBDgFmVPLo,3984
|
8
|
+
automizor/storage/_storage.py,sha256=DXcARkFZ3edoDRrDiR02zkO7LmGkRtcKTHmgPsal0lc,10989
|
9
|
+
automizor/utils/__init__.py,sha256=2trRoR5lljYKbYdxmioSlvzajjQM0Wnoq3bvF9lEZ6w,811
|
10
|
+
automizor/vault/__init__.py,sha256=UjRiW3J0R9ABXc1gXIPyS3cqNCwMWxx0l-C0PsIg7R0,1699
|
11
|
+
automizor/vault/_container.py,sha256=-2y7kASigoIVAebuQBk-0R_sI4gfmvjsMLuMg_tR1xA,1945
|
12
|
+
automizor/vault/_vault.py,sha256=uRsjOjzsstZpYwJoHNg_cpv803Dzo4T2oF6hwiG3Eww,4688
|
13
|
+
automizor-0.4.1.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
14
|
+
automizor-0.4.1.dist-info/METADATA,sha256=aEGhSTMMVvV0XGcs2edBG3bhjHl8UAEu1Pe2ecN7EuU,668
|
15
|
+
automizor-0.4.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
16
|
+
automizor-0.4.1.dist-info/top_level.txt,sha256=gScDy4I3tP6BMYAsTAlBXrxVh3E00zV0UioxwXJOI3Y,10
|
17
|
+
automizor-0.4.1.dist-info/RECORD,,
|
automizor-0.4.0.dist-info/RECORD
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
automizor/__init__.py,sha256=yhiWOz0HoJGRRI9-JQ2eh_0AbByy-6psK08-kpTSHJw,18
|
2
|
-
automizor/exceptions.py,sha256=P5imySIOtG3ZIk2kh41Yod4RnlgTj7Vf0P3M-RuxQJs,1382
|
3
|
-
automizor/job/__init__.py,sha256=DNRuT6cyPQBaPRG4vNalCmEvcJQl-73b5ZDFOfNOwIg,1019
|
4
|
-
automizor/job/_job.py,sha256=62T_eMEqsJlxhlQ8_3nupTvvwsEysgx5JZAz7ui1WLo,5245
|
5
|
-
automizor/storage/__init__.py,sha256=DUVVvetBgsrF69mfiM9iu1PvSBjFPLxrgH1o18mvReA,4000
|
6
|
-
automizor/storage/_storage.py,sha256=rKWxaCA_kFr5cW_RrHqL4uEVzNqdWjTQAOXFTfIxlfY,11021
|
7
|
-
automizor/utils/__init__.py,sha256=2trRoR5lljYKbYdxmioSlvzajjQM0Wnoq3bvF9lEZ6w,811
|
8
|
-
automizor/vault/__init__.py,sha256=UjRiW3J0R9ABXc1gXIPyS3cqNCwMWxx0l-C0PsIg7R0,1699
|
9
|
-
automizor/vault/_container.py,sha256=TXwNhjK-qrfu_5iDJm1J0Kkuyq22dLdES1DqjAAKnWA,1953
|
10
|
-
automizor/vault/_vault.py,sha256=uRsjOjzsstZpYwJoHNg_cpv803Dzo4T2oF6hwiG3Eww,4688
|
11
|
-
automizor-0.4.0.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
12
|
-
automizor-0.4.0.dist-info/METADATA,sha256=Ky_rwJrB2JUutCKAYo9Rzkwo_j6UPyQaS8HRORjr6O8,661
|
13
|
-
automizor-0.4.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
14
|
-
automizor-0.4.0.dist-info/top_level.txt,sha256=gScDy4I3tP6BMYAsTAlBXrxVh3E00zV0UioxwXJOI3Y,10
|
15
|
-
automizor-0.4.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|