• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

mozilla / fx-private-relay / 8354d07c-7eab-4972-926d-a2104e534166

pending completion
8354d07c-7eab-4972-926d-a2104e534166

Pull #3517

circleci

groovecoder
for MPP-3021: add sentry profiling
Pull Request #3517: for MPP-3021: add sentry profiling

1720 of 2602 branches covered (66.1%)

Branch coverage included in aggregate %.

5602 of 7486 relevant lines covered (74.83%)

18.61 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

75.0
/privaterelay/signals.py
1
from django.apps import apps
1✔
2
from django.conf import settings
1✔
3
from django.contrib.auth.models import User
1✔
4
from django.dispatch import receiver
1✔
5

6
from allauth.account.signals import user_signed_up, user_logged_in
1✔
7
from django.http.request import HttpRequest
1✔
8
from mypy_boto3_ses.client import SESClient
1✔
9
from mypy_boto3_ses.type_defs import ContentTypeDef
1✔
10
from waffle import flag_is_active
1✔
11

12
from emails.apps import EmailsConfig
1✔
13
from emails.utils import get_welcome_email, incr_if_enabled
1✔
14

15
from .ftl_bundles import main as ftl_bundle
1✔
16

17

18
@receiver(user_signed_up)
1✔
19
def record_user_signed_up(request, user, **kwargs):
1✔
20
    incr_if_enabled("user_signed_up", 1)
1✔
21
    # the user_signed_up signal doesn't have access to the response object
22
    # so we have to set a user_created session var for user_logged_in receiver
23
    request.session["user_created"] = True
1✔
24
    request.session.modified = True
1✔
25

26

27
def _ses_message_props(data: str) -> ContentTypeDef:
1✔
28
    return {"Charset": "UTF-8", "Data": data}
1✔
29

30

31
@receiver(user_signed_up)
1✔
32
def send_first_email(request: HttpRequest, user: User, **kwargs):
1✔
33
    if not flag_is_active(request, "welcome_email"):
1✔
34
        return
1✔
35
    app_config = apps.get_app_config("emails")
1✔
36
    assert isinstance(app_config, EmailsConfig)
1✔
37
    ses_client = app_config.ses_client
1✔
38
    assert ses_client
1✔
39
    assert settings.RELAY_FROM_ADDRESS
1✔
40
    ses_client.send_email(
1✔
41
        Destination={
42
            "ToAddresses": [user.email],
43
        },
44
        Source=settings.RELAY_FROM_ADDRESS,
45
        Message={
46
            "Subject": _ses_message_props(
47
                ftl_bundle.format("first-time-user-email-welcome")
48
            ),
49
            "Body": {
50
                "Html": _ses_message_props(get_welcome_email(request, user, "html")),
51
                "Text": _ses_message_props(get_welcome_email(request, user, "txt")),
52
            },
53
        },
54
    )
55

56

57
@receiver(user_logged_in)
1✔
58
def record_user_logged_in(request, user, **kwargs):
1✔
59
    incr_if_enabled("user_logged_in", 1)
×
60
    response = kwargs.get("response")
×
61
    event = "user_logged_in"
×
62
    # the user_signed_up signal doesn't have access to the response object
63
    # so we have to check for user_created session var from user_signed_up
64
    if request.session.get("user_created", False):
×
65
        event = "user_signed_up"
×
66
    if response:
×
67
        response.set_cookie(f"server_ga_event:{event}", event, max_age=5)
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc