canonicalwebteam.store-api 7.3.2__py3-none-any.whl → 7.3.4__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 canonicalwebteam.store-api might be problematic. Click here for more details.

@@ -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
@@ -10,7 +10,7 @@ from canonicalwebteam.exceptions import (
10
10
 
11
11
 
12
12
  DASHBOARD_API_URL = getenv(
13
- "DASHBOARD_API_URL", "https://dashboard.snapcraft.io/"
13
+ "SNAPSTORE_DASHBOARD_API_URL", "https://dashboard.snapcraft.io/"
14
14
  )
15
15
 
16
16
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: canonicalwebteam.store-api
3
- Version: 7.3.2
3
+ Version: 7.3.4
4
4
  Summary:
5
5
  License: LGPL-3.0
6
6
  License-File: LICENSE
@@ -2,13 +2,13 @@ canonicalwebteam/__init__.py,sha256=ED6jHcYiuYpr_0vjGz0zx2lrrmJT9sDJCzIljoDfmlM,
2
2
  canonicalwebteam/exceptions.py,sha256=Uf9HxtLH5fAXPdDm6H14tA8jUxKQAWUmWIovzHLtdRw,2134
3
3
  canonicalwebteam/retry_utils.py,sha256=zGGabWzHyoXPNdwXBS_gbz3W0Qpdg3wN1G6aNy_xef8,8517
4
4
  canonicalwebteam/store_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- canonicalwebteam/store_api/base.py,sha256=_kx3_hPQHJPUtdf3z4NXmcwHlswV1g1mw483fZXD5LM,3331
6
- canonicalwebteam/store_api/dashboard.py,sha256=M5JLjTTahN-bfiVz9SuP6ahLjqEvOalwmNim6X5Ky6o,22796
5
+ canonicalwebteam/store_api/base.py,sha256=4KGdGdr0phY4ouH5hCU9TXUlnePWKrPwnRHYj_hJc3w,4616
6
+ canonicalwebteam/store_api/dashboard.py,sha256=Dajmi-MqLLOm9ykTCJELom6peMhAYyc3mmUAUrJBC1A,22806
7
7
  canonicalwebteam/store_api/devicegw.py,sha256=NxO0kGtKjSixmwmyp-dXz53ohtlSDw-hJ55ugsUKj5I,10723
8
8
  canonicalwebteam/store_api/publishergw.py,sha256=u2D2Y76xC8ms16XTZcUe_KmRdcyzqOV2g0aN9HYZBrQ,29702
9
9
  canonicalwebteam/stores_web_redis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  canonicalwebteam/stores_web_redis/utility.py,sha256=iT5Wb6tk53ywtDVWMcfzAT_Sljmvo0bdhaUg6uepT2o,4290
11
- canonicalwebteam_store_api-7.3.2.dist-info/METADATA,sha256=I7Po50dEoiflvNsbb675IAY2owGLspq8QjVg_uA4mMo,2357
12
- canonicalwebteam_store_api-7.3.2.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
13
- canonicalwebteam_store_api-7.3.2.dist-info/licenses/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
14
- canonicalwebteam_store_api-7.3.2.dist-info/RECORD,,
11
+ canonicalwebteam_store_api-7.3.4.dist-info/METADATA,sha256=MEaDSbIAhWwDcRQqD1cw9sTQNP5HmEgeM22oGUHZh08,2357
12
+ canonicalwebteam_store_api-7.3.4.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
13
+ canonicalwebteam_store_api-7.3.4.dist-info/licenses/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
14
+ canonicalwebteam_store_api-7.3.4.dist-info/RECORD,,