automizor 0.4.16__py3-none-any.whl → 0.4.17__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,18 @@
1
- version = "0.4.16"
1
+ import requests
2
+ from requests.adapters import HTTPAdapter
3
+ from urllib3.util.retry import Retry
4
+
5
+ retry_strategy = Retry(
6
+ total=6,
7
+ backoff_factor=1,
8
+ status_forcelist=[429, 500, 502, 503, 504, 520, 521, 522, 523, 524],
9
+ allowed_methods=["GET", "POST", "PUT", "DELETE", "HEAD", "OPTIONS"],
10
+ raise_on_status=False,
11
+ )
12
+
13
+ adapter = HTTPAdapter(max_retries=retry_strategy)
14
+ session = requests.Session()
15
+ session.mount("https://", adapter)
16
+ session.mount("http://", adapter)
17
+
18
+ version = "0.4.17"
@@ -1,7 +1,6 @@
1
1
  from typing import Optional
2
2
 
3
- import requests
4
-
3
+ from automizor import session
5
4
  from automizor.exceptions import AutomizorError
6
5
  from automizor.utils import JSON, get_api_config, get_headers
7
6
 
@@ -79,13 +78,7 @@ class Action:
79
78
  AutomizorError: If there is an error executing the action.
80
79
  """
81
80
  url = f"https://{self.url}/api/v2/action/{name}/execute?workspace={workspace}"
82
- try:
83
- response = requests.put(url, headers=self.headers, data=payload, timeout=90)
84
- response.raise_for_status()
85
- return response.json()
86
- except requests.HTTPError as exc:
87
- raise AutomizorError.from_response(
88
- exc.response, "Failed to execute action"
89
- ) from exc
90
- except Exception as exc:
91
- raise AutomizorError(f"Failed to execute action: {exc}") from exc
81
+ response = session.put(url, headers=self.headers, data=payload, timeout=90)
82
+ if response.status_code >= 400:
83
+ raise AutomizorError.from_response(response, "Failed to execute action")
84
+ return response.json()
@@ -1,7 +1,6 @@
1
1
  from typing import Optional
2
2
 
3
- import requests
4
-
3
+ from automizor import session
5
4
  from automizor.exceptions import AutomizorError
6
5
  from automizor.utils import JSON, get_api_config, get_headers
7
6
 
@@ -76,27 +75,18 @@ class DataStore:
76
75
  else {}
77
76
  )
78
77
  url = f"https://{self.url}/api/v1/workflow/datastore/{name}/values/"
79
- try:
80
- response = requests.get(
81
- url, headers=self.headers, params=params, timeout=10
82
- )
83
- response.raise_for_status()
84
- return response.json()
85
- except requests.HTTPError as exc:
78
+ response = session.get(url, headers=self.headers, params=params, timeout=10)
79
+ if response.status_code >= 400:
86
80
  raise AutomizorError.from_response(
87
- exc.response, "Failed to get datastore values"
88
- ) from exc
89
- except Exception as exc:
90
- raise AutomizorError(f"Failed to get datastore values: {exc}") from exc
81
+ response, "Failed to get datastore values"
82
+ )
83
+
84
+ return response.json()
91
85
 
92
86
  def _set_values(self, name: str, values: JSON) -> None:
93
87
  url = f"https://{self.url}/api/v1/workflow/datastore/{name}/values/"
94
- try:
95
- response = requests.post(url, headers=self.headers, json=values, timeout=10)
96
- response.raise_for_status()
97
- except requests.HTTPError as exc:
88
+ response = session.post(url, headers=self.headers, json=values, timeout=10)
89
+ if response.status_code >= 400:
98
90
  raise AutomizorError.from_response(
99
- exc.response, "Failed to set datastore values"
100
- ) from exc
101
- except Exception as exc:
102
- raise AutomizorError(f"Failed to set datastore values: {exc}") from exc
91
+ response, "Failed to set datastore values"
92
+ )
automizor/exceptions.py CHANGED
@@ -2,13 +2,18 @@ from requests import Response
2
2
 
3
3
 
4
4
  class AutomizorError(Exception):
5
- def __init__(self, message, error=None):
6
- if error:
7
- message = f"{message}: {error}"
5
+ def __init__(self, message: str, *, status_code=None, url=None):
6
+ self.status_code = status_code
7
+ self.url = url
8
8
  super().__init__(message)
9
9
 
10
10
  def __str__(self):
11
- return f"{self.args[0]}"
11
+ base = f"{self.args[0]}"
12
+ if self.status_code:
13
+ base += f" (status {self.status_code})"
14
+ if self.url:
15
+ base += f" → {self.url}"
16
+ return base
12
17
 
13
18
  @classmethod
14
19
  def from_response(cls, response: Response, message: str):
@@ -21,15 +26,23 @@ class AutomizorError(Exception):
21
26
  500: InternalServerError,
22
27
  502: BadGateway,
23
28
  503: ServiceUnavailable,
29
+ 504: GatewayTimeout,
30
+ 520: OriginError,
31
+ 521: OriginDown,
32
+ 522: ConnectionTimedOut,
33
+ 523: OriginUnreachable,
34
+ 524: TimeoutOccurred,
35
+ 525: SSLHandshakeFailed,
36
+ 526: InvalidSSLCertificate,
37
+ 530: OriginDNSError,
24
38
  }
25
39
 
26
- try:
27
- error = dict(response.json()).get("detail", "Unknown error.")
28
- except Exception: # pylint: disable=broad-except
29
- error = response.text
40
+ exc_class = _STATUS_EXCEPTION_MAP.get(response.status_code, UnexpectedError)
30
41
 
31
- return _STATUS_EXCEPTION_MAP.get(response.status_code, UnexpectedError)(
32
- message, error
42
+ return exc_class(
43
+ message,
44
+ status_code=response.status_code,
45
+ url=response.url,
33
46
  )
34
47
 
35
48
 
@@ -37,10 +50,18 @@ class BadGateway(AutomizorError):
37
50
  pass
38
51
 
39
52
 
53
+ class ConnectionTimedOut(AutomizorError):
54
+ pass
55
+
56
+
40
57
  class Forbidden(AutomizorError):
41
58
  pass
42
59
 
43
60
 
61
+ class GatewayTimeout(AutomizorError):
62
+ pass
63
+
64
+
44
65
  class InternalServerError(AutomizorError):
45
66
  pass
46
67
 
@@ -49,18 +70,46 @@ class InvalidRequest(AutomizorError):
49
70
  pass
50
71
 
51
72
 
73
+ class InvalidSSLCertificate(AutomizorError):
74
+ pass
75
+
76
+
52
77
  class NotFound(AutomizorError):
53
78
  pass
54
79
 
55
80
 
81
+ class OriginDNSError(AutomizorError):
82
+ pass
83
+
84
+
85
+ class OriginDown(AutomizorError):
86
+ pass
87
+
88
+
89
+ class OriginError(AutomizorError):
90
+ pass
91
+
92
+
93
+ class OriginUnreachable(AutomizorError):
94
+ pass
95
+
96
+
56
97
  class RateLimitExceeded(AutomizorError):
57
98
  pass
58
99
 
59
100
 
101
+ class SSLHandshakeFailed(AutomizorError):
102
+ pass
103
+
104
+
60
105
  class ServiceUnavailable(AutomizorError):
61
106
  pass
62
107
 
63
108
 
109
+ class TimeoutOccurred(AutomizorError):
110
+ pass
111
+
112
+
64
113
  class Unauthorized(AutomizorError):
65
114
  pass
66
115
 
automizor/job/_job.py CHANGED
@@ -2,8 +2,7 @@ import json
2
2
  import os
3
3
  from typing import Optional
4
4
 
5
- import requests
6
-
5
+ from automizor import session
7
6
  from automizor.exceptions import AutomizorError
8
7
  from automizor.utils import JSON, get_api_config, get_headers
9
8
 
@@ -128,13 +127,7 @@ class Job:
128
127
 
129
128
  def _read_job_context(self) -> dict:
130
129
  url = f"https://{self.url}/api/v1/rpa/job/{self._job_id}/"
131
- try:
132
- response = requests.get(url, headers=self.headers, timeout=10)
133
- response.raise_for_status()
134
- return response.json().get("context", {})
135
- except requests.HTTPError as exc:
136
- raise AutomizorError.from_response(
137
- exc.response, "Failed to get job context"
138
- ) from exc
139
- except Exception as exc:
140
- raise AutomizorError(f"Failed to get job context: {exc}") from exc
130
+ response = session.get(url, headers=self.headers, timeout=10)
131
+ if response.status_code >= 400:
132
+ raise AutomizorError.from_response(response, "Failed to get job context")
133
+ return response.json().get("context", {})
@@ -1,7 +1,6 @@
1
1
  from typing import List, Optional
2
2
 
3
- import requests
4
-
3
+ from automizor import session
5
4
  from automizor.exceptions import AutomizorError, NotFound
6
5
  from automizor.utils import JSON, get_api_config, get_headers
7
6
 
@@ -77,21 +76,15 @@ class Storage:
77
76
  url = f"https://{self.url}/api/v1/storage/asset/"
78
77
  asset_names = []
79
78
 
80
- try:
81
- while url:
82
- response = requests.get(url, headers=self.headers, timeout=10)
83
- response.raise_for_status()
84
- data = response.json()
85
-
86
- for asset in data["results"]:
87
- asset_names.append(asset["name"])
88
- url = data["next"]
89
- except requests.HTTPError as exc:
90
- raise AutomizorError.from_response(
91
- exc.response, "Failed to list assets"
92
- ) from exc
93
- except Exception as exc:
94
- raise AutomizorError(f"Failed to list assets: {exc}") from exc
79
+ while url:
80
+ response = session.get(url, headers=self.headers, timeout=10)
81
+ if response.status_code >= 400:
82
+ raise AutomizorError.from_response(response, "Failed to list assets")
83
+ data = response.json()
84
+
85
+ for asset in data["results"]:
86
+ asset_names.append(asset["name"])
87
+ url = data["next"]
95
88
  return asset_names
96
89
 
97
90
  def delete_asset(self, name: str):
@@ -107,15 +100,9 @@ class Storage:
107
100
  """
