コンテンツにスキップ

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 が、インストール済みのすべてのバックエンドをこの規則に従わせます。