Skip to content

chore(deps): update dependency django to v6#3644

Open
renovate[bot] wants to merge 2 commits intomainfrom
renovate/django-6.x
Open

chore(deps): update dependency django to v6#3644
renovate[bot] wants to merge 2 commits intomainfrom
renovate/django-6.x

Conversation

@renovate
Copy link
Copy Markdown
Contributor

@renovate renovate Bot commented Apr 8, 2026

This PR contains the following updates:

Package Change Age Confidence
Django (changelog) ==5.2.13==6.0.4 age confidence

Release Notes

django/django (Django)

v6.0.4

Compare Source

v6.0.3

Compare Source

v6.0.2

Compare Source

v6.0.1

Compare Source

v6.0

Compare Source


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Enabled.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate Bot added the dependencies Third-party library dependencies. label Apr 8, 2026
@renovate renovate Bot enabled auto-merge (squash) April 8, 2026 19:04
@renovate renovate Bot added the dependencies Third-party library dependencies. label Apr 8, 2026
@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 8, 2026

❌ 45 Tests Failed:

Tests completed Failed Passed Skipped
232 45 187 0
View the top 3 failed test(s) by shortest run time
weblate_web.payments.tests.BackendTest::test_reject
Stack Traces | 0.023s run time
self = <weblate_web.payments.tests.BackendTest testMethod=test_reject>

    def test_reject(self) -> None:
        backend = get_backend("reject")(self.payment)
        self.assertIsNone(backend.initiate(None, "", ""))
        self.check_payment(Payment.PENDING)
>       self.assertFalse(backend.complete(None))
                         ^^^^^^^^^^^^^^^^^^^^^^

weblate_web/payments/tests.py:272: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
weblate_web/payments/backends.py:361: in complete
    self.failure()
