PART 1: Created and implemented enums throughout the codebase to replace hardcoded status strings, improving type safety and reducing the risk of typos.

This commit is contained in:
Beverly Nguyen
2025-07-04 16:37:04 -07:00
parent db20c888f2
commit b73b4ac73e
12 changed files with 132 additions and 45 deletions

View File

@@ -6,6 +6,7 @@ from app.main import main
from app.models.organization import Organization
from app.models.service import Service
from app.models.user import InvitedOrgUser, InvitedUser, OrganizationUsers, User, Users
from app.enums import InvitedUserStatus, InvitedOrgUserStatus
@main.route("/invitation/<token>")
@@ -29,14 +30,14 @@ def accept_invite(token):
abort(403)
if invited_user.status == "cancelled":
if invited_user.status == InvitedUserStatus.CANCELLED.value:
service = Service.from_id(invited_user.service)
return render_template(
"views/cancelled-invitation.html",
from_user=invited_user.from_user.name,
service_name=service.name,
)
if invited_user.status == "accepted":
if invited_user.status == InvitedUserStatus.ACCEPTED.value:
session.pop("invited_user_id", None)
service = Service.from_id(invited_user.service)
return redirect(
@@ -104,7 +105,7 @@ def accept_org_invite(token):
abort(403)
if invited_org_user.status == "cancelled":
if invited_org_user.status == InvitedOrgUserStatus.CANCELLED.value:
organization = Organization.from_id(invited_org_user.organization)
return render_template(
"views/cancelled-invitation.html",
@@ -112,7 +113,7 @@ def accept_org_invite(token):
organization_name=organization.name,
)
if invited_org_user.status == "accepted":
if invited_org_user.status == InvitedOrgUserStatus.ACCEPTED.value:
session.pop("invited_org_user_id", None)
return redirect(
url_for("main.organization_dashboard", org_id=invited_org_user.organization)

View File

@@ -23,6 +23,7 @@ from app import (
notification_api_client,
service_api_client,
)
from app.enums import JobStatus
from app.formatters import get_time_left, message_count_noun
from app.main import main
from app.main.forms import SearchNotificationsForm
@@ -398,7 +399,7 @@ def get_job_partials(job):
counts=_get_job_counts(job),
status=filter_args["status"],
notifications_deleted=(
job.status == "finished" and not notifications["notifications"]
job.status == JobStatus.FINISHED.value and not notifications["notifications"]
),
)
service_data_retention_days = current_service.get_days_of_retention(

View File

@@ -15,6 +15,7 @@ from flask import (
)
from app import redis_client, user_api_client
from app.enums import InvitedUserStatus
from app.main import main
from app.main.forms import (
RegisterUserFromOrgInviteForm,
@@ -254,14 +255,14 @@ def get_invited_user_email_address(invited_user_id):
def invited_user_accept_invite(invited_user_id):
invited_user = InvitedUser.by_id(invited_user_id)
if invited_user.status == "expired":
if invited_user.status == InvitedUserStatus.EXPIRED.value:
current_app.logger.error("User invitation has expired")
flash(
"Your invitation has expired; please contact the person who invited you for additional help."
)
abort(401)
if invited_user.status == "cancelled":
if invited_user.status == InvitedUserStatus.CANCELLED.value:
current_app.logger.error("User invitation has been cancelled")
flash(
"Your invitation is no longer valid; please contact the person who invited you for additional help."

View File

@@ -52,6 +52,7 @@ from app.utils import DELIVERED_STATUSES, FAILURE_STATUSES, SENDING_STATUSES
from app.utils.time import parse_naive_dt
from app.utils.user import user_has_permissions, user_is_platform_admin
from notifications_python_client.errors import HTTPError
from app.enums import VerificationStatus
PLATFORM_ADMIN_SERVICE_PERMISSIONS = OrderedDict(
[
@@ -397,10 +398,10 @@ def get_service_verify_reply_to_address_partials(service_id, notification_id):
if replace:
existing = current_service.get_email_reply_to_address(replace)
existing_is_default = existing["is_default"]
verification_status = "pending"
verification_status = VerificationStatus.PENDING.value
is_default = True if (request.args.get("is_default", False) == "True") else False
if notification["status"] in DELIVERED_STATUSES:
verification_status = "success"
verification_status = VerificationStatus.SUCCESS.value
if notification["to"] not in [
i["email_address"] for i in current_service.email_reply_to_addresses
]:
@@ -441,7 +442,7 @@ def get_service_verify_reply_to_address_partials(service_id, notification_id):
first_email_address=first_email_address,
replace=replace,
),
"stop": 0 if verification_status == "pending" else 1,
"stop": 0 if verification_status == VerificationStatus.PENDING.value else 1,
}