automizor 0.4.7__py3-none-any.whl → 0.4.9__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.7"
1
+ version = "0.4.9"
@@ -1,16 +1,15 @@
1
- from functools import lru_cache
2
-
3
1
  from ._container import DataStoreContainer
2
+ from ._datastore import DataStore
4
3
 
5
4
 
6
- @lru_cache
7
- def _get_datastore():
8
- from ._datastore import DataStore
9
-
10
- return DataStore()
5
+ def configure(api_token: str):
6
+ """
7
+ Configures the DataStore instance with the provided API token.
8
+ """
9
+ DataStore.configure(api_token)
11
10
 
12
11
 
13
- def get_store(name: str) -> DataStoreContainer:
12
+ def get_store(name: str) -> "DataStoreContainer":
14
13
  """
15
14
  Get a store container by name. The `DataStoreContainer` is a wrapper
16
15
  around the data store that provides a get and set method to interact
@@ -86,8 +85,14 @@ def get_store(name: str) -> DataStoreContainer:
86
85
 
87
86
  """
88
87
 
89
- datastore = _get_datastore()
88
+ datastore = DataStore.get_instance()
90
89
  return DataStoreContainer(
91
90
  datastore=datastore,
92
91
  name=name,
93
92
  )
93
+
94
+
95
+ __all__ = [
96
+ "configure",
97
+ "get_store",
98
+ ]
@@ -1,6 +1,6 @@
1
1
  from dataclasses import dataclass
2
2
 
3
- from ._datastore import JSON, DataStore
3
+ from automizor.utils import JSON
4
4
 
5
5
 
6
6
  @dataclass
@@ -14,6 +14,8 @@ class DataStoreContainer:
14
14
  name: The name of the data store.
15
15
  """
16
16
 
17
+ from ._datastore import DataStore
18
+
17
19
  datastore: DataStore
18
20
  name: str
19
21
 
@@ -1,11 +1,7 @@
1
- from typing import Dict, List, Union
2
-
3
1
  import requests
4
2
 
5
3
  from automizor.exceptions import AutomizorError
6
- from automizor.utils import get_api_config, get_headers
7
-
8
- JSON = Union[str, int, float, bool, None, Dict[str, "JSON"], List["JSON"]]
4
+ from automizor.utils import JSON, get_api_config, get_headers
9
5
 
10
6
 
11
7
  class DataStore:
@@ -24,11 +20,23 @@ class DataStore:
24
20
  session (requests.Session): The HTTP session used to make API requests.
25
21
  """
26
22
 
27
- def __init__(self):
28
- self.url, self.token = get_api_config()
23
+ _instance = None
24
+
25
+ @classmethod
26
+ def configure(cls, api_token: str | None = None):
27
+ cls._instance = cls(api_token)
28
+
29
+ def __init__(self, api_token: str | None = None):
30
+ self.url, self.token = get_api_config(api_token)
29
31
  self.session = requests.Session()
30
32
  self.session.headers.update(get_headers(self.token))
31
33
 
34
+ @classmethod
35
+ def get_instance(cls):
36
+ if cls._instance is None:
37
+ cls.configure()
38
+ return cls._instance
39
+
32
40
  def get_values(
33
41
  self,
34
42
  name: str,
@@ -81,7 +89,7 @@ class DataStore:
81
89
  exc.response, "Failed to get datastore values"
82
90
  ) from exc
83
91
  except Exception as exc:
84
- raise AutomizorError("Failed to get datastore values") from exc
92
+ raise AutomizorError(f"Failed to get datastore values: {exc}") from exc
85
93
 
86
94
  def _set_values(self, name: str, values: JSON) -> None:
87
95
  url = f"https://{self.url}/api/v1/workflow/datastore/{name}/values/"
@@ -93,4 +101,4 @@ class DataStore:
93
101
  exc.response, "Failed to set datastore values"
94
102
  ) from exc
95
103
  except Exception as exc:
