meta-memcache 2.1.0__tar.gz → 2.2.0__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.
Files changed (53) hide show
  1. {meta_memcache-2.1.0/src/meta_memcache.egg-info → meta_memcache-2.2.0}/PKG-INFO +2 -2
  2. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/pyproject.toml +10 -2
  3. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/__init__.py +1 -1
  4. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/commands/high_level_commands.py +62 -65
  5. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/executors/default.py +4 -2
  6. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/routers/helpers.py +5 -3
  7. {meta_memcache-2.1.0 → meta_memcache-2.2.0/src/meta_memcache.egg-info}/PKG-INFO +2 -2
  8. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache.egg-info/requires.txt +1 -1
  9. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/LICENSE +0 -0
  10. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/README.md +0 -0
  11. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/setup.cfg +0 -0
  12. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/base/__init__.py +0 -0
  13. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/base/base_cache_client.py +0 -0
  14. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/base/base_serializer.py +0 -0
  15. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/cache_client.py +0 -0
  16. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/commands/__init__.py +0 -0
  17. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/commands/meta_commands.py +0 -0
  18. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/compression/__init__.py +0 -0
  19. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/compression/zstd_manager.py +0 -0
  20. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/configuration.py +0 -0
  21. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/connection/__init__.py +0 -0
  22. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/connection/memcache_socket.py +0 -0
  23. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/connection/pool.py +0 -0
  24. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/connection/providers.py +0 -0
  25. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/errors.py +0 -0
  26. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/events/__init__.py +0 -0
  27. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/events/write_failure_event.py +0 -0
  28. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/executors/__init__.py +0 -0
  29. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/extras/__init__.py +0 -0
  30. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/extras/client_wrapper.py +0 -0
  31. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/extras/migrating_cache_client.py +0 -0
  32. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/extras/probabilistic_hot_cache.py +0 -0
  33. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/interfaces/__init__.py +0 -0
  34. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/interfaces/cache_api.py +0 -0
  35. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/interfaces/commands.py +0 -0
  36. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/interfaces/executor.py +0 -0
  37. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/interfaces/high_level_commands.py +0 -0
  38. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/interfaces/meta_commands.py +0 -0
  39. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/interfaces/router.py +0 -0
  40. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/metrics/__init__.py +0 -0
  41. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/metrics/base.py +0 -0
  42. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/metrics/prometheus.py +0 -0
  43. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/protocol.py +0 -0
  44. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/py.typed +0 -0
  45. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/routers/__init__.py +0 -0
  46. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/routers/default.py +0 -0
  47. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/routers/ephemeral.py +0 -0
  48. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/routers/gutter.py +0 -0
  49. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/serializer.py +0 -0
  50. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache/settings.py +0 -0
  51. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache.egg-info/SOURCES.txt +0 -0
  52. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache.egg-info/dependency_links.txt +0 -0
  53. {meta_memcache-2.1.0 → meta_memcache-2.2.0}/src/meta_memcache.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meta-memcache
3
- Version: 2.1.0
3
+ Version: 2.2.0
4
4
  Summary: Modern, pure python, memcache client with support for new meta commands.
5
5
  Author-email: Guillermo Perez <bisho@revenuecat.com>
6
6
  License: MIT License
@@ -11,7 +11,7 @@ License-File: LICENSE
11
11
  Requires-Dist: uhashring<3,>=2.3
12
12
  Requires-Dist: marisa-trie<1.3,>=1.2.1
13
13
  Requires-Dist: zstandard<0.26,>=0.25.0
14
- Requires-Dist: meta-memcache-socket<0.3.0,>=0.2.0
14
+ Requires-Dist: meta-memcache-socket<0.4.0,>=0.3.0
15
15
  Provides-Extra: metrics
16
16
  Requires-Dist: prometheus-client>=0.17.1; extra == "metrics"
17
17
  Dynamic: license-file
@@ -3,12 +3,12 @@ dependencies = [
3
3
  "uhashring >= 2.3, < 3",
4
4
  "marisa-trie >= 1.2.1, < 1.3",
5
5
  "zstandard >= 0.25.0, < 0.26",
6
- "meta-memcache-socket >= 0.2.0, < 0.3.0",
6
+ "meta-memcache-socket >= 0.3.0, < 0.4.0",
7
7
  ]
8
8
  authors = [{ name = "Guillermo Perez", email = "bisho@revenuecat.com" }]
9
9
  license = { text = "MIT License" }
10
10
  name = "meta-memcache"