108
101
 
109
102
  url = f"https://{self.url}/api/v1/storage/asset/{name}/"
110
- try:
111
- response = requests.delete(url, headers=self.headers, timeout=10)
112
- response.raise_for_status()
113
- except requests.HTTPError as exc:
114
- raise AutomizorError.from_response(
115
- exc.response, "Failed to delete asset"
116
- ) from exc
117
- except Exception as exc:
118
- raise AutomizorError(f"Failed to delete asset: {exc}") from exc
103
+ response = session.delete(url, headers=self.headers, timeout=10)
104
+ if response.status_code >= 400:
105
+ raise AutomizorError.from_response(response, "Failed to delete asset")
119
106
 
120
107
  def get_bytes(self, name: str) -> bytes:
121
108
  """
@@ -224,61 +211,39 @@ class Storage:
224
211
  """
225
212
 
226
213
  url = f"https://{self.url}/api/v1/storage/asset/"
227
- try:
228
- data = {
229
- "content_type": content_type,
230
- "name": name,
231
- }
232
- files = {"file": ("text.txt", content, content_type)}
233
- response = requests.post(
234
- url, headers=self.headers, files=files, data=data, timeout=10
235
- )
236
- response.raise_for_status()
237
- except requests.HTTPError as exc:
238
- raise AutomizorError.from_response(
239
- exc.response, "Failed to create asset"
240
- ) from exc
241
- except Exception as exc:
242
- raise AutomizorError(f"Failed to create asset: {exc}") from exc
214
+ data = {"content_type": content_type, "name": name}
215
+ files = {"file": ("text.txt", content, content_type)}
216
+ response = session.post(
217
+ url, headers=self.headers, files=files, data=data, timeout=10
218
+ )
219
+ if response.status_code >= 400:
220
+ raise AutomizorError.from_response(response, "Failed to create asset")
243
221
 
