From 853534a9bcdf531c10106419c1033ffe0beb22a6 Mon Sep 17 00:00:00 2001 From: Adrian Date: Tue, 3 Sep 2024 10:37:10 -0600 Subject: [PATCH] 170 2 adjust event only to fire when due (#664) --- database/events.py | 11 ++++++++--- database/models/core.py | 1 + database/tests/unit/test_events.py | 5 +++++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/database/events.py b/database/events.py index 492caa2cc..0de2effd5 100644 --- a/database/events.py +++ b/database/events.py @@ -3,7 +3,7 @@ from google.cloud import pubsub_v1 from shared.config import get_config -from sqlalchemy import event +from sqlalchemy import event, inspect from database.models.core import Repository @@ -51,5 +51,10 @@ def after_insert_repo(mapper, connection, target): @event.listens_for(Repository, "after_update") def after_update_repo(mapper, connection, target): - log.info("After update signal") - _sync_repo(target) + state = inspect(target) + + for attr in state.attrs: + if attr.key in ["name", "upload_token"] and attr.history.has_changes(): + log.info("After update signal") + _sync_repo(target) + break diff --git a/database/models/core.py b/database/models/core.py index 367ad108d..3b6d56e7b 100644 --- a/database/models/core.py +++ b/database/models/core.py @@ -140,6 +140,7 @@ class Repository(CodecovBaseModel): random.choice(string.ascii_uppercase + string.digits) for _ in range(10) ), ) + upload_token = Column(postgresql.UUID) language = Column(types.Text) languages = Column(postgresql.ARRAY(types.String), nullable=True, default=[]) languages_last_updated = Column(types.DateTime, server_default=FetchedValue()) diff --git a/database/tests/unit/test_events.py b/database/tests/unit/test_events.py index c1c8b46f5..fb5263b7f 100644 --- a/database/tests/unit/test_events.py +++ b/database/tests/unit/test_events.py @@ -37,6 +37,11 @@ def test_shelter_repo_sync(dbsession, mock_configuration, mocker): repo.name = "testing" dbsession.commit() + # this wouldn't trigger the publish via SQLAlchemy events (after_update) since it's an unimportant attribute + repo.activated = True + dbsession.commit() + + # this is from the first trigger publish.assert_called_once_with( "projects/test-project-id/topics/test-topic-id", b'{"type": "repo", "sync": "one", "id": 91728376}',