diff --git a/.gitignore b/.gitignore index 08b0bf758..f60b72b58 100644 --- a/.gitignore +++ b/.gitignore @@ -92,3 +92,7 @@ varsfile* secrets.auto.tfvars terraform.tfstate terraform.tfstate.backup + + +# Pyenv +.python-version diff --git a/.python-version b/.python-version deleted file mode 100644 index bd28b9c5c..000000000 --- a/.python-version +++ /dev/null @@ -1 +0,0 @@ -3.9 diff --git a/app/celery/scheduled_tasks.py b/app/celery/scheduled_tasks.py index 38f1d5558..ed325d84a 100644 --- a/app/celery/scheduled_tasks.py +++ b/app/celery/scheduled_tasks.py @@ -16,7 +16,7 @@ from app.config import QueueNames from app.dao.invited_org_user_dao import ( delete_org_invitations_created_more_than_two_days_ago, ) -from app.dao.invited_user_dao import delete_invitations_created_more_than_two_days_ago +from app.dao.invited_user_dao import expire_invitations_created_more_than_two_days_ago from app.dao.jobs_dao import ( dao_set_scheduled_jobs_to_pending, dao_update_job, @@ -68,17 +68,20 @@ def delete_verify_codes(): raise -@notify_celery.task(name="delete-invitations") -def delete_invitations(): +@notify_celery.task(name="expire-or-delete-invitations") +def expire_or_delete_invitations(): try: start = datetime.utcnow() - deleted_invites = delete_invitations_created_more_than_two_days_ago() - deleted_invites += delete_org_invitations_created_more_than_two_days_ago() - current_app.logger.info( - "Delete job started {} finished {} deleted {} invitations".format( - start, datetime.utcnow(), deleted_invites - ) - ) + expired_invites = expire_invitations_created_more_than_two_days_ago() + current_app.logger.info(f"Expire job started {start} finished {datetime.utcnow()} expired {len(expired_invites)} invitations") + except SQLAlchemyError: + current_app.logger.exception("Failed to expire invitations") + raise + + try: + start = datetime.utcnow() + deleted_invites = delete_org_invitations_created_more_than_two_days_ago() + current_app.logger.info(f"Delete job started {start} finished {datetime.utcnow()} deleted {len(deleted_invites)} invitations") except SQLAlchemyError: current_app.logger.exception("Failed to delete invitations") raise diff --git a/app/config.py b/app/config.py index d90b8b54c..a7cc5e65e 100644 --- a/app/config.py +++ b/app/config.py @@ -194,8 +194,8 @@ class Config(object): "schedule": timedelta(minutes=63), "options": {"queue": QueueNames.PERIODIC}, }, - "delete-invitations": { - "task": "delete-invitations", + "expire-or-delete-invitations": { + "task": "expire-or-delete-invitations", "schedule": timedelta(minutes=66), "options": {"queue": QueueNames.PERIODIC}, }, diff --git a/app/dao/invited_user_dao.py b/app/dao/invited_user_dao.py index b952d7fed..4f49ef36c 100644 --- a/app/dao/invited_user_dao.py +++ b/app/dao/invited_user_dao.py @@ -21,11 +21,11 @@ def get_invited_users_for_service(service_id): return InvitedUser.query.filter_by(service_id=service_id).all() -def delete_invitations_created_more_than_two_days_ago(): - deleted = ( +def expire_invitations_created_more_than_two_days_ago(): + expired = ( db.session.query(InvitedUser) .filter(InvitedUser.created_at <= datetime.utcnow() - timedelta(days=2)) - .delete() + .update({InvitedUser.expired: True, InvitedUser.status: "expired"}) ) db.session.commit() - return deleted + return expired diff --git a/tests/app/celery/test_scheduled_tasks.py b/tests/app/celery/test_scheduled_tasks.py index f582169b1..83098c52d 100644 --- a/tests/app/celery/test_scheduled_tasks.py +++ b/tests/app/celery/test_scheduled_tasks.py @@ -11,7 +11,7 @@ from app.celery.scheduled_tasks import ( check_for_missing_rows_in_completed_jobs, check_for_services_with_high_failure_rates_or_sending_to_tv_numbers, check_job_status, - delete_invitations, + expire_or_delete_invitations, delete_verify_codes, replay_created_notifications, run_scheduled_jobs, @@ -44,11 +44,11 @@ def test_should_call_delete_invotations_on_delete_invitations_task( notify_db_session, mocker ): mocker.patch( - "app.celery.scheduled_tasks.delete_invitations_created_more_than_two_days_ago" + "app.celery.scheduled_tasks.expire_invitations_created_more_than_two_days_ago" ) - delete_invitations() + expire_or_delete_invitations() assert ( - scheduled_tasks.delete_invitations_created_more_than_two_days_ago.call_count + scheduled_tasks.expire_invitations_created_more_than_two_days_ago.call_count == 1 ) diff --git a/tests/app/dao/test_invited_user_dao.py b/tests/app/dao/test_invited_user_dao.py index 5acf95b29..4494d7d62 100644 --- a/tests/app/dao/test_invited_user_dao.py +++ b/tests/app/dao/test_invited_user_dao.py @@ -6,7 +6,7 @@ from sqlalchemy.orm.exc import NoResultFound from app import db from app.dao.invited_user_dao import ( - delete_invitations_created_more_than_two_days_ago, + expire_invitations_created_more_than_two_days_ago, get_invited_user_by_id, get_invited_user_by_service_and_id, get_invited_users_for_service, @@ -122,7 +122,7 @@ def test_should_delete_all_invitations_more_than_one_day_old( make_invitation(sample_user, sample_service, age=timedelta(hours=48)) make_invitation(sample_user, sample_service, age=timedelta(hours=48)) assert len(InvitedUser.query.all()) == 2 - delete_invitations_created_more_than_two_days_ago() + expire_invitations_created_more_than_two_days_ago() assert len(InvitedUser.query.all()) == 0 @@ -143,7 +143,7 @@ def test_should_not_delete_invitations_less_than_two_days_old( ) assert len(InvitedUser.query.all()) == 2 - delete_invitations_created_more_than_two_days_ago() + expire_invitations_created_more_than_two_days_ago() assert len(InvitedUser.query.all()) == 1 assert InvitedUser.query.first().email_address == "valid@2.com"