settings.py 15.7 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
# -*- coding:utf-8 -*
#
# Copyright 2016,2017
# - Skia <skia@libskia.so>
#
# Ce fichier fait partie du site de l'Association des Étudiants de l'UTBM,
# http://ae.utbm.fr.
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License a published by the Free Software
# Foundation; either version 3 of the License, or (at your option) any later
# version.
#
# 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 General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Sofware Foundation, Inc., 59 Temple
# Place - Suite 330, Boston, MA 02111-1307, USA.
#
#

Skia's avatar
Skia committed
25 26 27 28 29 30 31 32 33 34 35 36 37 38
"""
Django settings for sith project.

Generated by 'django-admin startproject' using Django 1.8.6.

For more information on this file, see
https://docs.djangoproject.com/en/1.8/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.8/ref/settings/
"""

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
Skia's avatar
Skia committed
39
import binascii
Skia's avatar
Skia committed
40
from django.utils.translation import ugettext_lazy as _
Skia's avatar
Skia committed
41 42 43

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

Sli's avatar
Sli committed
44
os.environ['HTTPS'] = "off"
Skia's avatar
Skia committed
45 46 47 48 49 50 51 52

# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '(4sjxvhz@m5$0a$j0_pqicnc$s!vbve)z+&++m%g%bjhlz4+g2'

# SECURITY WARNING: don't run with debug turned on in production!
Skia's avatar
Skia committed
53
DEBUG = False
Skia's avatar
Skia committed
54
INTERNAL_IPS = ['127.0.0.1']
Skia's avatar
Skia committed
55

Skia's avatar
Skia committed
56
ALLOWED_HOSTS = ['*']
Skia's avatar
Skia committed
57 58 59 60


# Application definition

61
SITE_ID = 4000
62

Skia's avatar
Skia committed
63 64 65 66 67 68 69
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
70
    'django.contrib.sites',
Skia's avatar
Skia committed
71
    'django_jinja',
Skia's avatar
Skia committed
72
    'rest_framework',
73
    'ajax_select',
Skia's avatar
Skia committed
74
    'haystack',
Skia's avatar
Skia committed
75 76 77 78 79
    'core',
    'club',
    'subscription',
    'accounting',
    'counter',
Skia's avatar
Skia committed
80
    'eboutic',
Skia's avatar
Skia committed
81
    'launderette',
Skia's avatar
Skia committed
82
    'api',
Skia's avatar
Skia committed
83
    'rootplace',
Skia's avatar
Skia committed
84
    'sas',
85
    'com',
Sli's avatar
Sli committed
86
    'election',
Skia's avatar
Skia committed
87
    'forum',
Skia's avatar
Skia committed
88
    'stock',
Skia's avatar
Skia committed
89 90 91 92 93 94 95 96 97
)

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
Skia's avatar
Skia committed
98
    'django.middleware.locale.LocaleMiddleware',
Skia's avatar
Skia committed
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
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'core.middleware.AuthenticationMiddleware',
)

ROOT_URLCONF = 'sith.urls'

TEMPLATES = [
    {
        "NAME": "jinja2",
        "BACKEND": "django_jinja.backend.Jinja2",
        "APP_DIRS": True,
        "OPTIONS": {
            "match_extension": ".jinja",
            "app_dirname": "templates",
            "newstyle_gettext": True,
            "context_processors": [
                    "django.contrib.auth.context_processors.auth",
                    "django.template.context_processors.debug",
                    "django.template.context_processors.i18n",
                    "django.template.context_processors.media",
                    "django.template.context_processors.static",
                    "django.template.context_processors.tz",
                    "django.contrib.messages.context_processors.messages",
                ],
            "extensions": [
                "jinja2.ext.do",
                "jinja2.ext.loopcontrols",
                "jinja2.ext.with_",
                "jinja2.ext.i18n",
                "jinja2.ext.autoescape",
                "django_jinja.builtins.extensions.CsrfExtension",
                "django_jinja.builtins.extensions.CacheExtension",
                "django_jinja.builtins.extensions.TimezoneExtension",
                "django_jinja.builtins.extensions.UrlsExtension",
                "django_jinja.builtins.extensions.StaticFilesExtension",
                "django_jinja.builtins.extensions.DjangoFiltersExtension",
            ],
            "filters": {
                "markdown": "core.templatetags.renderer.markdown",
            },
            "globals": {
                "can_edit_prop": "core.views.can_edit_prop",
                "can_edit": "core.views.can_edit",
                "can_view": "core.views.can_view",
                "settings": "sith.settings",
Skia's avatar
Skia committed
145
                "Launderette": "launderette.models.Launderette",
Skia's avatar
Skia committed
146
                "Counter": "counter.models.Counter",
147
                "ProductType": "counter.models.ProductType",
Skia's avatar
Skia committed
148
                "timezone": "django.utils.timezone",
149
                "get_sith": "com.views.sith",
Skia's avatar
Skia committed
150 151 152 153 154 155 156
            },
            "bytecode_cache": {
                "name": "default",
                "backend": "django_jinja.cache.BytecodeCache",
                "enabled": False,
            },
            "autoescape": True,
Skia's avatar
Skia committed
157
            "auto_reload": True,
Skia's avatar
Skia committed
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
            "translation_engine": "django.utils.translation",
        }
    },
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

Skia's avatar
Skia committed
176 177 178 179 180 181 182
HAYSTACK_CONNECTIONS = {
        'default': {
            'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
            'PATH': os.path.join(os.path.dirname(__file__), 'whoosh_index'),
            },
        }

183 184
HAYSTACK_SIGNAL_PROCESSOR = 'core.search_indexes.UserOnlySignalProcessor'

Skia's avatar
Skia committed
185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201
WSGI_APPLICATION = 'sith.wsgi.application'


# Database
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}


