mirror of
https://github.com/GSA/notifications-api.git
synced 2026-02-02 09:26:08 -05:00
Working on getting expiration implemented.
Signed-off-by: Cliff Hill <Clifford.hill@gsa.gov>
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -92,3 +92,7 @@ varsfile*
|
|||||||
secrets.auto.tfvars
|
secrets.auto.tfvars
|
||||||
terraform.tfstate
|
terraform.tfstate
|
||||||
terraform.tfstate.backup
|
terraform.tfstate.backup
|
||||||
|
|
||||||
|
|
||||||
|
# Pyenv
|
||||||
|
.python-version
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
3.9
|
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user