weblate_web/payments/backends.py:464: in failure
    self.send_notification("payment_failed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60fc5a8170>
msg = <email.message.EmailMessage object at 0x7f60f5b48530>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.payments.tests.ThePay2Test::test_payment_cancelled
Stack Traces | 0.024s run time
self = <weblate_web.payments.tests.ThePay2Test testMethod=test_payment_cancelled>

    @responses.activate
    def test_payment_cancelled(self) -> None:
        thepay_mock_create_payment()
        responses.get(
            f"https://demo.api.thepay..../projects/42/payments/{self.payment.pk}?merchant_id=00000000-0000-0000-0000-000000000000",
            json={
                "uid": "efd7d8e6-2fa3-3c46-b475-51762331bf56",
                "project_id": 1,
                "order_id": "CZ12131415",
                "state": "error",
                "events": [
                    {
                        "occured_at": "2021-04-20T11:05:49.000000Z",
                        "type": "payment_cancelled",
                    }
                ],
            },
        )
        response = self.backend.initiate(None, "", "")
        self.assertIsNotNone(response)
        self.assertRedirects(
            response,
            "https://gate.thepay.cz/12345/pay",
            fetch_redirect_response=False,
        )
        self.check_payment(Payment.PENDING)
>       self.assertFalse(self.backend.complete(None))
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^

weblate_web/payments/tests.py:524: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
weblate_web/payments/backends.py:361: in complete
    self.failure()
weblate_web/payments/backends.py:464: in failure
    self.send_notification("payment_failed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60f5bb1c70>
msg = <email.message.EmailMessage object at 0x7f60fc3e6270>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.payments.tests.ThePay2Test::test_payment_error
Stack Traces | 0.024s run time
self = <weblate_web.payments.tests.ThePay2Test testMethod=test_payment_error>

    @responses.activate
    def test_payment_error(self) -> None:
        thepay_mock_create_payment()
        responses.get(
            f"https://demo.api.thepay..../projects/42/payments/{self.payment.pk}?merchant_id=00000000-0000-0000-0000-000000000000",
            json={
                "uid": "efd7d8e6-2fa3-3c46-b475-51762331bf56",
                "project_id": 1,
                "order_id": "CZ12131415",
                "state": "error",
            },
        )
        response = self.backend.initiate(None, "", "")
        self.assertIsNotNone(response)
        self.assertRedirects(
            response,
            "https://gate.thepay.cz/12345/pay",
            fetch_redirect_response=False,
        )
        self.check_payment(Payment.PENDING)
>       self.assertFalse(self.backend.complete(None))
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^

weblate_web/payments/tests.py:550: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
weblate_web/payments/backends.py:361: in complete
    self.failure()
weblate_web/payments/backends.py:464: in failure
    self.send_notification("payment_failed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60fdd4f7d0>
msg = <email.message.EmailMessage object at 0x7f60fd01f8c0>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.payments.tests.ThePay2Test::test_pay_recurring_error_blank_message
Stack Traces | 0.025s run time
self = <weblate_web.payments.tests.ThePay2Test testMethod=test_pay_recurring_error_blank_message>

    @responses.activate
    def test_pay_recurring_error_blank_message(self) -> None:
        # Modify backend payment as it has a copy
        self.backend.payment.repeat = Payment.objects.create(
            customer=self.customer,
            amount=100,
            description="Test Item",
            backend=self.backend_name,
        )
        self.backend.payment.save()
        responses.post(
            f"https://demo.api.thepay..../projects/42/payments/{self.backend.payment.repeat.pk}/savedauthorization?merchant_id=00000000-0000-0000-0000-000000000000",
            json={
                "state": "error",
                "message": "",
                "parent": {"recurring_payments_available": False},
            },
        )
        self.assertIsNone(self.backend.initiate(None, "", ""))
        self.check_payment(Payment.PENDING)
>       self.assertFalse(self.backend.complete(None))
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^

weblate_web/payments/tests.py:680: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
weblate_web/payments/backends.py:361: in complete
    self.failure()
weblate_web/payments/backends.py:464: in failure
    self.send_notification("payment_failed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60f5dabc20>
msg = <email.message.EmailMessage object at 0x7f60f5dab2c0>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.payments.tests.ThePay2Test::test_pay_recurring_error_no_message
Stack Traces | 0.025s run time
self = <weblate_web.payments.tests.ThePay2Test testMethod=test_pay_recurring_error_no_message>

    @responses.activate
    def test_pay_recurring_error_no_message(self) -> None:
        # Modify backend payment as it has a copy
        self.backend.payment.repeat = Payment.objects.create(
            customer=self.customer,
            amount=100,
            description="Test Item",
            backend=self.backend_name,
        )
        self.backend.payment.save()
        responses.post(
            f"https://demo.api.thepay..../projects/42/payments/{self.backend.payment.repeat.pk}/savedauthorization?merchant_id=00000000-0000-0000-0000-000000000000",
            json={
                "state": "error",
            },
        )
        self.assertIsNone(self.backend.initiate(None, "", ""))
        self.check_payment(Payment.PENDING)
>       self.assertFalse(self.backend.complete(None))
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^

weblate_web/payments/tests.py:706: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
weblate_web/payments/backends.py:361: in complete
    self.failure()
weblate_web/payments/backends.py:464: in failure
    self.send_notification("payment_failed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60f49dcfe0>
msg = <email.message.EmailMessage object at 0x7f60f49dfe00>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.payments.tests.ThePay2Test::test_pay_recurring_error
Stack Traces | 0.026s run time
self = <weblate_web.payments.tests.ThePay2Test testMethod=test_pay_recurring_error>

    @responses.activate
    def test_pay_recurring_error(self) -> None:
        # Modify backend payment as it has a copy
        self.backend.payment.repeat = Payment.objects.create(
            customer=self.customer,
            amount=100,
            description="Test Item",
            backend=self.backend_name,
        )
        self.backend.payment.save()
        responses.post(
            f"https://demo.api.thepay..../projects/42/payments/{self.backend.payment.repeat.pk}/savedauthorization?merchant_id=00000000-0000-0000-0000-000000000000",
            json={
                "state": "error",
                "message": "Failed card",
                "parent": {"recurring_payments_available": True},
            },
        )
        self.assertIsNone(self.backend.initiate(None, "", ""))
        self.check_payment(Payment.PENDING)
>       self.assertFalse(self.backend.complete(None))
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^

weblate_web/payments/tests.py:654: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
weblate_web/payments/backends.py:361: in complete
    self.failure()
weblate_web/payments/backends.py:464: in failure
    self.send_notification("payment_failed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60f5b81b80>
msg = <email.message.EmailMessage object at 0x7f60f460ecf0>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.ExpiryTest::test_expiring_donate_notify_user
Stack Traces | 0.37s run time
self = <weblate_web.tests.ExpiryTest testMethod=test_expiring_donate_notify_user>

    def test_expiring_donate_notify_user(self) -> None:
        self.create_donation(years=0, days=7, recurring="")
>       RecurringPaymentsCommand.notify_expiry(force_summary=True)

weblate_web/tests.py:2181: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../management/commands/recurring_payments.py:112: in notify_expiry
    donation.send_notification("payment_missing")
weblate_web/models.py:249: in send_notification
    self.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60fd2c2f60>
msg = <email.message.EmailMessage object at 0x7f6102e26db0>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.ExpiryTest::test_expiring_donate_notify_user_extra_customer_notification_before_default
Stack Traces | 0.37s run time
self = <weblate_web.tests.ExpiryTest testMethod=test_expiring_donate_notify_user_extra_customer_notification_before_default>

    def test_expiring_donate_notify_user_extra_customer_notification_before_default(
        self,
    ) -> None:
        donation = self.create_donation(years=0, days=45, recurring="")
        donation.customer.upcoming_payment_notification_days = 45
        donation.customer.save(update_fields=["upcoming_payment_notification_days"])
>       RecurringPaymentsCommand.notify_expiry(force_summary=True)

weblate_web/tests.py:2213: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../management/commands/recurring_payments.py:112: in notify_expiry
    donation.send_notification("payment_missing")
weblate_web/models.py:249: in send_notification
    self.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60fde609b0>
msg = <email.message.EmailMessage object at 0x7f60fd32cc80>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.ExpiryTest::test_expiring_donate_notify_user_extra_customer_notification
Stack Traces | 0.371s run time
self = <weblate_web.tests.ExpiryTest testMethod=test_expiring_donate_notify_user_extra_customer_notification>

    def test_expiring_donate_notify_user_extra_customer_notification(self) -> None:
        donation = self.create_donation(years=0, days=14, recurring="")
        donation.customer.upcoming_payment_notification_days = 14
        donation.customer.save(update_fields=["upcoming_payment_notification_days"])
>       RecurringPaymentsCommand.notify_expiry(force_summary=True)

weblate_web/tests.py:2201: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../management/commands/recurring_payments.py:112: in notify_expiry
    donation.send_notification("payment_missing")
weblate_web/models.py:249: in send_notification
    self.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60fddfa450>
msg = <email.message.EmailMessage object at 0x7f60fd8ac260>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.ExpiryTest::test_expiring_donate
Stack Traces | 0.374s run time
self = <weblate_web.tests.ExpiryTest testMethod=test_expiring_donate>

    def test_expiring_donate(self) -> None:
        self.create_donation(years=0, days=-2, recurring="")
>       RecurringPaymentsCommand.notify_expiry(force_summary=True)

weblate_web/tests.py:2165: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../management/commands/recurring_payments.py:124: in notify_expiry
    send_notification(
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60fd8aec30>
msg = <email.message.EmailMessage object at 0x7f60fd8ad010>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.ExpiryTest::test_expiring_subscription_notify_user_extra_customer_notification_before_default
Stack Traces | 0.384s run time
self = <weblate_web.tests.ExpiryTest testMethod=test_expiring_subscription_notify_user_extra_customer_notification_before_default>

    def test_expiring_subscription_notify_user_extra_customer_notification_before_default(
        self,
    ) -> None:
        service = self.create_service(years=0, days=45, recurring="")
        service.customer.upcoming_payment_notification_days = 45
        service.customer.save(update_fields=["upcoming_payment_notification_days"])
>       RecurringPaymentsCommand.notify_expiry(force_summary=True)

weblate_web/tests.py:2279: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../management/commands/recurring_payments.py:84: in notify_expiry
    subscription.send_notification("payment_missing")
weblate_web/models.py:1082: in send_notification
    self.service.customer.send_notification(notification, subscription=self)
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f6104dda120>
msg = <email.message.EmailMessage object at 0x7f6104dd8c20>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.ExpiryTest::test_expiring_subscription_notify_user_extra_customer_notification
Stack Traces | 0.385s run time
self = <weblate_web.tests.ExpiryTest testMethod=test_expiring_subscription_notify_user_extra_customer_notification>

    def test_expiring_subscription_notify_user_extra_customer_notification(
        self,
    ) -> None:
        service = self.create_service(years=0, days=14, recurring="")
        service.customer.upcoming_payment_notification_days = 14
        service.customer.save(update_fields=["upcoming_payment_notification_days"])
>       RecurringPaymentsCommand.notify_expiry(force_summary=True)

weblate_web/tests.py:2266: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../management/commands/recurring_payments.py:84: in notify_expiry
    subscription.send_notification("payment_missing")
weblate_web/models.py:1082: in send_notification
    self.service.customer.send_notification(notification, subscription=self)
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60fc5be7b0>
msg = <email.message.EmailMessage object at 0x7f60fc5be9f0>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.ExpiryTest::test_expiring_subscription_notify_user
Stack Traces | 0.39s run time
self = <weblate_web.tests.ExpiryTest testMethod=test_expiring_subscription_notify_user>

    def test_expiring_subscription_notify_user(self) -> None:
        self.create_service(years=0, days=7, recurring="")
>       RecurringPaymentsCommand.notify_expiry(force_summary=True)

weblate_web/tests.py:2245: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../management/commands/recurring_payments.py:84: in notify_expiry
    subscription.send_notification("payment_missing")
weblate_web/models.py:1082: in send_notification
    self.service.customer.send_notification(notification, subscription=self)
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60fc5bd0a0>
msg = <email.message.EmailMessage object at 0x7f60fc09d490>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.ExpiryTest::test_expiring_monthly_subscription_notify_user_31_days_before
Stack Traces | 0.393s run time
self = <weblate_web.tests.ExpiryTest testMethod=test_expiring_monthly_subscription_notify_user_31_days_before>

    def test_expiring_monthly_subscription_notify_user_31_days_before(self) -> None:
        service = self.create_service(
            years=0, days=31, recurring="", package="test:test-1-m"
        )
        service.customer.upcoming_payment_notification_days = 31
        service.customer.full_clean()
        service.customer.save(update_fields=["upcoming_payment_notification_days"])
>       RecurringPaymentsCommand.notify_expiry(force_summary=True)

weblate_web/tests.py:2292: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../management/commands/recurring_payments.py:84: in notify_expiry
    subscription.send_notification("payment_missing")
weblate_web/models.py:1082: in send_notification
    self.service.customer.send_notification(notification, subscription=self)
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60fd33e0f0>
msg = <email.message.EmailMessage object at 0x7f60fddc07a0>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.ExpiryTest::test_expiring_subscription
Stack Traces | 0.394s run time
self = <weblate_web.tests.ExpiryTest testMethod=test_expiring_subscription>

    def test_expiring_subscription(self) -> None:
        self.create_service(years=0, days=-2, recurring="")
>       RecurringPaymentsCommand.notify_expiry(force_summary=True)

weblate_web/tests.py:2227: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../management/commands/recurring_payments.py:124: in notify_expiry
    send_notification(
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60fff6f7d0>
msg = <email.message.EmailMessage object at 0x7f60fc5be0c0>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.ExpiryTest::test_expiring_subscription_notify_user_extra_customer_notification_disabled
Stack Traces | 0.394s run time
self = <weblate_web.tests.ExpiryTest testMethod=test_expiring_subscription_notify_user_extra_customer_notification_disabled>

    def test_expiring_subscription_notify_user_extra_customer_notification_disabled(
        self,
    ) -> None:
        service = self.create_service(years=0, days=14, recurring="")
        service.customer.upcoming_payment_notification_days = 0
        service.customer.save(update_fields=["upcoming_payment_notification_days"])
>       RecurringPaymentsCommand.notify_expiry(force_summary=True)

weblate_web/tests.py:2305: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../management/commands/recurring_payments.py:124: in notify_expiry
    send_notification(
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f6102ec0e00>
msg = <email.message.EmailMessage object at 0x7f60f4802b40>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.ExpiryTest::test_expiring_recurring_donate_notify_user
Stack Traces | 0.396s run time
self = <weblate_web.tests.ExpiryTest testMethod=test_expiring_recurring_donate_notify_user>

    def test_expiring_recurring_donate_notify_user(self) -> None:
        self.create_donation(years=0, days=7)
>       RecurringPaymentsCommand.notify_expiry(force_summary=True)

weblate_web/tests.py:2192: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../management/commands/recurring_payments.py:109: in notify_expiry
    donation.send_notification("payment_upcoming")
weblate_web/models.py:249: in send_notification
    self.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60f5dc4b60>
msg = <email.message.EmailMessage object at 0x7f60fd8c8ec0>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.ExpiryTest::test_expiring_donate_notify_user_extra_customer_notification_disabled
Stack Traces | 0.398s run time
self = <weblate_web.tests.ExpiryTest testMethod=test_expiring_donate_notify_user_extra_customer_notification_disabled>

    def test_expiring_donate_notify_user_extra_customer_notification_disabled(
        self,
    ) -> None:
        donation = self.create_donation(years=0, days=14, recurring="")
        donation.customer.upcoming_payment_notification_days = 0
        donation.customer.save(update_fields=["upcoming_payment_notification_days"])
>       RecurringPaymentsCommand.notify_expiry(force_summary=True)

weblate_web/tests.py:2222: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../management/commands/recurring_payments.py:124: in notify_expiry
    send_notification(
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60fddc35f0>
msg = <email.message.EmailMessage object at 0x7f60fddc3b90>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.ExpiryTest::test_expiring_recurring_subscription_notify_user
Stack Traces | 0.4s run time
self = <weblate_web.tests.ExpiryTest testMethod=test_expiring_recurring_subscription_notify_user>

    def test_expiring_recurring_subscription_notify_user(self) -> None:
        self.create_service(years=0, days=7)
>       RecurringPaymentsCommand.notify_expiry(force_summary=True)

weblate_web/tests.py:2254: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../management/commands/recurring_payments.py:81: in notify_expiry
    subscription.send_notification("payment_upcoming")
weblate_web/models.py:1082: in send_notification
    self.service.customer.send_notification(notification, subscription=self)
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60fd8c95e0>
msg = <email.message.EmailMessage object at 0x7f60f46f03b0>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.ExpiryTest::test_expiring_subscription_notify_user_lists_unpaid_invoices_and_recent_proformas
Stack Traces | 0.457s run time
self = <weblate_web.tests.ExpiryTest testMethod=test_expiring_subscription_notify_user_lists_unpaid_invoices_and_recent_proformas>

    def test_expiring_subscription_notify_user_lists_unpaid_invoices_and_recent_proformas(
        self,
    ) -> None:
        service = self.create_service(years=0, days=7)
        cases = self._prepare_upcoming_invoice_cases(service.customer)
    
>       RecurringPaymentsCommand.notify_expiry(force_summary=True)

weblate_web/tests.py:2314: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../management/commands/recurring_payments.py:81: in notify_expiry
    subscription.send_notification("payment_upcoming")
weblate_web/models.py:1082: in send_notification
    self.service.customer.send_notification(notification, subscription=self)
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60f4802480>
msg = <email.message.EmailMessage object at 0x7f60f48037a0>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.PaymentsTest::test_reject
Stack Traces | 0.539s run time
self = <weblate_web.tests.PaymentsTest testMethod=test_reject>

    @override_settings(PAYMENT_DEBUG=True)
    def test_reject(self) -> None:
        payment, url, _dummy = self.prepare_payment()
>       response = self.client.post(url, {"method": "reject"})
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

weblate_web/tests.py:1308: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:1156: in post
    response = super().post(
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:499: in post
    return self.generic(
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:671: in generic
    return self.request(**r)
           ^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:1090: in request
    self.check_exception(response)
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:805: in check_exception
    raise exc_value
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/handlers/exception.py:55: in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/handlers/base.py:198: in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../views/generic/base.py:106: in view
    return self.dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/views.py:441: in dispatch
    return super().dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../views/generic/base.py:145: in dispatch
    return handler(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../views/generic/edit.py:151: in post
    return self.form_valid(form)
           ^^^^^^^^^^^^^^^^^^^^^
weblate_web/views.py:484: in form_valid
    backend.complete(self.request)
weblate_web/payments/backends.py:361: in complete
    self.failure()
weblate_web/payments/backends.py:464: in failure
    self.send_notification("payment_failed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60f6f3ee40>
msg = <email.message.EmailMessage object at 0x7f60f6f3eb40>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.payments.tests.BackendTest::test_proforma
Stack Traces | 0.67s run time
self = <weblate_web.payments.tests.BackendTest testMethod=test_proforma>

    @responses.activate
    @override_settings(
        FIO_TOKEN="test-token",  # noqa: S106
    )
    def test_proforma(self) -> None:
        mock_vies()
        cnb_mock_rates()
        backend = get_backend("fio-bank")(self.payment)
>       self.assertIsNotNone(backend.initiate(None, "", "/complete/"))
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

weblate_web/payments/tests.py:306: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
weblate_web/payments/backends.py:334: in initiate
    result = self.perform(request, back_url, complete_url)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/backends.py:538: in perform
    self.send_notification("payment_pending")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60f4340c20>
msg = <email.message.EmailMessage object at 0x7f60f5b4b170>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.payments.tests.BackendTest::test_pending
Stack Traces | 1.1s run time
self = <weblate_web.payments.tests.BackendTest testMethod=test_pending>

    def test_pending(self) -> None:
        backend = get_backend("pending")(self.payment)
        self.assertIsNotNone(backend.initiate(None, "", ""))
        self.check_payment(Payment.PENDING)
>       self.assertTrue(backend.complete(None))
                        ^^^^^^^^^^^^^^^^^^^^^^

weblate_web/payments/tests.py:281: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
weblate_web/payments/backends.py:359: in complete
    self.success()
weblate_web/payments/backends.py:458: in success
    self.send_notification("payment_completed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60fc358470>
msg = <email.message.EmailMessage object at 0x7f60fc51a930>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.payments.tests.ThePay2Test::test_pay_recurring
Stack Traces | 1.1s run time
self = <weblate_web.payments.tests.ThePay2Test testMethod=test_pay_recurring>

    @responses.activate
    def test_pay_recurring(self) -> None:
        # Modify backend payment as it has a copy
        self.backend.payment.repeat = Payment.objects.create(
            customer=self.customer,
            amount=100,
            description="Test Item",
            backend=self.backend_name,
        )
        self.backend.payment.save()
        responses.post(
            f"https://demo.api.thepay..../projects/42/payments/{self.backend.payment.repeat.pk}/savedauthorization?merchant_id=00000000-0000-0000-0000-000000000000",
            json={
                "state": "paid",
                "parent": {"recurring_payments_available": True},
            },
        )
        self.assertIsNone(self.backend.initiate(None, "", ""))
        self.check_payment(Payment.PENDING)
>       self.assertTrue(self.backend.complete(None))
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^

weblate_web/payments/tests.py:629: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
weblate_web/payments/backends.py:359: in complete
    self.success()
weblate_web/payments/backends.py:458: in success
    self.send_notification("payment_completed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60f49a0cb0>
msg = <email.message.EmailMessage object at 0x7f60f5b81d90>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.payments.tests.BackendTest::test_invoice_vs
Stack Traces | 1.24s run time
self = <weblate_web.payments.tests.BackendTest testMethod=test_invoice_vs>

    @responses.activate
    @override_settings(
        FIO_TOKEN="test-token",  # noqa: S106
    )
    def test_invoice_vs(self) -> None:
        # Czech bank notation
>       self.test_invoice_bank(format_string="VS{}/SS/KS")

weblate_web/payments/tests.py:392: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.12.13......................../x64/lib/python3.12.../site-packages/responses/__init__.py:232: in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13......................../x64/lib/python3.12.../django/test/utils.py:458: in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/tests.py:370: in test_invoice_bank
    FioBank.fetch_payments()
.../hostedtoolcache/Python/3.12.13......................../x64/lib/python3.12.../django/utils/decorators.py:48: in _wrapper
    return bound_method(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13......................../x64/lib/python3.12.../views/decorators/debug.py:75: in sensitive_variables_wrapper
    return func(*func_args, **func_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/backends.py:651: in fetch_payments
    backend.success()
weblate_web/payments/backends.py:458: in success
    self.send_notification("payment_completed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13......................../x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13......................../x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13......................../x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f6107975610>
msg = <email.message.EmailMessage object at 0x7f60fc35a7b0>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13......................../x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.payments.tests.BackendTest::test_invoice_bank
Stack Traces | 1.25s run time
self = <weblate_web.payments.tests.BackendTest testMethod=test_invoice_bank>
format_string = '{}'

    @responses.activate
    @override_settings(
        FIO_TOKEN="test-token",  # noqa: S106
    )
    def test_invoice_bank(self, format_string="{}") -> None:
        mock_vies()
        cnb_mock_rates()
        customer = Customer.objects.create(**CUSTOMER)
        invoice = Invoice.objects.create(
            customer=customer,
            kind=InvoiceKind.INVOICE,
            category=InvoiceCategory.HOSTING,
            vat_rate=21,
        )
        invoice.invoiceitem_set.create(
            description="Test item",
            unit_price=100,
        )
        invoice.generate_files()
    
        responses.add(responses.GET, FIO_API, body=json.dumps(FIO_TRASACTIONS))
        FioBank.fetch_payments()
        self.assertFalse(invoice.paid_payment_set.exists())
        self.assertEqual(len(mail.outbox), 0)
    
        received = deepcopy(FIO_TRASACTIONS)
        transaction = received["accountStatement"]["transactionList"]["transaction"]  # type: ignore[index]
        payment_message = format_string.format(invoice.number)
        transaction[0]["column16"]["value"] = payment_message
        transaction[1]["column16"]["value"] = payment_message
        transaction[1]["column1"]["value"] = int(invoice.total_amount)
        responses.replace(responses.GET, FIO_API, body=json.dumps(received))
>       FioBank.fetch_payments()

weblate_web/payments/tests.py:370: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.12.13................../x64/lib/python3.12.../django/utils/decorators.py:48: in _wrapper
    return bound_method(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13................../x64/lib/python3.12.../views/decorators/debug.py:75: in sensitive_variables_wrapper
    return func(*func_args, **func_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/backends.py:651: in fetch_payments
    backend.success()
weblate_web/payments/backends.py:458: in success
    self.send_notification("payment_completed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13................../x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13................../x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13................../x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60fc09e3f0>
msg = <email.message.EmailMessage object at 0x7f60fdcc8e60>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13................../x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.payments.tests.ThePay2Test::test_pay
Stack Traces | 1.29s run time
self = <weblate_web.payments.tests.ThePay2Test testMethod=test_pay>

    @responses.activate
    def test_pay(self) -> None:
        thepay_mock_create_payment()
        thepay_mock_payment(self.payment.pk)
        response = self.backend.initiate(None, "", "")
        self.assertIsNotNone(response)
        self.assertRedirects(
            response,
            "https://gate.thepay.cz/12345/pay",
            fetch_redirect_response=False,
        )
        self.check_payment(Payment.PENDING)
>       self.assertTrue(self.backend.complete(None))
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^

weblate_web/payments/tests.py:469: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
weblate_web/payments/backends.py:359: in complete
    self.success()
weblate_web/payments/backends.py:458: in success
    self.send_notification("payment_completed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60f49ea900>
msg = <email.message.EmailMessage object at 0x7f60f5de3ef0>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.payments.tests.BackendTest::test_pay
Stack Traces | 1.3s run time
self = <weblate_web.payments.tests.BackendTest testMethod=test_pay>

    def test_pay(self) -> None:
        backend = get_backend("pay")(self.payment)
        self.assertIsNone(backend.initiate(None, "", ""))
        self.check_payment(Payment.PENDING)
>       self.assertTrue(backend.complete(None))
                        ^^^^^^^^^^^^^^^^^^^^^^

weblate_web/payments/tests.py:263: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
weblate_web/payments/backends.py:359: in complete
    self.success()
weblate_web/payments/backends.py:458: in success
    self.send_notification("payment_completed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60fdafb8f0>
msg = <email.message.EmailMessage object at 0x7f6107978590>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.payments.tests.BackendTest::test_invoice_url
Stack Traces | 1.3s run time
self = <weblate_web.payments.tests.BackendTest testMethod=test_invoice_url>

    @responses.activate
    @override_settings(
        FIO_TOKEN="test-token",  # noqa: S106
    )
    def test_invoice_url(self) -> None:
        mock_vies()
        cnb_mock_rates()
        customer = Customer.objects.create(**CUSTOMER)
        invoice = Invoice.objects.create(
            customer=customer,
            kind=InvoiceKind.INVOICE,
            category=InvoiceCategory.HOSTING,
            vat_rate=21,
        )
        invoice.invoiceitem_set.create(
            description="Test item",
            unit_price=100,
        )
        invoice.generate_files()
    
        url = cast("str", invoice.get_payment_url())
        self.assertIsNotNone(url)
    
        # Trigger payment what creates an empty payment object
        self.client.get(url, follow=True)
    
        received = deepcopy(FIO_TRASACTIONS)
        transaction = received["accountStatement"]["transactionList"]["transaction"]  # type: ignore[index]
        transaction[0]["column16"]["value"] = invoice.number
        transaction[1]["column16"]["value"] = invoice.number
        transaction[1]["column1"]["value"] = int(invoice.total_amount)
        responses.add(responses.GET, FIO_API, body=json.dumps(received))
>       FioBank.fetch_payments()

weblate_web/payments/tests.py:434: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.12.13................../x64/lib/python3.12.../django/utils/decorators.py:48: in _wrapper
    return bound_method(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13................../x64/lib/python3.12.../views/decorators/debug.py:75: in sensitive_variables_wrapper
    return func(*func_args, **func_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/backends.py:651: in fetch_payments
    backend.success()
weblate_web/payments/backends.py:458: in success
    self.send_notification("payment_completed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13................../x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13................../x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13................../x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f610797f350>
msg = <email.message.EmailMessage object at 0x7f60fc3e07a0>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13................../x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.PaymentTest::test_fosdem_donation
Stack Traces | 1.31s run time
self = <weblate_web.tests.PaymentTest testMethod=test_fosdem_donation>

    @override_settings(**THEPAY2_MOCK_SETTINGS)
    @responses.activate
    def test_fosdem_donation(self) -> None:
        thepay_mock_create_payment()
    
        response = self.client.get("/fosdem/donate/", follow=True)
        self.assertContains(response, "Please provide your name")
        payment = Payment.objects.all().get()
        self.assertEqual(payment.amount, 30)
        self.assertEqual(payment.state, Payment.NEW)
        customer_url = reverse("payment-customer", kwargs={"pk": payment.uuid})
        payment_url = reverse("payment", kwargs={"pk": payment.uuid})
        self.assertRedirects(response, customer_url)
        response = self.client.post(
            customer_url, {"name": "FOSDEM Visitor", "country": "BE"}, follow=True
        )
        self.assertContains(response, "Please choose payment method")
        response = self.client.post(payment_url, {"method": "thepay2-card"})
        self.assertEqual(response.status_code, 302)
        self.assertTrue(response.url.startswith("https://gate.thepay.cz/"))  # type: ignore[attr-defined]
    
        payment.refresh_from_db()
        self.assertEqual(payment.state, Payment.PENDING)
    
        # Perform the payment
        thepay_mock_payment(payment.pk)
    
        # Back to our web
>       response = self.client.get(payment.get_complete_url())
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

weblate_web/tests.py:1679: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.12.13............................../x64/lib/python3.12.../django/test/client.py:1127: in get
    response = super().get(
.../hostedtoolcache/Python/3.12.13............................../x64/lib/python3.12.../django/test/client.py:475: in get
    return self.generic(
.../hostedtoolcache/Python/3.12.13............................../x64/lib/python3.12.../django/test/client.py:671: in generic
    return self.request(**r)
           ^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............................../x64/lib/python3.12.../django/test/client.py:1090: in request
    self.check_exception(response)
.../hostedtoolcache/Python/3.12.13............................../x64/lib/python3.12.../django/test/client.py:805: in check_exception
    raise exc_value
.../hostedtoolcache/Python/3.12.13............................../x64/lib/python3.12.../core/handlers/exception.py:55: in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............................../x64/lib/python3.12.../core/handlers/base.py:198: in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............................../x64/lib/python3.12.../views/generic/base.py:106: in view
    return self.dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/views.py:597: in dispatch
    backend.complete(self.request)
weblate_web/payments/backends.py:359: in complete
    self.success()
weblate_web/payments/backends.py:458: in success
    self.send_notification("payment_completed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:418: in send_notification
    ContentFile(email.message().as_bytes()),
                ^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............................../x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f6102553590>
msg = <email.message.EmailMessage object at 0x7f60fd8733e0>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............................../x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.payments.tests.BackendTest::test_invoice_in_text
Stack Traces | 1.41s run time
self = <weblate_web.payments.tests.BackendTest testMethod=test_invoice_in_text>

    @responses.activate
    @override_settings(
        FIO_TOKEN="test-token",  # noqa: S106
    )
    def test_invoice_in_text(self) -> None:
        # Czech bank notation
>       self.test_invoice_bank(format_string="PROFORMA{}PAYMENT")

weblate_web/payments/tests.py:400: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.12.13......................../x64/lib/python3.12.../site-packages/responses/__init__.py:232: in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13......................../x64/lib/python3.12.../django/test/utils.py:458: in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/tests.py:370: in test_invoice_bank
    FioBank.fetch_payments()
.../hostedtoolcache/Python/3.12.13......................../x64/lib/python3.12.../django/utils/decorators.py:48: in _wrapper
    return bound_method(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13......................../x64/lib/python3.12.../views/decorators/debug.py:75: in sensitive_variables_wrapper
    return func(*func_args, **func_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/backends.py:651: in fetch_payments
    backend.success()
weblate_web/payments/backends.py:458: in success
    self.send_notification("payment_completed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13......................../x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13......................../x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13......................../x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60fc13c950>
msg = <email.message.EmailMessage object at 0x7f60fc3d4830>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13......................../x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.PaymentTest::test_recurring
Stack Traces | 1.44s run time
self = <weblate_web.tests.PaymentTest testMethod=test_recurring>

    @responses.activate
    @override_settings(PAYMENT_DEBUG=True)
    def test_recurring(self) -> None:
        donation = self.create_donation(years=0)
        payment = cast("Payment", donation.payment_obj)
        self.assertIsNotNone(payment)
        # No recurring payments for now
        self.assertEqual(payment.payment_set.count(), 0)
    
        # Trigger payment and process it
>       call_command("recurring_payments")

weblate_web/tests.py:1636: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.12.13................../x64/lib/python3.12.../core/management/__init__.py:195: in call_command
    return command.execute(*args, **defaults)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13................../x64/lib/python3.12.../core/management/base.py:464: in execute
    output = self.handle(*args, **options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../management/commands/recurring_payments.py:45: in handle
    self.handle_donations()
.../management/commands/recurring_payments.py:226: in handle_donations
    cls.peform_payment(
.../management/commands/recurring_payments.py:178: in peform_payment
    repeated.trigger_recurring()
weblate_web/payments/models.py:698: in trigger_recurring
    backend.complete(None)
weblate_web/payments/backends.py:359: in complete
    self.success()
weblate_web/payments/backends.py:458: in success
    self.send_notification("payment_completed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13................../x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13................../x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13................../x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60fd038a70>
msg = <email.message.EmailMessage object at 0x7f60f4960200>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13................../x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.ExpiryTest::test_expiring_recurring_subscription
Stack Traces | 1.5s run time
self = <weblate_web.tests.ExpiryTest testMethod=test_expiring_recurring_subscription>

    def test_expiring_recurring_subscription(self) -> None:
        self.create_service(years=0, days=-2)
        RecurringPaymentsCommand.notify_expiry(force_summary=True)
        self.assert_notifications()
>       RecurringPaymentsCommand.handle_subscriptions()

weblate_web/tests.py:2238: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../management/commands/recurring_payments.py:204: in handle_subscriptions
    cls.peform_payment(
.../management/commands/recurring_payments.py:178: in peform_payment
    repeated.trigger_recurring()
weblate_web/payments/models.py:698: in trigger_recurring
    backend.complete(None)
weblate_web/payments/backends.py:359: in complete
    self.success()
weblate_web/payments/backends.py:458: in success
    self.send_notification("payment_completed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f61030798e0>
msg = <email.message.EmailMessage object at 0x7f60f6e53a10>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.ExpiryTest::test_expiring_recurring_donate
Stack Traces | 1.61s run time
self = <weblate_web.tests.ExpiryTest testMethod=test_expiring_recurring_donate>

    def test_expiring_recurring_donate(self) -> None:
        self.create_donation(years=0, days=-2)
        RecurringPaymentsCommand.notify_expiry(force_summary=True)
        self.assert_notifications()
>       RecurringPaymentsCommand.handle_donations()

weblate_web/tests.py:2174: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../management/commands/recurring_payments.py:226: in handle_donations
    cls.peform_payment(
.../management/commands/recurring_payments.py:178: in peform_payment
    repeated.trigger_recurring()
weblate_web/payments/models.py:698: in trigger_recurring
    backend.complete(None)
weblate_web/payments/backends.py:359: in complete
    self.success()
weblate_web/payments/backends.py:458: in success
    self.send_notification("payment_completed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60fc529010>
msg = <email.message.EmailMessage object at 0x7f60fdd4c830>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13............/x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.PaymentTest::test_donation_workflow_bank
Stack Traces | 1.66s run time
self = <weblate_web.tests.PaymentTest testMethod=test_donation_workflow_bank>

    def test_donation_workflow_bank(self) -> None:
        self.login()
        response = self.client.post(
            ".../en/donate/new/",
            {"recurring": "y", "amount": 10, "reward": 0},
            follow=True,
        )
        self.assertContains(response, "Please provide your billing")
        payment = Payment.objects.all().get()
        self.assertEqual(payment.state, Payment.NEW)
        customer_url = reverse("payment-customer", kwargs={"pk": payment.uuid})
        payment_url = reverse("payment", kwargs={"pk": payment.uuid})
        self.assertRedirects(response, customer_url)
        response = self.client.post(customer_url, TEST_CUSTOMER, follow=True)
        self.assertContains(response, "Please choose payment method")
>       response = self.client.post(payment_url, {"method": "fio-bank"}, follow=True)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

weblate_web/tests.py:1582: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:1156: in post
    response = super().post(
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:499: in post
    return self.generic(
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:671: in generic
    return self.request(**r)
           ^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:1090: in request
    self.check_exception(response)
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:805: in check_exception
    raise exc_value
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/handlers/exception.py:55: in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/handlers/base.py:198: in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../views/generic/base.py:106: in view
    return self.dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/views.py:441: in dispatch
    return super().dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../views/generic/base.py:145: in dispatch
    return handler(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../views/generic/edit.py:151: in post
    return self.form_valid(form)
           ^^^^^^^^^^^^^^^^^^^^^
weblate_web/views.py:470: in form_valid
    result = backend.initiate(
weblate_web/payments/backends.py:334: in initiate
    result = self.perform(request, back_url, complete_url)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/backends.py:538: in perform
    self.send_notification("payment_pending")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60f43dcce0>
msg = <email.message.EmailMessage object at 0x7f60ff2164e0>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.PaymentsTest::test_pending
Stack Traces | 1.74s run time
self = <weblate_web.tests.PaymentsTest testMethod=test_pending>

    @override_settings(PAYMENT_DEBUG=True)
    def test_pending(self) -> None:
        payment, url, _dummy = self.prepare_payment()
        response = self.client.post(url, {"method": "pending"})
        complete_url = reverse("payment-complete", kwargs={"pk": payment.pk})
        self.assertRedirects(
            response,
            f"https://cihar.com/?url=http://localhost:1234{complete_url}",
            fetch_redirect_response=False,
        )
        self.check_payment(payment, Payment.PENDING)
>       response = self.client.get(complete_url)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

weblate_web/tests.py:1331: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../django/test/client.py:1127: in get
    response = super().get(
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../django/test/client.py:475: in get
    return self.generic(
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../django/test/client.py:671: in generic
    return self.request(**r)
           ^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../django/test/client.py:1090: in request
    self.check_exception(response)
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../django/test/client.py:805: in check_exception
    raise exc_value
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../core/handlers/exception.py:55: in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../core/handlers/base.py:198: in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../views/generic/base.py:106: in view
    return self.dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/views.py:597: in dispatch
    backend.complete(self.request)
weblate_web/payments/backends.py:359: in complete
    self.success()
weblate_web/payments/backends.py:458: in success
    self.send_notification("payment_completed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60f5dc6e10>
msg = <email.message.EmailMessage object at 0x7f60f46c3d70>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.PaymentsTest::test_pay
Stack Traces | 1.91s run time
self = <weblate_web.tests.PaymentsTest testMethod=test_pay>

    @override_settings(PAYMENT_DEBUG=True)
    @responses.activate
    def test_pay(self) -> None:
        cnb_mock_rates()
        payment, url, _dummy = self.prepare_payment()
>       response = self.client.post(url, {"method": "pay"})
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

weblate_web/tests.py:1042: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:1156: in post
    response = super().post(
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:499: in post
    return self.generic(
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:671: in generic
    return self.request(**r)
           ^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:1090: in request
    self.check_exception(response)
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:805: in check_exception
    raise exc_value
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/handlers/exception.py:55: in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/handlers/base.py:198: in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../views/generic/base.py:106: in view
    return self.dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/views.py:441: in dispatch
    return super().dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../views/generic/base.py:145: in dispatch
    return handler(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../views/generic/edit.py:151: in post
    return self.form_valid(form)
           ^^^^^^^^^^^^^^^^^^^^^
weblate_web/views.py:484: in form_valid
    backend.complete(self.request)
weblate_web/payments/backends.py:359: in complete
    self.success()
weblate_web/payments/backends.py:458: in success
    self.send_notification("payment_completed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60fc5be540>
msg = <email.message.EmailMessage object at 0x7f60fdd0f2f0>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.PaymentTest::test_donation_workflow_card_reward
Stack Traces | 2.01s run time
self = <weblate_web.tests.PaymentTest testMethod=test_donation_workflow_card_reward>

    def test_donation_workflow_card_reward(self) -> None:
>       self.test_donation_workflow_card(2)

weblate_web/tests.py:1468: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/utils.py:458: in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../site-packages/responses/__init__.py:232: in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
weblate_web/tests.py:1500: in test_donation_workflow_card
    response = self.client.get(payment.get_complete_url(), follow=True)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:1127: in get
    response = super().get(
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:475: in get
    return self.generic(
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:671: in generic
    return self.request(**r)
           ^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:1090: in request
    self.check_exception(response)
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:805: in check_exception
    raise exc_value
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/handlers/exception.py:55: in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/handlers/base.py:198: in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../views/generic/base.py:106: in view
    return self.dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/views.py:597: in dispatch
    backend.complete(self.request)
weblate_web/payments/backends.py:359: in complete
    self.success()
weblate_web/payments/backends.py:458: in success
    self.send_notification("payment_completed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60f438d580>
msg = <email.message.EmailMessage object at 0x7f60f438fc80>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.ServiceTest::test_hosted_pay_yearly
Stack Traces | 2.12s run time
self = <weblate_web.tests.ServiceTest testMethod=test_hosted_pay_yearly>

    @responses.activate
    def test_hosted_pay_yearly(self) -> None:
        mock_vies()
        cnb_mock_rates()
        with override("en"):
            self.login()
            service = self.create_service(
                years=0, days=3, recurring="", package="test:test-1-m"
            )
            subscription = service.subscription_set.get()
            response = self.client.post(
                reverse("subscription-pay", kwargs={"pk": subscription.pk}),
                {"switch_yearly": 1},
                follow=True,
            )
            payment_url = response.redirect_chain[0][0].split("localhost:1234")[-1]
            self.assertTrue(payment_url.startswith("/en/payment/"))
>           response = self.client.post(payment_url, {"method": "pay"}, follow=True)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

weblate_web/tests.py:2432: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:1156: in post
    response = super().post(
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:499: in post
    return self.generic(
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:671: in generic
    return self.request(**r)
           ^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:1090: in request
    self.check_exception(response)
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:805: in check_exception
    raise exc_value
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/handlers/exception.py:55: in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/handlers/base.py:198: in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../views/generic/base.py:106: in view
    return self.dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/views.py:441: in dispatch
    return super().dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../views/generic/base.py:145: in dispatch
    return handler(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../views/generic/edit.py:151: in post
    return self.form_valid(form)
           ^^^^^^^^^^^^^^^^^^^^^
weblate_web/views.py:484: in form_valid
    backend.complete(self.request)
weblate_web/payments/backends.py:359: in complete
    self.success()
weblate_web/payments/backends.py:458: in success
    self.send_notification("payment_completed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60f5dccbf0>
msg = <email.message.EmailMessage object at 0x7f60f6e159a0>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.PaymentTest::test_donation_workflow_card
Stack Traces | 2.2s run time
self = <weblate_web.tests.PaymentTest testMethod=test_donation_workflow_card>
reward = 0

    @override_settings(**THEPAY2_MOCK_SETTINGS)
    @responses.activate
    def test_donation_workflow_card(self, reward=0) -> None:  # noqa: PLR0915
        self.login()
        thepay_mock_create_payment()
        response = self.client.post(
            ".../en/donate/new/",
            {"recurring": "y", "amount": 1000, "reward": reward},
            follow=True,
        )
        self.assertContains(response, "Please provide your billing")
        payment = Payment.objects.all().get()
        self.assertEqual(payment.amount, 1000)
        self.assertEqual(payment.state, Payment.NEW)
        customer_url = reverse("payment-customer", kwargs={"pk": payment.uuid})
        payment_url = reverse("payment", kwargs={"pk": payment.uuid})
        self.assertRedirects(response, customer_url)
        response = self.client.post(customer_url, TEST_CUSTOMER, follow=True)
        self.assertContains(response, "Please choose payment method")
        response = self.client.post(payment_url, {"method": "thepay2-card"})
        self.assertEqual(response.status_code, 302)
        self.assertTrue(response.url.startswith("https://gate.thepay.cz/"))  # type: ignore[attr-defined]
    
        payment.refresh_from_db()
        self.assertEqual(payment.state, Payment.PENDING)
    
        # Perform the payment
        thepay_mock_payment(payment.pk)
    
        # Back to our web
>       response = self.client.get(payment.get_complete_url(), follow=True)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

weblate_web/tests.py:1500: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../django/test/client.py:1127: in get
    response = super().get(
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../django/test/client.py:475: in get
    return self.generic(
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../django/test/client.py:671: in generic
    return self.request(**r)
           ^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../django/test/client.py:1090: in request
    self.check_exception(response)
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../django/test/client.py:805: in check_exception
    raise exc_value
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../core/handlers/exception.py:55: in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../core/handlers/base.py:198: in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../views/generic/base.py:106: in view
    return self.dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/views.py:597: in dispatch
    backend.complete(self.request)
weblate_web/payments/backends.py:359: in complete
    self.success()
weblate_web/payments/backends.py:458: in success
    self.send_notification("payment_completed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60f43845f0>
msg = <email.message.EmailMessage object at 0x7f60f47de990>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.PaymentTest::test_service_workflow_card
Stack Traces | 2.25s run time
self = <weblate_web.tests.PaymentTest testMethod=test_service_workflow_card>

    @override_settings(**THEPAY2_MOCK_SETTINGS, **SIGNATURE_MOCK_SETTINGS)
    @responses.activate
    def test_service_workflow_card(self) -> None:  # noqa: PLR0915
        self.login()
        thepay_mock_create_payment()
        Package.objects.create(name="community", verbose="Community support", price=0)
        Package.objects.create(name="extended", verbose="Extended support", price=42)
        response = self.client.get(".../en/subscription/new/?plan=extended", follow=True)
        self.assertContains(response, "Please provide your billing")
        payment = Payment.objects.all().get()
        self.assertEqual(payment.state, Payment.NEW)
        customer_url = reverse("payment-customer", kwargs={"pk": payment.uuid})
        payment_url = reverse("payment", kwargs={"pk": payment.uuid})
        self.assertRedirects(response, customer_url)
        response = self.client.post(customer_url, TEST_CUSTOMER, follow=True)
        self.assertContains(response, "Please choose payment method")
        response = self.client.post(payment_url, {"method": "thepay2-card"})
        self.assertEqual(response.status_code, 302)
        self.assertTrue(response.url.startswith("https://gate.thepay.cz/"))  # type: ignore[attr-defined]
    
        payment.refresh_from_db()
        self.assertEqual(payment.state, Payment.PENDING)
    
        # Perform the payment
        thepay_mock_payment(payment.pk)
    
        # Back to our web
>       response = self.client.get(payment.get_complete_url(), follow=True)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

weblate_web/tests.py:1381: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../django/test/client.py:1127: in get
    response = super().get(
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../django/test/client.py:475: in get
    return self.generic(
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../django/test/client.py:671: in generic
    return self.request(**r)
           ^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../django/test/client.py:1090: in request
    self.check_exception(response)
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../django/test/client.py:805: in check_exception
    raise exc_value
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../core/handlers/exception.py:55: in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../core/handlers/base.py:198: in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../views/generic/base.py:106: in view
    return self.dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/views.py:597: in dispatch
    backend.complete(self.request)
weblate_web/payments/backends.py:359: in complete
    self.success()
weblate_web/payments/backends.py:458: in success
    self.send_notification("payment_completed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60fd3e46b0>
msg = <email.message.EmailMessage object at 0x7f60fd497a10>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.ServiceTest::test_hosted_upgrade
Stack Traces | 2.32s run time
self = <weblate_web.tests.ServiceTest testMethod=test_hosted_upgrade>

    @responses.activate
    def test_hosted_upgrade(self) -> None:
        mock_vies()
        cnb_mock_rates()
        with override("en"):
            self.login()
            service = self.create_service(
                years=0, days=3, recurring="", package="test:test-1"
            )
            suggestions = service.get_suggestions()
            self.assertEqual(len(suggestions), 1)
            self.assertEqual(suggestions[0][0], "test:test-2")
            params: dict[str, str | int] = {
                "plan": "test:test-2",
                "service": service.pk,
            }
            response = self.client.get(reverse("subscription-new"), params, follow=True)
            payment_url = response.redirect_chain[0][0].split("localhost:1234")[-1]
            self.assertTrue(payment_url.startswith("/en/payment/"))
>           response = self.client.post(payment_url, {"method": "pay"}, follow=True)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

weblate_web/tests.py:2533: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:1156: in post
    response = super().post(
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:499: in post
    return self.generic(
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:671: in generic
    return self.request(**r)
           ^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:1090: in request
    self.check_exception(response)
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:805: in check_exception
    raise exc_value
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/handlers/exception.py:55: in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/handlers/base.py:198: in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../views/generic/base.py:106: in view
    return self.dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/views.py:441: in dispatch
    return super().dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../views/generic/base.py:145: in dispatch
    return handler(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../views/generic/edit.py:151: in post
    return self.form_valid(form)
           ^^^^^^^^^^^^^^^^^^^^^
weblate_web/views.py:484: in form_valid
    backend.complete(self.request)
weblate_web/payments/backends.py:359: in complete
    self.success()
weblate_web/payments/backends.py:458: in success
    self.send_notification("payment_completed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60f6e52180>
msg = <email.message.EmailMessage object at 0x7f60f5bd2a50>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.ServiceTest::test_hosted_pay
Stack Traces | 2.45s run time
self = <weblate_web.tests.ServiceTest testMethod=test_hosted_pay>

    @responses.activate
    def test_hosted_pay(self) -> None:
        mock_vies()
        cnb_mock_rates()
        with override("en"):
            self.login()
            service = self.create_service(
                years=0, days=3, recurring="", package="test:test-1-m"
            )
            hosted = service.hosted_subscriptions
            self.assertEqual(
                hosted[0].expires.date(),
                timezone.now().date() + timedelta(days=3),
            )
    
            # Trigger customer editing
            service.customer.name = ""
            service.customer.save()
    
            subscription = service.subscription_set.get()
            response = self.client.post(
                reverse("subscription-pay", kwargs={"pk": subscription.pk}),
                follow=True,
            )
            payment_url = response.redirect_chain[0][0].split("localhost:1234")[-1]
            payment_edit_url = response.redirect_chain[1][0]
            self.assertTrue(payment_url.startswith("/en/payment/"))
            response = self.client.post(payment_edit_url, TEST_CUSTOMER, follow=True)
            self.assertRedirects(response, payment_url)
>           response = self.client.post(payment_url, {"method": "pay"}, follow=True)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

weblate_web/tests.py:2398: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:1156: in post
    response = super().post(
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:499: in post
    return self.generic(
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:671: in generic
    return self.request(**r)
           ^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:1090: in request
    self.check_exception(response)
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:805: in check_exception
    raise exc_value
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/handlers/exception.py:55: in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/handlers/base.py:198: in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../views/generic/base.py:106: in view
    return self.dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/views.py:441: in dispatch
    return super().dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../views/generic/base.py:145: in dispatch
    return handler(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../views/generic/edit.py:151: in post
    return self.form_valid(form)
           ^^^^^^^^^^^^^^^^^^^^^
weblate_web/views.py:484: in form_valid
    backend.complete(self.request)
weblate_web/payments/backends.py:359: in complete
    self.success()
weblate_web/payments/backends.py:458: in success
    self.send_notification("payment_completed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60ff32fe60>
msg = <email.message.EmailMessage object at 0x7f60f460c8c0>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.tests.ServiceTest::test_dedicated_new
Stack Traces | 2.46s run time
self = <weblate_web.tests.ServiceTest testMethod=test_dedicated_new>

    @override_settings(ZAMMAD_TOKEN="test")  # noqa: S106
    @responses.activate
    def test_dedicated_new(self) -> None:
        mock_vies()
        cnb_mock_rates()
        self.create_packages()
        responses.add(
            responses.POST,
            "https://care.weblate..../api/v1/tickets",
            json={
                "id": 19,
                "group_id": 2,
                "priority_id": 2,
                "state_id": 1,
                "organization_id": None,
                "number": "22019",
                "title": "Help me!",
                "owner_id": 1,
                "customer_id": 10,
                "note": None,
                "first_response_at": None,
                "first_response_escalation_at": None,
                "first_response_in_min": None,
                "first_response_diff_in_min": None,
                "close_at": None,
                "close_escalation_at": None,
                "close_in_min": None,
                "close_diff_in_min": None,
                "update_escalation_at": None,
                "update_in_min": None,
                "update_diff_in_min": None,
                "last_contact_at": None,
                "last_contact_agent_at": None,
                "last_contact_customer_at": None,
                "last_owner_update_at": None,
                "create_article_type_id": 10,
                "create_article_sender_id": 1,
                "article_count": 1,
                "escalation_at": None,
                "pending_time": None,
                "type": None,
                "time_unit": None,
                "preferences": {},
                "updated_by_id": 3,
                "created_by_id": 3,
                "created_at": "2021-11-08T14:17:41.913Z",
                "updated_at": "2021-11-08T14:17:41.994Z",
                "article_ids": [30],
                "ticket_time_accounting_ids": [],
            },
        )
    
        with override("en"):
            self.login()
            response = self.client.get(
                reverse("subscription-new"),
                {"plan": "test:test-1"},
                follow=True,
            )
            payment_url = response.redirect_chain[0][0].split("localhost:1234")[-1]
            payment_edit_url = response.redirect_chain[1][0]
            self.assertTrue(payment_url.startswith("/en/payment/"))
            response = self.client.post(payment_edit_url, TEST_CUSTOMER, follow=True)
            self.assertRedirects(response, payment_url)
>           response = self.client.post(payment_url, {"method": "pay"}, follow=True)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

weblate_web/tests.py:2510: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:1156: in post
    response = super().post(
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:499: in post
    return self.generic(
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:671: in generic
    return self.request(**r)
           ^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:1090: in request
    self.check_exception(response)
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../django/test/client.py:805: in check_exception
    raise exc_value
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/handlers/exception.py:55: in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/handlers/base.py:198: in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../views/generic/base.py:106: in view
    return self.dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/views.py:441: in dispatch
    return super().dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../views/generic/base.py:145: in dispatch
    return handler(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../views/generic/edit.py:151: in post
    return self.form_valid(form)
           ^^^^^^^^^^^^^^^^^^^^^
weblate_web/views.py:484: in form_valid
    backend.complete(self.request)
weblate_web/payments/backends.py:359: in complete
    self.success()
weblate_web/payments/backends.py:458: in success
    self.send_notification("payment_completed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:399: in send_notification
    email = send_notification(notification, recipients, invoice=invoice, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/payments/utils.py:118: in send_notification
    email.send()
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:358: in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../mail/backends/locmem.py:30: in send_messages
    message.message()
.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f6103068500>
msg = <email.message.EmailMessage object at 0x7f60fd92d2e0>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13........................................../x64/lib/python3.12.../core/mail/message.py:440: AttributeError
weblate_web.invoices.tests.InvoiceTestCase::test_pay_link
Stack Traces | 3.04s run time
self = <weblate_web.invoices.tests.InvoiceTestCase testMethod=test_pay_link>

    @override_settings(PAYMENT_DEBUG=True)
    @responses.activate
    def test_pay_link(self) -> None:
        self.mock_requests()
        invoice = self.create_invoice_package()
        self.validate_invoice(invoice)
        url = cast("str", invoice.get_payment_url())
        self.assertIsNotNone(url)
    
        # Unauthenticated should redirect to login
        response = self.client.get(url, follow=True)
        self.assertContains(response, "Payment Summary")
        # Unauthenticated user should see note about terms
        self.assertContains(response, "By performing the payment, you accept our")
        self.assertNotContains(response, "Billing information")
        self.assertEqual(invoice.draft_payment_set.count(), 1)
    
        # Repeated access should reuse existing payment
        self.login()
        response = self.client.get(url, follow=True)
        self.assertContains(response, "Payment Summary")
        # Logged-in user should not see this
        self.assertNotContains(response, "By performing the payment, you accept our")
        self.assertNotContains(response, "Billing information")
        self.assertEqual(invoice.draft_payment_set.count(), 1)
    
        # Pay
        payment = invoice.draft_payment_set.get()
        payment_url = payment.get_payment_url()
>       self.client.post(payment_url, {"method": "pay"})

weblate_web/invoices/tests.py:359: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../django/test/client.py:1156: in post
    response = super().post(
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../django/test/client.py:499: in post
    return self.generic(
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../django/test/client.py:671: in generic
    return self.request(**r)
           ^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../django/test/client.py:1090: in request
    self.check_exception(response)
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../django/test/client.py:805: in check_exception
    raise exc_value
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../core/handlers/exception.py:55: in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../core/handlers/base.py:198: in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../views/generic/base.py:106: in view
    return self.dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblate_web/views.py:441: in dispatch
    return super().dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../views/generic/base.py:145: in dispatch
    return handler(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../views/generic/edit.py:151: in post
    return self.form_valid(form)
           ^^^^^^^^^^^^^^^^^^^^^
weblate_web/views.py:484: in form_valid
    backend.complete(self.request)
weblate_web/payments/backends.py:359: in complete
    self.success()
weblate_web/payments/backends.py:458: in success
    self.send_notification("payment_completed")
weblate_web/payments/backends.py:441: in send_notification
    self.payment.customer.send_notification(
weblate_web/payments/models.py:418: in send_notification
    ContentFile(email.message().as_bytes()),
                ^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../core/mail/message.py:318: in message
    self._add_attachments(msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <django.core.mail.message.EmailMultiAlternatives object at 0x7f60fc153980>
msg = <email.message.EmailMessage object at 0x7f60fda7cc20>

    def _add_attachments(self, msg):
        if self.attachments:
            if hasattr(self, "mixed_subtype"):
                # RemovedInDjango70Warning.
>               raise AttributeError(
                    "EmailMessage no longer supports the"
                    " undocumented `mixed_subtype` attribute"
                )
E               AttributeError: EmailMessage no longer supports the undocumented `mixed_subtype` attribute

.../hostedtoolcache/Python/3.12.13..................................../x64/lib/python3.12.../core/mail/message.py:440: AttributeError

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@renovate renovate Bot force-pushed the renovate/django-6.x branch 13 times, most recently from b6435df to 00a952d Compare April 13, 2026 09:31
@renovate renovate Bot changed the title Update dependency Django to v6 chore(deps): update dependency django to v6 Apr 13, 2026
@renovate renovate Bot force-pushed the renovate/django-6.x branch 12 times, most recently from 8049060 to ed7e229 Compare April 18, 2026 01:52
@renovate renovate Bot force-pushed the renovate/django-6.x branch 6 times, most recently from 458c3ff to 9cf7620 Compare April 19, 2026 17:04
@renovate renovate Bot force-pushed the renovate/django-6.x branch from 9cf7620 to a4981bc Compare April 20, 2026 06:31
@renovate
Copy link
Copy Markdown
Contributor Author

renovate Bot commented Apr 20, 2026

Edited/Blocked Notification

Renovate will not automatically rebase this PR, because it does not recognize the last commit author and assumes somebody else may have edited the PR.

You can manually request rebase by checking the rebase/retry box above.

⚠️ Warning: custom changes will be lost.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Third-party library dependencies.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants