canonicalwebteam.store-api 7.3.2__tar.gz → 7.3.4__tar.gz
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 canonicalwebteam.store-api might be problematic. Click here for more details.
- {canonicalwebteam_store_api-7.3.2 → canonicalwebteam_store_api-7.3.4}/PKG-INFO +1 -1
- {canonicalwebteam_store_api-7.3.2 → canonicalwebteam_store_api-7.3.4}/canonicalwebteam/store_api/base.py +49 -0
- {canonicalwebteam_store_api-7.3.2 → canonicalwebteam_store_api-7.3.4}/canonicalwebteam/store_api/dashboard.py +1 -1
- {canonicalwebteam_store_api-7.3.2 → canonicalwebteam_store_api-7.3.4}/pyproject.toml +1 -1
- {canonicalwebteam_store_api-7.3.2 → canonicalwebteam_store_api-7.3.4}/LICENSE +0 -0
- {canonicalwebteam_store_api-7.3.2 → canonicalwebteam_store_api-7.3.4}/README.md +0 -0
- {canonicalwebteam_store_api-7.3.2 → canonicalwebteam_store_api-7.3.4}/canonicalwebteam/__init__.py +0 -0
- {canonicalwebteam_store_api-7.3.2 → canonicalwebteam_store_api-7.3.4}/canonicalwebteam/exceptions.py +0 -0
- {canonicalwebteam_store_api-7.3.2 → canonicalwebteam_store_api-7.3.4}/canonicalwebteam/retry_utils.py +0 -0
- {canonicalwebteam_store_api-7.3.2 → canonicalwebteam_store_api-7.3.4}/canonicalwebteam/store_api/__init__.py +0 -0
- {canonicalwebteam_store_api-7.3.2 → canonicalwebteam_store_api-7.3.4}/canonicalwebteam/store_api/devicegw.py +0 -0
- {canonicalwebteam_store_api-7.3.2 → canonicalwebteam_store_api-7.3.4}/canonicalwebteam/store_api/publishergw.py +0 -0
- {canonicalwebteam_store_api-7.3.2 → canonicalwebteam_store_api-7.3.4}/canonicalwebteam/stores_web_redis/__init__.py +0 -0
- {canonicalwebteam_store_api-7.3.2 → canonicalwebteam_store_api-7.3.4}/canonicalwebteam/stores_web_redis/utility.py +0 -0
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
1
3
|
from canonicalwebteam.exceptions import (
|
|
2
4
|
PublisherAgreementNotSigned,
|
|
3
5
|
PublisherMacaroonRefreshRequired,
|
|
@@ -15,13 +17,55 @@ from canonicalwebteam.exceptions import (
|
|
|
15
17
|
)
|
|
16
18
|
|
|
17
19
|
|
|
20
|
+
logger = logging.getLogger(__name__)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _sanitize_dict(dictionary):
|
|
24
|
+
result = {}
|
|
25
|
+
for k, v in dictionary.items():
|
|
26
|
+
if isinstance(v, str):
|
|
27
|
+
result[k] = f"<len {len(v)}>"
|
|
28
|
+
else:
|
|
29
|
+
result[k] = None
|
|
30
|
+
return result
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _loggable_request(request):
|
|
34
|
+
return {
|
|
35
|
+
"url": request.url,
|
|
36
|
+
"headers": _sanitize_dict(request.headers),
|
|
37
|
+
"cookies": _sanitize_dict(request._cookies),
|
|
38
|
+
"body": request.body,
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def _loggable_response(response):
|
|
43
|
+
return {
|
|
44
|
+
"status": response.status_code,
|
|
45
|
+
"url": response.url,
|
|
46
|
+
"headers": _sanitize_dict(response.headers),
|
|
47
|
+
"cookies": _sanitize_dict(response.cookies),
|
|
48
|
+
"text": response.text,
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
|
|
18
52
|
class Base:
|
|
19
53
|
def __init__(self, session):
|
|
20
54
|
self.session = session
|
|
21
55
|
|
|
56
|
+
def log_detailed_error(self, response):
|
|
57
|
+
logger.error(
|
|
58
|
+
"Request failed",
|
|
59
|
+
extra={
|
|
60
|
+
"request": _loggable_request(response.request),
|
|
61
|
+
"response": _loggable_response(response),
|
|
62
|
+
},
|
|
63
|
+
)
|
|
64
|
+
|
|
22
65
|
def process_response(self, response):
|
|
23
66
|
# 5xx responses are not in JSON format
|
|
24
67
|
if response.status_code >= 500:
|
|
68
|
+
self.log_detailed_error(response)
|
|
25
69
|
if response.status_code == 500:
|
|
26
70
|
raise StoreApiInternalError("Internal error upstream")
|
|
27
71
|
elif response.status_code == 501:
|
|
@@ -42,15 +86,20 @@ class Base:
|
|
|
42
86
|
try:
|
|
43
87
|
body = response.json()
|
|
44
88
|
except ValueError as decode_error:
|
|
89
|
+
logger.error(
|
|
90
|
+
"JSON decoding failed. Response text: %s", response.text
|
|
91
|
+
)
|
|
45
92
|
api_error_exception = StoreApiResponseDecodeError(
|
|
46
93
|
"JSON decoding failed: {}".format(decode_error)
|
|
47
94
|
)
|
|
48
95
|
raise api_error_exception
|
|
49
96
|
|
|
50
97
|
if self._is_macaroon_expired(response.headers):
|
|
98
|
+
logger.error("Publisher macaroon refresh required")
|
|
51
99
|
raise PublisherMacaroonRefreshRequired
|
|
52
100
|
|
|
53
101
|
if not response.ok:
|
|
102
|
+
self.log_detailed_error(response)
|
|
54
103
|
error_list = (
|
|
55
104
|
body["error_list"]
|
|
56
105
|
if "error_list" in body
|
|
File without changes
|
|
File without changes
|
{canonicalwebteam_store_api-7.3.2 → canonicalwebteam_store_api-7.3.4}/canonicalwebteam/__init__.py
RENAMED
|
File without changes
|
{canonicalwebteam_store_api-7.3.2 → canonicalwebteam_store_api-7.3.4}/canonicalwebteam/exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|