Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 18 additions & 1 deletion app/notify_client/__init__.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,35 @@
from contextvars import ContextVar

import requests
from flask import g, has_request_context, request
from flask_login import current_user
from notifications_python_client import __version__
from notifications_python_client.base import BaseAPIClient
from notifications_utils.clients.redis import RequestCache
from notifications_utils.local_vars import LazyLocalGetter
from werkzeug.local import LocalProxy

from app import memo_resetters
from app.extensions import redis_client

cache = RequestCache(redis_client)


_api_client_request_session_context_var: ContextVar[requests.Session] = ContextVar("api_client_request_session")
get_api_client_request_session: LazyLocalGetter[requests.Session] = LazyLocalGetter(
_api_client_request_session_context_var,
lambda: requests.Session(),
)
memo_resetters.append(lambda: get_api_client_request_session.clear())
api_client_request_session = LocalProxy(get_api_client_request_session)


def _attach_current_user(data):
return dict(created_by=current_user.id, **data)


class NotifyAdminAPIClient(BaseAPIClient):
def __init__(self, app):
def __init__(self, app, *args, **kwargs):
try:
base_url = app.config["API_HOST_NAME"]
except RuntimeError as e:
Expand All @@ -26,7 +41,9 @@ def __init__(self, app):

super().__init__(
"x" * 100,
*args,
base_url=base_url,
**kwargs,
)
# our credential lengths aren't what BaseAPIClient's __init__ will expect
# given it's designed for destructuring end-user api keys
Expand Down
4 changes: 2 additions & 2 deletions app/notify_client/api_key_api_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from werkzeug.local import LocalProxy

from app import memo_resetters
from app.notify_client import NotifyAdminAPIClient, _attach_current_user
from app.notify_client import NotifyAdminAPIClient, _attach_current_user, api_client_request_session

# must match key types in notifications-api/app/models.py
KEY_TYPE_NORMAL = "normal"
Expand All @@ -31,7 +31,7 @@ def revoke_api_key(self, service_id, key_id):
_api_key_api_client_context_var: ContextVar[ApiKeyApiClient] = ContextVar("api_key_api_client")
get_api_key_api_client: LazyLocalGetter[ApiKeyApiClient] = LazyLocalGetter(
_api_key_api_client_context_var,
lambda: ApiKeyApiClient(current_app),
lambda: ApiKeyApiClient(current_app, request_session=api_client_request_session),
)
memo_resetters.append(lambda: get_api_key_api_client.clear())
api_key_api_client = LocalProxy(get_api_key_api_client)
4 changes: 2 additions & 2 deletions app/notify_client/billing_api_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from werkzeug.local import LocalProxy

from app import memo_resetters
from app.notify_client import NotifyAdminAPIClient
from app.notify_client import NotifyAdminAPIClient, api_client_request_session


class BillingAPIClient(NotifyAdminAPIClient):
Expand Down Expand Up @@ -78,7 +78,7 @@ def get_data_for_daily_sms_provider_volumes_report(self, start_date, end_date):
_billing_api_client_context_var: ContextVar[BillingAPIClient] = ContextVar("billing_api_client")
get_billing_api_client: LazyLocalGetter[BillingAPIClient] = LazyLocalGetter(
_billing_api_client_context_var,
lambda: BillingAPIClient(current_app),
lambda: BillingAPIClient(current_app, request_session=api_client_request_session),
)
memo_resetters.append(lambda: get_billing_api_client.clear())
billing_api_client = LocalProxy(get_billing_api_client)
4 changes: 2 additions & 2 deletions app/notify_client/complaint_api_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from werkzeug.local import LocalProxy

from app import memo_resetters
from app.notify_client import NotifyAdminAPIClient
from app.notify_client import NotifyAdminAPIClient, api_client_request_session