# Internationalization
# https://docs.djangoproject.com/en/1.8/topics/i18n/

202
LANGUAGE_CODE = 'fr-FR'
Skia's avatar
Skia committed
203

Skia's avatar
Skia committed
204 205 206 207 208
LANGUAGES = [
        ('en', _('English')),
        ('fr', _('French')),
        ]

209
TIME_ZONE = 'Europe/Paris'
Skia's avatar
Skia committed
210 211 212 213 214 215 216

USE_I18N = True

USE_L10N = True

USE_TZ = True

Skia's avatar
Skia committed
217 218 219 220
LOCALE_PATHS = (
    os.path.join(BASE_DIR, "locale"),
)

221 222
PHONENUMBER_DEFAULT_REGION = "FR"

Skia's avatar
Skia committed
223 224 225 226 227 228 229 230
# Medias
MEDIA_ROOT = './data/'
MEDIA_URL = '/data/'

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/

STATIC_URL = '/static/'
Skia's avatar
Skia committed
231
STATIC_ROOT = './static/'
Skia's avatar
Skia committed
232 233 234 235 236 237 238 239 240 241

# Auth configuration
AUTH_USER_MODEL = 'core.User'
AUTH_ANONYMOUS_MODEL = 'core.models.AnonymousUser'
LOGIN_URL = '/login'
LOGOUT_URL = '/logout'
LOGIN_REDIRECT_URL = '/'
DEFAULT_FROM_EMAIL="bibou@git.an"

# Email
Sli's avatar
Sli committed
242
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
Skia's avatar
Skia committed
243 244 245
EMAIL_HOST="localhost"
EMAIL_PORT=25

Skia's avatar
Skia committed
246 247 248 249 250 251 252 253 254 255 256 257 258
# Below this line, only Sith-specific variables are defined

IS_OLD_MYSQL_PRESENT = False
OLD_MYSQL_INFOS = {
        'host': 'ae-db',
        'user': "my_user",
        'passwd': "password",
        'db': "ae2-db",
        'charset': 'utf8',
        'use_unicode': True,
        }


Skia's avatar
Skia committed
259 260
SITH_URL = "my.url.git.an"
SITH_NAME = "Sith website"
261

Skia's avatar
Skia committed
262
# AE configuration
263
SITH_MAIN_CLUB_ID = 1 # TODO: keep only that first setting, with the ID, and do the same for the other clubs
Skia's avatar
Skia committed
264 265 266 267 268
SITH_MAIN_CLUB = {
        'name': "AE",
        'unix_name': "ae",
        'address': "6 Boulevard Anatole France, 90000 Belfort"
        }
269 270 271 272 273 274 275 276

# Bar managers
SITH_BAR_MANAGER = {
        'name': "BdF",
        'unix_name': "bdf",
        'address': "6 Boulevard Anatole France, 90000 Belfort"
        }

Skia's avatar
Skia committed
277 278 279 280 281 282 283
# Launderette managers
SITH_LAUNDERETTE_MANAGER = {
        'name': "Laverie",
        'unix_name': "laverie",
        'address': "6 Boulevard Anatole France, 90000 Belfort"
        }

Skia's avatar
Skia committed
284 285 286
# Define the date in the year serving as reference for the subscriptions calendar
# (month, day)
SITH_START_DATE = (8, 15) # 15th August
287

