Merge branch 'django4' into 'v3.x'

v2.10.x Uplifts, DJ4, Py3.8 + More

See merge request allianceauth/allianceauth!1387
This commit is contained in:
Ariel Rin 2022-02-08 13:04:45 +00:00
commit 703c2392a9
56 changed files with 265 additions and 244 deletions

View File

@ -14,6 +14,7 @@ stages:
include:
- template: Dependency-Scanning.gitlab-ci.yml
- template: Security/SAST.gitlab-ci.yml
- template: Security/Secret-Detection.gitlab-ci.yml
before_script:
- apt-get update && apt-get install redis-server -y

View File

@ -1,7 +1,7 @@
# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
__version__ = '2.9.4'
__version__ = '2.10.0'
__title__ = 'Alliance Auth'
__url__ = 'https://gitlab.com/allianceauth/allianceauth'
NAME = f'{__title__} v{__version__}'

View File

@ -1,5 +1,5 @@
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from allianceauth.authentication.models import User
class RegistrationForm(forms.Form):
email = forms.EmailField(label=_('Email'), max_length=254, required=True)

View File

@ -1,14 +1,16 @@
from django.conf.urls import url, include
from django.conf.urls import include
from allianceauth.authentication import views
from django.urls import re_path
from django.urls import path
urlpatterns = [
url(r'^activate/complete/$', views.activation_complete, name='registration_activation_complete'),
path('activate/complete/', views.activation_complete, name='registration_activation_complete'),
# The activation key can make use of any character from the
# URL-safe base64 alphabet, plus the colon as a separator.
url(r'^activate/(?P<activation_key>[-:\w]+)/$', views.ActivationView.as_view(), name='registration_activate'),
url(r'^register/$', views.RegistrationView.as_view(), name='registration_register'),
url(r'^register/complete/$', views.registration_complete, name='registration_complete'),
url(r'^register/closed/$', views.registration_closed, name='registration_disallowed'),
url(r'', include('django.contrib.auth.urls')),
re_path(r'^activate/(?P<activation_key>[-:\w]+)/$', views.ActivationView.as_view(), name='registration_activate'),
path('register/', views.RegistrationView.as_view(), name='registration_register'),
path('register/complete/', views.registration_complete, name='registration_complete'),
path('register/closed/', views.registration_closed, name='registration_disallowed'),
path('', include('django.contrib.auth.urls')),
]

View File

@ -2,7 +2,7 @@ import logging
from django.contrib.auth.models import User, Permission
from django.db import models, transaction
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from allianceauth.eveonline.models import EveCharacter, EveCorporationInfo, EveAllianceInfo, EveFactionInfo
from allianceauth.notifications import notify

View File

@ -11,7 +11,7 @@ from allianceauth.eveonline.models import EveCharacter
logger = logging.getLogger(__name__)
state_changed = Signal(providing_args=['user', 'state'])
state_changed = Signal()
def trigger_state_check(state):

View File

@ -1,5 +1,4 @@
from django.conf.urls import url
from django.contrib.auth.decorators import login_required
from django.urls import path
from django.views.generic.base import TemplateView
from . import views
@ -7,21 +6,21 @@ from . import views
app_name = 'authentication'
urlpatterns = [
url(r'^$', views.index, name='index'),
url(
r'^account/login/$',
path('', views.index, name='index'),
path(
'account/login/',
TemplateView.as_view(template_name='public/login.html'),
name='login'
),
url(
r'^account/characters/main/$',
path(
'account/characters/main/',
views.main_character_change,
name='change_main_character'
),
url(
r'^account/characters/add/$',
path(
'account/characters/add/',
views.add_character,
name='add_character'
),
url(r'^dashboard/$', views.dashboard, name='dashboard'),
path('dashboard/', views.dashboard, name='dashboard'),
]

View File

@ -1,5 +1,5 @@
from allianceauth.services.hooks import MenuItemHook, UrlHook
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from allianceauth import hooks
from allianceauth.corputils import urls

View File

@ -1,12 +1,11 @@
from django.conf.urls import url
from django.urls import path
from . import views
app_name = 'corputils'
urlpatterns = [
url(r'^$', views.corpstats_view, name='view'),
url(r'^add/$', views.corpstats_add, name='add'),
url(r'^(?P<corp_id>(\d)*)/$', views.corpstats_view, name='view_corp'),
url(r'^(?P<corp_id>(\d)+)/update/$', views.corpstats_update, name='update'),
url(r'^search/$', views.corpstats_search, name='search'),
]
path('', views.corpstats_view, name='view'),
path('add/', views.corpstats_add, name='add'),
path('<int:corp_id>/', views.corpstats_view, name='view_corp'),
path('<int:corp_id>/update/', views.corpstats_update, name='update'),
path('search/', views.corpstats_search, name='search'),
]

View File

@ -6,7 +6,7 @@ from django.contrib.auth.decorators import login_required, permission_required,
from django.core.exceptions import PermissionDenied, ObjectDoesNotExist
from django.db import IntegrityError
from django.shortcuts import render, redirect, get_object_or_404
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from esi.decorators import token_required
from allianceauth.eveonline.models import EveCharacter, EveCorporationInfo

View File

@ -1,5 +1,5 @@
from . import urls
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from allianceauth import hooks
from allianceauth.services.hooks import MenuItemHook, UrlHook

View File

@ -1,5 +1,5 @@
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
class FatlinkForm(forms.Form):

View File

@ -1,30 +1,30 @@
from django.conf.urls import url
from django.urls import path
from . import views
app_name = 'fleetactivitytracking'
urlpatterns = [
# FleetActivityTracking (FAT)
url(r'^$', views.fatlink_view, name='view'),
url(r'^statistics/$', views.fatlink_statistics_view, name='statistics'),
url(r'^statistics/corp/(\w+)$', views.fatlink_statistics_corp_view,
path('', views.fatlink_view, name='view'),
path('statistics/', views.fatlink_statistics_view, name='statistics'),
path('statistics/corp/<int:corpid>/', views.fatlink_statistics_corp_view,
name='statistics_corp'),
url(r'^statistics/corp/(?P<corpid>\w+)/(?P<year>[0-9]+)/(?P<month>[0-9]+)/',
path('statistics/corp/<int:corpid>/<int:year>/<int:month>/',
views.fatlink_statistics_corp_view,
name='statistics_corp_month'),
url(r'^statistics/(?P<year>[0-9]+)/(?P<month>[0-9]+)/$', views.fatlink_statistics_view,
path('statistics/<int:year>/<int:month>/', views.fatlink_statistics_view,
name='statistics_month'),
url(r'^user/statistics/$', views.fatlink_personal_statistics_view,
path('user/statistics/', views.fatlink_personal_statistics_view,
name='personal_statistics'),
url(r'^user/statistics/(?P<year>[0-9]+)/$', views.fatlink_personal_statistics_view,
path('user/statistics/<int:year>/', views.fatlink_personal_statistics_view,
name='personal_statistics_year'),
url(r'^user/statistics/(?P<year>[0-9]+)/(?P<month>[0-9]+)/$',
path('user/statistics/<int:year>/<int:month>/',
views.fatlink_monthly_personal_statistics_view,
name='personal_statistics_month'),
url(r'^user/(?P<char_id>[0-9]+)/statistics/(?P<year>[0-9]+)/(?P<month>[0-9]+)/$',
path('user/<int:char_id>/statistics/<int:year>/<int:month>/',
views.fatlink_monthly_personal_statistics_view,
name='user_statistics_month'),
url(r'^create/$', views.create_fatlink_view, name='create'),
url(r'^modify/(?P<fat_hash>[a-zA-Z0-9_-]+)/$', views.modify_fatlink_view, name='modify'),
url(r'^link/(?P<fat_hash>[a-zA-Z0-9]+)/$', views.click_fatlink_view, name='click'),
path('create/', views.create_fatlink_view, name='create'),
path('modify/<str:fat_hash>/', views.modify_fatlink_view, name='modify'),
path('link/<str:fat_hash>/', views.click_fatlink_view, name='click'),
]

View File

@ -10,7 +10,7 @@ from django.contrib.auth.models import User
from django.core.exceptions import ValidationError, ObjectDoesNotExist
from django.shortcuts import render, redirect, get_object_or_404, Http404
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from esi.decorators import token_required
from allianceauth.eveonline.providers import provider
from .forms import FatlinkForm

View File

@ -1,4 +1,4 @@
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from allianceauth.services.hooks import MenuItemHook, UrlHook
from allianceauth import hooks

View File

@ -1,51 +1,50 @@
from django.urls import path
from . import views
from django.conf.urls import url
app_name = "groupmanagement"
urlpatterns = [
# groups
url(r"^groups/$", views.groups_view, name="groups"),
url(r"^group/request/join/(\w+)/$", views.group_request_add, name="request_add"),
url(
r"^group/request/leave/(\w+)/$", views.group_request_leave, name="request_leave"
path("groups", views.groups_view, name="groups"),
path("group/request/join/<int:group_id>/", views.group_request_add, name="request_add"),
path(
"group/request/leave/<int:group_id>/", views.group_request_leave, name="request_leave"
),
# group management
url(r"^groupmanagement/requests/$", views.group_management, name="management"),
url(r"^groupmanagement/membership/$", views.group_membership, name="membership"),
url(
r"^groupmanagement/membership/(\w+)/$",
path("groupmanagement/requests/", views.group_management, name="management"),
path("groupmanagement/membership/", views.group_membership, name="membership"),
path(
"groupmanagement/membership/<int:group_id>/",
views.group_membership_list,
name="membership",
),
url(
r"^groupmanagement/membership/(\w+)/audit-log/$",
path(
"groupmanagement/membership/<int:group_id>/audit-log/",
views.group_membership_audit,
name="audit_log",
),
url(
r"^groupmanagement/membership/(\w+)/remove/(\w+)/$",
path(
"groupmanagement/membership/<int:group_id>/remove/<int:user_id>/",
views.group_membership_remove,
name="membership_remove",
),
url(
r"^groupmanagement/request/join/accept/(\w+)/$",
path(
"groupmanagement/request/join/accept/<int:group_request_id>/",
views.group_accept_request,
name="accept_request",
),
url(
r"^groupmanagement/request/join/reject/(\w+)/$",
path(
"groupmanagement/request/join/reject/<int:group_request_id>/",
views.group_reject_request,
name="reject_request",
),
url(
r"^groupmanagement/request/leave/accept/(\w+)/$",
path(
"groupmanagement/request/leave/accept/<int:group_request_id>/",
views.group_leave_accept_request,
name="leave_accept_request",
),
url(
r"^groupmanagement/request/leave/reject/(\w+)/$",
path(
"groupmanagement/request/leave/reject/<int:group_request_id>/",
views.group_leave_reject_request,
name="leave_reject_request",
),

View File

@ -9,7 +9,7 @@ from django.core.exceptions import ObjectDoesNotExist, PermissionDenied
from django.db.models import Count
from django.http import Http404
from django.shortcuts import render, redirect, get_object_or_404
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from allianceauth.notifications import notify

View File

@ -1,4 +1,4 @@
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from allianceauth import hooks
from allianceauth.services.hooks import MenuItemHook, UrlHook

View File

@ -1,5 +1,5 @@
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
class HRApplicationCommentForm(forms.Form):

View File

@ -1,31 +1,31 @@
from django.conf.urls import url
from django.urls import path
from . import views
app_name = 'hrapplications'
urlpatterns = [
url(r'^$', views.hr_application_management_view,
path('', views.hr_application_management_view,
name="index"),
url(r'^create/$', views.hr_application_create_view,
path('create/', views.hr_application_create_view,
name="create_view"),
url(r'^create/(\d+)', views.hr_application_create_view,
path('create/<int:form_id>/', views.hr_application_create_view,
name="create_view"),
url(r'^remove/(\w+)', views.hr_application_remove,
path('remove/<int:app_id>/', views.hr_application_remove,
name="remove"),
url(r'^view/(\w+)', views.hr_application_view,
path('view/<int:app_id>/', views.hr_application_view,
name="view"),
url(r'^personal/view/(\w+)', views.hr_application_personal_view,
path('personal/view/<int:app_id>/', views.hr_application_personal_view,
name="personal_view"),
url(r'^personal/removal/(\w+)',
path('personal/removal/<int:app_id>/',
views.hr_application_personal_removal,
name="personal_removal"),
url(r'^approve/(\w+)', views.hr_application_approve,
path('approve/<int:app_id>/', views.hr_application_approve,
name="approve"),
url(r'^reject/(\w+)', views.hr_application_reject,
path('reject/<int:app_id>/', views.hr_application_reject,
name="reject"),
url(r'^search/', views.hr_application_search,
path('search/', views.hr_application_search,
name="search"),
url(r'^mark_in_progress/(\w+)', views.hr_application_mark_in_progress,
path('mark_in_progress/<int:app_id>/', views.hr_application_mark_in_progress,
name="mark_in_progress"),
]
]

View File

@ -1,16 +1,16 @@
from django.conf.urls import url
from django.urls import path
from . import views
app_name = 'notifications'
# Notifications
urlpatterns = [
url(r'^remove_notifications/(\w+)/$', views.remove_notification, name='remove'),
url(r'^notifications/mark_all_read/$', views.mark_all_read, name='mark_all_read'),
url(r'^notifications/delete_all_read/$', views.delete_all_read, name='delete_all_read'),
url(r'^notifications/$', views.notification_list, name='list'),
url(r'^notifications/(\w+)/$', views.notification_view, name='view'),
url(
r'^user_notifications_count/(?P<user_pk>\d+)/$',
path('remove_notifications/<int:notif_id>/', views.remove_notification, name='remove'),
path('notifications/mark_all_read/', views.mark_all_read, name='mark_all_read'),
path('notifications/delete_all_read/', views.delete_all_read, name='delete_all_read'),
path('notifications/', views.notification_list, name='list'),
path('notifications/<int:notif_id>/', views.notification_view, name='view'),
path(
'user_notifications_count/<int:user_pk>/',
views.user_notifications_count,
name='user_notifications_count'
),

View File

@ -1,5 +1,5 @@
from allianceauth.services.hooks import MenuItemHook, UrlHook
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from allianceauth import hooks
from . import urls

View File

@ -1,5 +1,5 @@
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from allianceauth.optimer.form_widgets import DataListWidget

View File

@ -1,12 +1,12 @@
from django.conf.urls import url
from django.urls import path
from . import views
app_name = 'optimer'
urlpatterns = [
url(r'^$', views.optimer_view, name='view'),
url(r'^add$', views.add_optimer_view, name='add'),
url(r'^(\w+)/remove$', views.remove_optimer, name='remove'),
url(r'^(\w+)/edit$', views.edit_optimer, name='edit'),
]
path('', views.optimer_view, name='view'),
path('add/', views.add_optimer_view, name='add'),
path('<int:optimer_id>/remove/', views.remove_optimer, name='remove'),
path('<int:optimer_id>/edit/', views.edit_optimer, name='edit'),
]

View File

@ -6,7 +6,7 @@ from django.contrib.auth.decorators import permission_required
from django.shortcuts import get_object_or_404
from django.shortcuts import render, redirect
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from .form import OpForm
from .models import OpTimer, OpTimerType

View File

@ -1,11 +1,12 @@
from django.conf.urls import url
from django.urls import re_path
from django.urls import path
from . import views
app_name = 'permissions_tool'
urlpatterns = [
url(r'^overview/$', views.permissions_overview, name='overview'),
url(r'^audit/(?P<app_label>[\w\-_]+)/(?P<model>[\w\-_]+)/(?P<codename>[\w\-_]+)/$', views.permissions_audit,
path('overview/', views.permissions_overview, name='overview'),
re_path(r'^audit/(?P<app_label>[\w\-_]+)/(?P<model>[\w\-_]+)/(?P<codename>[\w\-_]+)/$', views.permissions_audit,
name='audit'),
]

View File

@ -1,8 +1,9 @@
from django.conf.urls import include, url
from django.conf.urls import include
from allianceauth import urls
from django.urls import re_path
urlpatterns = [
url(r'', include(urls)),
re_path(r'', include(urls)),
]
handler500 = 'allianceauth.views.Generic500Redirect'

View File

@ -1,5 +1,5 @@
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
class FleetFormatterForm(forms.Form):

View File

@ -1,4 +1,5 @@
from django.conf.urls import include, url
from django.conf.urls import include
from django.urls import re_path
from django.core.exceptions import ObjectDoesNotExist
from django.template.loader import render_to_string
from django.utils.functional import cached_property
@ -9,7 +10,6 @@ from allianceauth.hooks import get_hooks
from .models import NameFormatConfig
def get_extension_logger(name):
"""
Takes the name of a plugin/extension and generates a child logger of the extensions logger
@ -157,7 +157,7 @@ class MenuItemHook:
class UrlHook:
def __init__(self, urls, namespace, base_url):
self.include_pattern = url(base_url, include(urls, namespace=namespace))
self.include_pattern = re_path(base_url, include(urls, namespace=namespace))
class NameFormatter:

View File

@ -1,4 +1,5 @@
from django.conf.urls import url, include
from django.conf.urls import include
from django.urls import path
from . import views
@ -6,13 +7,13 @@ app_name = 'discord'
module_urls = [
# Discord Service Control
url(r'^activate/$', views.activate_discord, name='activate'),
url(r'^deactivate/$', views.deactivate_discord, name='deactivate'),
url(r'^reset/$', views.reset_discord, name='reset'),
url(r'^callback/$', views.discord_callback, name='callback'),
url(r'^add_bot/$', views.discord_add_bot, name='add_bot'),
path('activate/', views.activate_discord, name='activate'),
path('deactivate/', views.deactivate_discord, name='deactivate'),
path('reset/', views.reset_discord, name='reset'),
path('callback/', views.discord_callback, name='callback'),
path('add_bot/', views.discord_add_bot, name='add_bot'),
]
urlpatterns = [
url(r'^discord/', include((module_urls, app_name), namespace=app_name))
path('discord/', include((module_urls, app_name), namespace=app_name))
]

View File

@ -1,8 +1,8 @@
from django.conf.urls import url
from django.urls import path
from . import views
urlpatterns = [
# Discourse Service Control
url(r'^discourse/sso$', views.discourse_sso, name='auth_discourse_sso'),
path('discourse/sso', views.discourse_sso, name='auth_discourse_sso'),
]

View File

@ -1,4 +1,5 @@
from django.conf.urls import url, include
from django.conf.urls import include
from django.urls import path
app_name = 'example'
@ -7,5 +8,5 @@ module_urls = [
]
urlpatterns = [
url(r'^example/', include((module_urls, app_name), namespace=app_name)),
path('example/', include((module_urls, app_name), namespace=app_name)),
]

View File

@ -1,4 +1,5 @@
from django.conf.urls import url, include
from django.conf.urls import include
from django.urls import path
from . import views
@ -6,12 +7,12 @@ app_name = 'ips4'
module_urls = [
# IPS4 Service Control
url(r'^activate/$', views.activate_ips4, name='activate'),
url(r'^deactivate/$', views.deactivate_ips4, name='deactivate'),
url(r'^reset_password/$', views.reset_ips4_password, name='reset_password'),
url(r'^set_password/$', views.set_ips4_password, name='set_password'),
path('activate/', views.activate_ips4, name='activate'),
path('deactivate/', views.deactivate_ips4, name='deactivate'),
path('reset_password/', views.reset_ips4_password, name='reset_password'),
path('set_password/', views.set_ips4_password, name='set_password'),
]
urlpatterns = [
url(r'^ips4/', include((module_urls, app_name), namespace=app_name))
path('ips4/', include((module_urls, app_name), namespace=app_name))
]

View File

@ -3,7 +3,7 @@
<td class="text-center">{{ username }}</td>
<td class="text-center"><a href="mumble://{{ service_url }}">{{ service_url }}</a></td>
<td class="text-center">
{% ifequal username "" %}
{% if username == "" %}
<a href="{% url urls.auth_activate %}" title="Activate" class="btn btn-warning">
<span class="glyphicon glyphicon-ok"></span>
</a>
@ -20,6 +20,6 @@
<a href="mumble://{{ connect_url }}" class="btn btn-success" title="Connect">
<span class="glyphicon glyphicon-arrow-right"></span>
</a>
{% endifequal %}
{% endif %}
</td>
</tr>

View File

@ -1,4 +1,5 @@
from django.conf.urls import url, include
from django.conf.urls import include
from django.urls import path
from . import views
@ -6,12 +7,12 @@ app_name = 'mumble'
module_urls = [
# Mumble service control
url(r'^activate/$', views.CreateAccountMumbleView.as_view(), name='activate'),
url(r'^deactivate/$', views.DeleteMumbleView.as_view(), name='deactivate'),
url(r'^reset_password/$', views.ResetPasswordMumbleView.as_view(), name='reset_password'),
url(r'^set_password/$', views.SetPasswordMumbleView.as_view(), name='set_password'),
path('activate/', views.CreateAccountMumbleView.as_view(), name='activate'),
path('deactivate/', views.DeleteMumbleView.as_view(), name='deactivate'),
path('reset_password/', views.ResetPasswordMumbleView.as_view(), name='reset_password'),
path('set_password/', views.SetPasswordMumbleView.as_view(), name='set_password'),
]
urlpatterns = [
url(r'^mumble/', include((module_urls, app_name), namespace=app_name))
path('mumble/', include((module_urls, app_name), namespace=app_name))
]

View File

@ -1,5 +1,5 @@
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
class JabberBroadcastForm(forms.Form):

View File

@ -1,4 +1,5 @@
from django.conf.urls import url, include
from django.conf.urls import include
from django.urls import path
from . import views
@ -6,13 +7,13 @@ app_name = 'openfire'
module_urls = [
# Jabber Service Control
url(r'^activate/$', views.activate_jabber, name='activate'),
url(r'^deactivate/$', views.deactivate_jabber, name='deactivate'),
url(r'^reset_password/$', views.reset_jabber_password, name='reset_password'),
url(r'^set_password/$', views.set_jabber_password, name='set_password'),
url(r'^broadcast/$', views.jabber_broadcast_view, name='broadcast'),
path('activate/', views.activate_jabber, name='activate'),
path('deactivate/', views.deactivate_jabber, name='deactivate'),
path('reset_password/', views.reset_jabber_password, name='reset_password'),
path('set_password/', views.set_jabber_password, name='set_password'),
path('broadcast/', views.jabber_broadcast_view, name='broadcast'),
]
urlpatterns = [
url(r'^openfire/', include((module_urls, app_name), namespace=app_name)),
path('openfire/', include((module_urls, app_name), namespace=app_name)),
]

View File

@ -1,4 +1,5 @@
from django.conf.urls import url, include
from django.conf.urls import include
from django.urls import path
from . import views
@ -6,12 +7,12 @@ app_name = 'phpbb3'
module_urls = [
# Forum Service Control
url(r'^activate/$', views.activate_forum, name='activate'),
url(r'^deactivate/$', views.deactivate_forum, name='deactivate'),
url(r'^reset_password/$', views.reset_forum_password, name='reset_password'),
url(r'^set_password/$', views.set_forum_password, name='set_password'),
path('activate/', views.activate_forum, name='activate'),
path('deactivate/', views.deactivate_forum, name='deactivate'),
path('reset_password/', views.reset_forum_password, name='reset_password'),
path('set_password/', views.set_forum_password, name='set_password'),
]
urlpatterns = [
url(r'^phpbb3/', include((module_urls, app_name), namespace=app_name))
path('phpbb3/', include((module_urls, app_name), namespace=app_name))
]

View File

@ -1,4 +1,5 @@
from django.conf.urls import url, include
from django.conf.urls import include
from django.urls import path
from . import views
@ -6,12 +7,12 @@ app_name = 'smf'
module_urls = [
# SMF Service Control
url(r'^activate/$', views.activate_smf, name='activate'),
url(r'^deactivate/$', views.deactivate_smf, name='deactivate'),
url(r'^reset_password/$', views.reset_smf_password, name='reset_password'),
url(r'^set_password/$', views.set_smf_password, name='set_password'),
path('activate/', views.activate_smf, name='activate'),
path('deactivate/', views.deactivate_smf, name='deactivate'),
path('reset_password/', views.reset_smf_password, name='reset_password'),
path('set_password/', views.set_smf_password, name='set_password'),
]
urlpatterns = [
url(r'^smf/', include((module_urls, app_name), namespace=app_name)),
path('smf/', include((module_urls, app_name), namespace=app_name)),
]

View File

@ -1,5 +1,5 @@
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from .manager import Teamspeak3Manager

View File

@ -5,7 +5,7 @@
<td class="text-center">{{ authinfo.teamspeak3_uid }}</td>
<td class="text-center"><a href="ts3server://{{ TEAMSPEAK3_PUBLIC_URL }}">{{ TEAMSPEAK3_PUBLIC_URL }}</a></td>
<td class="text-center">
{% ifequal authinfo.teamspeak3_uid "" %}
{% if authinfo.teamspeak3_uid == "" %}
<a href="{% url 'teamspeak3:activate' %}" title="Activate" class="btn btn-warning">
<span class="glyphicon glyphicon-ok"></span>
</a>
@ -22,6 +22,6 @@
<a href="ts3server://{{ TEAMSPEAK3_PUBLIC_URL }}?nickname={{ authinfo.teamspeak3_uid }}" title="Connect" class="btn btn-success">
<span class="glyphicon glyphicon-arrow-right"></span>
</a>
{% endifequal %}
{% endif %}
</td>
</tr>

View File

@ -1,4 +1,5 @@
from django.conf.urls import url, include
from django.conf.urls import include
from django.urls import path
from . import views
@ -6,19 +7,19 @@ app_name = 'teamspeak3'
module_urls = [
# Teamspeak3 service control
url(r'^activate/$', views.activate_teamspeak3, name='activate'),
url(r'^deactivate/$', views.deactivate_teamspeak3, name='deactivate'),
url(r'^reset_perm/$', views.reset_teamspeak3_perm, name='reset_perm'),
url(
r'^admin_update_ts3_groups/$',
path('activate/', views.activate_teamspeak3, name='activate'),
path('deactivate/', views.deactivate_teamspeak3, name='deactivate'),
path('reset_perm/', views.reset_teamspeak3_perm, name='reset_perm'),
path(
'admin_update_ts3_groups/',
views.admin_update_ts3_groups,
name='admin_update_ts3_groups'
),
# Teamspeak Urls
url(r'^verify/$', views.verify_teamspeak3, name='verify'),
path('verify/', views.verify_teamspeak3, name='verify'),
]
urlpatterns = [
url(r'^teamspeak3/', include((module_urls, app_name), namespace=app_name)),
path('teamspeak3/', include((module_urls, app_name), namespace=app_name)),
]

View File

@ -1,4 +1,5 @@
from django.conf.urls import url, include
from django.conf.urls import include
from django.urls import path
from . import views
@ -6,12 +7,12 @@ app_name = 'xenforo'
module_urls = [
# XenForo service control
url(r'^activate/$', views.activate_xenforo_forum, name='activate'),
url(r'^deactivate/$', views.deactivate_xenforo_forum, name='deactivate'),
url(r'^reset_password/$', views.reset_xenforo_password, name='reset_password'),
url(r'^set_password/$', views.set_xenforo_password, name='set_password'),
path('activate/', views.activate_xenforo_forum, name='activate'),
path('deactivate/', views.deactivate_xenforo_forum, name='deactivate'),
path('reset_password/', views.reset_xenforo_password, name='reset_password'),
path('set_password/', views.set_xenforo_password, name='set_password'),
]
urlpatterns = [
url(r'^xenforo/', include((module_urls, app_name), namespace=app_name)),
path('xenforo/', include((module_urls, app_name), namespace=app_name)),
]

View File

@ -5,7 +5,7 @@
<td class="text-center">{{ username }}</td>
<td class="text-center"><a href="{{ service_url }}">{{ service_url }}</a></td>
<td class="text-center">
{% ifequal username "" %}
{% if username == "" %}
{% if urls.auth_activate %}
<a href="{% url urls.auth_activate %}" title="Activate" class="btn btn-warning">
<span class="glyphicon glyphicon-ok"></span>
@ -27,6 +27,6 @@
<span class="glyphicon glyphicon-remove"></span>
</a>
{% endif %}
{% endifequal %}
{% endif %}
</td>
</tr>

View File

@ -1,14 +1,15 @@
from django.conf.urls import include, url
from django.conf.urls import include
from allianceauth.hooks import get_hooks
from django.urls import path
from . import views
urlpatterns = [
# Services
url(r'^services/', include(([
url(r'^$', views.services_view, name='services'),
path('services/', include(([
path('', views.services_view, name='services'),
# Tools
url(r'^tool/fleet_formatter_tool/$', views.fleet_formatter_view, name='fleet_format_tool'),
path('tool/fleet_formatter_tool/', views.fleet_formatter_view, name='fleet_format_tool'),
], 'services'), namespace='services')),
]

View File

@ -1,4 +1,4 @@
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from allianceauth import hooks
from allianceauth.services.hooks import MenuItemHook, UrlHook

View File

@ -1,7 +1,7 @@
import re
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
class SrpFleetMainForm(forms.Form):

View File

@ -1,4 +1,4 @@
from django.conf.urls import url
from django.urls import path
from . import views
@ -6,27 +6,27 @@ app_name = 'srp'
urlpatterns = [
# SRP URLS
url(r'^$', views.srp_management, name='management'),
url(r'^all/$', views.srp_management, {'all': True}, name='all'),
url(r'^(\w+)/view$', views.srp_fleet_view, name='fleet'),
url(r'^add/$', views.srp_fleet_add_view, name='add'),
url(r'^(\w+)/edit$', views.srp_fleet_edit_view, name='edit'),
url(r'^(\w+)/request', views.srp_request_view, name='request'),
path('', views.srp_management, name='management'),
path('all/', views.srp_management, {'all': True}, name='all'),
path('<int:fleet_id>/view/', views.srp_fleet_view, name='fleet'),
path('add/', views.srp_fleet_add_view, name='add'),
path('<int:fleet_id>/edit/', views.srp_fleet_edit_view, name='edit'),
path('<str:fleet_srp>/request', views.srp_request_view, name='request'),
# SRP URLS
url(r'^(\w+)/remove$', views.srp_fleet_remove, name='remove'),
url(r'^(\w+)/disable$', views.srp_fleet_disable, name='disable'),
url(r'^(\w+)/enable$', views.srp_fleet_enable, name='enable'),
url(r'^(\w+)/complete$', views.srp_fleet_mark_completed,
path('<int:fleet_id>/remove/', views.srp_fleet_remove, name='remove'),
path('<int:fleet_id>/disable/', views.srp_fleet_disable, name='disable'),
path('<int:fleet_id>/enable/', views.srp_fleet_enable, name='enable'),
path('<int:fleet_id>/complete/', views.srp_fleet_mark_completed,
name='mark_completed'),
url(r'^(\w+)/incomplete$', views.srp_fleet_mark_uncompleted,
path('<int:fleet_id>/incomplete/', views.srp_fleet_mark_uncompleted,
name='mark_uncompleted'),
url(r'^request/remove/', views.srp_request_remove,
path('request/remove/', views.srp_request_remove,
name="request_remove"),
url(r'^request/approve/', views.srp_request_approve,
path('request/approve/', views.srp_request_approve,
name='request_approve'),
url(r'^request/reject/', views.srp_request_reject,
path('request/reject/', views.srp_request_reject,
name='request_reject'),
url(r'^request/(\w+)/update', views.srp_request_update_amount,
path('request/<int:fleet_srp_request_id>/update', views.srp_request_update_amount,
name="request_update_amount"),
]

View File

@ -3,7 +3,7 @@ import datetime
from django import forms
from django.utils import timezone
from django.core.validators import MaxValueValidator, MinValueValidator
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from .models import Timer, TimerType

View File

@ -1,12 +1,12 @@
from django.conf.urls import url
from django.urls import path
from . import views
app_name = 'timerboard'
urlpatterns = [
url(r'^$', views.TimerView.as_view(), name='view'),
url(r'^add/$', views.AddTimerView.as_view(), name='add'),
url(r'^remove/(?P<pk>\w+)$', views.RemoveTimerView.as_view(), name='delete'),
url(r'^edit/(?P<pk>\w+)$', views.EditTimerView.as_view(), name='edit'),
path('', views.TimerView.as_view(), name='view'),
path('add/', views.AddTimerView.as_view(), name='add'),
path('remove/<int:pk>/', views.RemoveTimerView.as_view(), name='delete'),
path('edit/<int:pk>/', views.EditTimerView.as_view(), name='edit'),
]

View File

@ -9,7 +9,7 @@ from django.urls import reverse_lazy
from django.views.generic import CreateView, UpdateView, DeleteView
from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from .form import TimerForm
from .models import Timer

View File

@ -1,6 +1,7 @@
from django.urls import path
import esi.urls
from django.conf.urls import include, url
from django.conf.urls import include
from django.contrib import admin
from django.views.generic.base import TemplateView
@ -21,35 +22,35 @@ admin.site.site_header = NAME
# Functional/Untranslated URL's
urlpatterns = [
# Locale
url(r'^i18n/', include('django.conf.urls.i18n')),
path('i18n/', include('django.conf.urls.i18n')),
# Authentication
url(r'', include(allianceauth.authentication.urls)),
url(r'^account/login/$', TemplateView.as_view(template_name='public/login.html'), name='auth_login_user'),
url(r'^account/', include(hmac_urls)),
path('', include(allianceauth.authentication.urls)),
path('account/login/', TemplateView.as_view(template_name='public/login.html'), name='auth_login_user'),
path('account/', include(hmac_urls)),
# Admin urls
url(r'^admin/', admin.site.urls),
path('admin/', admin.site.urls),
# SSO
url(r'^sso/', include((esi.urls, 'esi'), namespace='esi')),
url(r'^sso/login$', allianceauth.authentication.views.sso_login, name='auth_sso_login'),
path('sso/', include((esi.urls, 'esi'), namespace='esi')),
path('sso/login', allianceauth.authentication.views.sso_login, name='auth_sso_login'),
# Notifications
url(r'', include(allianceauth.notifications.urls)),
path('', include(allianceauth.notifications.urls)),
# Groups
url(r'', include(allianceauth.groupmanagement.urls)),
path('', include(allianceauth.groupmanagement.urls)),
# Services
url(r'', decorate_url_patterns(allianceauth.services.urls.urlpatterns, main_character_required)),
path('', decorate_url_patterns(allianceauth.services.urls.urlpatterns, main_character_required)),
# Night mode
url(r'^night/', views.NightModeRedirectView.as_view(), name='nightmode')
path('night/', views.NightModeRedirectView.as_view(), name='nightmode')
]
# Append app urls
app_urls = get_hooks('url_hook')
for app in app_urls:
urlpatterns += [url(r'', decorate_url_patterns([app().include_pattern], main_character_required))]
urlpatterns += [path('', decorate_url_patterns([app().include_pattern], main_character_required))]

View File

@ -30,10 +30,13 @@ It is possible to overload static and templates shipped with Django or Alliance
It is possible to add or override URLs with your auth project's URL config file. Upon install it is of the form:
```python
from django.urls import re_path
from django.urls import include
import allianceauth.urls
urlpatterns = [
url(r'', include(allianceauth.urls)),
re_path(r'', include(allianceauth.urls)),
]
```
@ -42,23 +45,29 @@ This means every request gets passed to the Alliance Auth URL config to be inter
If you wanted to add a URL pointing to a custom view, it can be added anywhere in the list if not already used by Alliance Auth:
```python
from django.urls import re_path
from django.urls import include, path
import allianceauth.urls
import myauth.views
urlpatterns = [
url(r'', include(allianceauth.urls)),
url(r'myview/$', myauth.views.myview, name='myview'),
re_path(r'', include(allianceauth.urls)),
path('myview/', myauth.views.myview, name='myview'),
]
```
Additionally you can override URLs used by Alliance Auth here:
```python
from django.urls import re_path
from django.urls import include, path
import allianceauth.urls
import myauth.views
urlpatterns = [
url(r'account/login/$', myauth.views.login, name='auth_login_user'),
url(r'', include(allianceauth.urls)),
path('account/login/', myauth.views.login, name='auth_login_user'),
re_path(r'', include(allianceauth.urls)),
]
```

View File

@ -34,11 +34,11 @@ An app called `plugin` provides a single view:
The app's `urls.py` would look like so:
from django.conf.urls import url
from django.urls import path
import plugin.views
urlpatterns = [
url(r^'index$', plugins.views.index, name='index'),
path('index/', plugins.views.index, name='index'),
]
Subsequently it would implement the UrlHook in a dedicated `auth_hooks.py` file like so:

View File

@ -7,7 +7,7 @@ with open(os.path.join(this_directory, 'README.md'), encoding='utf-8') as f:
long_description = f.read()
install_requires = [
'mysqlclient',
'mysqlclient>=2.1.0',
'dnspython',
'passlib',
'requests>=2.9.1,<3.0.0',
@ -18,22 +18,22 @@ install_requires = [
'packaging>=21.0,<22',
'beautifulsoup4',
'redis>=3.3.1,<4.0.0',
'celery>=4.3.0,<6.0.0,!=4.4.4', # 4.4.4 is missing a dependency
'celery_once>=2.0.1',
'redis>=4.0.0,<5.0.0',
'celery>=5.2.0,<6.0.0',
'celery_once>=3.0.1',
'django>=3.2.9,<4.0.0',
'django>=4.0.2,<5.0.0',
'django-bootstrap-form',
'django-registration>=3.1',
'django-registration>=3.2',
'django-sortedm2m',
'django-redis>=5.2.0<6.0.0',
'django-celery-beat>=2.0.0',
'django-celery-beat @ git+https://github.com/celery/django-celery-beat.git',
'openfire-restapi',
'sleekxmpp',
'pydiscourse',
'django-esi>=3.0.0,<4.0.0'
'django-esi @ git+https://gitlab.com/soratidus999/django-esi.git@py310',
]
testing_extras = [
@ -70,7 +70,7 @@ setup(
classifiers=[
'Environment :: Web Environment',
'Framework :: Django',
'Framework :: Django :: 3.2',
'Framework :: Django :: 4',
'Intended Audience :: Developers',
'License :: OSI Approved :: GNU General Public License v2 (GPLv2)',
'Operating System :: POSIX :: Linux',

View File

@ -1,18 +1,17 @@
from django.conf.urls import url
import allianceauth.urls
from django.urls import path
from . import views
urlpatterns = allianceauth.urls.urlpatterns
urlpatterns += [
# Navhelper test urls
url(r'^main-page/$', views.page, name='p1'),
url(r'^main-page/sub-section/$', views.page, name='p1-s1'),
url(r'^second-page/$', views.page, name='p1'),
path("main-page/", views.page, name="p1"),
path("main-page/sub-section/", views.page, name="p1-s1"),
path("second-page/", views.page, name="p1"),
]
handler500 = 'allianceauth.views.Generic500Redirect'
handler404 = 'allianceauth.views.Generic404Redirect'
handler403 = 'allianceauth.views.Generic403Redirect'
handler400 = 'allianceauth.views.Generic400Redirect'
handler500 = "allianceauth.views.Generic500Redirect"
handler404 = "allianceauth.views.Generic404Redirect"
handler403 = "allianceauth.views.Generic403Redirect"
handler400 = "allianceauth.views.Generic400Redirect"