class ComplaintApiClient(NotifyAdminAPIClient):
Expand All @@ -20,7 +20,7 @@ def get_complaint_count(self, params_dict=None):
_complaint_api_client_context_var: ContextVar[ComplaintApiClient] = ContextVar("complaint_api_client")
get_complaint_api_client: LazyLocalGetter[ComplaintApiClient] = LazyLocalGetter(
_complaint_api_client_context_var,
lambda: ComplaintApiClient(current_app),
lambda: ComplaintApiClient(current_app, request_session=api_client_request_session),
)
memo_resetters.append(lambda: get_complaint_api_client.clear())
complaint_api_client = LocalProxy(get_complaint_api_client)
4 changes: 2 additions & 2 deletions app/notify_client/contact_list_api_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from werkzeug.local import LocalProxy

from app import memo_resetters
from app.notify_client import NotifyAdminAPIClient, _attach_current_user
from app.notify_client import NotifyAdminAPIClient, _attach_current_user, api_client_request_session


class ContactListApiClient(NotifyAdminAPIClient):
Expand Down Expand Up @@ -43,7 +43,7 @@ def delete_contact_list(self, *, service_id, contact_list_id):
_contact_list_api_client_context_var: ContextVar[ContactListApiClient] = ContextVar("contact_list_api_client")
get_contact_list_api_client: LazyLocalGetter[ContactListApiClient] = LazyLocalGetter(
_contact_list_api_client_context_var,
lambda: ContactListApiClient(current_app),
lambda: ContactListApiClient(current_app, request_session=api_client_request_session),
)
memo_resetters.append(lambda: get_contact_list_api_client.clear())
contact_list_api_client = LocalProxy(get_contact_list_api_client)
4 changes: 2 additions & 2 deletions app/notify_client/email_branding_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from werkzeug.local import LocalProxy

from app import memo_resetters
from app.notify_client import NotifyAdminAPIClient, cache
from app.notify_client import NotifyAdminAPIClient, api_client_request_session, cache


class EmailBrandingClient(NotifyAdminAPIClient):
Expand Down Expand Up @@ -64,7 +64,7 @@ def get_orgs_and_services_associated_with_branding(self, branding_id):
_email_branding_client_context_var: ContextVar[EmailBrandingClient] = ContextVar("email_branding_client")
get_email_branding_client: LazyLocalGetter[EmailBrandingClient] = LazyLocalGetter(
_email_branding_client_context_var,
lambda: EmailBrandingClient(current_app),
lambda: EmailBrandingClient(current_app, request_session=api_client_request_session),
)
memo_resetters.append(lambda: get_email_branding_client.clear())
email_branding_client = LocalProxy(get_email_branding_client)
4 changes: 2 additions & 2 deletions app/notify_client/events_api_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from werkzeug.local import LocalProxy

from app import memo_resetters
from app.notify_client import NotifyAdminAPIClient
from app.notify_client import NotifyAdminAPIClient, api_client_request_session


class EventsApiClient(NotifyAdminAPIClient):
Expand All @@ -18,7 +18,7 @@ def create_event(self, event_type, event_data):
_events_api_client_context_var: ContextVar[EventsApiClient] = ContextVar("events_api_client")
get_events_api_client: LazyLocalGetter[EventsApiClient] = LazyLocalGetter(
_events_api_client_context_var,
lambda: EventsApiClient(current_app),
lambda: EventsApiClient(current_app, request_session=api_client_request_session),
)
memo_resetters.append(lambda: get_events_api_client.clear())
events_api_client = LocalProxy(get_events_api_client)
4 changes: 2 additions & 2 deletions app/notify_client/inbound_number_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from werkzeug.local import LocalProxy

from app import memo_resetters
from app.notify_client import NotifyAdminAPIClient, cache
from app.notify_client import NotifyAdminAPIClient, api_client_request_session, cache