288 289 290
# Used to determine the valid promos
SITH_SCHOOL_START_YEAR = 1999

Skia's avatar
Skia committed
291
SITH_GROUP_ROOT_ID = 1
Skia's avatar
Skia committed
292
SITH_GROUP_PUBLIC_ID = 2
293 294 295 296 297 298 299 300 301 302 303
SITH_GROUP_SUBSCRIBERS_ID = 3
SITH_GROUP_OLD_SUBSCRIBERS_ID = 4
SITH_GROUP_ACCOUNTING_ADMIN_ID = 5
SITH_GROUP_COM_ADMIN_ID = 6
SITH_GROUP_COUNTER_ADMIN_ID = 7
SITH_GROUP_BANNED_ALCOHOL_ID = 8
SITH_GROUP_BANNED_COUNTER_ID = 9
SITH_GROUP_BANNED_SUBSCRIPTION_ID = 10
SITH_GROUP_SAS_ADMIN_ID = 11
SITH_GROUP_FORUM_ADMIN_ID = 12

Skia's avatar
Skia committed
304

Sli's avatar
Sli committed
305 306 307 308
SITH_CLUB_REFOUND_ID = 89
SITH_COUNTER_REFOUND_ID = 38
SITH_PRODUCT_REFOUND_ID = 5

Skia's avatar
Skia committed
309 310 311
# Forum

SITH_FORUM_PAGE_LENGTH = 30
Sli's avatar
Sli committed
312

Skia's avatar
Skia committed
313 314
# SAS variables
SITH_SAS_ROOT_DIR_ID = 4
Skia's avatar
Skia committed
315

Skia's avatar
Skia committed
316 317
SITH_BOARD_SUFFIX="-bureau"
SITH_MEMBER_SUFFIX="-membres"
Skia's avatar
Skia committed
318 319 320 321

SITH_MAIN_BOARD_GROUP=SITH_MAIN_CLUB['unix_name']+SITH_BOARD_SUFFIX
SITH_MAIN_MEMBERS_GROUP=SITH_MAIN_CLUB['unix_name']+SITH_MEMBER_SUFFIX

Skia's avatar
Skia committed
322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337
SITH_PROFILE_DEPARTMENTS = [
        ("TC", _("TC")),
        ("IMSI", _("IMSI")),
        ("IMAP", _("IMAP")),
        ("INFO", _("INFO")),
        ("GI", _("GI")),
        ("E", _("E")),
        ("EE", _("EE")),
        ("GESC", _("GESC")),
        ("GMC", _("GMC")),
        ("MC", _("MC")),
        ("EDIM", _("EDIM")),
        ("HUMA", _("Humanities")),
        ("NA", _("N/A")),
        ]

Skia's avatar
Skia committed
338
SITH_ACCOUNTING_PAYMENT_METHOD = [
Skia's avatar
Skia committed
339
        ('CHECK', _('Check')),
Skia's avatar
Skia committed
340
        ('CASH', _('Cash')),
Skia's avatar
Skia committed
341
        ('TRANSFERT', _('Transfert')),
Skia's avatar
Skia committed
342
        ('CARD', _('Credit card')),
Skia's avatar
Skia committed
343 344 345
        ]

SITH_SUBSCRIPTION_PAYMENT_METHOD = [
Skia's avatar
Skia committed
346 347
        ('CHECK', _('Check')),
        ('CARD', _('Credit card')),
Skia's avatar
Skia committed
348
        ('CASH', _('Cash')),
Skia's avatar
Skia committed
349
        ('EBOUTIC', _('Eboutic')),
Skia's avatar
Skia committed
350
        ('OTHER', _('Other')),
Skia's avatar
Skia committed
351 352
        ]

Skia's avatar
Skia committed
353 354 355 356
SITH_SUBSCRIPTION_LOCATIONS = [
        ('BELFORT', _('Belfort')),
        ('SEVENANS', _('Sevenans')),
        ('MONTBELIARD', _('Montbéliard')),
357
        ('EBOUTIC', _('Eboutic')),
Skia's avatar
Skia committed
358 359
        ]

360
SITH_COUNTER_BARS = [
361 362 363
        (1, "MDE"),
        (2, "Foyer"),
        (35, "La Gommette"),
364 365
        ]

Skia's avatar
Skia committed
366
SITH_COUNTER_PAYMENT_METHOD = [
Skia's avatar
Skia committed
367
        ('CHECK', _('Check')),
Skia's avatar
Skia committed
368
        ('CASH', _('Cash')),
369
        ('CARD', _('Credit card')),
Skia's avatar
Skia committed
370 371
        ]