96
- raise AutomizorError("Failed to set datastore values") from exc
104
+ raise AutomizorError(f"Failed to set datastore values: {exc}") from exc
automizor/job/__init__.py CHANGED
@@ -1,13 +1,13 @@
1
- from functools import lru_cache
1
+ from automizor.utils import JSON
2
2
 
3
- from ._job import JSON
3
+ from ._job import Job
4
4
 
5
5
 
6
- @lru_cache
7
- def _get_job():
8
- from ._job import Job
9
-
10
- return Job()
6
+ def configure(api_token: str):
7
+ """
8
+ Configures the Job instance with the provided API token.
9
+ """
10
+ Job.configure(api_token)
11
11
 
12
12
 
13
13
  def get_context() -> dict:
@@ -22,7 +22,7 @@ def get_context() -> dict:
22
22
  AutomizorJobError: If retrieving the job context fails.
23
23
  """
24
24
 
25
- job = _get_job()
25
+ job = Job.get_instance()
26
26
  return job.get_context()
27
27
 
28
28
 
@@ -38,11 +38,12 @@ def set_result(name: str, value: JSON):
38
38
  Note: Errors during file operations will raise unhandled exceptions.
39
39
  """
40
40
 
41
- job = _get_job()
41
+ job = Job.get_instance()
42
42
  return job.set_result(name, value)
43
43
 
44
44
 
45
45
  __all__ = [
46
+ "configure",
46
47
  "get_context",
47
48
  "set_result",
48
49
  ]
automizor/job/_job.py CHANGED
@@ -1,13 +1,10 @@
1
1
  import json
2
2
  import os
3
- from typing import Dict, List, Union
4
3
 
5
4
  import requests
6
5
 
7
6
  from automizor.exceptions import AutomizorError
8
- from automizor.utils import get_api_config, get_headers
9
-
10
- JSON = Union[str, int, float, bool, None, Dict[str, "JSON"], List["JSON"]]
7
+ from automizor.utils import JSON, get_api_config, get_headers
11
8
 
12
9
 
13
10
  class Job:
@@ -49,14 +46,26 @@ class Job:
49
46
  job.set_result("result_name", {"key": "value"})
50
47
  """
51
48
 
52
- def __init__(self):
49
+ _instance = None
50
+
51
+ @classmethod
52
+ def configure(cls, api_token: str | None = None):
53
+ cls._instance = cls(api_token)
54
+
55
+ def __init__(self, api_token: str | None = None):
53
56
  self._context_file = os.getenv("AUTOMIZOR_CONTEXT_FILE", None)
54
57
  self._job_id = os.getenv("AUTOMIZOR_JOB_ID", None)
55
58
 
56
- self.url, self.token = get_api_config()
59
+ self.url, self.token = get_api_config(api_token)
57
60
  self.session = requests.Session()
58
61
  self.session.headers.update(get_headers(self.token))
59
62
 
63
+ @classmethod
64
+ def get_instance(cls):
65
+ if cls._instance is None:
66
+ cls.configure()
67
+ return cls._instance
68
+
60
69
  def get_context(self) -> dict:
61
70
  """
62
71
  Retrieves the context of the current job, which contains necessary information
@@ -128,4 +137,4 @@ class Job:
128
137
  exc.response, "Failed to get job context"
129
138
  ) from exc
130
139
  except Exception as exc:
131
- raise AutomizorError("Failed to get job context") from exc
140
+ raise AutomizorError(f"Failed to get job context: {exc}") from exc
@@ -1,17 +1,18 @@
1
1
  import json
2
2
  import mimetypes
3
- from functools import lru_cache
4
3
  from pathlib import Path
5
4
  from typing import List
6
5
 
7
- from ._storage import JSON
6
+ from automizor.utils import JSON
8
7
 
8
+ from ._storage import Storage
9
9
 
10
- @lru_cache
11
- def _get_storage():
12
- from ._storage import Storage
13
10
 
