-
-
Notifications
You must be signed in to change notification settings - Fork 964
/
sites.py
213 lines (182 loc) · 7.24 KB
/
sites.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
# Copyright © Michal Čihař <michal@weblate.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
from django.conf import settings
from django.contrib import admin
from django.contrib.admin import AdminSite
from django.contrib.auth.views import LogoutView
from django.shortcuts import render
from django.urls import reverse
from django.utils.decorators import method_decorator
from django.utils.translation import gettext_lazy as _
from django.views.decorators.cache import never_cache
from django_celery_beat.admin import (
ClockedSchedule,
ClockedScheduleAdmin,
CrontabSchedule,
IntervalSchedule,
PeriodicTask,
PeriodicTaskAdmin,
SolarSchedule,
)
from rest_framework.authtoken.admin import TokenAdmin
from rest_framework.authtoken.models import Token
from social_django.admin import AssociationOption, NonceOption, UserSocialAuthOption
from social_django.models import Association, Nonce, UserSocialAuth
from weblate.accounts.admin import AuditLogAdmin, ProfileAdmin, VerifiedEmailAdmin
from weblate.accounts.forms import AdminLoginForm
from weblate.accounts.models import AuditLog, Profile, VerifiedEmail
from weblate.auth.admin import RoleAdmin, WeblateGroupAdmin, WeblateUserAdmin
from weblate.auth.models import Group, Role, User
from weblate.checks.admin import CheckAdmin
from weblate.checks.models import Check
from weblate.configuration.admin import SettingAdmin
from weblate.configuration.models import Setting
from weblate.fonts.admin import FontAdmin, FontGroupAdmin
from weblate.fonts.models import Font, FontGroup
from weblate.lang.admin import LanguageAdmin
from weblate.lang.models import Language
from weblate.memory.admin import MemoryAdmin
from weblate.memory.models import Memory
from weblate.screenshots.admin import ScreenshotAdmin
from weblate.screenshots.models import Screenshot
from weblate.trans.admin import (
AnnouncementAdmin,
ChangeAdmin,
CommentAdmin,
ComponentAdmin,
ComponentListAdmin,
ContributorAgreementAdmin,
ProjectAdmin,
SuggestionAdmin,
TranslationAdmin,
UnitAdmin,
)
from weblate.trans.models import (
Announcement,
Change,
Comment,
Component,
ComponentList,
ContributorAgreement,
Project,
Suggestion,
Translation,
Unit,
)
from weblate.utils import messages
from weblate.wladmin.models import ConfigurationError
class WeblateAdminSite(AdminSite):
login_form = AdminLoginForm
site_header = _("Weblate administration")
site_title = _("Weblate administration")
index_template = "admin/weblate-index.html"
enable_nav_sidebar = False
@property
def site_url(self):
if settings.URL_PREFIX:
return settings.URL_PREFIX
return "/"
def discover(self):
"""Manual discovery."""
# Accounts
self.register(User, WeblateUserAdmin)
self.register(Role, RoleAdmin)
self.register(Group, WeblateGroupAdmin)
self.register(AuditLog, AuditLogAdmin)
self.register(Profile, ProfileAdmin)
self.register(VerifiedEmail, VerifiedEmailAdmin)
# Languages
self.register(Language, LanguageAdmin)
# Memory
self.register(Memory, MemoryAdmin)
# Screenshots
self.register(Screenshot, ScreenshotAdmin)
# Fonts
self.register(Font, FontAdmin)
self.register(FontGroup, FontGroupAdmin)
# Translations
self.register(Project, ProjectAdmin)
self.register(Component, ComponentAdmin)
self.register(Announcement, AnnouncementAdmin)
self.register(ComponentList, ComponentListAdmin)
self.register(ContributorAgreement, ContributorAgreementAdmin)
# Settings
self.register(Setting, SettingAdmin)
# Show some controls only in debug mode
if settings.DEBUG:
self.register(Translation, TranslationAdmin)
self.register(Unit, UnitAdmin)
self.register(Suggestion, SuggestionAdmin)
self.register(Comment, CommentAdmin)
self.register(Check, CheckAdmin)
self.register(Change, ChangeAdmin)
# Billing
if "weblate.billing" in settings.INSTALLED_APPS:
# pylint: disable=wrong-import-position
from weblate.billing.admin import BillingAdmin, InvoiceAdmin, PlanAdmin
from weblate.billing.models import Billing, Invoice, Plan
self.register(Plan, PlanAdmin)
self.register(Billing, BillingAdmin)
self.register(Invoice, InvoiceAdmin)
# Hosted
if "wlhosted.integrations" in settings.INSTALLED_APPS:
# pylint: disable=wrong-import-position
from wlhosted.payments.admin import CustomerAdmin, PaymentAdmin
from wlhosted.payments.models import Customer, Payment
self.register(Customer, CustomerAdmin)
self.register(Payment, PaymentAdmin)
# Legal
if "weblate.legal" in settings.INSTALLED_APPS:
# pylint: disable=wrong-import-position
from weblate.legal.admin import AgreementAdmin
from weblate.legal.models import Agreement
self.register(Agreement, AgreementAdmin)
# SAML identity provider
if "djangosaml2idp" in settings.INSTALLED_APPS:
# pylint: disable=wrong-import-position
from djangosaml2idp.admin import PersistentIdAdmin, ServiceProviderAdmin
from djangosaml2idp.models import PersistentId, ServiceProvider
self.register(PersistentId, PersistentIdAdmin)
self.register(ServiceProvider, ServiceProviderAdmin)
# Python Social Auth
self.register(UserSocialAuth, UserSocialAuthOption)
self.register(Nonce, NonceOption)
self.register(Association, AssociationOption)
# Django REST Framework
self.register(Token, TokenAdmin)
# Django Celery Beat
self.register(IntervalSchedule)
self.register(CrontabSchedule)
self.register(SolarSchedule)
self.register(ClockedSchedule, ClockedScheduleAdmin)
self.register(PeriodicTask, PeriodicTaskAdmin)
# Simple SSO
if "simple_sso.sso_server" in settings.INSTALLED_APPS:
from simple_sso.sso_server.models import Consumer
from simple_sso.sso_server.server import ConsumerAdmin
self.register(Consumer, ConsumerAdmin)
@method_decorator(never_cache)
def logout(self, request, extra_context=None):
if request.method == "POST":
messages.info(request, _("Thank you for using Weblate."))
request.current_app = self.name
return LogoutView.as_view(next_page=reverse("admin:login"))(request)
context = self.each_context(request)
context["title"] = _("Sign out")
return render(request, "admin/logout-confirm.html", context)
def each_context(self, request):
result = super().each_context(request)
empty = [_("Object listing turned off")]
result["empty_selectable_objects_list"] = [empty]
result["empty_objects_list"] = empty
result["configuration_errors"] = ConfigurationError.objects.filter(
ignored=False
)
return result
@property
def urls(self):
return self.get_urls()
SITE = WeblateAdminSite()
SITE.discover()
admin.site = SITE