Working on getting expiration implemented.

Signed-off-by: Cliff Hill <Clifford.hill@gsa.gov>
This commit is contained in:
Cliff Hill
2023-11-07 15:28:27 -05:00
parent 570ee6cd86
commit 3e6a7931d8
7 changed files with 30 additions and 24 deletions

4
.gitignore vendored
View File

@@ -92,3 +92,7 @@ varsfile*
secrets.auto.tfvars secrets.auto.tfvars
terraform.tfstate terraform.tfstate
terraform.tfstate.backup terraform.tfstate.backup
# Pyenv
.python-version

View File

@@ -1 +0,0 @@
3.9

View File

@@ -16,7 +16,7 @@ from app.config import QueueNames
from app.dao.invited_org_user_dao import ( from app.dao.invited_org_user_dao import (
delete_org_invitations_created_more_than_two_days_ago, 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 ( from app.dao.jobs_dao import (
dao_set_scheduled_jobs_to_pending, dao_set_scheduled_jobs_to_pending,
dao_update_job, dao_update_job,
@@ -68,17 +68,20 @@ def delete_verify_codes():
raise raise
@notify_celery.task(name="delete-invitations") @notify_celery.task(name="expire-or-delete-invitations")
def delete_invitations(): def expire_or_delete_invitations():
try: try:
start = datetime.utcnow() start = datetime.utcnow()
deleted_invites = delete_invitations_created_more_than_two_days_ago() expired_invites = expire_invitations_created_more_than_two_days_ago()
deleted_invites += delete_org_invitations_created_more_than_two_days_ago() current_app.logger.info(f"Expire job started {start} finished {datetime.utcnow()} expired {len(expired_invites)} invitations")
current_app.logger.info( except SQLAlchemyError:
"Delete job started {} finished {} deleted {} invitations".format( current_app.logger.exception("Failed to expire invitations")
start, datetime.utcnow(), deleted_invites 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: except SQLAlchemyError:
current_app.logger.exception("Failed to delete invitations") current_app.logger.exception("Failed to delete invitations")
raise raise

View File

@@ -194,8 +194,8 @@ class Config(object):
"schedule": timedelta(minutes=63), "schedule": timedelta(minutes=63),
"options": {"queue": QueueNames.PERIODIC}, "options": {"queue": QueueNames.PERIODIC},
}, },
"delete-invitations": { "expire-or-delete-invitations": {
"task": "delete-invitations", "task": "expire-or-delete-invitations",
"schedule": timedelta(minutes=66), "schedule": timedelta(minutes=66),
"options": {"queue": QueueNames.PERIODIC}, "options": {"queue": QueueNames.PERIODIC},
}, },

View File

@@ -21,11 +21,11 @@ def get_invited_users_for_service(service_id):
return InvitedUser.query.filter_by(service_id=service_id).all() return InvitedUser.query.filter_by(service_id=service_id).all()
def delete_invitations_created_more_than_two_days_ago(): def expire_invitations_created_more_than_two_days_ago():
deleted = ( expired = (
db.session.query(InvitedUser) db.session.query(InvitedUser)
.filter(InvitedUser.created_at <= datetime.utcnow() - timedelta(days=2)) .filter(InvitedUser.created_at <= datetime.utcnow() - timedelta(days=2))
.delete() .update({InvitedUser.expired: True, InvitedUser.status: "expired"})
) )
db.session.commit() db.session.commit()
return deleted return expired

View File

@@ -11,7 +11,7 @@ from app.celery.scheduled_tasks import (
check_for_missing_rows_in_completed_jobs, check_for_missing_rows_in_completed_jobs,
check_for_services_with_high_failure_rates_or_sending_to_tv_numbers, check_for_services_with_high_failure_rates_or_sending_to_tv_numbers,
check_job_status, check_job_status,
delete_invitations, expire_or_delete_invitations,
delete_verify_codes, delete_verify_codes,
replay_created_notifications, replay_created_notifications,
run_scheduled_jobs, run_scheduled_jobs,
@@ -44,11 +44,11 @@ def test_should_call_delete_invotations_on_delete_invitations_task(
notify_db_session, mocker notify_db_session, mocker
): ):
mocker.patch( 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 ( 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 == 1
) )

View File

@@ -6,7 +6,7 @@ from sqlalchemy.orm.exc import NoResultFound
from app import db from app import db
from app.dao.invited_user_dao import ( 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_id,
get_invited_user_by_service_and_id, get_invited_user_by_service_and_id,
get_invited_users_for_service, 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))
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 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 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 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 len(InvitedUser.query.all()) == 1
assert InvitedUser.query.first().email_address == "valid@2.com" assert InvitedUser.query.first().email_address == "valid@2.com"