14
- return Storage()
11
+ def configure(api_token: str):
12
+ """
13
+ Configures the Storage instance with the provided API token.
14
+ """
15
+ Storage.configure(api_token)
15
16
 
16
17
 
17
18
  def list_assets() -> List[str]:
@@ -22,7 +23,7 @@ def list_assets() -> List[str]:
22
23
  A list of all asset names.
23
24
  """
24
25
 
25
- storage = _get_storage()
26
+ storage = Storage.get_instance()
26
27
  return storage.list_assets()
27
28
 
28
29
 
@@ -34,7 +35,7 @@ def delete_asset(name: str):
34
35
  name: The name identifier of the asset to delete.
35
36
  """
36
37
 
37
- storage = _get_storage()
38
+ storage = Storage.get_instance()
38
39
  storage.delete_asset(name)
39
40
 
40
41
 
@@ -49,7 +50,7 @@ def get_bytes(name: str) -> bytes:
49
50
  The raw byte content of the asset.
50
51
  """
51
52
 
52
- storage = _get_storage()
53
+ storage = Storage.get_instance()
53
54
  return storage.get_bytes(name)
54
55
 
55
56
 
@@ -65,7 +66,7 @@ def get_file(name: str, path: str) -> str:
65
66
  The path to the saved file, confirming the operation's success.
66
67
  """
67
68
 
68
- storage = _get_storage()
69
+ storage = Storage.get_instance()
69
70
  return storage.get_file(name, path)
70
71
 
71
72
 
@@ -80,7 +81,7 @@ def get_json(name: str) -> JSON:
80
81
  The parsed JSON data, which can be a dict, list, or primitive data type.
81
82
  """
82
83
 
83
- storage = _get_storage()
84
+ storage = Storage.get_instance()
84
85
  return storage.get_json(name)
85
86
 
86
87
 
@@ -95,7 +96,7 @@ def get_text(name: str) -> str:
95
96
  The content of the asset as a text string.
96
97
  """
97
98
 
98
- storage = _get_storage()
99
+ storage = Storage.get_instance()
99
100
  return storage.get_text(name)
100
101
 
101
102
 
@@ -109,7 +110,7 @@ def set_bytes(name: str, data: bytes, content_type="application/octet-stream"):
109
110
  content_type: The MIME type of the asset.
110
111
  """
111
112
 
112
- storage = _get_storage()
113
+ storage = Storage.get_instance()
113
114
  storage.set_bytes(name, data, content_type)
114
115
 
115
116
 
@@ -124,12 +125,12 @@ def set_file(name: str, path: str, content_type: str = None):
124
125
  """
125
126
 
126
127
  content = Path(path).read_bytes()
127
- if content_type is None:
128
+ if not content_type:
128
129
  content_type, _ = mimetypes.guess_type(path)
129
130
  if content_type is None:
130
131
  content_type = "application/octet-stream"
131
132
 
132
- storage = _get_storage()
133
+ storage = Storage.get_instance()
133
134
  storage.set_bytes(name, content, content_type)
134
135
 
135
136
 
@@ -146,7 +147,7 @@ def set_json(name: str, value: JSON, **kwargs):
146
147
  content = json.dumps(value, **kwargs).encode("utf-8")
147
148
  content_type = "application/json"
148
149
 
149
- storage = _get_storage()
150
+ storage = Storage.get_instance()
150
151
  storage.set_bytes(name, content, content_type)
151
152
 
152
153
 
@@ -162,11 +163,12 @@ def set_text(name: str, text: str):
162
163
  content = text.encode("utf-8")
163
164
  content_type = "text/plain"
164
165
 
165
- storage = _get_storage()
166
+ storage = Storage.get_instance()
166
167
  storage.set_bytes(name, content, content_type)
167
168
 
168
169
 
