+++ /dev/null
-from os import path
-
-PROJECT_DIR = path.dirname(path.abspath(path.dirname(__file__)))
+++ /dev/null
-DEBUG = False
-TEMPLATE_DEBUG = DEBUG
-
-DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
- 'NAME': path.join(PROJECT_DIR, 'dev.db'), # Or path to database file if using sqlite3.
- 'USER': '', # Not used with sqlite3.
- 'PASSWORD': '', # Not used with sqlite3.
- 'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
- 'PORT': '', # Set to empty string for default. Not used with sqlite3.
- }
-}
-
-SITE_ID = 1
-
-# List of callables that know how to import templates from various sources.
-TEMPLATE_LOADERS = (
- 'django.template.loaders.filesystem.Loader',
- 'django.template.loaders.app_directories.Loader',
-# 'django.template.loaders.eggs.Loader',
-)
-
-ROOT_URLCONF = 'edumed.urls'
-
-SUBDOMAIN_URLCONFS = {
- None: 'edumed.urls',
- 'katalog': 'edumed.milurls',
-}
-
-# Python dotted path to the WSGI application used by Django's runserver.
-WSGI_APPLICATION = 'edumed.wsgi.application'
-
-TEMPLATE_DIRS = (
- # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
- # Always use forward slashes, even on Windows.
- # Don't forget to use absolute paths, not relative paths.
-)
+++ /dev/null
-INSTALLED_APPS = (
- 'edumed',
- 'curriculum',
- 'catalogue',
- 'comment',
- 'wtem',
- 'publishers',
- 'api'
-
- 'fnpdjango',
- 'south',
- 'pipeline',
- 'django_extensions',
- # Disable, if not using Piwik.
- 'piwik',
- # Disable, if not using CAS.
- 'honeypot',
- 'django_cas',
- 'sponsors',
- 'haystack',
- 'chunks',
- 'contact',
- 'forum',
- 'pybb',
- 'django_libravatar',
- 'sorl.thumbnail',
- 'subdomains',
-
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.sites',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- 'django.contrib.admin',
- 'django.contrib.admindocs',
- 'django.contrib.flatpages',
- 'django.contrib.humanize'
-)
+++ /dev/null
-# -*- coding: utf-8 -*-
-
-LANGUAGES = (
- ('pl', u'polski'),
- ('en', u'English'),
-)
-
-# Local time zone for this installation. Choices can be found here:
-# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
-# although not all choices may be available on all operating systems.
-# On Unix systems, a value of None will cause Django to use the same
-# timezone as the operating system.
-# If running in a Windows environment this must be set to the same as your
-# system time zone.
-TIME_ZONE = None
-
-# Language code for this installation. All choices can be found here:
-# http://www.i18nguy.com/unicode/language-identifiers.html
-LANGUAGE_CODE = 'pl'
-
-# If you set this to False, Django will make some optimizations so as not
-# to load the internationalization machinery.
-USE_I18N = True
-
-# If you set this to False, Django will not format dates, numbers and
-# calendars according to the current locale.
-USE_L10N = True
-
-# If you set this to False, Django will not use timezone-aware datetimes.
-USE_TZ = True
-
-CONTRIB_LOCALE_APPS = (
- 'pybb',
-)
-LOCALE_PATHS = (
- path.join(PROJECT_DIR, 'edumed/locale-contrib'),
-)
+++ /dev/null
-HAYSTACK_CONNECTIONS = {
- 'default': {
- 'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
- 'URL': 'http://127.0.0.1:8983/solr/edumed'
- },
-}
+++ /dev/null
-if 'django_cas' in INSTALLED_APPS:
- AUTHENTICATION_BACKENDS = (
- 'django.contrib.auth.backends.ModelBackend',
- 'fnpdjango.auth_backends.AttrCASBackend',
- )
+++ /dev/null
-CACHES = {
- 'default': {
- 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
- 'LOCATION': '127.0.0.1:11211',
- 'KEY_PREFIX': 'edumed',
- }
-}
-
-CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True
+++ /dev/null
-TEMPLATE_CONTEXT_PROCESSORS = tuple(x for x in (
- "django.contrib.auth.context_processors.auth"
- if "django.contrib.auth" in INSTALLED_APPS else None,
- "django.core.context_processors.debug",
- "django.core.context_processors.i18n",
- "django.core.context_processors.media",
- "django.core.context_processors.static",
- "django.core.context_processors.tz",
- "django.contrib.messages.context_processors.messages"
- if 'django.contrib.messages' in INSTALLED_APPS else None,
- "django.core.context_processors.request",
- 'pybb.context_processors.processor',
- 'edumed.context_processors.base_template'
-) if x is not None)
+++ /dev/null
-# A sample logging configuration. The only tangible logging
-# performed by this configuration is to send an email to
-# the site admins on every HTTP 500 error when DEBUG=False.
-# See http://docs.djangoproject.com/en/dev/topics/logging for
-# more details on how to customize your logging configuration.
-LOGGING = {
- 'version': 1,
- 'disable_existing_loggers': False,
- 'filters': {
- 'require_debug_false': {
- '()': 'django.utils.log.RequireDebugFalse'
- }
- },
- 'handlers': {
- 'mail_admins': {
- 'level': 'ERROR',
- 'filters': ['require_debug_false'],
- 'class': 'django.utils.log.AdminEmailHandler'
- }
- },
- 'loggers': {
- 'django.request': {
- 'handlers': ['mail_admins'],
- 'level': 'ERROR',
- 'propagate': True,
- },
- }
-}
+++ /dev/null
-MIDDLEWARE_CLASSES = tuple(x for x in (
- 'django.middleware.cache.UpdateCacheMiddleware',
- 'django.contrib.sessions.middleware.SessionMiddleware'
- if "django.contrib.sessions" in INSTALLED_APPS else None,
- #'django.middleware.locale.LocaleMiddleware',
- 'subdomains.middleware.SubdomainURLRoutingMiddleware',
- 'fnpdjango.middleware.URLLocaleMiddleware',
-
- 'django.middleware.common.CommonMiddleware',
- 'django.middleware.csrf.CsrfViewMiddleware',
- 'honeypot.middleware.HoneypotMiddleware',
- 'django.contrib.auth.middleware.AuthenticationMiddleware'
- if "django.contrib.auth" in INSTALLED_APPS else None,
- 'django_cas.middleware.CASMiddleware'
- if "django_cas" in INSTALLED_APPS else None,
- 'django.contrib.messages.middleware.MessageMiddleware'
- if "django.contrib.messages" in INSTALLED_APPS else None,
- # Uncomment the next line for simple clickjacking protection:
- # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
- 'pagination.middleware.PaginationMiddleware'
- if "pagination" in INSTALLED_APPS else None,
- 'django.middleware.cache.FetchFromCacheMiddleware',
- 'fnpdjango.middleware.SetRemoteAddrFromXRealIP',
- 'pybb.middleware.PybbMiddleware',
- 'forum.middleware.ForumMiddleware',
- 'wtem.middleware.ThreadLocalMiddleware'
-) if x is not None)
+++ /dev/null
-CAS_SERVER_URL = 'http://logowanie.nowoczesnapolska.org.pl/cas/'
-CAS_VERSION = '3'
-
-SPONSORS_THUMB_WIDTH = 100
-SPONSORS_THUMB_HEIGHT = 56
-
-PYBB_TEMPLATE = "base_forum.html"
-PYBB_SMILES = {}
-PYBB_ENABLE_ANONYMOUS_POST = False
-
-PYBB_DEFAULT_TITLE = u'Forum'
-PYBB_DEFAULT_TIME_ZONE = 1
-PYBB_PERMISSION_HANDLER = 'edumed.forum.ForumPermissionHandler'
-
-THUMBNAIL_ENGINE = 'sorl.thumbnail.engines.convert_engine.Engine'
-THUMBNAIL_CONVERT = 'convert -density 300 -background white -alpha off'
+++ /dev/null
-MEDIA_ROOT = path.join(PROJECT_DIR, 'media/')
-MEDIA_URL = '/media/'
-STATIC_ROOT = path.join(PROJECT_DIR, 'static/')
-STATIC_URL = '/static/'
-
-STATICFILES_FINDERS = (
- 'django.contrib.staticfiles.finders.FileSystemFinder',
- 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
-# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
-)
-
-STATICFILES_STORAGE = 'fnpdjango.utils.pipeline_storage.GzipPipelineCachedStorage'
-PIPELINE_CSS_COMPRESSOR = None
-PIPELINE_JS_COMPRESSOR = None
-PIPELINE_CSS = {
- 'base': {
- 'source_filenames': (
- 'css/base.scss',
- 'css/main.scss',
- 'css/form.scss',
- 'catalogue/css/carousel.scss',
- 'catalogue/css/layout.scss',
- 'catalogue/css/lesson.scss',
- 'catalogue/css/exercise.scss',
- 'catalogue/css/section_list.scss',
- 'curriculum/curriculum.scss',
- 'jquery/colorbox/colorbox.css',
- 'fnpdjango/annoy/annoy.css',
-
- 'css/forum.scss',
- 'css/mil.scss'
- ),
- 'output_filename': 'compressed/base.css',
- },
-}
-PIPELINE_JS = {
- 'base': {
- 'source_filenames': (
- 'catalogue/js/jquery-ui-1.10.0.custom.js',
- 'catalogue/js/jquery.cycle.all.js',
- 'jquery/colorbox/jquery.colorbox-min.js',
- 'jquery/colorbox/jquery.colorbox-pl.js',
- 'catalogue/js/carousel.js',
- 'catalogue/js/edumed.js',
- 'catalogue/js/lesson.js',
- 'catalogue/js/lesson-list.js',
- 'sponsors/js/sponsors.js',
- 'curriculum/curriculum.js',
- 'js/formset.js',
- 'pybb/js/pybbjs.js',
- 'fnpdjango/annoy/annoy.js',
- ),
- 'output_filename': 'compressed/base.js',
- },
- 'wtem': {
- 'source_filenames': (
- 'catalogue/js/jquery-ui-1.10.0.custom.js',
- 'wtem/edumed.js',
- 'wtem/wtem.js',
- 'wtem/json2.js'
- ),
- 'output_filename': 'compressed/wtem.js'
- },
-}
-
-PIPELINE_COMPILERS = (
- 'pipeline.compilers.sass.SASSCompiler',
-)
+++ /dev/null
-CONTACT_FORMS_MODULE = 'edumed.contact_forms'
+++ /dev/null
-# -*- coding: utf-8 -*-
-import os.path
-import glob
-
-conffiles = glob.glob(os.path.join(
- os.path.dirname(__file__), 'settings.d', '*.py'))
-conffiles.sort()
-for f in conffiles:
- execfile(os.path.abspath(f))
-
-try:
- execfile(os.path.abspath(os.path.join(
- os.path.dirname(__file__), 'localsettings.py')))
-except IOError:
- pass
--- /dev/null
+# -*- coding: utf-8 -*-
+
+from .paths import *
+from .basic import *
+from .apps import *
+from .locale import *
+from .search import *
+from .auth import *
+from .cache import *
+from .context import *
+from .logging import *
+from .middleware import *
+from .contrib import *
+from .static import *
+from .custom import *
+
+# Load localsettings, if they exist
+try:
+ from edumed.localsettings import *
+except ImportError:
+ pass
\ No newline at end of file
--- /dev/null
+# -*- coding: utf-8 -*-
+
+INSTALLED_APPS = (
+ 'edumed',
+ 'curriculum',
+ 'catalogue',
+ 'comment',
+ 'wtem',
+ 'publishers',
+ 'api',
+
+ 'fnpdjango',
+ 'south',
+ 'pipeline',
+ 'django_extensions',
+ # Disable, if not using Piwik.
+ 'piwik',
+ # Disable, if not using CAS.
+ 'honeypot',
+ 'django_cas',
+ 'sponsors',
+ 'haystack',
+ 'chunks',
+ 'contact',
+ 'forum',
+ 'pybb',
+ 'django_libravatar',
+ 'sorl.thumbnail',
+ 'subdomains',
+
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.sites',
+ 'django.contrib.messages',
+ 'django.contrib.staticfiles',
+ 'django.contrib.admin',
+ 'django.contrib.admindocs',
+ 'django.contrib.flatpages',
+ 'django.contrib.humanize'
+)
--- /dev/null
+# -*- coding: utf-8 -*-
+from .apps import INSTALLED_APPS
+
+if 'django_cas' in INSTALLED_APPS:
+ AUTHENTICATION_BACKENDS = (
+ 'django.contrib.auth.backends.ModelBackend',
+ 'fnpdjango.auth_backends.AttrCASBackend',
+ )
--- /dev/null
+# -*- coding: utf-8 -*-
+import os.path
+
+from .paths import PROJECT_DIR
+
+DEBUG = False
+TEMPLATE_DEBUG = DEBUG
+
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
+ 'NAME': os.path.join(PROJECT_DIR, 'dev.db'), # Or path to database file if using sqlite3.
+ 'USER': '', # Not used with sqlite3.
+ 'PASSWORD': '', # Not used with sqlite3.
+ 'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
+ 'PORT': '', # Set to empty string for default. Not used with sqlite3.
+ }
+}
+
+SITE_ID = 1
+
+# List of callables that know how to import templates from various sources.
+TEMPLATE_LOADERS = (
+ 'django.template.loaders.filesystem.Loader',
+ 'django.template.loaders.app_directories.Loader',
+ # 'django.template.loaders.eggs.Loader',
+)
+
+ROOT_URLCONF = 'edumed.urls'
+
+SUBDOMAIN_URLCONFS = {
+ None: 'edumed.urls',
+ 'katalog': 'edumed.milurls',
+}
+
+# Python dotted path to the WSGI application used by Django's runserver.
+WSGI_APPLICATION = 'edumed.wsgi.application'
+
+TEMPLATE_DIRS = (
+ # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
+ # Always use forward slashes, even on Windows.
+ # Don't forget to use absolute paths, not relative paths.
+)
--- /dev/null
+# -*- coding: utf-8 -*-
+
+CACHES = {
+ 'default': {
+ 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
+ 'LOCATION': '127.0.0.1:11211',
+ 'KEY_PREFIX': 'edumed',
+ }
+}
+
+CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True
--- /dev/null
+# -*- coding: utf-8 -*-
+from edumed.utils import process_app_deps
+
+TEMPLATE_CONTEXT_PROCESSORS = process_app_deps((
+ ("django.contrib.auth.context_processors.auth", "django.contrib.auth"),
+ "django.core.context_processors.debug",
+ "django.core.context_processors.i18n",
+ "django.core.context_processors.media",
+ "django.core.context_processors.static",
+ "django.core.context_processors.tz",
+ ("django.contrib.messages.context_processors.messages", 'django.contrib.messages'),
+ "django.core.context_processors.request",
+ 'pybb.context_processors.processor',
+ 'edumed.context_processors.base_template',
+))
--- /dev/null
+# -*- coding: utf-8 -*-
+
+CAS_SERVER_URL = 'http://logowanie.nowoczesnapolska.org.pl/cas/'
+CAS_VERSION = '3'
+
+SPONSORS_THUMB_WIDTH = 100
+SPONSORS_THUMB_HEIGHT = 56
+
+PYBB_TEMPLATE = "base_forum.html"
+PYBB_SMILES = {}
+PYBB_ENABLE_ANONYMOUS_POST = False
+
+PYBB_DEFAULT_TITLE = u'Forum'
+PYBB_DEFAULT_TIME_ZONE = 1
+PYBB_PERMISSION_HANDLER = 'edumed.forum.ForumPermissionHandler'
+
+THUMBNAIL_ENGINE = 'sorl.thumbnail.engines.convert_engine.Engine'
+THUMBNAIL_CONVERT = 'convert -density 300 -background white -alpha off'
--- /dev/null
+# -*- coding: utf-8 -*-
+
+CONTACT_FORMS_MODULE = 'edumed.contact_forms'
--- /dev/null
+# -*- coding: utf-8 -*-
+import os.path
+
+from .paths import PROJECT_DIR
+
+LANGUAGES = (
+ ('pl', u'polski'),
+ ('en', u'English'),
+)
+
+# Local time zone for this installation. Choices can be found here:
+# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
+# although not all choices may be available on all operating systems.
+# On Unix systems, a value of None will cause Django to use the same
+# timezone as the operating system.
+# If running in a Windows environment this must be set to the same as your
+# system time zone.
+TIME_ZONE = None
+
+# Language code for this installation. All choices can be found here:
+# http://www.i18nguy.com/unicode/language-identifiers.html
+LANGUAGE_CODE = 'pl'
+
+# If you set this to False, Django will make some optimizations so as not
+# to load the internationalization machinery.
+USE_I18N = True
+
+# If you set this to False, Django will not format dates, numbers and
+# calendars according to the current locale.
+USE_L10N = True
+
+# If you set this to False, Django will not use timezone-aware datetimes.
+USE_TZ = True
+
+CONTRIB_LOCALE_APPS = (
+ 'pybb',
+)
+LOCALE_PATHS = (
+ os.path.join(PROJECT_DIR, 'edumed/locale-contrib'),
+)
--- /dev/null
+# -*- coding: utf-8 -*-
+# A sample logging configuration. The only tangible logging
+# performed by this configuration is to send an email to
+# the site admins on every HTTP 500 error when DEBUG=False.
+# See http://docs.djangoproject.com/en/dev/topics/logging for
+# more details on how to customize your logging configuration.
+LOGGING = {
+ 'version': 1,
+ 'disable_existing_loggers': False,
+ 'filters': {
+ 'require_debug_false': {
+ '()': 'django.utils.log.RequireDebugFalse'
+ }
+ },
+ 'handlers': {
+ 'mail_admins': {
+ 'level': 'ERROR',
+ 'filters': ['require_debug_false'],
+ 'class': 'django.utils.log.AdminEmailHandler'
+ }
+ },
+ 'loggers': {
+ 'django.request': {
+ 'handlers': ['mail_admins'],
+ 'level': 'ERROR',
+ 'propagate': True,
+ },
+ }
+}
--- /dev/null
+# -*- coding: utf-8 -*-
+from edumed.utils import process_app_deps
+
+MIDDLEWARE_CLASSES = process_app_deps((
+ 'django.middleware.cache.UpdateCacheMiddleware',
+ ('django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions'),
+ # 'django.middleware.locale.LocaleMiddleware',
+ 'subdomains.middleware.SubdomainURLRoutingMiddleware',
+ 'fnpdjango.middleware.URLLocaleMiddleware',
+
+ 'django.middleware.common.CommonMiddleware',
+ 'django.middleware.csrf.CsrfViewMiddleware',
+ 'honeypot.middleware.HoneypotMiddleware',
+ ('django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth'),
+ ('django_cas.middleware.CASMiddleware', 'django_cas'),
+ ('django.contrib.messages.middleware.MessageMiddleware', 'django.contrib.messages'),
+ # Uncomment the next line for simple clickjacking protection:
+ # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
+ ('pagination.middleware.PaginationMiddleware', 'pagination'),
+ 'django.middleware.cache.FetchFromCacheMiddleware',
+ 'fnpdjango.middleware.SetRemoteAddrFromXRealIP',
+ 'pybb.middleware.PybbMiddleware',
+ 'forum.middleware.ForumMiddleware',
+ 'wtem.middleware.ThreadLocalMiddleware'
+))
--- /dev/null
+# -*- coding: utf-8 -*-
+import os.path
+
+PROJECT_DIR = os.path.dirname(os.path.abspath(os.path.dirname(__file__)))
--- /dev/null
+# -*- coding: utf-8 -*-
+
+HAYSTACK_CONNECTIONS = {
+ 'default': {
+ 'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
+ 'URL': 'http://127.0.0.1:8983/solr/edumed'
+ },
+}
--- /dev/null
+# -*- coding: utf-8 -*-
+import os.path
+
+from .paths import PROJECT_DIR
+
+MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media/')
+MEDIA_URL = '/media/'
+STATIC_ROOT = os.path.join(PROJECT_DIR, 'static/')
+STATIC_URL = '/static/'
+
+STATICFILES_FINDERS = (
+ 'django.contrib.staticfiles.finders.FileSystemFinder',
+ 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
+ # 'django.contrib.staticfiles.finders.DefaultStorageFinder',
+)
+
+STATICFILES_STORAGE = 'fnpdjango.utils.pipeline_storage.GzipPipelineCachedStorage'
+PIPELINE_CSS_COMPRESSOR = None
+PIPELINE_JS_COMPRESSOR = None
+PIPELINE_CSS = {
+ 'base': {
+ 'source_filenames': (
+ 'css/base.scss',
+ 'css/main.scss',
+ 'css/form.scss',
+ 'catalogue/css/carousel.scss',
+ 'catalogue/css/layout.scss',
+ 'catalogue/css/lesson.scss',
+ 'catalogue/css/exercise.scss',
+ 'catalogue/css/section_list.scss',
+ 'curriculum/curriculum.scss',
+ 'jquery/colorbox/colorbox.css',
+ 'fnpdjango/annoy/annoy.css',
+
+ 'css/forum.scss',
+ 'css/mil.scss'
+ ),
+ 'output_filename': 'compressed/base.css',
+ },
+}
+PIPELINE_JS = {
+ 'base': {
+ 'source_filenames': (
+ 'catalogue/js/jquery-ui-1.10.0.custom.js',
+ 'catalogue/js/jquery.cycle.all.js',
+ 'jquery/colorbox/jquery.colorbox-min.js',
+ 'jquery/colorbox/jquery.colorbox-pl.js',
+ 'catalogue/js/carousel.js',
+ 'catalogue/js/edumed.js',
+ 'catalogue/js/lesson.js',
+ 'catalogue/js/lesson-list.js',
+ 'sponsors/js/sponsors.js',
+ 'curriculum/curriculum.js',
+ 'js/formset.js',
+ 'pybb/js/pybbjs.js',
+ 'fnpdjango/annoy/annoy.js',
+ ),
+ 'output_filename': 'compressed/base.js',
+ },
+ 'wtem': {
+ 'source_filenames': (
+ 'catalogue/js/jquery-ui-1.10.0.custom.js',
+ 'wtem/edumed.js',
+ 'wtem/wtem.js',
+ 'wtem/json2.js'
+ ),
+ 'output_filename': 'compressed/wtem.js'
+ },
+}
+
+PIPELINE_COMPILERS = (
+ 'pipeline.compilers.sass.SASSCompiler',
+)
# -*- coding: utf-8 -*-
import codecs
import csv
-
import cStringIO
+from settings.apps import INSTALLED_APPS
+
# source: https://docs.python.org/2/library/csv.html#examples
class UnicodeCSVWriter(object):
def writerows(self, rows):
for row in rows:
- self.writerow(row)
\ No newline at end of file
+ self.writerow(row)
+
+
+def process_app_deps(list_with_deps):
+ return tuple(
+ (x[0] if type(x) == tuple else x)
+ for x in list_with_deps
+ if type(x) != tuple or x[1] in INSTALLED_APPS)
\ No newline at end of file