diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d653019b4d92f6e68df6ada2ed4e413fb8c3f66..247b7ce55f5c2893b24ccbb154a689c66af7cde2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Fixed +- Schedule tasks only after DB transactions are committed ## [1.7.0] - 2023-02-09 ### Added diff --git a/pretix_matrix_inviter/forms.py b/pretix_matrix_inviter/forms.py index f3d4245620e4bff05e945b16f53bb29cc688b7c8..80cd5d57d758176b6dfce82346a6e820e2feb855 100644 --- a/pretix_matrix_inviter/forms.py +++ b/pretix_matrix_inviter/forms.py @@ -1,4 +1,5 @@ -from django.core.exceptions import ValidationError +import re +from django.core.validators import URLValidator from django.forms import ( CharField, CheckboxSelectMultiple, @@ -8,8 +9,6 @@ from django.forms import ( from django.utils.translation import gettext_lazy from i18nfield.forms import I18nFormField, I18nTextInput from pretix.base.forms import SettingsForm -from urllib3.exceptions import LocationParseError -from urllib3.util import parse_url from .helpers import matrix_room_info_for_event @@ -31,9 +30,10 @@ class MatrixInviterSettingsForm(SettingsForm): "your own Matrix account but from a dedicated Matrix account." ), ) - matrix_inviter_matrix_server = CharField( + matrix_inviter_matrix_server = RegexField( label=gettext_lazy("Matrix server"), strip=True, + regex=re.compile(r"^" + URLValidator.host_re + r"\Z", re.IGNORECASE), help_text=gettext_lazy( "The matrix server the above access token is valid for." ), @@ -61,14 +61,6 @@ class MatrixInviterSettingsForm(SettingsForm): strip=True, ) - def clean_matrix_inviter_matrix_server(self): - url = self.cleaned_data["matrix_inviter_matrix_server"] - try: - return parse_url(url).host - except LocationParseError: - raise ValidationError("Please enter a valid hostname") - return url - def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields["matrix_inviter_items"].choices = [ diff --git a/pretix_matrix_inviter/tasks.py b/pretix_matrix_inviter/tasks.py index 0c62c9d5a4969f34c70a865fea5afd392e5a2822..9b189ec5ef9c58fa702275dec4153f551e7e0d54 100644 --- a/pretix_matrix_inviter/tasks.py +++ b/pretix_matrix_inviter/tasks.py @@ -2,7 +2,7 @@ import logging import requests from celery.exceptions import MaxRetriesExceededError from pretix.base.models import Order, OrderPosition -from pretix.base.services.tasks import ProfiledEventTask +from pretix.base.services.tasks import TransactionAwareProfiledEventTask from pretix.celery_app import app from urllib.parse import quote as url_quote @@ -12,7 +12,7 @@ logger = logging.getLogger(__name__) @app.task( - base=ProfiledEventTask, + base=TransactionAwareProfiledEventTask, bind=True, max_retries=10, retry_backoff=True, @@ -98,7 +98,7 @@ def matrix_inviter_invite( @app.task( - base=ProfiledEventTask, + base=TransactionAwareProfiledEventTask, bind=True, max_retries=10, retry_backoff=True,