169
170
  __all__ = [
171
+ "configure",
170
172
  "list_assets",
171
173
  "delete_asset",
172
174
  "get_bytes",
@@ -1,11 +1,9 @@
1
- from typing import Dict, List, Union
1
+ from typing import List
2
2
 
3
3
  import requests
4
4
 
5
5
  from automizor.exceptions import AutomizorError, NotFound
6
- from automizor.utils import get_api_config, get_headers
7
-
8
- JSON = Union[str, int, float, bool, None, Dict[str, "JSON"], List["JSON"]]
6
+ from automizor.utils import JSON, get_api_config, get_headers
9
7
 
10
8
 
11
9
  class Storage:
@@ -50,11 +48,23 @@ class Storage:
50
48
  text_data = storage.get_text("AssetName")
51
49
  """
52
50
 
53
- def __init__(self):
54
- self.url, self.token = get_api_config()
51
+ _instance = None
52
+
53
+ @classmethod
54
+ def configure(cls, api_token: str | None = None):
55
+ cls._instance = cls(api_token)
56
+
57
+ def __init__(self, api_token: str | None = None):
58
+ self.url, self.token = get_api_config(api_token)
55
59
  self.session = requests.Session()
56
60
  self.session.headers.update(get_headers(self.token))
57
61
 
62
+ @classmethod
63
+ def get_instance(cls):
64
+ if cls._instance is None:
65
+ cls.configure()
66
+ return cls._instance
67
+
58
68
  def list_assets(self) -> List[str]:
59
69
  """
60
70
  Retrieves a list of all asset names.
@@ -82,7 +92,7 @@ class Storage:
82
92
  exc.response, "Failed to list assets"
83
93
  ) from exc
84
94
  except Exception as exc:
85
- raise AutomizorError("Failed to list assets") from exc
95
+ raise AutomizorError(f"Failed to list assets: {exc}") from exc
86
96
  return asset_names
87
97
 
88
98
  def delete_asset(self, name: str):
@@ -106,7 +116,7 @@ class Storage:
106
116
  exc.response, "Failed to delete asset"
107
117
  ) from exc
108
118
  except Exception as exc:
109
- raise AutomizorError("Failed to delete asset") from exc
119
+ raise AutomizorError(f"Failed to delete asset: {exc}") from exc
110
120
 
111
121
  def get_bytes(self, name: str) -> bytes:
112
122
  """
@@ -228,7 +238,7 @@ class Storage:
228
238
  exc.response, "Failed to create asset"
229
239
  ) from exc
230
240
  except Exception as exc:
231
- raise AutomizorError("Failed to create asset") from exc
241
+ raise AutomizorError(f"Failed to create asset: {exc}") from exc
232
242
 
233
243
  def _download_file(self, name: str, mode: str = "content"):
234
244
  url = self._get_asset_url(name)
@@ -250,7 +260,7 @@ class Storage:
250
260
  exc.response, "Failed to download asset"
251
261
  ) from exc
252
262
  except Exception as exc:
253
- raise AutomizorError("Failed to download asset") from exc
263
+ raise AutomizorError(f"Failed to download asset: {exc}") from exc
254
264
 
255
265
  def _get_asset_url(self, name: str) -> str:
256
266
  url = f"https://{self.url}/api/v1/storage/asset/{name}/"
@@ -267,7 +277,7 @@ class Storage:
267
277
  exc.response, "Failed to get asset URL"
268
278
  ) from exc
269
279
  except Exception as exc:
270
- raise AutomizorError("Failed to get asset URL") from exc
280
+ raise AutomizorError(f"Failed to get asset URL: {exc}") from exc
271
281
 
272
282
  def _update_asset(self, name: str, content: bytes, content_type: str):
273
283
  """
@@ -297,4 +307,4 @@ class Storage:
297
307
  exc.response, "Failed to update asset"
298
308
  ) from exc
299
309
  except Exception as exc:
300
- raise AutomizorError("Failed to update asset") from exc
310
+ raise AutomizorError(f"Failed to update asset: {exc}") from exc
@@ -1,26 +1,29 @@
1
1
  import os
