State Ledger#

SQLite-backed file ledger that makes incremental runs cheap.

class litsync.state.FileRecord[source]#

Bases: object

FileRecord(source: ‘str’, filename: ‘str’, url: ‘str’, rel_path: ‘str’, remote_size: ‘Optional[int]’ = None, remote_mtime: ‘Optional[str]’ = None, etag: ‘Optional[str]’ = None, md5: ‘Optional[str]’ = None, local_md5: ‘Optional[str]’ = None, status: ‘str’ = ‘pending’, attempts: ‘int’ = 0, error: ‘Optional[str]’ = None)

source: str#
filename: str#
url: str#
rel_path: str#
remote_size: int | None = None#
remote_mtime: str | None = None#
etag: str | None = None#
md5: str | None = None#
local_md5: str | None = None#
status: str = 'pending'#
attempts: int = 0#
error: str | None = None#
__init__(source, filename, url, rel_path, remote_size=None, remote_mtime=None, etag=None, md5=None, local_md5=None, status='pending', attempts=0, error=None)#
Parameters:
  • source (str)

  • filename (str)

  • url (str)

  • rel_path (str)

  • remote_size (int | None)

  • remote_mtime (str | None)

  • etag (str | None)

  • md5 (str | None)

  • local_md5 (str | None)

  • status (str)

  • attempts (int)

  • error (str | None)

Return type:

None

class litsync.state.StateDB[source]#

Bases: object

Thread-safe-enough SQLite wrapper (single connection guarded by a lock).

__init__(path)[source]#
Parameters:

path (Path)

get(source, filename)[source]#
Parameters:
Return type:

Row | None

all_sources()[source]#
Return type:

set[str]

known_filenames(source)[source]#
Parameters:

source (str)

Return type:

set[str]

upsert_seen(rec)[source]#
Parameters:

rec (FileRecord)

Return type:

None

mark(source, filename, **fields)[source]#
Parameters:
Return type:

None

summary()[source]#
Return type:

dict[str, int]

summary_by_source()[source]#
Return type:

dict[str, dict]

files_missing_counts()[source]#
Return type:

list[tuple[str, str, str]]

close()[source]#
Return type:

None