KeyValueService
What it is
- A thin service wrapper around an
IKeyValueAdapter implementation.
- Provides a simple key/value API (bytes values) by delegating all operations to the injected adapter.
Public API
- Class:
KeyValueService(adapter: IKeyValueAdapter)
- Initializes the service with a concrete key/value adapter.
Methods
get(key: str) -> bytes
- Retrieve the value for
key.
set(key: str, value: bytes, ttl: int | None = None) -> None
- Store
value at key, optionally with a TTL.
set_if_not_exists(key: str, value: bytes, ttl: int | None = None) -> bool
- Store only if
key does not exist; returns whether the write occurred.
delete(key: str) -> None
delete_if_value_matches(key: str, value: bytes) -> bool
- Delete
key only if the current value matches; returns whether the delete occurred.
exists(key: str) -> bool
- Check whether
key exists.
Configuration/Dependencies
- Requires an implementation of
IKeyValueAdapter from naas_abi_core.services.keyvalue.KeyValuePorts.
- Inherits from
ServiceBase (naas_abi_core.services.ServiceBase).
Usage
from naas_abi_core.services.keyvalue.KeyValueService import KeyValueService
from naas_abi_core.services.keyvalue.KeyValuePorts import IKeyValueAdapter
class InMemoryAdapter(IKeyValueAdapter):
def __init__(self):
self.store = {}
def get(self, key: str) -> bytes:
return self.store[key]
def set(self, key: str, value: bytes, ttl: int | None = None) -> None:
self.store[key] = value
def set_if_not_exists(self, key: str, value: bytes, ttl: int | None = None) -> bool:
if key in self.store:
return False
self.store[key] = value
return True
def delete(self, key: str) -> None:
self.store.pop(key, None)
def delete_if_value_matches(self, key: str, value: bytes) -> bool:
if self.store.get(key) == value:
self.store.pop(key, None)
return True
return False
def exists(self, key: str) -> bool:
return key in self.store
svc = KeyValueService(InMemoryAdapter())
svc.set("k", b"v")
assert svc.get("k") == b"v"
assert svc.exists("k") is True
Caveats
- All behavior (including TTL semantics, error handling, and missing-key behavior) is determined by the injected
IKeyValueAdapter.
- Values are
bytes; callers must encode/decode non-bytes types themselves.