v0.4.1
First release published to PyPI as
saia-python, together with
open-source project tooling and incremental-upload helpers for ARCANA.
Added
ArcanaService.upload_files(name, paths, *, overwrite=True, verbose=False)—
upload an explicit, caller-chosen list of files. The selection of what to
(re)upload is the caller's (e.g. from a checksum/manifest comparison); reuses
the same per-file batch reporting asupload_directory.ArcanaService.sync_directory(name, directory, *, select, pattern="*", recursive=False, prune=False, index=True, index_wait=True, verbose=False)—
sync a local directory under a caller-supplied
select(local_path, remote_or_None) -> "upload" | "replace" | "skip"policy,
then trigger a singlegenerate_indexonly when something changed. Keeps
change-detection (e.g. SHA-256 vs. your own manifest) outside the package,
since the ARCANA API exposes no content hash. Optionalprunedeletes remote
files with no local counterpart.- PyPI packaging metadata in
pyproject.toml:readme,license-files,
keywords, troveclassifiers, and an expanded[project.urls]table
(Homepage, Documentation, Changelog, Issues) so the project page renders the
README and is discoverable. CITATION.cff(Citation File Format 1.2.0) — enables GitHub's "Cite this
repository" button and import into reference managers.saia_python/py.typed— PEP 561 marker so downstream type checkers consume
the package's inline type hints; advertised via theTyping :: Typed
classifier..github/workflows/publish.yml— builds the sdist + wheel, runs
twine check --strict, and publishes to PyPI via OIDC Trusted Publishing
when a GitHub Release is published (no stored API token).- README status badges (PyPI, Python versions, license, CI, docs) and a
commented Zenodo DOI badge placeholder. - Linting and type-checking:
ruff(lint + format) andmypyconfiguration in
pyproject.toml, alintoptional-dependency group, a
.pre-commit-config.yaml, and aQualityCI workflow
(ruff check+ruff format --check+mypy). - Coverage reporting via
pytest-cov; the Tests workflow now runs
pytest --cov.
Changed
ArcanaService.list_files()now documents the full APIFileOutSchema
(name,size,owner_user_name,created_at,updated_at,index_info
with per-fileindex_status/chunks_indexed, andrelated_files).- Corrected the
licensefield from the deprecated SPDX identifierAGPL-3.0
toAGPL-3.0-only. The license terms are unchanged; only the SPDX expression
is now valid for PEP 639 / PyPI. Bumped the build requirement to
setuptools>=77(PEP 639 support). - Applied
ruffautofixes and the formatter across the package and tests
(Optional[X]→X | None, import sorting, consistent formatting) plus minor
mypytype-annotation fixes. No behavior change — all 92 tests pass. Known
typing gaps (tomlkit'sItem | Containerinauth.py; the.listmethod
shadowing the builtin inmodels.py/arcana.py) are scoped via documented
per-modulemypyoverrides.