244
222
  def _download_file(self, name: str, mode: str = "content"):
245
223
  url = self._get_asset_url(name)
246
-
247
- try:
248
- response = requests.get(url=url, timeout=10)
249
- response.raise_for_status()
250
-
251
- match mode:
252
- case "content":
253
- return response.content
254
- case "json":
255
- return response.json()
256
- case "text":
257
- return response.text
258
- raise RuntimeError(f"Invalid mode {mode}")
259
- except requests.HTTPError as exc:
260
- raise AutomizorError.from_response(
261
- exc.response, "Failed to download asset"
262
- ) from exc
263
- except Exception as exc:
264
- raise AutomizorError(f"Failed to download asset: {exc}") from exc
224
+ response = session.get(url=url, timeout=10)
225
+ if response.status_code >= 400:
226
+ raise AutomizorError.from_response(response, "Failed to download asset")
227
+
228
+ match mode:
229
+ case "content":
230
+ return response.content
231
+ case "json":
232
+ return response.json()
233
+ case "text":
234
+ return response.text
235
+ raise RuntimeError(f"Invalid mode {mode}")
265
236
 
266
237
  def _get_asset_url(self, name: str) -> str:
267
238
  url = f"https://{self.url}/api/v1/storage/asset/{name}/"
268
- try:
269
- response = requests.get(url, headers=self.headers, timeout=10)
270
- response.raise_for_status()
271
-
272
- url = response.json().get("file")
273
- if url:
274
- return url
275
- raise RuntimeError("Url not found")
276
- except requests.HTTPError as exc:
277
- raise AutomizorError.from_response(
278
- exc.response, "Failed to get asset URL"
279
- ) from exc
280
- except Exception as exc:
281
- raise AutomizorError(f"Failed to get asset URL: {exc}") from exc
239
+ response = session.get(url, headers=self.headers, timeout=10)
240
+ if response.status_code >= 400:
241
+ raise AutomizorError.from_response(response, "Failed to get asset URL")
242
+
243
+ url = response.json().get("file")
244
+ if url:
245
+ return url
246
+ raise RuntimeError("Url not found")
282
247
 
