mirror of
https://github.com/pretix/pretix.git
synced 2026-09-15 16:34:42 +00:00
commit2177bebf6aMerge:ea613bf271d08216d8c5Author: Mira Weller <weller@rami.io> Date: Fri Aug 7 21:22:31 2026 +0200 Merge branch 'master' into questions-vue3 commitea613bf271Author: Mira Weller <weller@rami.io> Date: Fri Aug 7 21:21:35 2026 +0200 wip commitc8bed5e3b9Author: Mira Weller <weller@rami.io> Date: Fri Aug 7 10:15:00 2026 +0200 rename get_cart to get_cart_positions (keep old name alive) commit1ec27fff05Author: Mira Weller <weller@rami.io> Date: Fri Aug 7 10:01:38 2026 +0200 filter questionnaires by sales channel commit0294f205d0Author: Mira Weller <weller@rami.io> Date: Thu Aug 6 20:06:05 2026 +0200 refactor: extract build_requested_valid_from_field method commit3424aacdc3Author: Mira Weller <weller@rami.io> Date: Thu Aug 6 20:05:44 2026 +0200 rename presale question forms and mixins commit4012889076Author: Mira Weller <weller@rami.io> Date: Thu Aug 6 19:42:29 2026 +0200 rebase migration commitfe15d71cd2Merge:3ea7ea31b64d9dfa88feAuthor: Mira Weller <weller@rami.io> Date: Thu Aug 6 19:25:44 2026 +0200 Merge branch 'master' into questions-vue3 # Conflicts: # src/pretix/base/forms/questions.py # src/pretix/base/middleware.py # src/pretix/base/templates/pretixbase/redirect.html commit3ea7ea31b6Author: Mira Weller <weller@rami.io> Date: Fri Jul 24 17:37:46 2026 +0200 wip commit5b34a25fb5Author: Mira Weller <weller@rami.io> Date: Wed Jun 17 16:21:11 2026 +0200 use questionnaire data for rendering checkout questions step commit9467f1d08dAuthor: Mira Weller <weller@rami.io> Date: Wed Jun 17 15:54:14 2026 +0200 refactor: extract build_system_question_field method commit85344a7690Author: Mira Weller <weller@rami.io> Date: Wed Jun 17 15:50:41 2026 +0200 refactor: extract build_user_question_field method commit3b47f4aaa7Author: Mira Weller <weller@rami.io> Date: Wed Jun 17 15:49:34 2026 +0200 refactor: cartpos / orderpos commit0309b05121Author: Mira Weller <weller@rami.io> Date: Thu Mar 19 13:52:18 2026 +0100 vite config: allow cors access from pretix.work subdomains commitad092ae0d1Author: Mira Weller <weller@rami.io> Date: Wed Jun 17 12:35:33 2026 +0200 re-add vue-slicksort dep commit9f42d679ccAuthor: Mira Weller <weller@rami.io> Date: Wed Jun 17 12:28:53 2026 +0200 rebase migration commit9eae9c6de7Merge:84c51e031e694b915d89Author: Mira Weller <weller@rami.io> Date: Wed Jun 17 12:24:49 2026 +0200 Merge branch 'master' into questions-vue3 # Conflicts: # .github/workflows/tests.yml # .gitignore # Dockerfile # package-lock.json # package.json # src/pretix/base/management/commands/runserver.py # src/pretix/base/middleware.py # src/pretix/base/templatetags/vite.py # src/pretix/control/forms/global_settings.py # src/pretix/control/templates/pretixcontrol/checkin/list_edit.html # src/pretix/control/views/item.py # src/pretix/presale/views/widget.py # src/pretix/settings.py # src/pretix/static/pretixcontrol/js/ui/checkinrules/App.vue # src/pretix/static/pretixcontrol/js/ui/checkinrules/constants.ts # src/pretix/static/pretixcontrol/js/ui/checkinrules/django-interop.ts # src/pretix/static/pretixcontrol/js/ui/checkinrules/lookup-select2.vue # src/pretix/static/pretixcontrol/js/ui/checkinrules/timefield.vue # src/pretix/static/pretixcontrol/js/ui/checkinrules/viz-node.vue # src/pretix/static/pretixpresale/widget/index.html # src/pretix/static/pretixpresale/widget/src/api.ts # src/pretix/static/pretixpresale/widget/src/button.ts # src/pretix/static/pretixpresale/widget/src/components/PriceBox.vue # src/pretix/static/pretixpresale/widget/src/main.ts # src/pretix/static/pretixpresale/widget/src/sharedStore.ts # src/pretix/static/pretixpresale/widget/src/utils.ts # src/pretix/static/pretixpresale/widget/src/widget.ts # src/tests/e2e/conftest.py # vite.config.ts commit84c51e031eMerge:902ee9242e222b453b43Author: Mira Weller <weller@rami.io> Date: Wed Jun 17 12:20:05 2026 +0200 Merge branch 'master' into questions-vue3 commit902ee9242eAuthor: Mira Weller <weller@rami.io> Date: Wed Jun 17 12:19:26 2026 +0200 css comment commitb758efd4a9Author: Mira Weller <weller@rami.io> Date: Wed Jun 17 12:19:19 2026 +0200 question dependencies commitc68fe00502Author: Mira Weller <weller@rami.io> Date: Wed Jun 17 12:18:00 2026 +0200 add data field edit link commitb7da9bb6c1Author: Mira Weller <weller@rami.io> Date: Wed Jun 17 12:16:20 2026 +0200 handle hidden questions commit897120d3daAuthor: Mira Weller <weller@rami.io> Date: Tue May 12 13:04:08 2026 +0200 add ts model definitions commit09abc5725eAuthor: Mira Weller <weller@rami.io> Date: Tue May 12 11:30:12 2026 +0200 reorder and save commit9a7d5abb1fAuthor: Mira Weller <weller@rami.io> Date: Tue May 12 11:29:37 2026 +0200 fix unhandled exception in taxrules API commit3cee5f524bAuthor: Mira Weller <weller@rami.io> Date: Tue May 5 18:12:21 2026 +0200 use slicksort for reordering questionnaires and questions commit3a1a6b988eAuthor: Mira Weller <weller@rami.io> Date: Tue Apr 28 19:23:35 2026 +0200 improve i18n, implement "add text block" dialog commitbdc720f5a2Author: Mira Weller <weller@rami.io> Date: Fri Mar 27 18:57:22 2026 +0100 wip commit583184af38Author: Mira Weller <weller@rami.io> Date: Thu Mar 19 21:45:32 2026 +0100 change existing views commit63d9f7cea8Author: Mira Weller <weller@rami.io> Date: Thu Mar 19 21:45:32 2026 +0100 adapt vue app to new data model (wip) commitc3d6fb1bd6Author: Mira Weller <weller@rami.io> Date: Thu Mar 19 21:44:47 2026 +0100 add Questionnaire and QuestionnaireChild models and their API; migrate existing data commitbb43acd257Author: Mira Weller <weller@rami.io> Date: Thu Mar 19 13:52:28 2026 +0100 vite config: add questionnaires app commite0744951e8Author: Mira Weller <weller@rami.io> Date: Thu Mar 19 13:52:18 2026 +0100 vite config: allow cors access from pretix.work subdomains commitfef1e356f7Author: Mira Weller <weller@rami.io> Date: Thu Mar 19 13:33:24 2026 +0100 fix out-of-the-box experience commit81775f5d2dAuthor: Mira Weller <weller@rami.io> Date: Thu Mar 19 13:33:24 2026 +0100 setup questionnaires vue app, add code from question editor proof of concept commit4bbcc398ccMerge:a924d0a26658840a5fd6Author: Mira Weller <weller@rami.io> Date: Thu Mar 19 13:13:32 2026 +0100 Merge remote-tracking branch 'refs/remotes/origin/master' into questions-vue3
169 lines
9.6 KiB
Python
169 lines
9.6 KiB
Python
#
|
|
# This file is part of pretix (Community Edition).
|
|
#
|
|
# Copyright (C) 2014-2020 Raphael Michel and contributors
|
|
# Copyright (C) 2020-today pretix GmbH and contributors
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
|
|
# Public License as published by the Free Software Foundation in version 3 of the License.
|
|
#
|
|
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
|
|
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
|
|
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
|
|
# this file, see <https://pretix.eu/about/en/license>.
|
|
#
|
|
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
|
|
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
# details.
|
|
#
|
|
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
|
# <https://www.gnu.org/licenses/>.
|
|
#
|
|
|
|
# This file is based on an earlier version of pretix which was released under the Apache License 2.0. The full text of
|
|
# the Apache License 2.0 can be obtained at <http://www.apache.org/licenses/LICENSE-2.0>.
|
|
#
|
|
# This file may have since been changed and any changes are released under the terms of AGPLv3 as described above. A
|
|
# full history of changes and contributors is available at <https://github.com/pretix/pretix>.
|
|
#
|
|
# This file contains Apache-licensed contributions copyrighted by: Ture Gjørup
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software distributed under the Apache License 2.0 is
|
|
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations under the License.
|
|
|
|
import importlib
|
|
|
|
from django.apps import apps
|
|
from django.urls import include, re_path
|
|
from rest_framework import routers
|
|
|
|
from pretix.api.views import cart
|
|
|
|
from .views import (
|
|
checkin, device, discount, event, exporters, idempotency, item, media,
|
|
oauth, order, organizer, shredders, upload, user, version, voucher,
|
|
waitinglist, webhooks,
|
|
)
|
|
|
|
router = routers.DefaultRouter()
|
|
router.register(r'organizers', organizer.OrganizerViewSet)
|
|
|
|
orga_router = routers.DefaultRouter()
|
|
orga_router.register(r'events', event.EventViewSet)
|
|
orga_router.register(r'subevents', event.SubEventViewSet)
|
|
orga_router.register(r'webhooks', webhooks.WebHookViewSet)
|
|
orga_router.register(r'seatingplans', organizer.SeatingPlanViewSet)
|
|
orga_router.register(r'giftcards', organizer.GiftCardViewSet)
|
|
orga_router.register(r'customers', organizer.CustomerViewSet)
|
|
orga_router.register(r'saleschannels', organizer.SalesChannelViewSet)
|
|
orga_router.register(r'memberships', organizer.MembershipViewSet)
|
|
orga_router.register(r'membershiptypes', organizer.MembershipTypeViewSet)
|
|
orga_router.register(r'reusablemedia', media.ReusableMediaViewSet)
|
|
orga_router.register(r'teams', organizer.TeamViewSet)
|
|
orga_router.register(r'devices', organizer.DeviceViewSet)
|
|
orga_router.register(r'orders', order.OrganizerOrderViewSet)
|
|
orga_router.register(r'invoices', order.InvoiceViewSet)
|
|
orga_router.register(r'scheduled_exports', exporters.ScheduledOrganizerExportViewSet)
|
|
orga_router.register(r'exporters', exporters.OrganizerExportersViewSet, basename='exporters')
|
|
orga_router.register(r'transactions', order.OrganizerTransactionViewSet)
|
|
orga_router.register(r'orderpositions', order.OrganizerOrderPositionViewSet, basename='orderpositions')
|
|
|
|
team_router = routers.DefaultRouter()
|
|
team_router.register(r'members', organizer.TeamMemberViewSet)
|
|
team_router.register(r'invites', organizer.TeamInviteViewSet)
|
|
team_router.register(r'tokens', organizer.TeamAPITokenViewSet)
|
|
|
|
event_router = routers.DefaultRouter()
|
|
event_router.register(r'subevents', event.SubEventViewSet)
|
|
event_router.register(r'clone', event.CloneEventViewSet)
|
|
event_router.register(r'items', item.ItemViewSet)
|
|
event_router.register(r'categories', item.ItemCategoryViewSet)
|
|
event_router.register(r'datafields', item.QuestionViewSet)
|
|
event_router.register(r'questionnaires', item.QuestionnaireViewSet)
|
|
event_router.register(r'discounts', discount.DiscountViewSet)
|
|
event_router.register(r'quotas', item.QuotaViewSet)
|
|
event_router.register(r'vouchers', voucher.VoucherViewSet)
|
|
event_router.register(r'orders', order.EventOrderViewSet)
|
|
event_router.register(r'orderpositions', order.EventOrderPositionViewSet)
|
|
event_router.register(r'transactions', order.TransactionViewSet)
|
|
event_router.register(r'invoices', order.InvoiceViewSet)
|
|
event_router.register(r'revokedsecrets', order.RevokedSecretViewSet, basename='revokedsecrets')
|
|
event_router.register(r'blockedsecrets', order.BlockedSecretViewSet, basename='blockedsecrets')
|
|
event_router.register(r'taxrules', event.TaxRuleViewSet)
|
|
event_router.register(r'seats', event.SeatViewSet)
|
|
event_router.register(r'waitinglistentries', waitinglist.WaitingListViewSet)
|
|
event_router.register(r'checkinlists', checkin.CheckinListViewSet)
|
|
event_router.register(r'checkins', checkin.CheckinViewSet)
|
|
event_router.register(r'cartpositions', cart.CartPositionViewSet)
|
|
event_router.register(r'scheduled_exports', exporters.ScheduledEventExportViewSet)
|
|
event_router.register(r'exporters', exporters.EventExportersViewSet, basename='exporters')
|
|
event_router.register(r'shredders', shredders.EventShreddersViewSet, basename='shredders')
|
|
event_router.register(r'item_meta_properties', event.ItemMetaPropertiesViewSet)
|
|
|
|
subevent_router = routers.DefaultRouter()
|
|
subevent_router.register(r'seats', event.SeatViewSet)
|
|
|
|
checkinlist_router = routers.DefaultRouter()
|
|
checkinlist_router.register(r'positions', checkin.CheckinListPositionViewSet, basename='checkinlistpos')
|
|
|
|
question_router = routers.DefaultRouter()
|
|
question_router.register(r'options', item.QuestionOptionViewSet)
|
|
|
|
item_router = routers.DefaultRouter()
|
|
item_router.register(r'variations', item.ItemVariationViewSet)
|
|
item_router.register(r'addons', item.ItemAddOnViewSet)
|
|
item_router.register(r'bundles', item.ItemBundleViewSet)
|
|
item_router.register(r'program_times', item.ItemProgramTimeViewSet)
|
|
|
|
order_router = routers.DefaultRouter()
|
|
order_router.register(r'payments', order.PaymentViewSet)
|
|
order_router.register(r'refunds', order.RefundViewSet)
|
|
|
|
giftcard_router = routers.DefaultRouter()
|
|
giftcard_router.register(r'transactions', organizer.GiftCardTransactionViewSet)
|
|
|
|
# Force import of all plugins to give them a chance to register URLs with the router
|
|
for app in apps.get_app_configs():
|
|
if hasattr(app, 'PretixPluginMeta'):
|
|
if importlib.util.find_spec(app.name + '.urls'):
|
|
importlib.import_module(app.name + '.urls')
|
|
|
|
urlpatterns = [
|
|
re_path(r'^', include(router.urls)),
|
|
re_path(r'^organizers/(?P<organizer>[^/]+)/', include(orga_router.urls)),
|
|
re_path(r'^organizers/(?P<organizer>[^/]+)/checkinrpc/redeem/$', checkin.CheckinRPCRedeemView.as_view(),
|
|
name="checkinrpc.redeem"),
|
|
re_path(r'^organizers/(?P<organizer>[^/]+)/checkinrpc/search/$', checkin.CheckinRPCSearchView.as_view(),
|
|
name="checkinrpc.search"),
|
|
re_path(r'^organizers/(?P<organizer>[^/]+)/checkinrpc/annul/$', checkin.CheckinRPCAnnulView.as_view(),
|
|
name="checkinrpc.annul"),
|
|
re_path(r'^organizers/(?P<organizer>[^/]+)/settings/$', organizer.OrganizerSettingsView.as_view(),
|
|
name="organizer.settings"),
|
|
re_path(r'^organizers/(?P<organizer>[^/]+)/giftcards/(?P<giftcard>[^/]+)/', include(giftcard_router.urls)),
|
|
re_path(r'^organizers/(?P<organizer>[^/]+)/events/(?P<event>[^/]+)/settings/$', event.EventSettingsView.as_view(),
|
|
name="event.settings"),
|
|
re_path(r'^organizers/(?P<organizer>[^/]+)/events/(?P<event>[^/]+)/', include(event_router.urls)),
|
|
re_path(r'^organizers/(?P<organizer>[^/]+)/events/(?P<event>[^/]+)/subevents/(?P<subevent>\d+)/', include(subevent_router.urls)),
|
|
re_path(r'^organizers/(?P<organizer>[^/]+)/teams/(?P<team>[^/]+)/', include(team_router.urls)),
|
|
re_path(r'^organizers/(?P<organizer>[^/]+)/events/(?P<event>[^/]+)/items/(?P<item>[^/]+)/', include(item_router.urls)),
|
|
re_path(r'^organizers/(?P<organizer>[^/]+)/events/(?P<event>[^/]+)/questions/(?P<question>[^/]+)/',
|
|
include(question_router.urls)),
|
|
re_path(r'^organizers/(?P<organizer>[^/]+)/events/(?P<event>[^/]+)/checkinlists/(?P<list>[^/]+)/',
|
|
include(checkinlist_router.urls)),
|
|
re_path(r'^organizers/(?P<organizer>[^/]+)/events/(?P<event>[^/]+)/orders/(?P<order>[^/]+)/', include(order_router.urls)),
|
|
re_path(r"^oauth/authorize$", oauth.AuthorizationView.as_view(), name="authorize"),
|
|
re_path(r"^oauth/token$", oauth.TokenView.as_view(), name="token"),
|
|
re_path(r"^oauth/revoke_token$", oauth.RevokeTokenView.as_view(), name="revoke-token"),
|
|
re_path(r"^device/initialize$", device.InitializeView.as_view(), name="device.initialize"),
|
|
re_path(r"^device/update$", device.UpdateView.as_view(), name="device.update"),
|
|
re_path(r"^device/roll$", device.RollKeyView.as_view(), name="device.roll"),
|
|
re_path(r"^device/revoke$", device.RevokeKeyView.as_view(), name="device.revoke"),
|
|
re_path(r"^device/info$", device.InfoView.as_view(), name="device.info"),
|
|
re_path(r"^device/eventselection$", device.EventSelectionView.as_view(), name="device.eventselection"),
|
|
re_path(r"^idempotency_query$", idempotency.IdempotencyQueryView.as_view(), name="idempotency.query"),
|
|
re_path(r"^upload$", upload.UploadView.as_view(), name="upload"),
|
|
re_path(r"^me$", user.MeView.as_view(), name="user.me"),
|
|
re_path(r"^version$", version.VersionView.as_view(), name="version"),
|
|
]
|