canonicalwebteam.store-api 7.2.0__py3-none-any.whl → 7.3.1__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.
@@ -14,11 +14,19 @@ password = os.getenv("REDIS_DB_PASSWORD", None)
14
14
 
15
15
  class SafeJSONEncoder(json.JSONEncoder):
16
16
  def default(self, obj):
17
- if isinstance(obj, bytes):
17
+ if isinstance(obj, (bytes, bytearray)):
18
18
  try:
19
- return obj.decode("utf-8")
19
+ return bytes(obj).decode("utf-8")
20
20
  except UnicodeDecodeError:
21
- return f"<<non-decodable-bytes ({len(obj)} bytes)>>"
21
+ return f"non-decodable-bytes ({len(obj)} bytes)"
22
+
23
+ if isinstance(obj, set):
24
+ try:
25
+ return sorted(obj)
26
+ except Exception:
27
+ return list(obj)
28
+ if isinstance(obj, tuple):
29
+ return list(obj)
22
30
  return super().default(obj)
23
31
 
24
32
 
@@ -81,12 +89,20 @@ class RedisCache:
81
89
  full_key = self._build_key(key)
82
90
  if self.redis_available:
83
91
  try:
84
- value = self.client.get(full_key)
85
- return self._deserialize(value, expected_type)
92
+ return self._deserialize(
93
+ self.client.get(full_key), expected_type
94
+ )
86
95
  except redis.RedisError as e:
87
96
  logger.error("Redis get error: %s", e)
88
- value = self.fallback.get(full_key)
89
- return value
97
+ else:
98
+ try:
99
+ return self._deserialize(
100
+ self.fallback[full_key], expected_type
101
+ )
102
+ except KeyError:
103
+ return None
104
+ except Exception as e:
105
+ logger.error("Fallback cache get error: %s", e)
90
106
 
91
107
  def set(
92
108
  self,
@@ -95,14 +111,18 @@ class RedisCache:
95
111
  ttl=300,
96
112
  ):
97
113
  full_key = self._build_key(key)
114
+ serialized = self._serialize(value)
98
115
  if self.redis_available:
99
116
  try:
100
- serialized = self._serialize(value)
101
117
  self.client.setex(full_key, ttl, serialized)
102
118
  return
103
119
  except redis.RedisError as e:
104
120
  logger.error("Redis set error: %s", e)
105
- self.fallback[full_key] = value
121
+ else:
122
+ try:
123
+ self.fallback[full_key] = serialized
124
+ except Exception as e:
125
+ logger.error("Fallback cache set error: %s", e)
106
126
 
107
127
  def delete(self, key: Union[str, tuple[str, Optional[dict[str, Any]]]]):
108
128
  full_key = self._build_key(key)
@@ -1,8 +1,9 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: canonicalwebteam.store-api
3
- Version: 7.2.0
3
+ Version: 7.3.1
4
4
  Summary:
5
5
  License: LGPL-3.0
6
+ License-File: LICENSE
6
7
  Author: Canonical Web Team
7
8
  Author-email: webteam@canonical.com
8
9
  Requires-Python: >=3.9,<4.0
@@ -13,6 +14,7 @@ Classifier: Programming Language :: Python :: 3.10
13
14
  Classifier: Programming Language :: Python :: 3.11
14
15
  Classifier: Programming Language :: Python :: 3.12
15
16
  Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Programming Language :: Python :: 3.14
16
18
  Requires-Dist: cachetools (>=6.2.0,<7.0.0)
17
19
  Requires-Dist: coverage (>=7.0,<8.0)
18
20
  Requires-Dist: mypy (>=1.14.1,<2.0.0)
@@ -7,8 +7,8 @@ canonicalwebteam/store_api/dashboard.py,sha256=M5JLjTTahN-bfiVz9SuP6ahLjqEvOalwm
7
7
  canonicalwebteam/store_api/devicegw.py,sha256=i42fnc29-CF3vM_tm7mwoOjQraDhu41EDkxILle1pQ4,10627
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
- canonicalwebteam/stores_web_redis/utility.py,sha256=dsHn8Zasn3Wsq4M29igv2gLA1vmXMDo8PQduf5cF_ns,3677
11
- canonicalwebteam_store_api-7.2.0.dist-info/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
12
- canonicalwebteam_store_api-7.2.0.dist-info/METADATA,sha256=50eC9ov7cIBDajLYmhtdPDgj_Q8LlWp4qPCFtOgD9SI,2284
13
- canonicalwebteam_store_api-7.2.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
14
- canonicalwebteam_store_api-7.2.0.dist-info/RECORD,,
10
+ canonicalwebteam/stores_web_redis/utility.py,sha256=iT5Wb6tk53ywtDVWMcfzAT_Sljmvo0bdhaUg6uepT2o,4290
11
+ canonicalwebteam_store_api-7.3.1.dist-info/METADATA,sha256=0a78lqaDEwQNx7geY_EaMJHOw7WwJ2pUyoaS9ayWJXo,2357
12
+ canonicalwebteam_store_api-7.3.1.dist-info/WHEEL,sha256=M5asmiAlL6HEcOq52Yi5mmk9KmTVjY2RDPtO4p9DMrc,88
13
+ canonicalwebteam_store_api-7.3.1.dist-info/licenses/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
14
+ canonicalwebteam_store_api-7.3.1.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.3
2
+ Generator: poetry-core 2.2.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any