pyrelukko 0.1.0__py3-none-any.whl → 0.2.0__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.
Potentially problematic release.
This version of pyrelukko might be problematic. Click here for more details.
- pyrelukko/pyrelukko.py +46 -21
- pyrelukko/version.py +1 -1
- {pyrelukko-0.1.0.dist-info → pyrelukko-0.2.0.dist-info}/METADATA +1 -1
- pyrelukko-0.2.0.dist-info/RECORD +8 -0
- pyrelukko-0.1.0.dist-info/RECORD +0 -8
- {pyrelukko-0.1.0.dist-info → pyrelukko-0.2.0.dist-info}/LICENSE +0 -0
- {pyrelukko-0.1.0.dist-info → pyrelukko-0.2.0.dist-info}/WHEEL +0 -0
pyrelukko/pyrelukko.py
CHANGED
|
@@ -2,22 +2,20 @@
|
|
|
2
2
|
TBD
|
|
3
3
|
"""
|
|
4
4
|
import asyncio
|
|
5
|
+
import json
|
|
5
6
|
import logging
|
|
6
7
|
import os
|
|
7
|
-
import json
|
|
8
|
-
import threading
|
|
9
8
|
import ssl
|
|
9
|
+
import threading
|
|
10
10
|
import time
|
|
11
|
-
|
|
12
11
|
from datetime import datetime
|
|
13
|
-
from typing import Dict, List, Union
|
|
14
12
|
from pathlib import Path
|
|
15
|
-
from
|
|
16
|
-
from urllib3.util.retry import Retry
|
|
13
|
+
from typing import Dict, List, Union
|
|
17
14
|
|
|
18
15
|
import requests
|
|
16
|
+
from urllib3.util import Url, parse_url
|
|
17
|
+
from urllib3.util.retry import Retry
|
|
19
18
|
from websockets import ConnectionClosed as WsConnectionClosed
|
|
20
|
-
|
|
21
19
|
from websockets.asyncio.client import connect as ws_connect
|
|
22
20
|
|
|
23
21
|
from .retry import retry
|
|
@@ -30,6 +28,14 @@ SSL_KWARGS = [
|
|
|
30
28
|
'options',
|
|
31
29
|
]
|
|
32
30
|
|
|
31
|
+
RETRY_KWARGS = [
|
|
32
|
+
'tries',
|
|
33
|
+
'delay',
|
|
34
|
+
'backoff',
|
|
35
|
+
'max_delay',
|
|
36
|
+
'exceptions'
|
|
37
|
+
]
|
|
38
|
+
|
|
33
39
|
logger = logging.getLogger(__name__)
|
|
34
40
|
|
|
35
41
|
|
|
@@ -50,12 +56,21 @@ class RelukkoClient:
|
|
|
50
56
|
"""
|
|
51
57
|
self.session = requests.Session()
|
|
52
58
|
self.api_key = api_key
|
|
59
|
+
self.tries=4
|
|
60
|
+
self.delay=5
|
|
61
|
+
self.backoff=2.0
|
|
62
|
+
self.max_delay=None
|
|
63
|
+
self.exceptions = (
|
|
64
|
+
requests.ConnectionError,
|
|
65
|
+
RelukkoDoRetry,
|
|
66
|
+
)
|
|
53
67
|
self._setup_session(api_key, **kwargs)
|
|
54
68
|
self._setup_http_adapters_retry(**kwargs)
|
|
69
|
+
self._setup_pyrelukko_retry(**kwargs)
|
|
55
70
|
|
|
56
71
|
self.base_url = self._setup_base_url(base_url)
|
|
57
72
|
self.ws_url = self._setup_ws_url(str(self.base_url))
|
|
58
|
-
self.ssl_ctx = None
|
|
73
|
+
self.ssl_ctx: ssl.SSLContext = None
|
|
59
74
|
self._setup_ssl_ctx(**kwargs)
|
|
60
75
|
|
|
61
76
|
# event for websocket thread to signal it got a message
|
|
@@ -75,6 +90,15 @@ class RelukkoClient:
|
|
|
75
90
|
self.base_url = self._setup_base_url(base_url or self.base_url)
|
|
76
91
|
self.ws_url = self._setup_ws_url(str(self.base_url))
|
|
77
92
|
self._setup_ssl_ctx(**kwargs)
|
|
93
|
+
self._setup_pyrelukko_retry(**kwargs)
|
|
94
|
+
|
|
95
|
+
def _setup_pyrelukko_retry(self, **kwargs):
|
|
96
|
+
for kwarg in RETRY_KWARGS:
|
|
97
|
+
setattr(
|
|
98
|
+
self,
|
|
99
|
+
kwarg,
|
|
100
|
+
kwargs.get(kwarg, getattr(self, kwarg))
|
|
101
|
+
)
|
|
78
102
|
|
|
79
103
|
def _setup_http_adapters_retry(self, **kwargs):
|
|
80
104
|
for _, http_adapter in self.session.adapters.items():
|
|
@@ -85,7 +109,7 @@ class RelukkoClient:
|
|
|
85
109
|
http_adapter.max_retries = http_retry
|
|
86
110
|
|
|
87
111
|
def _setup_session(self, api_key: str, **kwargs):
|
|
88
|
-
self.session.headers
|
|
112
|
+
self.session.headers['X-api-Key'] = api_key
|
|
89
113
|
for key, value in kwargs.items():
|
|
90
114
|
if hasattr(self.session, key):
|
|
91
115
|
setattr(self.session, key, value)
|
|
@@ -116,7 +140,7 @@ class RelukkoClient:
|
|
|
116
140
|
|
|
117
141
|
# values from kwargs take precedence env vars
|
|
118
142
|
ca_file = kwargs.get('cafile', ca_bundle_file)
|
|
119
|
-
ca_path = kwargs.get('capath', ca_bundle_path)
|
|
143
|
+
ca_path = kwargs.get('capath', f"{ca_bundle_path}/")
|
|
120
144
|
ca_data = kwargs.get('cadata')
|
|
121
145
|
|
|
122
146
|
if ca_file or ca_path or ca_data:
|
|
@@ -196,7 +220,7 @@ class RelukkoClient:
|
|
|
196
220
|
|
|
197
221
|
def _check_response(self, response: requests.Response):
|
|
198
222
|
match response.status_code:
|
|
199
|
-
case 200 | 201 | 404:
|
|
223
|
+
case 200 | 201 | 404 | 422:
|
|
200
224
|
return response.json()
|
|
201
225
|
case 400 | 403:
|
|
202
226
|
err = response.json()
|
|
@@ -207,10 +231,12 @@ class RelukkoClient:
|
|
|
207
231
|
logger.info(err.get('status'), err.get('message'))
|
|
208
232
|
return None
|
|
209
233
|
case 500 | 502 | 503 | 504:
|
|
210
|
-
logger.warning(
|
|
234
|
+
logger.warning("[%d](%s) %s",
|
|
235
|
+
response.status_code, response.reason, response.text)
|
|
211
236
|
raise RelukkoDoRetry()
|
|
212
237
|
case _:
|
|
213
|
-
logger.warning(
|
|
238
|
+
logger.warning("[%d](%s) %s",
|
|
239
|
+
response.status_code, response.reason, response.text)
|
|
214
240
|
raise RuntimeError()
|
|
215
241
|
|
|
216
242
|
def _make_request(
|
|
@@ -219,12 +245,10 @@ class RelukkoClient:
|
|
|
219
245
|
method: str,
|
|
220
246
|
payload: Dict=None) -> requests.Response:
|
|
221
247
|
|
|
222
|
-
excpetions = (
|
|
223
|
-
requests.ConnectionError,
|
|
224
|
-
RelukkoDoRetry,
|
|
225
|
-
)
|
|
226
248
|
|
|
227
|
-
@retry(logger, exceptions=
|
|
249
|
+
@retry(logger, exceptions=self.exceptions, tries=self.tries,
|
|
250
|
+
delay=self.delay, backoff=self.backoff,
|
|
251
|
+
max_delay=self.max_delay)
|
|
228
252
|
def _do_request():
|
|
229
253
|
response = self.session.request(
|
|
230
254
|
method=method,
|
|
@@ -274,13 +298,14 @@ class RelukkoClient:
|
|
|
274
298
|
url = f"{self.base_url}/v1/locks/"
|
|
275
299
|
return self._make_request(url, "GET")
|
|
276
300
|
|
|
277
|
-
def update_relukko(
|
|
301
|
+
def update_relukko(
|
|
302
|
+
self, lock_id: str, creator: str=None, expires_at: datetime=None):
|
|
278
303
|
"""
|
|
279
304
|
TBD
|
|
280
305
|
"""
|
|
281
306
|
if isinstance(expires_at, datetime):
|
|
282
307
|
expires_at = expires_at.isoformat()
|
|
283
|
-
|
|
308
|
+
elif expires_at is not None:
|
|
284
309
|
raise ValueError("has to be datetime!")
|
|
285
310
|
|
|
286
311
|
payload = {
|
|
@@ -288,7 +313,7 @@ class RelukkoClient:
|
|
|
288
313
|
"expires_at": expires_at,
|
|
289
314
|
}
|
|
290
315
|
url = f"{self.base_url}/v1/locks/{lock_id}"
|
|
291
|
-
return self._make_request(url, "
|
|
316
|
+
return self._make_request(url, "PUT", payload)
|
|
292
317
|
|
|
293
318
|
def delete_relukko(self, lock_id: str):
|
|
294
319
|
"""
|
pyrelukko/version.py
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# pylint: disable=all
|
|
2
|
-
__version__ = "0.
|
|
2
|
+
__version__ = "0.2.0"
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
pyrelukko/__init__.py,sha256=n-mTJV7AOfr4bljtDxok3E3gXIBRk-kFa2_Ql3S8Ht0,61
|
|
2
|
+
pyrelukko/pyrelukko.py,sha256=5bDqueUMxbMSxbuSOE9L7aHpAP3bax4DHQqATeuHs1s,11435
|
|
3
|
+
pyrelukko/retry.py,sha256=XeCc0trPhAggdEnu2nwtpFderlHaDQFTXH_O1dLeiGQ,1587
|
|
4
|
+
pyrelukko/version.py,sha256=5ajVDlNTAW-Ykqh9HwJkug5LWeNtanZQhZox4hNtxio,44
|
|
5
|
+
pyrelukko-0.2.0.dist-info/LICENSE,sha256=aEI4dThWmRUiEPch0-KaZQmHZgTyuz88Edmp25H6tAw,1089
|
|
6
|
+
pyrelukko-0.2.0.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
|
|
7
|
+
pyrelukko-0.2.0.dist-info/METADATA,sha256=0tOto4sHXUD_sFAfTvC6EhV2l4NER-gNyYE66ori8TQ,701
|
|
8
|
+
pyrelukko-0.2.0.dist-info/RECORD,,
|
pyrelukko-0.1.0.dist-info/RECORD
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
pyrelukko/__init__.py,sha256=n-mTJV7AOfr4bljtDxok3E3gXIBRk-kFa2_Ql3S8Ht0,61
|
|
2
|
-
pyrelukko/pyrelukko.py,sha256=xW97JA3Za7cg0K0P8cu134sDs7i-wM75vB-Wh1CkWqw,10646
|
|
3
|
-
pyrelukko/retry.py,sha256=XeCc0trPhAggdEnu2nwtpFderlHaDQFTXH_O1dLeiGQ,1587
|
|
4
|
-
pyrelukko/version.py,sha256=AaOhlz8bhe74XhrpzHuwnyjVm0cDxwlXlZGQ3Qvzs0o,44
|
|
5
|
-
pyrelukko-0.1.0.dist-info/LICENSE,sha256=aEI4dThWmRUiEPch0-KaZQmHZgTyuz88Edmp25H6tAw,1089
|
|
6
|
-
pyrelukko-0.1.0.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
|
|
7
|
-
pyrelukko-0.1.0.dist-info/METADATA,sha256=G7uhJSin6c3wyWUj5HSdcOyP9pCfIoco_P2Ulw0WY9o,701
|
|
8
|
-
pyrelukko-0.1.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|