MCPcopy
hub / github.com/benoitc/gunicorn / StashTable

Class StashTable

gunicorn/dirty/stash.py:334–404  ·  view source on GitHub ↗

Dict-like interface to a stash table. Example:: sessions = stash.table("sessions") sessions["user:1"] = {"name": "Alice"} user = sessions["user:1"] del sessions["user:1"] # Iteration for key in sessions: print(key, sessions[key]

Source from the content-addressed store, hash-verified

332
333
334class StashTable:
335 """
336 Dict-like interface to a stash table.
337
338 Example::
339
340 sessions = stash.table("sessions")
341 sessions["user:1"] = {"name": "Alice"}
342 user = sessions["user:1"]
343 del sessions["user:1"]
344
345 # Iteration
346 for key in sessions:
347 print(key, sessions[key])
348 """
349
350 def __init__(self, client, name):
351 self._client = client
352 self._name = name
353
354 @property
355 def name(self):
356 """Table name."""
357 return self._name
358
359 def __getitem__(self, key):
360 result = self._client.get(self._name, key)
361 if result is None:
362 # Check if key actually exists with None value
363 if not self._client.exists(self._name, key):
364 raise KeyError(key)
365 return result
366
367 def __setitem__(self, key, value):
368 self._client.put(self._name, key, value)
369
370 def __delitem__(self, key):
371 if not self._client.delete(self._name, key):
372 raise KeyError(key)
373
374 def __contains__(self, key):
375 return self._client.exists(self._name, key)
376
377 def __iter__(self):
378 return iter(self._client.keys(self._name))
379
380 def __len__(self):
381 info = self._client.info(self._name)
382 return info.get("size", 0)
383
384 def get(self, key, default=None):
385 """Get value with default."""
386 return self._client.get(self._name, key, default)
387
388 def keys(self, pattern=None):
389 """Get all keys, optionally filtered by pattern."""
390 return self._client.keys(self._name, pattern=pattern)
391

Callers 2

test_stash_table_nameMethod · 0.90
tableMethod · 0.85

Calls

no outgoing calls

Tested by 1

test_stash_table_nameMethod · 0.72