Minimal fixes
[redakcja.git] / src / redakcja / settings / __init__.py
1 # This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later.
2 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
3 #
4 import os
5 import sentry_sdk
6 from sentry_sdk.integrations.django import DjangoIntegration
7 from .defaults import *
8
9 try:
10     from ..localsettings import *
11 except ImportError:
12     pass
13
14 DATA_UPLOAD_MAX_MEMORY_SIZE = 20000000
15
16 PROJECT_ROOT = os.path.realpath(os.path.dirname(os.path.dirname(__file__)))
17
18 STATICFILES_DIRS = [
19     PROJECT_ROOT + '/static/'
20 ]
21
22 DATABASES = {
23     'default': {
24         'ENGINE': 'django.db.backends.postgresql',
25         'HOST': 'db',
26         'USER': os.environ.get('POSTGRES_USER'),
27         'PASSWORD': os.environ.get('POSTGRES_PASSWORD'),
28         'NAME': os.environ.get('POSTGRES_USER'),
29     }
30 }
31
32 TEMPLATES = [
33     {
34         'BACKEND': 'django.template.backends.django.DjangoTemplates',
35         'APP_DIRS': True,
36         'DIRS': [
37             PROJECT_ROOT + '/templates',
38         ],
39         'OPTIONS': {
40             'context_processors': [
41                 "django.contrib.auth.context_processors.auth",
42                 "django.template.context_processors.debug",
43                 "django.template.context_processors.i18n",
44                 "redakcja.context_processors.settings", # this is instead of media
45                 'django.template.context_processors.csrf',
46                 "django.template.context_processors.request",
47                 "django.contrib.messages.context_processors.messages",
48             ],
49         },
50     },
51 ]
52
53 MIDDLEWARE = [
54     'django.middleware.common.CommonMiddleware',
55     'django.middleware.csrf.CsrfViewMiddleware',
56     'django.contrib.sessions.middleware.SessionMiddleware',
57     'django.contrib.messages.middleware.MessageMiddleware',
58
59     'django.contrib.auth.middleware.AuthenticationMiddleware',
60     ]
61
62 if CAS_SERVER_URL:
63     MIDDLEWARE.append(
64         'django_cas_ng.middleware.CASMiddleware',
65     )
66
67 MIDDLEWARE += [
68     'django.contrib.admindocs.middleware.XViewMiddleware',
69     'fnp_django_pagination.middleware.PaginationMiddleware',
70 ]
71
72 if DEBUG:
73     MIDDLEWARE = [
74         'debug_toolbar.middleware.DebugToolbarMiddleware',
75     ] + MIDDLEWARE
76
77 if CAS_SERVER_URL:
78     AUTHENTICATION_BACKENDS = (
79         'django.contrib.auth.backends.ModelBackend',
80         'django_cas_ng.backends.CASBackend',
81     )
82
83 ROOT_URLCONF = 'redakcja.urls'
84
85 INSTALLED_APPS = (
86     'modeltranslation',
87     'reversion',
88
89     'django.contrib.auth',
90     'django.contrib.contenttypes',
91     'django.contrib.sessions',
92     'django.contrib.messages',
93     'django.contrib.staticfiles',
94     'django.contrib.sites',
95     'admin_numeric_filter',
96     'django.contrib.admin',
97     'django.contrib.admindocs',
98
99     'sorl.thumbnail',
100     'fnp_django_pagination',
101     'django_gravatar',
102     'fileupload',
103     'pipeline',
104     'fnpdjango',
105     'django_cas_ng',
106     'bootstrap4',
107     'rest_framework',
108     'django_filters',
109     'admin_ordering',
110
111     'redakcja.api',
112     'catalogue',
113     'depot',
114     'documents',
115     'cover',
116     'dvcs',
117     'wiki',
118     'wiki_img',
119     'toolbar',
120     'apiclient',
121     'email_mangler',
122     'wlxml.apps.WlxmlConfig',
123     'alerts',
124     'team',
125     'sources',
126     'isbn',
127 )
128
129 if DEBUG:
130     INSTALLED_APPS += ('debug_toolbar',)
131
132 LOCALE_PATHS = [
133     PROJECT_ROOT + "/locale-contrib",
134 ]
135
136 LOGIN_REDIRECT_URL = '/documents/user'
137
138 MIN_COVER_SIZE = (915, 1270)
139
140 LEGIMI_SMALL_WORDS = 2000
141 LEGIMI_BIG_WORDS = 10000
142 LEGIMI_SMALL_PRICE = 7
143 LEGIMI_BIG_PRICE = 20
144
145 THUMBNAIL_PRESERVE_FORMAT = True
146
147 STATICFILES_FINDERS = (
148     'django.contrib.staticfiles.finders.FileSystemFinder',
149     'django.contrib.staticfiles.finders.AppDirectoriesFinder',
150     'pipeline.finders.PipelineFinder',
151 )
152
153 STATICFILES_STORAGE = 'pipeline.storage.PipelineManifestStorage'
154
155 PIPELINE = {
156     'CSS_COMPRESSOR': None,
157     'JS_COMPRESSOR': None,
158     'COMPILERS': (
159         'libsasscompiler.LibSassCompiler',
160     ),
161
162     # CSS and JS files to compress
163     'STYLESHEETS': {
164         'detail': {
165             'source_filenames': (
166                 'css/html.scss',
167                 'css/master.css',
168                 'css/toolbar.css',
169                 'css/gallery.css',
170                 'css/history.css',
171                 'css/summary.css',
172                 'css/imgareaselect-default.css',
173                 'css/dialogs.scss',
174
175                 'wiki/scss/splitter.scss',
176                 'wiki/scss/visual.scss'
177             ),
178             'output_filename': 'compressed/detail_styles.css',
179         },
180         'documents': {
181             'source_filenames': (
182                 'css/filelist.css',
183             ),
184             'output_filename': 'compressed/documents_styles.css',
185         },
186         'book': {
187             'source_filenames': (
188                 'css/book.css',
189             ),
190             'output_filename': 'compressed/book.css',
191         },
192         'book_list': {
193             'source_filenames': (
194                 'css/book_list.css',
195             ),
196             'output_filename': 'compressed/book_list.css',
197         },
198     },
199     'JAVASCRIPT': {
200         # everything except codemirror
201         'detail': {
202             'source_filenames': (
203                 # libraries
204                 'js/lib/jquery/jquery.blockui.js',
205                 'js/lib/jquery/jquery.elastic.js',
206                 'js/lib/jquery/jquery.xmlns.js',
207                 'js/button_scripts.js',
208                 'js/slugify.js',
209
210                 # wiki scripts
211                 'js/wiki/caret.js',
212                 'js/wiki/wikiapi.js',
213                 'wiki/js/themes.js',
214                 'js/wiki/xslt.js',
215
216                 # base UI
217                 'js/wiki/base.js',
218                 'js/wiki/toolbar.js',
219                 'js/lib/diff.js',
220                 'js/wiki/undo.js',
221
222                 # dialogs
223                 'js/wiki/dialog_save.js',
224                 'js/wiki/dialog_revert.js',
225                 'js/wiki/dialog_pubmark.js',
226
227                 # views
228                 'js/wiki/view_sidebar.js',
229                 'js/wiki/view_history.js',
230                 'js/wiki/view_summary.js',
231                 'js/wiki/view_editor_source.js',
232                 'js/wiki/view_editor_wysiwyg.js',
233                 'js/wiki/view_gallery.js',
234                 'js/wiki/view_annotations.js',
235                 'js/wiki/view_properties.js',
236                 'js/wiki/view_search.js',
237                 'js/wiki/view_column_diff.js',
238             ),
239             'output_filename': 'compressed/detail_scripts.js',
240         },
241         'wiki_img': {
242             'source_filenames': (
243                 # libraries
244                 'js/lib/jquery/jquery.blockui.js',
245                 'js/lib/jquery/jquery.elastic.js',
246                 'js/lib/jquery/jquery.imgareaselect.js',
247                 'js/button_scripts.js',
248                 'js/slugify.js',
249
250                 # wiki scripts
251                 'js/wiki_img/wikiapi.js',
252                 'wiki/js/themes.js',
253
254                 # base UI
255                 'js/wiki_img/base.js',
256                 'js/wiki/toolbar.js',
257
258                 # dialogs
259                 'js/wiki/dialog_save.js',
260                 'js/wiki/dialog_revert.js',
261                 'js/wiki/dialog_pubmark.js',
262
263                 # views
264                 'js/wiki_img/view_editor_objects.js',
265                 'js/wiki_img/view_editor_motifs.js',
266                 'js/wiki/view_editor_source.js',
267                 'js/wiki/view_history.js',
268                 'js/wiki/view_column_diff.js',
269             ),
270             'output_filename': 'compressed/detail_img_scripts.js',
271         },
272         'documents': {
273             'source_filenames': (
274                 'js/documents/documents.js',
275                 'js/slugify.js',
276                 'email_mangler/email_mangler.js',
277             ),
278             'output_filename': 'compressed/documents_scripts.js',
279         },
280         'book': {
281             'source_filenames': (
282                 'js/lib/jquery/jquery.cycle2.min.js',
283                 'js/book_text/jquery.eventdelegation.js',
284                 'js/book_text/jquery.scrollto.js',
285                 'js/book_text/jquery.highlightfade.js',
286                 'js/book_text/book.js',
287             ),
288             'output_filename': 'compressed/book.js',
289         },
290         'book_list': {
291             'source_filenames': (
292                 'js/documents/book_list.js',
293             ),
294             'output_filename': 'compressed/book_list.js',
295         }
296     }
297 }
298
299
300 DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
301
302
303 SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
304
305
306 REST_FRAMEWORK = {
307     'DEFAULT_AUTHENTICATION_CLASSES': [
308         'rest_framework.authentication.SessionAuthentication',
309         'redakcja.api.auth.TokenAuthentication',
310     ],
311     'DEFAULT_FILTER_BACKENDS': [
312         'django_filters.rest_framework.DjangoFilterBackend',
313         'rest_framework.filters.SearchFilter',
314     ]
315 }
316
317
318 LANGUAGES = [
319     ('pl', 'polski'),
320     ('de', 'Deutsch'),
321     ('lt', 'lietuvių'),
322 ]
323
324
325 TEST_INTEGRATION = False
326
327
328 try:
329     SENTRY_DSN
330 except NameError:
331     pass
332 else:
333     sentry_sdk.init(
334         dsn=SENTRY_DSN,
335         integrations=[DjangoIntegration()]
336     )