Skip to content

Commit eab48e9

Browse files
authored
Commands to enable talk and video system (#1107)
* Add Django command to enable video system for an event * Add enable_talk_system * Raise CommandError
1 parent f768089 commit eab48e9

File tree

5 files changed

+117
-3
lines changed

5 files changed

+117
-3
lines changed

src/pretix/eventyay_common/management/__init__.py

Whitespace-only changes.

src/pretix/eventyay_common/management/commands/__init__.py

Whitespace-only changes.
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
from django.core.management.base import BaseCommand, CommandError
2+
from django_scopes import scope
3+
4+
from pretix.base.models import Event, Organizer, User
5+
from pretix.eventyay_common.tasks import send_event_webhook
6+
7+
8+
class Command(BaseCommand):
9+
help = 'Enable talk system for an event'
10+
11+
def add_arguments(self, parser):
12+
parser.add_argument('event_slug', type=str, help='Event slug')
13+
parser.add_argument('-o', dest='organizer_slug', type=str, required=True, help='Organizer slug')
14+
parser.add_argument('-u', dest='user_email', type=str, required=True, help='User email address')
15+
16+
def handle(self, event_slug: str, organizer_slug: str, user_email: str, **options):
17+
18+
try:
19+
user = User.objects.get(email=user_email)
20+
except User.DoesNotExist:
21+
raise CommandError(f'User with email {user_email} does not exist')
22+
23+
try:
24+
organizer = Organizer.objects.get(slug=organizer_slug)
25+
except Organizer.DoesNotExist:
26+
raise CommandError(f'Organizer {organizer_slug} does not exist')
27+
28+
try:
29+
with scope(organizer=organizer):
30+
event = Event.objects.get(slug=event_slug, organizer=organizer)
31+
except Event.DoesNotExist:
32+
raise CommandError(f'Event {organizer_slug}/{event_slug} does not exist')
33+
34+
send_event_webhook(
35+
user_id=user.id,
36+
event={
37+
'organiser_slug': event.organizer.slug,
38+
'name': event.name.data,
39+
'slug': event.slug,
40+
'date_from': str(event.date_from),
41+
'date_to': str(event.date_to),
42+
'timezone': str(event.settings.timezone),
43+
'locale': event.settings.locale,
44+
'locales': event.settings.locales,
45+
'is_video_creation': event.is_video_creation,
46+
},
47+
action='create',
48+
)
49+
50+
self.stdout.write(f'🎉 Talk system enabled for event {organizer_slug}/{event_slug}.')
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
from datetime import datetime, timedelta, timezone
2+
3+
import jwt
4+
from django.conf import settings
5+
from django.core.management.base import BaseCommand, CommandError
6+
from django_scopes import scope
7+
8+
from pretix.base.models import Event, Organizer, User
9+
from pretix.eventyay_common.tasks import create_world
10+
from pretix.eventyay_common.utils import encode_email
11+
12+
13+
class Command(BaseCommand):
14+
help = 'Enable video system for an event'
15+
16+
def add_arguments(self, parser):
17+
parser.add_argument('event_slug', type=str, help='Event slug')
18+
parser.add_argument('-o', dest='organizer_slug', type=str, required=True, help='Organizer slug')
19+
parser.add_argument('-u', dest='user_email', type=str, required=True, help='User email address')
20+
21+
def handle(self, event_slug: str, organizer_slug: str, user_email: str, **options):
22+
23+
try:
24+
user = User.objects.get(email=user_email)
25+
except User.DoesNotExist:
26+
raise CommandError(f'User with email {user_email} does not exist')
27+
28+
try:
29+
organizer = Organizer.objects.get(slug=organizer_slug)
30+
except Organizer.DoesNotExist:
31+
raise CommandError(f'Organizer {organizer_slug} does not exist')
32+
33+
try:
34+
with scope(organizer=organizer):
35+
event = Event.objects.get(slug=event_slug, organizer=organizer)
36+
except Event.DoesNotExist:
37+
raise CommandError(f'Event {organizer_slug}/{event_slug} does not exist')
38+
39+
# Generate token for video system (admin token)
40+
iat = datetime.now(timezone.utc)
41+
exp = iat + timedelta(days=30)
42+
payload = {
43+
'exp': exp,
44+
'iat': iat,
45+
'uid': encode_email(user.email),
46+
'has_permission': True,
47+
}
48+
token = jwt.encode(payload, settings.SECRET_KEY, algorithm='HS256')
49+
50+
create_world(
51+
is_video_creation=True,
52+
event_data={
53+
'id': event.slug,
54+
'title': event.name.data,
55+
'timezone': event.settings.timezone,
56+
'locale': event.settings.locale,
57+
'has_permission': True,
58+
'token': token,
59+
},
60+
)
61+
62+
self.stdout.write(f'🎉 Video system enabled for event {organizer_slug}/{event_slug}.')
63+

src/pretix/eventyay_common/views/event.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from django.contrib import messages
99
from django.core.exceptions import PermissionDenied
1010
from django.db import transaction
11-
from django.db.models import Case, F, Max, Min, Prefetch, Q, Sum, When, IntegerField
11+
from django.db.models import Case, F, IntegerField, Max, Min, Prefetch, Q, Sum, When
1212
from django.db.models.functions import Coalesce, Greatest
1313
from django.http import HttpRequest, HttpResponseRedirect, JsonResponse
1414
from django.shortcuts import redirect
@@ -24,7 +24,6 @@
2424
from pretix.base.models import Event, EventMetaValue, Organizer, Quota
2525
from pretix.base.services import tickets
2626
from pretix.base.services.quotas import QuotaAvailability
27-
2827
from pretix.control.forms.event import EventWizardBasicsForm, EventWizardFoundationForm
2928
from pretix.control.forms.filter import EventFilterForm
3029
from pretix.control.permissions import EventPermissionRequiredMixin
@@ -40,8 +39,10 @@
4039
generate_token,
4140
)
4241
from pretix.helpers.plugin_enable import is_video_enabled
42+
4343
from ..forms.event import EventUpdateForm
4444

45+
4546
class EventList(PaginationMixin, ListView):
4647
model = Event
4748
context_object_name = 'events'
@@ -441,7 +442,7 @@ def post(self, request, *args, **kwargs):
441442
'is_video_creation': request.event.is_video_creation,
442443
}
443444
send_event_webhook.delay(user_id=self.request.user.id, event=event_dict, action='update')
444-
messages.success(self.request, _("Your changes have been saved."))
445+
messages.success(self.request, _('Your changes have been saved.'))
445446
return self.form_valid(form)
446447
else:
447448
messages.error(

0 commit comments

Comments
 (0)