2
2
  import platform
3
+ from typing import Dict, List, Union
3
4
 
4
5
  from automizor import version
5
6
  from automizor.exceptions import AutomizorError
6
7
 
8
+ JSON = Union[str, int, float, bool, None, Dict[str, "JSON"], List["JSON"]]
9
+
10
+
7
11
  OS_SYSTEM, OS_RELEASE, _ = platform.system_alias(
8
12
  platform.system(), platform.release(), platform.version()
9
13
  )
10
14
 
11
15
 
12
- def get_api_config() -> tuple[str, str]:
13
- token_string = os.getenv("AUTOMIZOR_AGENT_TOKEN")
16
+ def get_api_config(api_token: str | None = None) -> tuple[str, str]:
17
+ if api_token is None:
18
+ api_token = os.getenv("AUTOMIZOR_AGENT_TOKEN")
14
19
 
15
- if not token_string:
16
- raise AutomizorError("AUTOMIZOR_AGENT_TOKEN is not set.")
20
+ if not api_token:
21
+ raise AutomizorError("AUTOMIZOR_AGENT_TOKEN is not set.")
17
22
 
18
23
  try:
19
- token, url = token_string.strip().split("@")
24
+ token, url = api_token.strip().split("@")
20
25
  except ValueError as exc:
21
- raise AutomizorError(
22
- "AUTOMIZOR_AGENT_TOKEN is not in the correct format."
23
- ) from exc
26
+ raise AutomizorError("The API token is not in the correct format.") from exc
24
27
  return url, token
25
28
 
26
29
 
@@ -1,14 +1,14 @@
1
- from functools import lru_cache
2
1
  from typing import Any, Dict
3
2
 
4
3
  from ._container import SecretContainer
4
+ from ._vault import Vault
5
5
 
6
6
 
7
- @lru_cache
8
- def _get_vault():
9
- from ._vault import Vault
10
-
11
- return Vault()
7
+ def configure(api_token: str):
8
+ """
9
+ Configures the Vault instance with the provided API token.
10
+ """
11
+ Vault.configure(api_token)
12
12
 
13
13
 
14
14
  def create_secret(
@@ -38,7 +38,7 @@ def create_secret(
38
38
  value=value,
39
39
  )
40
40
 
41
- vault = _get_vault()
41
+ vault = Vault.get_instance()
42
42
  return vault.create_secret(secret)
43
43
 
44
44
 
@@ -56,7 +56,7 @@ def get_secret(name: str) -> SecretContainer:
56
56
  AutomizorVaultError: If retrieving the secret fails.
57
57
  """
58
58
 
59
- vault = _get_vault()
59
+ vault = Vault.get_instance()
60
60
  return vault.get_secret(name)
61
61
 
62
62
 
@@ -74,12 +74,13 @@ def set_secret(secret: SecretContainer) -> SecretContainer:
74
74
  AutomizorVaultError: If updating the secret fails.
75
75
  """
76
76
 
77
- vault = _get_vault()
77
+ vault = Vault.get_instance()
78
78
  return vault.set_secret(secret)
79
79
 
80
80
 
81
81
  __all__ = [
82
82
  "SecretContainer",
83
+ "configure",
83
84
  "create_secret",
84
85
  "get_secret",
85
86
  "set_secret",
automizor/vault/_vault.py CHANGED
@@ -42,11 +42,23 @@ class Vault:
42
42
  vault.set_secret(secret)
43
43
  """
44
44
 
45
- def __init__(self):
46
- self.url, self.token = get_api_config()
45
+ _instance = None
46
+
47
+ @classmethod
48
+ def configure(cls, api_token: str | None = None):
49
+ cls._instance = cls(api_token)
50
+
51
+ def __init__(self, api_token: str | None = None):
52
+ self.url, self.token = get_api_config(api_token)
47
53
  self.session = requests.Session()
48
54
  self.session.headers.update(get_headers(self.token))
49
55
 
56
+ @classmethod
57
+ def get_instance(cls):
58
+ if cls._instance is None:
59
+ cls.configure()
60
+ return cls._instance
61
+
50
62
  def create_secret(self, secret: SecretContainer) -> SecretContainer:
51
63
  """
52
64
  Creates a new secret. Stores the secret in the `Automizor API`.
@@ -110,7 +122,7 @@ class Vault:
110
122
  exc.response, "Failed to create secret"
111
123
  ) from exc
112
124
  except Exception as exc:
113
- raise AutomizorError("Failed to create secret") from exc
125
+ raise AutomizorError(f"Failed to create secret: {exc}") from exc
114
126
 
115
127
  def _get_secret(self, name: str) -> SecretContainer:
116
128
  url = f"https://{self.url}/api/v1/vault/secret/{name}/"
@@ -123,7 +135,7 @@ class Vault:
123
135
  exc.response, "Failed to get secret"
124
136
  ) from exc
