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.
- canonicalwebteam/stores_web_redis/utility.py +29 -9
- {canonicalwebteam_store_api-7.2.0.dist-info → canonicalwebteam_store_api-7.3.1.dist-info}/METADATA +4 -2
- {canonicalwebteam_store_api-7.2.0.dist-info → canonicalwebteam_store_api-7.3.1.dist-info}/RECORD +5 -5
- {canonicalwebteam_store_api-7.2.0.dist-info → canonicalwebteam_store_api-7.3.1.dist-info}/WHEEL +1 -1
- {canonicalwebteam_store_api-7.2.0.dist-info → canonicalwebteam_store_api-7.3.1.dist-info/licenses}/LICENSE +0 -0
|
@@ -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"
|
|
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
|
-
|
|
85
|
-
|
|
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
|
-
|
|
89
|
-
|
|
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
|
-
|
|
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)
|
{canonicalwebteam_store_api-7.2.0.dist-info → canonicalwebteam_store_api-7.3.1.dist-info}/METADATA
RENAMED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: canonicalwebteam.store-api
|
|
3
|
-
Version: 7.
|
|
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)
|
{canonicalwebteam_store_api-7.2.0.dist-info → canonicalwebteam_store_api-7.3.1.dist-info}/RECORD
RENAMED
|
@@ -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=
|
|
11
|
-
canonicalwebteam_store_api-7.
|
|
12
|
-
canonicalwebteam_store_api-7.
|
|
13
|
-
canonicalwebteam_store_api-7.
|
|
14
|
-
canonicalwebteam_store_api-7.
|
|
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,,
|
|
File without changes
|