SourceStore
文書のソースを尋ねられたとおりに保持し、読み直せるようにするポート。
ポート: SourceStore。
indx_interfaces.protocols
で、indx_interfaces.store
の StoredSource の上に宣言しています(ADR-0081)。
StoredSource は、ダイジェスト、リクエストが名指した Source、任意の失効時刻です。インラインのソースは
バイトを base64 で運びます。URI のソースは、チェックサムをダイジェストに固定した URI です。文書の
読み直しは、保存した値から組み立てる普通のリクエストです。
class SourceStore(Protocol): def put(self, owner: OwnerId, source: StoredSource) -> None: ... def get(self, owner: OwnerId, digest: SourceDigest) -> StoredSource | None: ... def list(self, owner: OwnerId) -> tuple[SourceDigest, ...]: ... def delete(self, owner: OwnerId, digest: SourceDigest) -> bool: ... def purge(self, now: datetime) -> int: ...StoredDocument のフィールドではなく独立したポートにするのは、Use の画面がどれもその記録を読み、
バイトを返してほしい画面がないからです。使うオーナーは 2 つです。訪問者のソースは保持した文書と一緒に
失効します。インストールの写しは文書がデータセットに加わる
ときに取り、失効せず、どのデータセットもそのダイジェストを持たなくなると消えます。同梱するバックエンドは
memory、sqlite、postgres の 3 つで、INDX_SOURCE_STORE が名指します。未設定なら何も保持しません。
- オーナー。
purge以外のメソッドは最初にOwnerIdを取り、オーナーをまたぐものはありません。 - 同一性。 オーナーの中で、ソースはそのダイジェストです。
putは同じダイジェストのものを置き換えます。 - 失効。
getとlistはexpires_atを過ぎたソースを返しません。expires_atのないソースは 失効せず、purgeも残します。 - 冪等性。 ないダイジェストの
deleteはFalseです。 - 順序。
listはオーナーのダイジェストを順に返し、ソースは読み込みません。
tests/unit/test_store_conformance.py
が、インストール済みのすべてのバックエンドをこの規則に従わせます。