From 561e6e900b3e71a5f280a45def78f66d22952d69 Mon Sep 17 00:00:00 2001 From: davelopez <46503462+davelopez@users.noreply.github.com> Date: Thu, 2 May 2024 17:58:49 +0200 Subject: [PATCH 1/3] Fix `update_time` typing in models The default is `now` so we should have always a value in the Python model even if the column can be nullable. --- lib/galaxy/model/__init__.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/galaxy/model/__init__.py b/lib/galaxy/model/__init__.py index 04c19ab436c..a1c2c33f282 100644 --- a/lib/galaxy/model/__init__.py +++ b/lib/galaxy/model/__init__.py @@ -430,7 +430,7 @@ class HasName: class UsesCreateAndUpdateTime: - update_time: Mapped[Optional[datetime]] + update_time: Mapped[datetime] @property def seconds_since_updated(self): @@ -454,7 +454,7 @@ class WorkerProcess(Base, UsesCreateAndUpdateTime): server_name: Mapped[Optional[str]] = mapped_column(String(255), index=True) hostname: Mapped[Optional[str]] = mapped_column(String(255)) pid: Mapped[Optional[int]] - update_time: Mapped[Optional[datetime]] = mapped_column(default=now, onupdate=now) + update_time: Mapped[datetime] = mapped_column(default=now, onupdate=now, nullable=True) def cached_id(galaxy_model_object): @@ -5472,7 +5472,7 @@ class HistoryDatasetAssociationHistory(Base): history_dataset_association_id: Mapped[Optional[int]] = mapped_column( ForeignKey("history_dataset_association.id"), index=True ) - update_time: Mapped[Optional[datetime]] = mapped_column(default=now) + update_time: Mapped[datetime] = mapped_column(default=now, nullable=True) version: Mapped[Optional[int]] name: Mapped[Optional[str]] = mapped_column(TrimmedString(255)) extension: Mapped[Optional[str]] = mapped_column(TrimmedString(64)) @@ -9638,8 +9638,8 @@ class FormDefinition(Base, Dictifiable, RepresentById): __tablename__ = "form_definition" id: Mapped[int] = mapped_column(primary_key=True) - create_time: Mapped[Optional[datetime]] = mapped_column(default=now) - update_time: Mapped[Optional[datetime]] = mapped_column(default=now, onupdate=now) + create_time: Mapped[datetime] = mapped_column(default=now, nullable=True) + update_time: Mapped[datetime] = mapped_column(default=now, onupdate=now, nullable=True) name: Mapped[str] = mapped_column(TrimmedString(255)) desc: Mapped[Optional[str]] = mapped_column(TEXT) form_definition_current_id: Mapped[int] = mapped_column( From 466226b83e85a404a0b09a3fd6269cbbef567d6e Mon Sep 17 00:00:00 2001 From: davelopez <46503462+davelopez@users.noreply.github.com> Date: Thu, 2 May 2024 18:48:36 +0200 Subject: [PATCH 2/3] Revert "Fix `update_time` typing in models" This reverts commit 561e6e900b3e71a5f280a45def78f66d22952d69. --- lib/galaxy/model/__init__.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/galaxy/model/__init__.py b/lib/galaxy/model/__init__.py index a1c2c33f282..04c19ab436c 100644 --- a/lib/galaxy/model/__init__.py +++ b/lib/galaxy/model/__init__.py @@ -430,7 +430,7 @@ class HasName: class UsesCreateAndUpdateTime: - update_time: Mapped[datetime] + update_time: Mapped[Optional[datetime]] @property def seconds_since_updated(self): @@ -454,7 +454,7 @@ class WorkerProcess(Base, UsesCreateAndUpdateTime): server_name: Mapped[Optional[str]] = mapped_column(String(255), index=True) hostname: Mapped[Optional[str]] = mapped_column(String(255)) pid: Mapped[Optional[int]] - update_time: Mapped[datetime] = mapped_column(default=now, onupdate=now, nullable=True) + update_time: Mapped[Optional[datetime]] = mapped_column(default=now, onupdate=now) def cached_id(galaxy_model_object): @@ -5472,7 +5472,7 @@ class HistoryDatasetAssociationHistory(Base): history_dataset_association_id: Mapped[Optional[int]] = mapped_column( ForeignKey("history_dataset_association.id"), index=True ) - update_time: Mapped[datetime] = mapped_column(default=now, nullable=True) + update_time: Mapped[Optional[datetime]] = mapped_column(default=now) version: Mapped[Optional[int]] name: Mapped[Optional[str]] = mapped_column(TrimmedString(255)) extension: Mapped[Optional[str]] = mapped_column(TrimmedString(64)) @@ -9638,8 +9638,8 @@ class FormDefinition(Base, Dictifiable, RepresentById): __tablename__ = "form_definition" id: Mapped[int] = mapped_column(primary_key=True) - create_time: Mapped[datetime] = mapped_column(default=now, nullable=True) - update_time: Mapped[datetime] = mapped_column(default=now, onupdate=now, nullable=True) + create_time: Mapped[Optional[datetime]] = mapped_column(default=now) + update_time: Mapped[Optional[datetime]] = mapped_column(default=now, onupdate=now) name: Mapped[str] = mapped_column(TrimmedString(255)) desc: Mapped[Optional[str]] = mapped_column(TEXT) form_definition_current_id: Mapped[int] = mapped_column( From 8ffce38839b3079d56e07906bc8db584084dbef5 Mon Sep 17 00:00:00 2001 From: davelopez <46503462+davelopez@users.noreply.github.com> Date: Thu, 2 May 2024 19:00:39 +0200 Subject: [PATCH 3/3] Ensure history update_time is not None when exporting --- lib/galaxy/managers/histories.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/galaxy/managers/histories.py b/lib/galaxy/managers/histories.py index 48ac4ea8b64..27d2a5902dc 100644 --- a/lib/galaxy/managers/histories.py +++ b/lib/galaxy/managers/histories.py @@ -698,6 +698,7 @@ class HistoryExportManager: def _serialize_task_export(self, export: model.StoreExportAssociation, history: model.History): task_uuid = export.task_uuid export_date = export.create_time + assert history.update_time is not None, "History update time must be set" history_has_changed = history.update_time > export_date export_metadata = self.get_record_metadata(export) is_ready = export_metadata is not None and export_metadata.is_ready()