Skip to main content

sysnet-soft-delete

Sdílená knihovna poskytující konzistentní, bezpečný a snadno použitelný soft-delete mechanismus pro mikroservisy postavené na FastAPI + Beanie + MongoDB.

pip install sysnet-soft-delete

Python 3.10+ Beanie 2.x pymongo 4+ MongoDB 5+ asyncio

Tests mypy Typing

PyPI AGPLv3+


Dokumentace

Dokument Popis
Uživatelská příručka Instalace, API reference, příklady integrace s FastAPI, auditní logging
Technická dokumentace Architektura, designová rozhodnutí, testovací strategie, jak přispívat
Manažerský přehled Přínosy, rizika, roadmap, migrace
Changelog Historie verzí

Repozitář: github.com/sysnet-cz/sysnet-soft-delete


Problém, který knihovna řeší

Problém Řešení
Nekonzistentní filtrování is_deleted SoftDeleteRepository vynucuje filtr vždy
Opakovaný boilerplate kód Jeden mixin, jeden import
Chybějící audit (deleted_at, deleted_by) Součást mixinu, volitelný audit port
Riziko návratu smazaných dokumentů find_active() / get_active() jako primární API
Konflikty s unikátními indexy Vzor partialFilterExpression (viz dokumentace)

Rychlý start

1. Model

from beanie import Document
from sysnet_soft_delete import SoftDeleteMixin

class Article(SoftDeleteMixin, Document):
    title: str
    author: str

    class Settings:
        name = "articles"

Pořadí dědičnosti: SoftDeleteMixin musí být před Document v MRO.

2. Repository

from sysnet_soft_delete import SoftDeleteRepository

class ArticleRepository(SoftDeleteRepository[Article]):
    pass

repo = ArticleRepository(Article)

3. Použití

# Vytvoření
article = Article(title="Hello World", author="Jan")
await article.insert()

# Soft delete
await article.soft_delete(deleted_by="admin@example.com")
# article.is_deleted == True
# article.deleted_at  == datetime(...)
# article.deleted_by  == "admin@example.com"

# Dotazy — smazaný článek se neobjeví
active = await repo.find_active()                        # []
one    = await repo.get_active(article.id)               # None
one    = await repo.find_one_active({"author": "Jan"})   # None (smazaný)
count  = await repo.count_active()                       # 0

# Obnovení
await article.restore(restored_by="admin@example.com")
# article.is_deleted == False

# Explicitní opt-in pro smazané záznamy
all_docs = await repo.find_all_including_deleted()

API — přehled

SoftDeleteMixin

async def soft_delete(self, deleted_by: str | None = None) -> None
async def restore(self, restored_by: str | None = None) -> None

Pole: is_deleted: bool, deleted_at: datetime | None, deleted_by: str | None

SoftDeleteRepository[D]

await repo.find_active(*conditions, sort=None, limit=None, skip=None)
await repo.find_one_active(*conditions)          # v0.2.0+
await repo.get_active(document_id)
await repo.count_active(*conditions)
await repo.find_deleted(*conditions, ...)         # v0.2.1+ (koš)
await repo.count_deleted(*conditions)             # v0.2.1+
await repo.find_all_including_deleted(*conditions, ...)

Auditní port

from sysnet_soft_delete import configure_audit_logger

configure_audit_logger(SysnetAuditAdapter())  # volat jednou při startu

Adapter musí implementovat: async def log(action, entity, entity_id, actor, metadata, timestamp).

Výjimky

from sysnet_soft_delete import AlreadyDeletedException, NotDeletedException

Kompletní API reference → docs/user-guide.md


Verzování

Projekt dodržuje Semantic Versioning. AuditLogger Protocol je veřejné API — breaking změna = major verze.

Viz CHANGELOG.md pro historii změn.


Vývoj a testování

pip install -e ".[dev]"
pytest

Testy běží proti real MongoDB instanci (žádné mocky). Výchozí URL: mongodb://root:s3cr3t@localhost:27017. Přepíšete přes proměnnou prostředí:

TEST_MONGO_URL="mongodb://user:pass@host:27017" pytest

Licence

AGPLv3+ — SYSNET s.r.o.

Metadata

Release files for sysnet-soft-delete 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sysnet-soft-delete 0.2.1
File Size Uploaded Provenance Actions
sysnet_soft_delete-0.2.1.tar.gz 32.3 kB Without provenance Details for sysnet_soft_delete-0.2.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for sysnet-soft-delete 0.2.1
File Interpreter ABI Platform Actions
sysnet_soft_delete-0.2.1-py3-none-any.whl Python 3 none any Details for sysnet_soft_delete-0.2.1-py3-none-any.whl

Total release size: 47.1 kB

Release files / sysnet_soft_delete-0.2.1.tar.gz

Download URL sysnet_soft_delete-0.2.1.tar.gz
Size 32.3 kB
Tags Source
SHA-256 checksum
How to use checksums
c3a2dcbd1c38bde94629c3d5c8733d68fa029d12961fceabceb27f88d65e0bb1
BLAKE2b-256 checksum
How to use checksums
56a30838db1b8da60a6841e679dc4f800a630ac2e895ec636ae80be97354e0c8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / sysnet_soft_delete-0.2.1-py3-none-any.whl

Download URL sysnet_soft_delete-0.2.1-py3-none-any.whl
Size 14.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f18b7ad92a09d2791fcf20fff42a83a62b1188e0444c5bea98fc16afc86005ea
BLAKE2b-256 checksum
How to use checksums
e2a0851a6f49e0d1430caca523a9127e48590cf2047d6a7d23a424792d759fdd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Security for sysnet-soft-delete 0.2.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page