11
- version = "2.1.0"
11
+ version = "2.2.0"
12
12
  description = "Modern, pure python, memcache client with support for new meta commands."
13
13
  readme = "README.md"
14
14
  requires-python = ">=3.10"
@@ -39,3 +39,11 @@ line-length = 88
39
39
  [tool.ruff.lint.per-file-ignores]
40
40
  "tests/*.py" = ["E731"]
41
41
  "src/meta_memcache/__init__.py" = ["F401"]
42
+
43
+ [dependency-groups]
44
+ dev = [
45
+ "prometheus-client>=0.24.1",
46
+ "pytest>=9.0.2",
47
+ "pytest-cov>=7.1.0",
48
+ "pytest-mock>=3.15.1",
49
+ ]
@@ -1,4 +1,4 @@
1
- __version__ = "2.1.0"
1
+ __version__ = "2.2.0"
2
2
 
3
3
  from meta_memcache.cache_client import CacheClient
4
4
  from meta_memcache.configuration import (
@@ -77,6 +77,8 @@ class HighLevelCommandMixinWithMetaCommands(
77
77
  no_reply: bool = False,
78
78
  cas_token: Optional[int] = None,
79
79
  return_value: bool = False,
80
+ initial_value: Optional[int] = None,
81
+ initial_ttl: Optional[int] = None,
80
82
  ) -> RequestFlags: ... # pragma: no cover
81
83
 
82
84
 
@@ -95,15 +97,17 @@ class HighLevelCommandsMixin:
95
97
  Write a value using the specified `set_mode`
96
98
  """
97
99
  key = key if isinstance(key, Key) else Key(key)
98
- flags = RequestFlags(cache_ttl=ttl)
99
- if no_reply:
100
- flags.no_reply = True
101
- if cas_token is not None:
102
- flags.cas_token = cas_token
103
- if stale_policy and stale_policy.mark_stale_on_cas_mismatch:
104
- flags.mark_stale = True
105
- if set_mode != SetMode.SET:
106
- flags.mode = set_mode.value
100
+ flags = RequestFlags(
101
+ cache_ttl=ttl,
102
+ no_reply=no_reply,
103
+ cas_token=cas_token,
104
+ mark_stale=bool(
105
+ cas_token is not None
106
+ and stale_policy
107
+ and stale_policy.mark_stale_on_cas_mismatch
108
+ ),
109
+ mode=set_mode.value if set_mode != SetMode.SET else None,
110
+ )
107
111
 
108
112
  result = self.meta_set(
109
113
  key=key,
@@ -141,9 +145,8 @@ class HighLevelCommandsMixin:
141
145
  flags = RequestFlags(
142
146
  cache_ttl=ttl,
143
147
  mode=SetMode.ADD.value,
148
+ no_reply=no_reply,
144
149
  )
145
- if no_reply:
146
- flags.no_reply = True
147
150
 
148
151
  result = self.meta_set(
149
152
  key=key,
@@ -169,14 +172,17 @@ class HighLevelCommandsMixin:
169
172
  it exists or not, use invalidate() instead.
170
173
  """
171
174
  key = key if isinstance(key, Key) else Key(key)
172
- flags = RequestFlags()
173
- if no_reply:
174
- flags.no_reply = True
175
- if cas_token is not None:
176
- flags.cas_token = cas_token
177
- if stale_policy and stale_policy.mark_stale_on_deletion_ttl > 0:
178
- flags.mark_stale = True
179
- flags.cache_ttl = stale_policy.mark_stale_on_deletion_ttl
175
+ _stale_ttl = (
176
+ stale_policy.mark_stale_on_deletion_ttl
177
+ if stale_policy and stale_policy.mark_stale_on_deletion_ttl > 0
178
+ else None
179
+ )
180
+ flags = RequestFlags(
181
+ no_reply=no_reply,
182
+ cas_token=cas_token,
183
+ mark_stale=_stale_ttl is not None,
184
+ cache_ttl=_stale_ttl,
185
+ )
180
186
 
181
187
  result = self.meta_delete(key=key, flags=flags)
182
188
 
@@ -193,14 +199,17 @@ class HighLevelCommandsMixin:
193
199
  Returns true of the key deleted or it didn't exist anyway
194
200
  """
195
201
  key = key if isinstance(key, Key) else Key(key)
196
- flags = RequestFlags()
197
- if no_reply:
198
- flags.no_reply = True
199
- if cas_token is not None:
200
- flags.cas_token = cas_token
201
- if stale_policy and stale_policy.mark_stale_on_deletion_ttl > 0:
202
- flags.mark_stale = True
203
- flags.cache_ttl = stale_policy.mark_stale_on_deletion_ttl
202
+ _stale_ttl = (
203
+ stale_policy.mark_stale_on_deletion_ttl
204
+ if stale_policy and stale_policy.mark_stale_on_deletion_ttl > 0
205
+ else None
206
+ )
207
+ flags = RequestFlags(
208
+ no_reply=no_reply,
209
+ cas_token=cas_token,
210
+ mark_stale=_stale_ttl is not None,
211
+ cache_ttl=_stale_ttl,
212
+ )
204
213
 
205
214
  result = self.meta_delete(key=key, flags=flags)
206
215
 
@@ -216,9 +225,7 @@ class HighLevelCommandsMixin:
216
225
  Modify the TTL of a key without retrieving the value
217
226
  """
218
227
  key = key if isinstance(key, Key) else Key(key)
219
- flags = RequestFlags(cache_ttl=ttl)
220
- if no_reply:
221
- flags.no_reply = True
228
+ flags = RequestFlags(cache_ttl=ttl, no_reply=no_reply)
222
229
  result = self.meta_get(key, flags=flags)
223
230
 
224
231
  return isinstance(result, Success)
@@ -344,14 +351,11 @@ class HighLevelCommandsMixin:
344
351
  recache_policy: Optional[RecachePolicy] = None,
345
352
  return_cas_token: bool = False,
346
353
  ) -> Dict[Key, Optional[Value]]:
347
- if return_cas_token:
348
- flags = DEFAULT_GET_CAS_FLAGS.copy()
349
- else:
350
- flags = DEFAULT_GET_FLAGS.copy()
351
- if recache_policy:
352
- flags.recache_ttl = recache_policy.ttl
353
- if touch_ttl is not None and touch_ttl >= 0:
354
- flags.cache_ttl = touch_ttl
354
+ base = DEFAULT_GET_CAS_FLAGS if return_cas_token else DEFAULT_GET_FLAGS
355
+ flags = base.replace(
356
+ recache_ttl=recache_policy.ttl if recache_policy else None,
357
+ cache_ttl=touch_ttl if touch_ttl is not None and touch_ttl >= 0 else None,
358
+ )
355
359
 
356
360
  results = self.meta_multiget(
357
361
  keys=[key if isinstance(key, Key) else Key(key) for key in keys],
@@ -389,16 +393,12 @@ class HighLevelCommandsMixin:
389
393
  return_cas_token: bool = False,
390
394
  ) -> Optional[Value]:
391
395
  key = key if isinstance(key, Key) else Key(key)
392
- if return_cas_token:
393
- flags = DEFAULT_GET_CAS_FLAGS.copy()
394
- else:
395
- flags = DEFAULT_GET_FLAGS.copy()
396
- if lease_policy:
397
- flags.vivify_on_miss_ttl = lease_policy.ttl
398
- if recache_policy:
399
- flags.recache_ttl = recache_policy.ttl
400
- if touch_ttl is not None and touch_ttl >= 0:
401
- flags.cache_ttl = touch_ttl
396
+ base = DEFAULT_GET_CAS_FLAGS if return_cas_token else DEFAULT_GET_FLAGS
397
+ flags = base.replace(
398
+ vivify_on_miss_ttl=lease_policy.ttl if lease_policy else None,
399
+ recache_ttl=recache_policy.ttl if recache_policy else None,
400
+ cache_ttl=touch_ttl if touch_ttl is not None and touch_ttl >= 0 else None,
401
+ )
402
402
 
403
403
  result = self.meta_get(key, flags=flags)
404
404
  return self._process_get_result(key, result)
@@ -478,22 +478,19 @@ class HighLevelCommandsMixin:
478
478
  no_reply: bool = False,
479
479
  cas_token: Optional[int] = None,
480
480
  return_value: bool = False,
481
+ initial_value: Optional[int] = None,
482
+ initial_ttl: Optional[int] = None,
481
483
  ) -> RequestFlags:
482
- flags = RequestFlags(
484
+ return RequestFlags(
483
485
  ma_delta_value=abs(delta),
486
+ return_value=return_value,
487
+ no_reply=no_reply,
488
+ cache_ttl=refresh_ttl,
489
+ cas_token=cas_token,
490
+ mode=MA_MODE_DEC if delta < 0 else None,
491
+ ma_initial_value=abs(initial_value) if initial_value is not None else None,
492
+ vivify_on_miss_ttl=initial_ttl,
484
493
  )
485
- if return_value:
486
- flags.return_value = True
487
- if no_reply:
488
- flags.no_reply = True
489
- if refresh_ttl is not None:
490
- flags.cache_ttl = refresh_ttl
491
- if cas_token is not None:
492
- flags.cas_token = cas_token
493
- if delta < 0:
494
- flags.mode = MA_MODE_DEC
495
-
496
- return flags
497
494
 
498
495
  def delta(
499
496
  self: HighLevelCommandMixinWithMetaCommands,
@@ -537,9 +534,9 @@ class HighLevelCommandsMixin:
537
534
  refresh_ttl=refresh_ttl,
538
535
  no_reply=no_reply,
539
536
  cas_token=cas_token,
537
+ initial_value=initial_value,
538
+ initial_ttl=initial_ttl,
540
539
  )
541
- flags.ma_initial_value = abs(initial_value)
542
- flags.vivify_on_miss_ttl = initial_ttl
543
540
  result = self.meta_arithmetic(key=key, flags=flags)
544
541
  return isinstance(result, Success)
545
542
 
@@ -588,9 +585,9 @@ class HighLevelCommandsMixin:
588
585
  delta=delta,
589
586
  refresh_ttl=refresh_ttl,
590
587
  cas_token=cas_token,
588
+ initial_value=initial_value,
589
+ initial_ttl=initial_ttl,
591
590
  )
592
- flags.ma_initial_value = abs(initial_value)
593
- flags.vivify_on_miss_ttl = initial_ttl
594
591
  result = self.meta_arithmetic(key=key, flags=flags)
595
592
  if isinstance(result, Value):
596
593
  if isinstance(result.value, str) and result.value.isnumeric():
@@ -45,8 +45,10 @@ class DefaultExecutor:
45
45
  flags: Optional[RequestFlags],
46
46
  ) -> Tuple[Optional[bytes], RequestFlags]:
47
47
  encoded_value = self._serializer.serialize(key, value.value)
48
- flags = flags if flags is not None else RequestFlags()
49
- flags.client_flag = encoded_value.encoding_id
48
+ if flags is None:
49
+ flags = RequestFlags(client_flag=encoded_value.encoding_id)
50
+ else:
51
+ flags = flags.replace(client_flag=encoded_value.encoding_id)
50
52
  return encoded_value.data, flags
51
53
 
52
54
  def _is_a_write_failure(
@@ -17,8 +17,10 @@ def adjust_flags_for_max_ttl(
17
17
  Override TTLs > than `max_ttl`
18
18
  """
19
19
  if flags:
20
- flags.cache_ttl = _adjust_ttl(flags.cache_ttl, max_ttl)
21
- flags.recache_ttl = _adjust_ttl(flags.recache_ttl, max_ttl)
22
- flags.vivify_on_miss_ttl = _adjust_ttl(flags.vivify_on_miss_ttl, max_ttl)
20
+ flags = flags.replace(
21
+ cache_ttl=_adjust_ttl(flags.cache_ttl, max_ttl),
22
+ recache_ttl=_adjust_ttl(flags.recache_ttl, max_ttl),
23
+ vivify_on_miss_ttl=_adjust_ttl(flags.vivify_on_miss_ttl, max_ttl),
24
+ )
23
25
 
24
26
  return flags
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meta-memcache
3
- Version: 2.1.0
3
+ Version: 2.2.0
4
4
  Summary: Modern, pure python, memcache client with support for new meta commands.
5
5
  Author-email: Guillermo Perez <bisho@revenuecat.com>
6
6
  License: MIT License
@@ -11,7 +11,7 @@ License-File: LICENSE
11
11
  Requires-Dist: uhashring<3,>=2.3
12
12
  Requires-Dist: marisa-trie<1.3,>=1.2.1
13
13
  Requires-Dist: zstandard<0.26,>=0.25.0
14
- Requires-Dist: meta-memcache-socket<0.3.0,>=0.2.0
14
+ Requires-Dist: meta-memcache-socket<0.4.0,>=0.3.0
15
15
  Provides-Extra: metrics
16
16
  Requires-Dist: prometheus-client>=0.17.1; extra == "metrics"
17
17
  Dynamic: license-file
@@ -1,7 +1,7 @@
1
1
  uhashring<3,>=2.3
2
2
  marisa-trie<1.3,>=1.2.1
3
3
  zstandard<0.26,>=0.25.0
4
- meta-memcache-socket<0.3.0,>=0.2.0
4
+ meta-memcache-socket<0.4.0,>=0.3.0
5
5
 
6
6
  [metrics]
7
7
  prometheus-client>=0.17.1
File without changes
File without changes
File without changes