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 CHANGED
@@ -1 +1 @@
1
- version = "0.4.0"
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, indent=4)
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)
@@ -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() -> list[str]:
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) -> None:
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") -> None:
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) -> 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) -> None:
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) -> None:
153
+ def set_text(name: str, text: str):
153
154
  """
154
155
  Uploads text content as an asset.
155
156
 
@@ -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) -> None:
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) -> None:
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) -> None:
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) -> None:
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
 
@@ -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]) -> None:
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.0
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,,
@@ -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,,