125
137
  except Exception as exc:
126
- raise AutomizorError("Failed to get secret") from exc
138
+ raise AutomizorError(f"Failed to get secret: {exc}") from exc
127
139
 
128
140
  def _update_secret(self, secret: SecretContainer) -> SecretContainer:
129
141
  url = f"https://{self.url}/api/v1/vault/secret/{secret.name}/"
@@ -136,4 +148,4 @@ class Vault:
136
148
  exc.response, "Failed to update secret"
137
149
  ) from exc
138
150
  except Exception as exc:
139
- raise AutomizorError("Failed to update secret") from exc
151
+ raise AutomizorError(f"Failed to update secret: {exc}") from exc
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: automizor
3
- Version: 0.4.7
3
+ Version: 0.4.9
4
4
  Summary: Python Automizor framework
5
5
  Home-page: https://github.com/automizor/automizor-python
6
6
  Author: Christian Fischer
@@ -0,0 +1,20 @@
1
+ automizor/__init__.py,sha256=ElLL68L1maenU2D5V6AoUj5l5Opu9EHBBw3V9qIFxV4,18
2
+ automizor/exceptions.py,sha256=P5imySIOtG3ZIk2kh41Yod4RnlgTj7Vf0P3M-RuxQJs,1382
3
+ automizor/datastore/__init__.py,sha256=_rAdRfKnTa4SuSLl9GkAYziBPPLsy6yGfS0HprgokOk,2418
4
+ automizor/datastore/_container.py,sha256=rHRkSWaRgy2rk6Qy-7ADFKvuET_COZ2i9VD7gvRDnlM,745
5
+ automizor/datastore/_datastore.py,sha256=EW8AnZPvr32Yz3bC6SxadRgihY7_G-XcwSfLV5CMzMg,3552
6
+ automizor/job/__init__.py,sha256=pDqSfR4lAyJNCi-fpG6byUPidHz8sntBs0bB2lJFVAY,1118
7
+ automizor/job/_job.py,sha256=oVv7utlpaIPVBSnBXcV9jf7B3UNsWCDLtPkw0m3IJio,5444
8
+ automizor/log/__init__.py,sha256=gEr2SuwN1FgX1NMnbphjg8_gfSic9L15H3WC868A-TQ,2104
9
+ automizor/log/_log.py,sha256=P9jAFXVANs5bAGH6-S0pzuSbRKEcX8VlQ_3uu690awE,2948
10
+ automizor/storage/__init__.py,sha256=RF4ccSAd0UepvJx5NFiotKt9mVr5WiZCb_4qrJ5OKx0,4140
11
+ automizor/storage/_storage.py,sha256=ah8sCpRQm0MOnZgOgiBQF1Oamq_mz1VWrV17z6XOuFw,11262
12
+ automizor/utils/__init__.py,sha256=W0JNrn7GByjJXi60djS6vluo__Tj6AyJioqu9D41tto,952
13
+ automizor/vault/__init__.py,sha256=21Ag2zQk7x27Bh0yt_kSO2MkgT3eafbdlKe0NuQEqr8,1796
14
+ automizor/vault/_container.py,sha256=-2y7kASigoIVAebuQBk-0R_sI4gfmvjsMLuMg_tR1xA,1945
15
+ automizor/vault/_vault.py,sha256=-Xi_xMQLRB9patFTiZ4Z817F9VEvhIvx-YOOH8z_BKc,5020
16
+ automizor-0.4.9.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
17
+ automizor-0.4.9.dist-info/METADATA,sha256=uNVJ3mjxM7iZZRRzbzTCdCE6FlUYdkXiNqLCJZZSG_c,668
18
+ automizor-0.4.9.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
19
+ automizor-0.4.9.dist-info/top_level.txt,sha256=gScDy4I3tP6BMYAsTAlBXrxVh3E00zV0UioxwXJOI3Y,10
20
+ automizor-0.4.9.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: setuptools (75.2.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,20 +0,0 @@
1
- automizor/__init__.py,sha256=m3H0nxC6dWftoBK74_V3kjhpRmKkLX6wTCtSlFvMbjI,18
2
- automizor/exceptions.py,sha256=P5imySIOtG3ZIk2kh41Yod4RnlgTj7Vf0P3M-RuxQJs,1382
3
- automizor/datastore/__init__.py,sha256=NA7gJ9qFoBQYNKWHzwPqzEMwo4u0ysXlVRczmzY27BI,2303
4
- automizor/datastore/_container.py,sha256=2WOthNSshwsRc_3vujcr8D1dK1sTfZvOBbLUTQEBYI0,713
5
- automizor/datastore/_datastore.py,sha256=4HkNsctxfat64d05EWqweqjZPtUMjvG92SbRyvXIYLc,3336
6
- automizor/job/__init__.py,sha256=DNRuT6cyPQBaPRG4vNalCmEvcJQl-73b5ZDFOfNOwIg,1019
7
- automizor/job/_job.py,sha256=_-ehqPwJdY89mWm3_VAuh7KRJdv-8iUu6iMAzwGLHM0,5235
8
- automizor/log/__init__.py,sha256=gEr2SuwN1FgX1NMnbphjg8_gfSic9L15H3WC868A-TQ,2104
9
- automizor/log/_log.py,sha256=P9jAFXVANs5bAGH6-S0pzuSbRKEcX8VlQ_3uu690awE,2948
10
- automizor/storage/__init__.py,sha256=bEY2R0Vk0cqscKYNnX-MM222XrxbLXOvOSBDgFmVPLo,3984
11
- automizor/storage/_storage.py,sha256=DXcARkFZ3edoDRrDiR02zkO7LmGkRtcKTHmgPsal0lc,10989
12
- automizor/utils/__init__.py,sha256=2trRoR5lljYKbYdxmioSlvzajjQM0Wnoq3bvF9lEZ6w,811
13
- automizor/vault/__init__.py,sha256=UjRiW3J0R9ABXc1gXIPyS3cqNCwMWxx0l-C0PsIg7R0,1699
14
- automizor/vault/_container.py,sha256=-2y7kASigoIVAebuQBk-0R_sI4gfmvjsMLuMg_tR1xA,1945
15
- automizor/vault/_vault.py,sha256=uRsjOjzsstZpYwJoHNg_cpv803Dzo4T2oF6hwiG3Eww,4688
16
- automizor-0.4.7.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
17
- automizor-0.4.7.dist-info/METADATA,sha256=htYUcD3zFZeSVoC-AsbOdQGJNv8warmJijBy2YxWMoU,668
18
- automizor-0.4.7.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
19
- automizor-0.4.7.dist-info/top_level.txt,sha256=gScDy4I3tP6BMYAsTAlBXrxVh3E00zV0UioxwXJOI3Y,10
20
- automizor-0.4.7.dist-info/RECORD,,