class InboundNumberClient(NotifyAdminAPIClient):
Expand All @@ -32,7 +32,7 @@ def add_inbound_number_to_service(self, service_id, inbound_number_id=None):
_inbound_number_client_context_var: ContextVar[InboundNumberClient] = ContextVar("inbound_number_client")
get_inbound_number_client: LazyLocalGetter[InboundNumberClient] = LazyLocalGetter(
_inbound_number_client_context_var,
lambda: InboundNumberClient(current_app),
lambda: InboundNumberClient(current_app, request_session=api_client_request_session),
)
memo_resetters.append(lambda: get_inbound_number_client.clear())
inbound_number_client = LocalProxy(get_inbound_number_client)
8 changes: 4 additions & 4 deletions app/notify_client/invite_api_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,16 @@
from werkzeug.local import LocalProxy

from app import memo_resetters
from app.notify_client import NotifyAdminAPIClient, _attach_current_user, cache
from app.notify_client import NotifyAdminAPIClient, _attach_current_user, api_client_request_session, cache
from app.utils.user_permissions import (
all_ui_permissions,
translate_permissions_from_ui_to_db,
)


class InviteApiClient(NotifyAdminAPIClient):
def __init__(self, app):
super().__init__(app)
def __init__(self, app, *args, **kwargs):
super().__init__(app, *args, **kwargs)

self.admin_url = app.config["ADMIN_BASE_URL"]

Expand Down Expand Up @@ -85,7 +85,7 @@ def accept_invite(self, service_id, invited_user_id):
_invite_api_client_context_var: ContextVar[InviteApiClient] = ContextVar("invite_api_client")
get_invite_api_client: LazyLocalGetter[InviteApiClient] = LazyLocalGetter(
_invite_api_client_context_var,
lambda: InviteApiClient(current_app),
lambda: InviteApiClient(current_app, request_session=api_client_request_session),
)
memo_resetters.append(lambda: get_invite_api_client.clear())
invite_api_client = LocalProxy(get_invite_api_client)
4 changes: 2 additions & 2 deletions app/notify_client/job_api_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

from app import memo_resetters
from app.extensions import redis_client
from app.notify_client import NotifyAdminAPIClient, _attach_current_user, cache
from app.notify_client import NotifyAdminAPIClient, _attach_current_user, api_client_request_session, cache


class JobApiClient(NotifyAdminAPIClient):
Expand Down Expand Up @@ -125,7 +125,7 @@ def cancel_letter_job(self, service_id, job_id):
_job_api_client_context_var: ContextVar[JobApiClient] = ContextVar("job_api_client")
get_job_api_client: LazyLocalGetter[JobApiClient] = LazyLocalGetter(
_job_api_client_context_var,
lambda: JobApiClient(current_app),
lambda: JobApiClient(current_app, request_session=api_client_request_session),
)
memo_resetters.append(lambda: get_job_api_client.clear())
job_api_client = LocalProxy(get_job_api_client)
4 changes: 2 additions & 2 deletions app/notify_client/letter_attachment_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from werkzeug.local import LocalProxy

from app import memo_resetters
from app.notify_client import NotifyAdminAPIClient, cache
from app.notify_client import NotifyAdminAPIClient, api_client_request_session, cache


