From 243f9e89ec43cead86f94fa9428bd0e7efea2f0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o?= Date: Wed, 23 Sep 2026 11:25:22 +0200 Subject: [PATCH 1/5] Add 'DOCUMENT_CLEANED' step to document_related enumeration and create migration --- .../d22d6324c256_cleaned_document_state.py | 30 +++++++++++++++++++ welearn_database/data/enumeration.py | 1 + 2 files changed, 31 insertions(+) create mode 100644 welearn_database/alembic/versions/d22d6324c256_cleaned_document_state.py diff --git a/welearn_database/alembic/versions/d22d6324c256_cleaned_document_state.py b/welearn_database/alembic/versions/d22d6324c256_cleaned_document_state.py new file mode 100644 index 0000000..207e5ce --- /dev/null +++ b/welearn_database/alembic/versions/d22d6324c256_cleaned_document_state.py @@ -0,0 +1,30 @@ +"""cleaned_document_state + +Revision ID: d22d6324c256 +Revises: 5d46d7920342 +Create Date: 2026-09-23 11:18:46.784209 + +""" + +from typing import Sequence, Union + +import sqlalchemy as sa +from alembic import op + +from welearn_database.data.enumeration import Step + +# revision identifiers, used by Alembic. +revision: str = "d22d6324c256" +down_revision: Union[str, None] = "5d46d7920342" +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + op.execute( + f"""ALTER TYPE document_related.step ADD VALUE '{Step.DOCUMENT_CLEANED.value}'""" + ) + + +def downgrade() -> None: + pass diff --git a/welearn_database/data/enumeration.py b/welearn_database/data/enumeration.py index d74a879..61c0dc9 100644 --- a/welearn_database/data/enumeration.py +++ b/welearn_database/data/enumeration.py @@ -12,6 +12,7 @@ class Step(Enum): DOCUMENT_IS_INVALID = "document_is_invalid" KEPT_FOR_TRACE = "kept_for_trace" DOCUMENT_IS_IRRETRIEVABLE = "document_is_irretrievable" + DOCUMENT_CLEANED = "document_cleaned" class Counter(Enum): From 8ece809b8fd96cd3c681e0516146013a2bd96f48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o?= Date: Wed, 23 Sep 2026 11:28:23 +0200 Subject: [PATCH 2/5] bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 891f3a7..2697566 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "welearn-database" -version = "1.5.3.dev0" +version = "1.5.4.dev0" description = "All stuff related to relationnal database from the WeLearn project" authors = [ {name = "Théo",email = "theo.nardin@cri-paris.org"} From 44391294cb87ea16b5e642c4fb9e8b382bc0c670 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o?= Date: Wed, 23 Sep 2026 11:53:01 +0200 Subject: [PATCH 3/5] Add migration to create track_document_latest_state view --- .../0310ff0bda4f_track_document_last_state.py | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 welearn_database/alembic/versions/0310ff0bda4f_track_document_last_state.py diff --git a/welearn_database/alembic/versions/0310ff0bda4f_track_document_last_state.py b/welearn_database/alembic/versions/0310ff0bda4f_track_document_last_state.py new file mode 100644 index 0000000..3537052 --- /dev/null +++ b/welearn_database/alembic/versions/0310ff0bda4f_track_document_last_state.py @@ -0,0 +1,38 @@ +"""track_document_last_state + +Revision ID: 0310ff0bda4f +Revises: d22d6324c256 +Create Date: 2026-09-23 11:48:30.473174 + +""" + +from typing import Sequence, Union + +import sqlalchemy as sa +from alembic import op + +# revision identifiers, used by Alembic. +revision: str = "0310ff0bda4f" +down_revision: Union[str, None] = "d22d6324c256" +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + op.execute(""" + CREATE OR REPLACE VIEW document_related.track_document_latest_state + AS SELECT DISTINCT ON (ps.document_id) ps.id, + ps.document_id, + wd.corpus_id, + wd.lang, + ps.title, + ps.created_at, + ps.operation_order + FROM document_related.process_state ps + JOIN document_related.welearn_document wd ON ps.document_id = wd.id + ORDER BY ps.document_id, ps.operation_order DESC; + """) + + +def downgrade() -> None: + op.execute("DROP VIEW IF EXISTS document_related.track_document_latest_state;") From 4e7b535282e0368810d5c6fe44bf92a642dfe437 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o?= Date: Wed, 23 Sep 2026 15:54:09 +0200 Subject: [PATCH 4/5] Add TrackDocumentLatestState model to track document states --- .../data/models/document_related.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/welearn_database/data/models/document_related.py b/welearn_database/data/models/document_related.py index 51a3ca2..bde9825 100644 --- a/welearn_database/data/models/document_related.py +++ b/welearn_database/data/models/document_related.py @@ -563,3 +563,21 @@ class QtyDocumentPerCorpus(Base): source_name: Mapped[str] = mapped_column(primary_key=True) count: Mapped[int] + + +class TrackDocumentLatestState(Base): + __tablename__ = "track_document_latest_state" + __table_args__ = {"schema": schema_name} + __read_only__ = True + + id: Mapped[UUID] = mapped_column( + primary_key=True, + type=types.Uuid, + ) + document_id: Mapped[UUID] = mapped_column( + type=types.Uuid, + ) + lang: Mapped[str] + title: Mapped[str] + created_at: Mapped[datetime] = mapped_column() + operation_order: Mapped[int] From bc1a18a961a1b52e327a33c9be4b12d2a42a0315 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o?= Date: Wed, 23 Sep 2026 16:01:31 +0200 Subject: [PATCH 5/5] Fix typo --- welearn_database/data/models/document_related.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/welearn_database/data/models/document_related.py b/welearn_database/data/models/document_related.py index bde9825..d9d7a8b 100644 --- a/welearn_database/data/models/document_related.py +++ b/welearn_database/data/models/document_related.py @@ -572,10 +572,10 @@ class TrackDocumentLatestState(Base): id: Mapped[UUID] = mapped_column( primary_key=True, - type=types.Uuid, + type_=types.Uuid, ) document_id: Mapped[UUID] = mapped_column( - type=types.Uuid, + type_=types.Uuid, ) lang: Mapped[str] title: Mapped[str]