33from django .apps import apps
44from django .http import HttpResponsePermanentRedirect
55from django .urls import include , path
6- from django .urls import re_path as url
76from rest_framework import routers
87
98from eventyay .api .views import cart
9+ from eventyay .common .urls import OrganizerSlugConverter # noqa: F401 (registers converter)
1010
1111from ..eventyay_common .views .billing import BillingInvoicePreview
1212from .views import (
@@ -42,14 +42,15 @@ def talks_to_submissions_redirect(request, event, subpath):
4242 Redirects requests from /events/.../talks/... to /events/.../submissions/...
4343 preserving the subpath and query parameters.
4444 """
45- new_path = request .path .replace (" /talks/" , " /submissions/" , 1 )
45+ new_path = request .path .replace (' /talks/' , ' /submissions/' , 1 )
4646
47- query_string = request .META .get ('QUERY_STRING' , '' )
48- if query_string :
47+ if query_string : = request .META .get ('QUERY_STRING' , '' ):
48+ new_path += f'? { query_string } '
4949 new_path += '?' + query_string
5050
5151 return HttpResponsePermanentRedirect (new_path )
5252
53+
5354router = routers .DefaultRouter ()
5455router .register (r'organizers' , organizer .OrganizerViewSet )
5556
@@ -99,7 +100,11 @@ def talks_to_submissions_redirect(request, event, subpath):
99100event_router .register ('talkquestions' , question .QuestionViewSet , basename = 'talkquestion' )
100101event_router .register ('answers' , question .AnswerViewSet , basename = 'answer' )
101102event_router .register ('question-options' , question .AnswerOptionViewSet , basename = 'question_option' )
102- event_router .register ('speaker-information' , speaker_information .SpeakerInformationViewSet , basename = 'speaker_information' ,)
103+ event_router .register (
104+ 'speaker-information' ,
105+ speaker_information .SpeakerInformationViewSet ,
106+ basename = 'speaker_information' ,
107+ )
103108
104109checkinlist_router = routers .DefaultRouter ()
105110checkinlist_router .register (r'positions' , checkin .CheckinListPositionViewSet , basename = 'checkinlistpos' )
@@ -126,87 +131,86 @@ def talks_to_submissions_redirect(request, event, subpath):
126131 importlib .import_module (app .name + '.urls' )
127132
128133urlpatterns = [
129- url ( r'^ ' , include (router .urls )),
130- url ( r'^ organizers/(?P< organizer>[^/]+) /' , include (orga_router .urls )),
131- url (
132- r'^ organizers/(?P< organizer>[^/]+)/ settings/$ ' ,
134+ path ( ' ' , include (router .urls )),
135+ path ( ' organizers/<orgslug: organizer>/' , include (orga_router .urls )),
136+ path (
137+ ' organizers/<orgslug: organizer>/ settings/' ,
133138 organizer .OrganizerSettingsView .as_view (),
134139 name = 'organizer.settings' ,
135140 ),
136- url (
137- r'^ organizers/(?P< organizer>[^/]+)/ giftcards/(?P <giftcard>[^/]+) /' ,
141+ path (
142+ ' organizers/<orgslug: organizer>/ giftcards/<giftcard>/' ,
138143 include (giftcard_router .urls ),
139144 ),
140- url (
141- r'^ organizers/(?P< organizer>[^/]+)/ events/(?P< event>[^/]+)/ settings/$ ' ,
145+ path (
146+ ' organizers/<orgslug: organizer>/ events/<slug: event>/ settings/' ,
142147 event .EventSettingsView .as_view (),
143148 name = 'event.settings' ,
144149 ),
145- url (
146- r'^ organizers/(?P< organizer>[^/]+)/ events/(?P< event>[^/]+) /' ,
150+ path (
151+ ' organizers/<orgslug: organizer>/ events/<slug: event>/' ,
147152 include (event_router .urls ),
148153 ),
149- url (
150- r'^ organizers/(?P< organizer>[^/]+)/ teams/(?P< team>[^/]+) /' ,
154+ path (
155+ ' organizers/<orgslug: organizer>/ teams/<slug: team>/' ,
151156 include (team_router .urls ),
152157 ),
153- url (
154- r'^ organizers/(?P< organizer>[^/]+)/ events/(?P< event>[^/]+)/ products/(?P< product>[^/]+) /' ,
158+ path (
159+ ' organizers/<orgslug: organizer>/ events/<slug: event>/ products/<slug: product>/' ,
155160 include (product_router .urls ),
156161 ),
157- url (
158- r'^ organizers/(?P< organizer>[^/]+)/ events/(?P< event>[^/]+)/ questions/(?P< question>[^/]+) /' ,
162+ path (
163+ ' organizers/<orgslug: organizer>/ events/<slug: event>/ questions/<slug: question>/' ,
159164 include (question_router .urls ),
160165 ),
161- url (
162- r'^ organizers/(?P< organizer>[^/]+)/ events/(?P< event>[^/]+)/ checkinlists/(?P< list>[^/]+) /' ,
166+ path (
167+ ' organizers/<orgslug: organizer>/ events/<slug: event>/ checkinlists/<slug: list>/' ,
163168 include (checkinlist_router .urls ),
164169 ),
165- url (
166- r'^ organizers/(?P< organizer>[^/]+)/ checkin/redeem/$ ' ,
170+ path (
171+ ' organizers/<orgslug: organizer>/ checkin/redeem/' ,
167172 checkin .CheckinRedeemView .as_view (),
168173 name = 'checkin.redeem' ,
169174 ),
170- url (
171- r'^ organizers/(?P< organizer>[^/]+)/ events/(?P< event>[^/]+)/ orders/(?P< order>[^/]+) /' ,
175+ path (
176+ ' organizers/<orgslug: organizer>/ events/<slug: event>/ orders/<int: order>/' ,
172177 include (order_router .urls ),
173178 ),
174- url ( r'^ oauth/authorize$ ' , oauth .AuthorizationView .as_view (), name = 'authorize' ),
175- url ( r'^ oauth/token$ ' , oauth .TokenView .as_view (), name = 'token' ),
176- url ( r'^ oauth/revoke_token$ ' , oauth .RevokeTokenView .as_view (), name = 'revoke-token' ),
177- url (
178- r'^ device/initialize$ ' ,
179+ path ( ' oauth/authorize' , oauth .AuthorizationView .as_view (), name = 'authorize' ),
180+ path ( ' oauth/token' , oauth .TokenView .as_view (), name = 'token' ),
181+ path ( ' oauth/revoke_token' , oauth .RevokeTokenView .as_view (), name = 'revoke-token' ),
182+ path (
183+ ' device/initialize' ,
179184 device .InitializeView .as_view (),
180185 name = 'device.initialize' ,
181186 ),
182- url ( r'^ device/update$ ' , device .UpdateView .as_view (), name = 'device.update' ),
183- url ( r'^ device/roll$ ' , device .RollKeyView .as_view (), name = 'device.roll' ),
184- url ( r'^ device/revoke$ ' , device .RevokeKeyView .as_view (), name = 'device.revoke' ),
185- url (
186- r'^ device/eventselection$ ' ,
187+ path ( ' device/update' , device .UpdateView .as_view (), name = 'device.update' ),
188+ path ( ' device/roll' , device .RollKeyView .as_view (), name = 'device.roll' ),
189+ path ( ' device/revoke' , device .RevokeKeyView .as_view (), name = 'device.revoke' ),
190+ path (
191+ ' device/eventselection' ,
187192 device .EventSelectionView .as_view (),
188193 name = 'device.eventselection' ,
189194 ),
190- url ( r'^ upload$ ' , upload .UploadView .as_view (), name = 'upload' ),
191- url ( r'^me$ ' , user .MeView .as_view (), name = 'user.me' ),
192- url ( r'^ version$ ' , version .VersionView .as_view (), name = 'version' ),
193- url (
194- r'^ billing-testing/(?P <task>[^/]+) ' ,
195+ path ( ' upload' , upload .UploadView .as_view (), name = 'upload' ),
196+ path ( 'me ' , user .MeView .as_view (), name = 'user.me' ),
197+ path ( ' version' , version .VersionView .as_view (), name = 'version' ),
198+ path (
199+ ' billing-testing/<task>' ,
195200 BillingInvoicePreview .as_view (),
196201 name = 'billing-testing' ,
197202 ),
198- url ( r'^ webhook/stripe$ ' , stripe_webhook_view , name = 'stripe-webhook' ),
199- url (
200- r'(?P< organizer>[^/]+)/(?P< event>[^/]+) /schedule-public' ,
203+ path ( ' webhook/stripe' , stripe_webhook_view , name = 'stripe-webhook' ),
204+ path (
205+ '<orgslug: organizer>/<slug: event>/schedule-public' ,
201206 event .talk_schedule_public ,
202207 name = 'event.schedule-public' ,
203208 ),
204- url (
205- r'(?P< organizer>[^/]+)/(?P< event>[^/]+) /ticket-check' ,
209+ path (
210+ '<orgslug: organizer>/<slug: event>/ticket-check' ,
206211 event .CustomerOrderCheckView .as_view (),
207212 name = 'event.ticket-check' ,
208213 ),
209-
210214 # We redirect the old pre-filtered /talks/ endpoint to /submissions/
211215 path (
212216 'events/<slug:event>/talks/<path:subpath>' ,
0 commit comments