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]
| 332 | |
| 333 | |
| 334 | class 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 |
no outgoing calls