283
248
  def _update_asset(self, name: str, content: bytes, content_type: str):
284
249
  """
@@ -295,19 +260,10 @@ class Storage:
295
260
  """
296
261
 
297
262
  url = f"https://{self.url}/api/v1/storage/asset/{name}/"
298
- try:
299
- data = {
300
- "content_type": content_type,
301
- "name": name,
302
- }
303
- files = {"file": ("text.txt", content, content_type)}
304
- response = requests.put(
305
- url, headers=self.headers, files=files, data=data, timeout=10
306
- )
307
- response.raise_for_status()
308
- except requests.HTTPError as exc:
309
- raise AutomizorError.from_response(
310
- exc.response, "Failed to update asset"
311
- ) from exc
312
- except Exception as exc:
313
- raise AutomizorError(f"Failed to update asset: {exc}") from exc
263
+ data = {"content_type": content_type, "name": name}
264
+ files = {"file": ("text.txt", content, content_type)}
265
+ response = session.put(
266
+ url, headers=self.headers, files=files, data=data, timeout=10
267
+ )
268
+ if response.status_code >= 400:
269
+ raise AutomizorError.from_response(response, "Failed to update asset")
automizor/vault/_vault.py CHANGED
@@ -1,8 +1,7 @@
1
1
  from dataclasses import asdict
2
2
  from typing import Optional
3
3
 
4
- import requests
5
-
4
+ from automizor import session
6
5
  from automizor.exceptions import AutomizorError, NotFound
7
6
  from automizor.utils import get_api_config, get_headers
8
7
 
@@ -113,43 +112,25 @@ class Vault:
113
112
 
114
113
  def _create_secret(self, secret: SecretContainer) -> SecretContainer:
115
114
  url = f"https://{self.url}/api/v1/vault/secret/"
116
- try:
117
- response = requests.post(
118
- url, headers=self.headers, timeout=10, json=asdict(secret)
119
- )
120
- response.raise_for_status()
121
- return SecretContainer(**response.json())
122
- except requests.HTTPError as exc:
123
- raise AutomizorError.from_response(
124
- exc.response, "Failed to create secret"
125
- ) from exc
126
- except Exception as exc:
127
- raise AutomizorError(f"Failed to create secret: {exc}") from exc
115
+ response = session.post(
116
+ url, headers=self.headers, timeout=10, json=asdict(secret)
117
+ )
118
+ if response.status_code >= 400:
119
+ raise AutomizorError.from_response(response, "Failed to create secret")
120
+ return SecretContainer(**response.json())
128
121
 
129
122
  def _get_secret(self, name: str) -> SecretContainer:
130
123
  url = f"https://{self.url}/api/v1/vault/secret/{name}/"
131
- try:
132
- response = requests.get(url, headers=self.headers, timeout=10)
133
- response.raise_for_status()
134
- return SecretContainer(**response.json())
135
- except requests.HTTPError as exc:
136
- raise AutomizorError.from_response(
137
- exc.response, "Failed to get secret"
138
- ) from exc
139
- except Exception as exc:
140
- raise AutomizorError(f"Failed to get secret: {exc}") from exc
124
+ response = session.get(url, headers=self.headers, timeout=10)
125
+ if response.status_code >= 400:
126
+ raise AutomizorError.from_response(response, "Failed to get secret")
127
+ return SecretContainer(**response.json())
141
128
 
142
129
  def _update_secret(self, secret: SecretContainer) -> SecretContainer:
143
130
  url = f"https://{self.url}/api/v1/vault/secret/{secret.name}/"
144
- try:
145
- response = requests.put(
146
- url, headers=self.headers, timeout=10, json=asdict(secret)
147
- )
148
- response.raise_for_status()
149
- return SecretContainer(**response.json())
150
- except requests.HTTPError as exc:
151
- raise AutomizorError.from_response(
152
- exc.response, "Failed to update secret"
153
- ) from exc
154
- except Exception as exc:
155
- raise AutomizorError(f"Failed to update secret: {exc}") from exc
131
+ response = session.put(
132
+ url, headers=self.headers, timeout=10, json=asdict(secret)
133
+ )
134
+ if response.status_code >= 400:
135
+ raise AutomizorError.from_response(response, "Failed to update secret")
136
+ return SecretContainer(**response.json())
@@ -1,7 +1,6 @@
1
1
  from typing import Optional
2
2
 
3
- import requests
4
-
3
+ from automizor import session
5
4
  from automizor.exceptions import AutomizorError
6
5
  from automizor.utils import get_api_config, get_headers
7
6
 
@@ -85,18 +84,13 @@ class Workflow:
85
84
  AutomizorError: If there is an error in creating the instance.
86
85
  """
87
86
  url = f"https://{self.url}/api/v1/workflow/instance/"
88
- try:
89
- data = {
90
- "business_key": business_key,
91
- "initial_data": payload,
92
- "process_model": process_model,
93
- "workspace": workspace,
94
- }
95
- response = requests.post(url, headers=self.headers, data=data, timeout=10)
96
- response.raise_for_status()
97
- except requests.HTTPError as exc:
98
- raise AutomizorError.from_response(
99
- exc.response, "Failed to create instance"
100
- ) from exc
101
- except Exception as exc:
102
- raise AutomizorError(f"Failed to create instance: {exc}") from exc
87
+
88
+ data = {
89
+ "business_key": business_key,
90
+ "initial_data": payload,
91
+ "process_model": process_model,
92
+ "workspace": workspace,
93
+ }
94
+ response = session.post(url, headers=self.headers, data=data, timeout=10)
95
+ if response.status_code >= 400:
96
+ raise AutomizorError.from_response(response, "Failed to create instance")
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: automizor
3
- Version: 0.4.16
3
+ Version: 0.4.17
4
4
  Summary: Python Automizor framework
5
5
  Home-page: https://github.com/automizor/automizor-python
6
6
  Author: Christian Fischer
@@ -16,3 +16,12 @@ Classifier: Programming Language :: Python :: 3.11
16
16
  Classifier: Programming Language :: Python :: 3.12
17
17
  License-File: LICENSE
18
18
  Requires-Dist: requests
19
+ Dynamic: author
20
+ Dynamic: author-email
21
+ Dynamic: classifier
22
+ Dynamic: home-page
23
+ Dynamic: keywords
24
+ Dynamic: license
25
+ Dynamic: license-file
26
+ Dynamic: requires-dist
27
+ Dynamic: summary
@@ -0,0 +1,22 @@
1
+ automizor/__init__.py,sha256=CvJ_KPR1GztiZ4yeQO6VZtWddeQqrIrQZrFk6zTJ81w,499
2
+ automizor/exceptions.py,sha256=f3dHiW6Tb7jU4Fy1xmNuhLEUvnuZFVSa40sgu1nL4o4,2250
3
+ automizor/utils.py,sha256=UDYuSERa3IrS_1NreBTNBYf6j25ga2AiwRdq0c3kfvM,965
4
+ automizor/action/__init__.py,sha256=nZinP2WYc8Da3rxE10Ul0V31GbEFXRgCYXtBOQ-0LwQ,767
5
+ automizor/action/_action.py,sha256=Yy-11BmIPuP4lhlNxhjfJYgcOqjhxrXCNesNfWht6WI,2692
6
+ automizor/datastore/__init__.py,sha256=_rAdRfKnTa4SuSLl9GkAYziBPPLsy6yGfS0HprgokOk,2418
7
+ automizor/datastore/_container.py,sha256=rHRkSWaRgy2rk6Qy-7ADFKvuET_COZ2i9VD7gvRDnlM,745
8
+ automizor/datastore/_datastore.py,sha256=vksJ7NwOz-9D_elnyiOCvmhI0nnnEs1GkOkKOwRZEzw,2996
9
+ automizor/job/__init__.py,sha256=pDqSfR4lAyJNCi-fpG6byUPidHz8sntBs0bB2lJFVAY,1118
10
+ automizor/job/_job.py,sha256=nk_CzoKRuXnPF9cRdhwrf_oqcwvbPaP_DkFKOSKIrqE,5234
11
+ automizor/storage/__init__.py,sha256=vCez0LucHQeRZDfX5xZulxf06i3ezVyFl4vL3-EYXXU,4160
12
+ automizor/storage/_storage.py,sha256=xaTRC6A5QpFNdKcqNFAWQqIAaCnqcSk1NHzFcBV5_MY,9929
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=-7ZHvf-JJSbs5bP6EF6Dpzqv2iy4_Qh1fWFyXi2A8vg,4453
16
+ automizor/workflow/__init__.py,sha256=J1K_ogAvbeREPbAmVxsAI1SOVHi_5DXnO9JuEKOMdt8,958
17
+ automizor/workflow/_workflow.py,sha256=QxvMMtTT-NEkjHxRyOr1BSDlmnKnas6oMtDVFcG1g1w,3342
18
+ automizor-0.4.17.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
19
+ automizor-0.4.17.dist-info/METADATA,sha256=zBW-d2P0-Y9iVmhp6tWhQLDpMBw4kM6VG6Zqc2kaIpQ,842
20
+ automizor-0.4.17.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
21
+ automizor-0.4.17.dist-info/top_level.txt,sha256=gScDy4I3tP6BMYAsTAlBXrxVh3E00zV0UioxwXJOI3Y,10
22
+ automizor-0.4.17.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,22 +0,0 @@
1
- automizor/__init__.py,sha256=O7b18uPS1SLiY9Wi-TKn2X2Hx_5j8a4A_4MZLAQFg10,19
2
- automizor/exceptions.py,sha256=P5imySIOtG3ZIk2kh41Yod4RnlgTj7Vf0P3M-RuxQJs,1382
3
- automizor/utils.py,sha256=UDYuSERa3IrS_1NreBTNBYf6j25ga2AiwRdq0c3kfvM,965
4
- automizor/action/__init__.py,sha256=nZinP2WYc8Da3rxE10Ul0V31GbEFXRgCYXtBOQ-0LwQ,767
5
- automizor/action/_action.py,sha256=Gh_S5EAHApKFtDeJuN5K_tbPJSxy4z7MUmUIb9YVcSI,2897
6
- automizor/datastore/__init__.py,sha256=_rAdRfKnTa4SuSLl9GkAYziBPPLsy6yGfS0HprgokOk,2418
7
- automizor/datastore/_container.py,sha256=rHRkSWaRgy2rk6Qy-7ADFKvuET_COZ2i9VD7gvRDnlM,745
8
- automizor/datastore/_datastore.py,sha256=Tv0vRjIyeUfVy3V8pcZVN1dX7q7v8JbJ9L3SCIxX8aM,3396
9
- automizor/job/__init__.py,sha256=pDqSfR4lAyJNCi-fpG6byUPidHz8sntBs0bB2lJFVAY,1118
10
- automizor/job/_job.py,sha256=XJX9Q7GeOErb7U9Wb01Wv1twIlBqNnJePb0Epc8NdTs,5440
11
- automizor/storage/__init__.py,sha256=vCez0LucHQeRZDfX5xZulxf06i3ezVyFl4vL3-EYXXU,4160
12
- automizor/storage/_storage.py,sha256=x5gPxGkzQe21wDDnCLtmVWU0g9JeklPu9iIYVlPDRnk,11381
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=pXS1Qcltjh48n9R0NX4q7PSpXT_XFjifRy9Hu4aQnUQ,5104
16
- automizor/workflow/__init__.py,sha256=J1K_ogAvbeREPbAmVxsAI1SOVHi_5DXnO9JuEKOMdt8,958
17
- automizor/workflow/_workflow.py,sha256=XhcDNBmORdqErj25sO1yb2koKObAFXVkgXrV7xx3EtI,3567
18
- automizor-0.4.16.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
19
- automizor-0.4.16.dist-info/METADATA,sha256=-2IldzFlFJgApP0sH4ndITwcmjldY0z8_eleqY-SZrQ,668
20
- automizor-0.4.16.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
21
- automizor-0.4.16.dist-info/top_level.txt,sha256=gScDy4I3tP6BMYAsTAlBXrxVh3E00zV0UioxwXJOI3Y,10
22
- automizor-0.4.16.dist-info/RECORD,,