372
SITH_COUNTER_BANK = [
Skia's avatar
Skia committed
373
        ('OTHER', 'Autre'),
374 375 376 377 378 379
        ('SOCIETE-GENERALE', 'Société générale'),
        ('BANQUE-POPULAIRE', 'Banque populaire'),
        ('BNP', 'BNP'),
        ('CAISSE-EPARGNE', 'Caisse d\'épargne'),
        ('CIC', 'CIC'),
        ('CREDIT-AGRICOLE', 'Crédit Agricole'),
Skia's avatar
Skia committed
380
        ('CREDIT-MUTUEL', 'Credit Mutuel'),
381 382
        ('CREDIT-LYONNAIS', 'Credit Lyonnais'),
        ('LA-POSTE', 'La Poste'),
383 384
        ]

Sli's avatar
Sli committed
385 386 387
# Defines pagination for cash summary
SITH_COUNTER_CASH_SUMMARY_LENGTH = 50

388
# Defines which product type is the refilling type, and thus increases the account amount
Skia's avatar
Skia committed
389
SITH_COUNTER_PRODUCTTYPE_REFILLING = 3
390

391
# Defines which product is the one year subscription and which one is the six month subscription
Skia's avatar
Skia committed
392 393 394
SITH_PRODUCT_SUBSCRIPTION_ONE_SEMESTER = 1
SITH_PRODUCT_SUBSCRIPTION_TWO_SEMESTERS = 2
SITH_PRODUCTTYPE_SUBSCRIPTION = 2
395

Skia's avatar
Skia committed
396 397
# Subscription durations are in semestres
# Be careful, modifying this parameter will need a migration to be applied
Skia's avatar
Skia committed
398 399
SITH_SUBSCRIPTIONS = {
    'un-semestre': {
Skia's avatar
Skia committed
400
        'name': _('One semester'),
Skia's avatar
Skia committed
401 402 403 404
        'price': 15,
        'duration': 1,
    },
    'deux-semestres': {
Skia's avatar
Skia committed
405
        'name': _('Two semesters'),
Skia's avatar
Skia committed
406 407 408 409
        'price': 28,
        'duration': 2,
    },
    'cursus-tronc-commun': {
Skia's avatar
Skia committed
410
        'name': _('Common core cursus'),
Skia's avatar
Skia committed
411 412 413 414
        'price': 45,
        'duration': 4,
    },
    'cursus-branche': {
Skia's avatar
Skia committed
415
        'name': _('Branch cursus'),
Skia's avatar
Skia committed
416 417 418
        'price': 45,
        'duration': 6,
    },
Skia's avatar
Skia committed
419
    'cursus-alternant': {
Skia's avatar
Skia committed
420
        'name': _('Alternating cursus'),
Skia's avatar
Skia committed
421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453
        'price': 30,
        'duration': 6,
    },
    'membre-honoraire': {
        'name': _('Honorary member'),
        'price': 0,
        'duration': 666,
    },
    'assidu': {
        'name': _('Assidu member'),
        'price': 0,
        'duration': 2,
    },
    'amicale/doceo': {
        'name': _('Amicale/DOCEO member'),
        'price': 0,
        'duration': 2,
    },
    'reseau-ut': {
        'name': _('UT network member'),
        'price': 0,
        'duration': 1,
    },
    'crous': {
        'name': _('CROUS member'),
        'price': 0,
        'duration': 2,
    },
    'sbarro/esta': {
        'name': _('Sbarro/ESTA member'),
        'price': 15,
        'duration': 2,
    },
Skia's avatar
Skia committed
454 455 456
# To be completed....
}

Sli's avatar
Sli committed
457 458 459 460 461 462 463 464 465 466 467 468 469 470
SITH_CLUB_ROLES = {}

SITH_CLUB_ROLES_ID = {
    'President': 10,
    'Vice-President': 9,
    'Treasurer': 7,
    'Communication supervisor': 5,
    'Secretary': 4,
    'IT supervisor': 3,
    'Board member': 2,
    'Active member': 1,
    'Curious': 0,
}

Sli's avatar
Sli committed
471 472 473 474 475 476 477 478 479 480 481
SITH_CLUB_ROLES = {
    10: _('President'),
    9: _('Vice-President'),
    7: _('Treasurer'),
    5: _('Communication supervisor'),
    4: _('Secretary'),
    3: _('IT supervisor'),
    2: _('Board member'),
    1: _('Active member'),
    0: _('Curious'),
}
Skia's avatar
Skia committed
482 483 484 485 486 487 488

