· 10 years ago · Mar 16, 2016, 12:48 AM
1"""
2Django settings for lotebox project.
3
4For more information on this file, see
5https://docs.djangoproject.com/en/1.7/topics/settings/
6
7For the full list of settings and their values, see
8https://docs.djangoproject.com/en/1.7/ref/settings/
9"""
10from decouple import config, Csv
11import os, re
12
13from dj_database_url import parse as db_url
14
15
16BASE_DIR = os.path.dirname(os.path.dirname(__file__))
17
18def base_dir_join(*args):
19 return os.path.join(BASE_DIR, *args)
20
21
22# SECURITY WARNING: keep the secret key used in production secret!
23SECRET_KEY = config('SECRET_KEY', default='n766&jag@m)p*a^b+=njz@0n2dsj!s4koytau@!75g0u4cp3l7')
24
25# SECURITY WARNING: don't run with debug turned on in production!
26DEBUG = config('DEBUG', default=True, cast=bool)
27
28LOCAL = 'IN_HEROKU' not in os.environ
29
30TEMPLATE_DEBUG = config('TEMPLATE_DEBUG', default=True, cast=bool)
31
32ALLOWED_HOSTS = config('ALLOWED_HOSTS', default='', cast=Csv())
33
34SITE_HOST = config('SITE_HOST', default='http://localhost:8000')
35
36# Admins and Managers
37
38ADMINS = (
39 ('Lotebox', 'info@lotebox.com'),
40)
41
42MANAGERS = ADMINS
43
44if not LOCAL:
45 MANAGERS = ADMINS
46
47# Application definition
48
49INSTALLED_APPS = (
50 'grappelli',
51 'django.contrib.admin',
52 'django.contrib.auth',
53 'django.contrib.contenttypes',
54 'django.contrib.sessions',
55 'django.contrib.messages',
56 'collectfast',
57 'django.contrib.staticfiles', # must be after 'collectfast'
58 'compressor',
59 'storages',
60 'djangobower',
61 'widget_tweaks',
62 'django_filters',
63 'rest_framework',
64 'django_select2',
65 'djangoformsetjs',
66
67 'core',
68 'landing_pages',
69 'users',
70 'ports',
71 'hscodes',
72 'shipments',
73 'containers',
74 'proposals',
75 'password_reset',
76 'demands',
77 'crm',
78 'companies',
79 'dashboard',
80)
81
82BOWER_INSTALLED_APPS = (
83 'bootstrap-sass-official#3.3.1',
84 'jquery#2.1.3',
85 'https://github.com/nikolas/jquery-numeric.git#1.4.1',
86 'selectize#0.11.2',
87 'font-awesome#4.2.0',
88 'masonry#3.2.2',
89 'select2#3.5.2',
90 'devbridge-autocomplete#1.2.18',)
91
92BOWER_COMPONENTS_ROOT = base_dir_join('components')
93
94AUTH_USER_MODEL = 'users.User'
95
96MIDDLEWARE_CLASSES = (
97 'django.contrib.sessions.middleware.SessionMiddleware',
98 'django.middleware.common.CommonMiddleware',
99 'django.middleware.csrf.CsrfViewMiddleware',
100 'django.contrib.auth.middleware.AuthenticationMiddleware',
101 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
102 'core.middleware.BrokenLinkEmailsAdminsMiddleware',
103 'django.contrib.messages.middleware.MessageMiddleware',
104 'django.middleware.clickjacking.XFrameOptionsMiddleware',
105)
106
107TEMPLATE_CONTEXT_PROCESSORS = (
108 "django.contrib.auth.context_processors.auth",
109 "django.core.context_processors.debug",
110 "django.core.context_processors.i18n",
111 "django.core.context_processors.media",
112 "django.core.context_processors.static",
113 "django.core.context_processors.tz",
114 "django.contrib.messages.context_processors.messages",
115 "django.core.context_processors.request",
116
117 "core.context_processors.view_name",
118 "core.context_processors.debug",
119)
120
121ROOT_URLCONF = 'lotebox.urls'
122
123WSGI_APPLICATION = 'lotebox.wsgi.application'
124
125
126# Ignorable 404 urls
127
128IGNORABLE_404_URLS = (
129 re.compile(r'\.(php|cgi)$'),
130 re.compile(r'^/phpmyadmin/'),
131)
132
133
134# Authentication
135
136LOGIN_URL = 'users:login'
137LOGOUT_URL = 'users:logout'
138LOGIN_REDIRECT_URL = 'home'
139
140
141# Database
142# https://docs.djangoproject.com/en/1.7/ref/settings/#databases
143
144DATABASES = {
145 'default': config(
146 'DATABASE_URL',
147 default='sqlite:///' + base_dir_join('db.sqlite3'),
148 # default='postgres://localhost:5432/lotebox',
149 cast=db_url)
150}
151
152
153# Caches
154
155CACHES = {
156 'default': {
157 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
158 },
159 'collectfast': {
160 'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
161 'LOCATION': 'django_db_cache_collectfast',
162 'TIMEOUT': 60 * 60 * 24 * 7 * 30, # 1 month
163 'OPTIONS': {
164 'MAX_ENTRIES': 10000
165 }
166 }
167}
168
169
170# Internationalization
171# https://docs.djangoproject.com/en/1.7/topics/i18n/
172
173LANGUAGE_CODE = 'en-us'
174
175TIME_ZONE = 'America/Sao_Paulo'
176
177USE_I18N = True
178
179USE_L10N = True
180
181USE_TZ = True
182
183FORMAT_MODULE_PATH = 'core.formats'
184
185
186# Static files (CSS, JavaScript, Images)
187# https://docs.djangoproject.com/en/1.7/howto/static-files/
188
189STATICFILES_FINDERS = (
190 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
191 'django.contrib.staticfiles.finders.FileSystemFinder',
192 'djangobower.finders.BowerFinder',
193 'compressor.finders.CompressorFinder',
194)
195
196AWS_ACCESS_KEY_ID = config('AWS_ACCESS_KEY_ID', default=None)
197AWS_SECRET_ACCESS_KEY = config('AWS_SECRET_ACCESS_KEY', default=None)
198AWS_STORAGE_BUCKET_NAME = config('AWS_STORAGE_BUCKET_NAME', default=None)
199AWS_S3_SECURE_URLS = False
200AWS_QUERYSTRING_AUTH = False
201AWS_S3_CUSTOM_DOMAIN = '{0}.s3.amazonaws.com'.format(AWS_STORAGE_BUCKET_NAME)
202
203STATICFILES_STORAGE = config('STATICFILES_STORAGE', 'django.contrib.staticfiles.storage.StaticFilesStorage')
204DEFAULT_FILE_STORAGE = config('DEFAULT_FILE_STORAGE', 'django.core.files.storage.FileSystemStorage')
205MEDIA_ROOT = base_dir_join('media')
206STATIC_ROOT = base_dir_join('staticfiles')
207
208if LOCAL:
209 STATIC_URL = '/static/'
210 MEDIA_URL = '/media/'
211else:
212 STATIC_URL = 'http://{0}/static/'.format(AWS_S3_CUSTOM_DOMAIN)
213 MEDIA_URL = 'http://{0}/media/'.format(AWS_S3_CUSTOM_DOMAIN)
214
215
216# collectfast
217
218AWS_PRELOAD_METADATA = True
219COLLECTFAST_CACHE = 'collectfast'
220COLLECTFAST_ENABLED = not LOCAL
221
222
223# django-compressor
224
225COMPRESS_ENABLED = config('COMPRESS_ENABLED', default=False)
226COMPRESS_STORAGE = STATICFILES_STORAGE
227COMPRESS_URL = STATIC_URL
228
229COMPRESS_PRECOMPILERS = (
230 ('text/x-scss', 'core.compressor_filters.PatchedSCSSCompiler'),
231)
232
233COMPRESS_CSS_FILTERS = [
234 'core.compressor_filters.CustomCssAbsoluteFilter',
235]
236
237
238# Email settings
239
240DEFAULT_FROM_EMAIL = 'eduardo@lotebox.com'
241
242if LOCAL:
243 INSTALLED_APPS += ('naomi',)
244 EMAIL_BACKEND = 'naomi.mail.backends.naomi.NaomiBackend'
245 EMAIL_FILE_PATH = base_dir_join('tmp_email')
246else:
247 SERVER_EMAIL = config('SERVER_EMAIL')
248 EMAIL_HOST = config('EMAIL_HOST')
249 EMAIL_PORT = config('EMAIL_PORT')
250 EMAIL_USE_TLS = config('EMAIL_USE_TLS', cast=bool)
251 EMAIL_HOST_USER = config('EMAIL_HOST_USER')
252 EMAIL_HOST_PASSWORD = config('EMAIL_HOST_PASSWORD')
253
254TEMPLATED_EMAIL_TEMPLATE_DIR = 'emails/'
255TEMPLATED_EMAIL_FILE_EXTENSION = 'email'
256
257
258# Slack settings
259SLACK_URL = config('SLACK_URL', default='')
260
261# Pipedrive settings
262PIPEDRIVE_CONFIG = {
263 'user_id': config('PIPEDRIVE_USER_ID', default=''),
264 'stage_id': '12',
265}
266PIPEDRIVE_URL = config('PIPEDRIVE_URL', default='')
267
268
269# Grapelli
270
271GRAPPELLI_AUTOCOMPLETE_SEARCH_FIELDS = {
272 'users': {
273 'user': ('email__icontains',
274 'name__icontains')
275 },
276 'shipments': {
277 'shipment': ('id__iexact',
278 'created__icontains',
279 'shipper__email__icontains')
280 },
281 'containers': {
282 'container': ('id__iexact',
283 'arrival_date__icontains',
284 'nvocc__email__icontains',
285 'nvocc__name__icontains',
286 'kind__icontains')
287 },
288 'ports': {
289 'port': ('id__iexact',
290 'name__icontains',
291 'country__icontains')
292 }
293}
294
295
296# segment
297
298SEGMENT_WRITE_KEY = config('SEGMENT_WRITE_KEY', default='')
299
300
301# Logging
302
303LOGGING = {
304 'version': 1,
305 'disable_existing_loggers': False,
306 'filters': {
307 'require_debug_false': {
308 '()': 'django.utils.log.RequireDebugFalse'
309 }
310 },
311 'handlers': {
312 'console': {
313 'level': 'INFO',
314 'class': 'logging.StreamHandler'
315 },
316 'mail_admins': {
317 'level': 'ERROR',
318 'filters': ['require_debug_false'],
319 'class': 'django.utils.log.AdminEmailHandler'
320 }
321 },
322 'loggers': {
323 '': {
324 'handlers': ['console'],
325 'level': 'INFO'
326 },
327 'segment': {
328 'handlers': ['console'],
329 'level': 'DEBUG',
330 'propagate': True,
331 },
332 'django.request': {
333 'handlers': ['mail_admins'],
334 'level': 'ERROR',
335 'propagate': True,
336 }
337 }
338}