class LetterAttachmentClient(NotifyAdminAPIClient):
Expand Down Expand Up @@ -37,7 +37,7 @@ def archive_letter_attachment(self, *, letter_attachment_id, user_id, service_id
_letter_attachment_client_context_var: ContextVar[LetterAttachmentClient] = ContextVar("letter_attachment_client")
get_letter_attachment_client: LazyLocalGetter[LetterAttachmentClient] = LazyLocalGetter(
_letter_attachment_client_context_var,
lambda: LetterAttachmentClient(current_app),
lambda: LetterAttachmentClient(current_app, request_session=api_client_request_session),
)
memo_resetters.append(lambda: get_letter_attachment_client.clear())
letter_attachment_client = LocalProxy(get_letter_attachment_client)
4 changes: 2 additions & 2 deletions app/notify_client/letter_branding_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from werkzeug.local import LocalProxy

from app import memo_resetters
from app.notify_client import NotifyAdminAPIClient, cache
from app.notify_client import NotifyAdminAPIClient, api_client_request_session, cache


class LetterBrandingClient(NotifyAdminAPIClient):
Expand Down Expand Up @@ -47,7 +47,7 @@ def get_orgs_and_services_associated_with_branding(self, branding_id):
_letter_branding_client_context_var: ContextVar[LetterBrandingClient] = ContextVar("letter_branding_client")
get_letter_branding_client: LazyLocalGetter[LetterBrandingClient] = LazyLocalGetter(
_letter_branding_client_context_var,
lambda: LetterBrandingClient(current_app),
lambda: LetterBrandingClient(current_app, request_session=api_client_request_session),
)
memo_resetters.append(lambda: get_letter_branding_client.clear())
letter_branding_client = LocalProxy(get_letter_branding_client)
4 changes: 2 additions & 2 deletions app/notify_client/letter_jobs_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from werkzeug.local import LocalProxy

from app import memo_resetters
from app.notify_client import NotifyAdminAPIClient, cache
from app.notify_client import NotifyAdminAPIClient, api_client_request_session, cache


class LetterJobsClient(NotifyAdminAPIClient):
Expand All @@ -18,7 +18,7 @@ def submit_returned_letters(self, references):
_letter_jobs_client_context_var: ContextVar[LetterJobsClient] = ContextVar("letter_jobs_client")
get_letter_jobs_client: LazyLocalGetter[LetterJobsClient] = LazyLocalGetter(
_letter_jobs_client_context_var,
lambda: LetterJobsClient(current_app),
lambda: LetterJobsClient(current_app, request_session=api_client_request_session),
)
memo_resetters.append(lambda: get_letter_jobs_client.clear())
letter_jobs_client = LocalProxy(get_letter_jobs_client)
4 changes: 2 additions & 2 deletions app/notify_client/letter_rate_api_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from werkzeug.local import LocalProxy

from app import memo_resetters
from app.notify_client import NotifyAdminAPIClient, cache
from app.notify_client import NotifyAdminAPIClient, api_client_request_session, cache


class LetterRateApiClient(NotifyAdminAPIClient):
Expand All @@ -17,7 +17,7 @@ def get_letter_rates(self):
_letter_rate_api_client_context_var: ContextVar[LetterRateApiClient] = ContextVar("letter_rate_api_client")
get_letter_rate_api_client: LazyLocalGetter[LetterRateApiClient] = LazyLocalGetter(
_letter_rate_api_client_context_var,
lambda: LetterRateApiClient(current_app),
lambda: LetterRateApiClient(current_app, request_session=api_client_request_session),
)
memo_resetters.append(lambda: get_letter_rate_api_client.clear())
letter_rate_api_client = LocalProxy(get_letter_rate_api_client)
4 changes: 2 additions & 2 deletions app/notify_client/notification_api_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from werkzeug.local import LocalProxy

from app import memo_resetters
from app.notify_client import NotifyAdminAPIClient, _attach_current_user
from app.notify_client import NotifyAdminAPIClient, _attach_current_user, api_client_request_session


class NotificationApiClient(NotifyAdminAPIClient):
Expand Down Expand Up @@ -135,7 +135,7 @@ def get_notifications_count_for_service(self, service_id, template_type, limit_d
_notification_api_client_context_var: ContextVar[NotificationApiClient] = ContextVar("notification_api_client")
get_notification_api_client: LazyLocalGetter[NotificationApiClient] = LazyLocalGetter(
_notification_api_client_context_var,
lambda: NotificationApiClient(current_app),
lambda: NotificationApiClient(current_app, request_session=api_client_request_session),
)
memo_resetters.append(lambda: get_notification_api_client.clear())
notification_api_client = LocalProxy(get_notification_api_client)
8 changes: 4 additions & 4 deletions app/notify_client/org_invite_api_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
from werkzeug.local import LocalProxy

from app import memo_resetters
from app.notify_client import NotifyAdminAPIClient, _attach_current_user
from app.notify_client import NotifyAdminAPIClient, _attach_current_user, api_client_request_session


class OrgInviteApiClient(NotifyAdminAPIClient):
def __init__(self, app):
super().__init__(app)
def __init__(self, app, *args, **kwargs):
super().__init__(app, *args, **kwargs)

self.admin_url = app.config["ADMIN_BASE_URL"]

Expand Down Expand Up @@ -53,7 +53,7 @@ def accept_invite(self, org_id, invited_user_id):
_org_invite_api_client_context_var: ContextVar[OrgInviteApiClient] = ContextVar("org_invite_api_client")
get_org_invite_api_client: LazyLocalGetter[OrgInviteApiClient] = LazyLocalGetter(
_org_invite_api_client_context_var,
lambda: OrgInviteApiClient(current_app),
lambda: OrgInviteApiClient(current_app, request_session=api_client_request_session),
)
memo_resetters.append(lambda: get_org_invite_api_client.clear())
org_invite_api_client = LocalProxy(get_org_invite_api_client)
4 changes: 2 additions & 2 deletions app/notify_client/organisations_api_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

from app import memo_resetters
from app.extensions import redis_client
from app.notify_client import NotifyAdminAPIClient, cache
from app.notify_client import NotifyAdminAPIClient, api_client_request_session, cache


class OrganisationsClient(NotifyAdminAPIClient):
Expand Down Expand Up @@ -166,7 +166,7 @@ def notify_service_member_of_rejected_go_live_request(
_organisations_client_context_var: ContextVar[OrganisationsClient] = ContextVar("organisations_client")
get_organisations_client: LazyLocalGetter[OrganisationsClient] = LazyLocalGetter(
_organisations_client_context_var,
lambda: OrganisationsClient(current_app),
lambda: OrganisationsClient(current_app, request_session=api_client_request_session),
)
memo_resetters.append(lambda: get_organisations_client.clear())
organisations_client = LocalProxy(get_organisations_client)
4 changes: 2 additions & 2 deletions app/notify_client/performance_dashboard_api_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from werkzeug.local import LocalProxy

from app import memo_resetters
from app.notify_client import NotifyAdminAPIClient, cache
from app.notify_client import NotifyAdminAPIClient, api_client_request_session, cache


class PerformanceDashboardAPIClient(NotifyAdminAPIClient):
Expand All @@ -30,7 +30,7 @@ def get_performance_dashboard_stats(
)
get_performance_dashboard_api_client: LazyLocalGetter[PerformanceDashboardAPIClient] = LazyLocalGetter(
_performance_dashboard_api_client_context_var,
lambda: PerformanceDashboardAPIClient(current_app),
lambda: PerformanceDashboardAPIClient(current_app, request_session=api_client_request_session),
)
memo_resetters.append(lambda: get_performance_dashboard_api_client.clear())
performance_dashboard_api_client = LocalProxy(get_performance_dashboard_api_client)
4 changes: 2 additions & 2 deletions app/notify_client/platform_admin_api_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from werkzeug.local import LocalProxy

from app import memo_resetters
from app.notify_client import NotifyAdminAPIClient
from app.notify_client import NotifyAdminAPIClient, api_client_request_session


class AdminApiClient(NotifyAdminAPIClient):
Expand Down Expand Up @@ -37,7 +37,7 @@ def fetch_users_list(
_admin_api_client_context_var: ContextVar[AdminApiClient] = ContextVar("admin_api_client")
get_admin_api_client: LazyLocalGetter[AdminApiClient] = LazyLocalGetter(
_admin_api_client_context_var,
lambda: AdminApiClient(current_app),
lambda: AdminApiClient(current_app, request_session=api_client_request_session),
)
memo_resetters.append(lambda: get_admin_api_client.clear())
admin_api_client = LocalProxy(get_admin_api_client)
Loading