# This corresponds to the maximum role a user can freely subscribe to
# In this case, SITH_MAXIMUM_FREE_ROLE=1 means that a user can set himself as "Membre actif" or "Curieux", but not higher
SITH_MAXIMUM_FREE_ROLE=1

# Minutes to timeout the logged barmen
SITH_BARMAN_TIMEOUT=20
Skia's avatar
Skia committed
489

Skia's avatar
Skia committed
490
# Minutes to delete the last operations
Skia's avatar
Skia committed
491
SITH_LAST_OPERATIONS_LIMIT=10
Skia's avatar
Skia committed
492

493
# Minutes for a counter to be inactive
Skia's avatar
Skia committed
494
SITH_COUNTER_MINUTE_INACTIVE=10
495

Skia's avatar
Skia committed
496 497
# ET variables
SITH_EBOUTIC_ET_URL = "https://preprod-tpeweb.e-transactions.fr/cgi/MYchoix_pagepaiement.cgi"
Skia's avatar
Skia committed
498 499 500
SITH_EBOUTIC_PBX_SITE = "4000666"
SITH_EBOUTIC_PBX_RANG = "42"
SITH_EBOUTIC_PBX_IDENTIFIANT = "123456789"
Skia's avatar
Skia committed
501
SITH_EBOUTIC_HMAC_KEY = binascii.unhexlify("0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF")
Skia's avatar
Skia committed
502 503 504 505
SITH_EBOUTIC_PUB_KEY = ""
with open('./sith/et_keys/pubkey.pem') as f:
    SITH_EBOUTIC_PUB_KEY = f.read()

Skia's avatar
Skia committed
506
# Launderette variables
507
SITH_LAUNDERETTE_MACHINE_TYPES = [('WASHING', _('Washing')), ('DRYING', _('Drying'))]
Skia's avatar
Skia committed
508 509 510 511
SITH_LAUNDERETTE_PRICES = {
        'WASHING': 1.0,
        'DRYING': 0.75,
        }
Skia's avatar
Skia committed
512

Skia's avatar
Skia committed
513
SITH_NOTIFICATIONS = [
Skia's avatar
Skia committed
514
        ('NEWS_MODERATION', _("A fresh new to be moderated")),
Skia's avatar
Skia committed
515 516 517 518 519 520
        ('FILE_MODERATION', _("New files to be moderated")),
        ('SAS_MODERATION', _("New pictures/album to be moderated in the SAS")),
        ('NEW_PICTURES', _("You've been identified on some pictures")),
        ('REFILLING', _("You just refilled of %s €")),
        ('SELLING', _("You just bought %s")),
        ('GENERIC', _("You have a notification")),
Skia's avatar
Skia committed
521 522
        ]

Skia's avatar
Skia committed
523 524 525 526 527
SITH_QUICK_NOTIF = {
        'qn_success': _("Success!"),
        'qn_fail': _("Fail!"),
        'qn_weekmail_new_article': _("You successfully posted an article in the Weekmail"),
        'qn_weekmail_article_edit': _("You successfully edited an article in the Weekmail"),
Skia's avatar
Skia committed
528
        'qn_weekmail_send_success': _("You successfully sent the Weekmail"),
Skia's avatar
Skia committed
529 530
        }

Skia's avatar
Skia committed
531 532
try:
    from .settings_custom import *
Skia's avatar
Skia committed
533
    print("Custom settings imported")
Skia's avatar
Skia committed
534 535
except:
    print("Custom settings failed")
Skia's avatar
Skia committed
536 537 538 539

if DEBUG:
    INSTALLED_APPS += ("debug_toolbar",)
    MIDDLEWARE_CLASSES = ('debug_toolbar.middleware.DebugToolbarMiddleware',) + MIDDLEWARE_CLASSES
Sli's avatar
Sli committed
540 541 542 543 544 545 546 547 548 549 550 551 552 553
    DEBUG_TOOLBAR_PANELS = [
        'debug_toolbar.panels.versions.VersionsPanel',
        'debug_toolbar.panels.timer.TimerPanel',
        'debug_toolbar.panels.settings.SettingsPanel',
        'debug_toolbar.panels.headers.HeadersPanel',
        'debug_toolbar.panels.request.RequestPanel',
        'debug_toolbar.panels.sql.SQLPanel',
        'debug_toolbar.panels.staticfiles.StaticFilesPanel',
        'sith.toolbar_debug.TemplatesPanel',
        'debug_toolbar.panels.cache.CachePanel',
        'debug_toolbar.panels.signals.SignalsPanel',
        'debug_toolbar.panels.logging.LoggingPanel',
        'debug_toolbar.panels.redirects.RedirectsPanel',
    ]