We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Avoir un rappel des bases du Mardkown à côté des zones de rédaction
L'idée est d'avoir un rappel des bases du Mardkown à côté des zones de rédaction (les grandes lignes + un lien vers le tuto).

Je sais qu'on a les boutons, mais c'est toujours utile pour ceux qui préfèrent éviter de jouer avec la souris, et je pense améliorera l'apprentissage du MD.

Le truc le plus important à y mettre est sans doute la gestion des sauts de ligne / paragraphes :)


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `zds/settings.py`
Content:
```
1 # coding: utf-8
2 
3 import locale
4 import os
5 import platform
6 
7 
8 # Python is platform-independent...or is it?
9 if platform.system() == "Windows":
10     locale.setlocale(locale.LC_TIME, 'fra')
11 else:
12     locale.setlocale(locale.LC_TIME, 'fr_FR.UTF-8')
13 
14 DEBUG = True
15 TEMPLATE_DEBUG = DEBUG
16 # INTERNAL_IPS = ('127.0.0.1',)  # debug toolbar
17 
18 
19 ADMINS = (
20     ('user', 'mail'),
21 )
22 
23 MANAGERS = ADMINS
24 
25 DATABASES = {
26     'default': {
27         'ENGINE': 'django.db.backends.sqlite3',
28         'NAME': 'base.db',
29         'USER': '',
30         'PASSWORD': '',
31         'HOST': '',
32         'PORT': '',
33     }
34 }
35 
36 # Local time zone for this installation. Choices can be found here:
37 # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
38 # although not all choices may be available on all operating systems.
39 # In a Windows environment this must be set to your system time zone.
40 TIME_ZONE = 'Europe/Paris'
41 
42 # Language code for this installation. All choices can be found here:
43 # http://www.i18nguy.com/unicode/language-identifiers.html
44 LANGUAGE_CODE = 'fr-fr'
45 
46 SITE_ID = 1
47 
48 # If you set this to False, Django will make some optimizations so as not
49 # to load the internationalization machinery.
50 USE_I18N = True
51 
52 # If you set this to False, Django will not format dates, numbers and
53 # calendars according to the current locale.
54 USE_L10N = True
55 
56 # If you set this to False, Django will not use timezone-aware datetimes.
57 USE_TZ = False
58 
59 SITE_ROOT = os.path.realpath(os.path.dirname(os.path.dirname(__file__)))
60 
61 SITE_URL = 'http://127.0.0.1:8000'
62 
63 # Absolute filesystem path to the directory that will hold user-uploaded files.
64 # Example: "/home/media/media.lawrence.com/media/"
65 MEDIA_ROOT = os.path.join(SITE_ROOT, 'media')
66 
67 # URL that handles the media served from MEDIA_ROOT. Make sure to use a
68 # trailing slash.
69 # Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
70 MEDIA_URL = '/media/'
71 
72 # Absolute path to the directory static files should be collected to.
73 # Don't put anything in this directory yourself; store your static files
74 # in apps' "static/" subdirectories and in STATICFILES_DIRS.
75 # Example: "/home/media/media.lawrence.com/static/"
76 STATIC_ROOT = os.path.join(SITE_ROOT, 'static')
77 
78 # URL prefix for static files.
79 # Example: "http://media.lawrence.com/static/"
80 STATIC_URL = '/static/'
81 
82 # Additional locations of static files
83 STATICFILES_DIRS = (
84     # Put strings here, like "/home/html/static" or "C:/www/django/static".
85     # Always use forward slashes, even on Windows.
86     # Don't forget to use absolute paths, not relative paths.
87     os.path.join(SITE_ROOT, 'assets'),
88 )
89 
90 # List of finder classes that know how to find static files in
91 # various locations.
92 STATICFILES_FINDERS = (
93     'django.contrib.staticfiles.finders.FileSystemFinder',
94     'django.contrib.staticfiles.finders.AppDirectoriesFinder',
95     #    'django.contrib.staticfiles.finders.DefaultStorageFinder',
96 )
97 
98 STATICFILES_STORAGE = 'pipeline.storage.PipelineStorage'
99 
100 FIXTURE_DIRS = (os.path.join(SITE_ROOT, 'fixtures'))
101 # You will need yuglify to be installed
102 PIPELINE_JS = {
103     'modernizr' : {
104         'source_filenames': (
105             'js/vendor/custom.modernizr.js',
106         ),
107         'output_filename': 'js/modernizr.js'
108     }, 
109     'css3-mediaqueries' : {
110         'source_filenames': (
111             'js/vendor/css3-mediaqueries.js',
112         ),
113         'output_filename': 'js/css3-mediaqueries.js'
114     },
115     'main-js': {
116         'source_filenames': (
117             'js/vendor/jquery.js',
118             'js/vendor/jquery.tabbable.js',
119 
120             'js/custom/editor.js',
121 
122             'js/custom/mobile-menu.js',
123             'js/custom/accessibility-links.js',
124             'js/custom/dropdown-menu.js',
125             'js/custom/data-click.js',
126             'js/custom/accordeon.js',
127             'js/custom/modal.js',
128             'js/custom/close-alert-box.js',
129             'js/custom/keyboard-navigation.js',
130             'js/custom/message-hidden.js',
131             'js/custom/spoiler.js',
132         ),
133         'output_filename': 'js/main.js'
134     }
135 }
136 
137 PIPELINE_CSS = {
138     'main-css': {
139         'source_filenames': (
140             'css/main.css',
141         ),
142         'output_filename': 'css/design.css'
143     }
144 }
145 
146 # Make this unique, and don't share it with anybody.
147 SECRET_KEY = 'n!01nl+318#x75_%le8#s0=-*ysw&amp;y49uc#t=*wvi(9hnyii0z'
148 
149 # List of callables that know how to import templates from various sources.
150 TEMPLATE_LOADERS = (
151     'django.template.loaders.filesystem.Loader',
152     'django.template.loaders.app_directories.Loader',
153     #     'django.template.loaders.eggs.Loader',
154 )
155 
156 FILE_UPLOAD_HANDLERS = (
157     "django.core.files.uploadhandler.MemoryFileUploadHandler",
158     "django.core.files.uploadhandler.TemporaryFileUploadHandler",
159 )
160 
161 MIDDLEWARE_CLASSES = (
162     'django.middleware.common.CommonMiddleware',
163     'django.contrib.sessions.middleware.SessionMiddleware',
164     'django.middleware.csrf.CsrfViewMiddleware',
165     'django.contrib.auth.middleware.AuthenticationMiddleware',
166     'django.contrib.messages.middleware.MessageMiddleware',
167     # Uncomment the next line for simple clickjacking protection:
168     # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
169     'zds.utils.ThreadLocals',
170     'zds.middlewares.SetLastVisitMiddleware.SetLastVisitMiddleware',
171 )
172 
173 ROOT_URLCONF = 'zds.urls'
174 
175 # Python dotted path to the WSGI application used by Django's runserver.
176 WSGI_APPLICATION = 'zds.wsgi.application'
177 
178 TEMPLATE_DIRS = [
179     # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
180     # Always use forward slashes, even on Windows.
181     # Don't forget to use absolute paths, not relative paths.
182     os.path.join(SITE_ROOT, 'templates')
183 ]
184 
185 TEMPLATE_CONTEXT_PROCESSORS = (
186     # Default context processors
187     'django.contrib.auth.context_processors.auth',
188     'django.core.context_processors.debug',
189     'django.core.context_processors.i18n',
190     'django.core.context_processors.media',
191     'django.core.context_processors.static',
192     'django.core.context_processors.request',
193     'django.core.context_processors.tz',
194     'django.contrib.messages.context_processors.messages'
195 )
196 
197 CRISPY_TEMPLATE_PACK='bootstrap'
198 
199 INSTALLED_APPS = (
200     'django.contrib.auth',
201     'django.contrib.contenttypes',
202     'django.contrib.sessions',
203     'django.contrib.sites',
204     'django.contrib.messages',
205     'django.contrib.staticfiles',
206     'django.contrib.sitemaps',
207     'django.contrib.humanize',
208 
209     'south',
210     'crispy_forms',
211     'email_obfuscator',
212     'pipeline',
213     'haystack',
214     'munin',
215 
216     # Apps DB tables are created in THIS order by default
217     # --> Order is CRITICAL to properly handle foreign keys
218     'zds.utils',
219     'zds.pages',
220     'zds.gallery',
221     'zds.mp',
222     'zds.newsletter',
223     'zds.article',
224     'zds.forum',
225     'zds.tutorial',
226     'zds.member',
227     # Uncomment the next line to enable the admin:
228     'django.contrib.admin',
229     # Uncomment the next line to enable admin documentation:
230     # 'django.contrib.admindocs',
231 )
232 if (DEBUG):
233     INSTALLED_APPS += (
234         'debug_toolbar',
235     )
236 
237 # A sample logging configuration. The only tangible logging
238 # performed by this configuration is to send an email to
239 # the site admins on every HTTP 500 error when DEBUG=False.
240 # See http://docs.djangoproject.com/en/dev/topics/logging for
241 # more details on how to customize your logging configuration.
242 LOGGING = {
243     'version': 1,
244     'disable_existing_loggers': False,
245     'filters': {
246         'require_debug_false': {
247             '()': 'django.utils.log.RequireDebugFalse'
248         }
249     },
250     'handlers': {
251         'mail_admins': {
252             'level': 'ERROR',
253             'filters': ['require_debug_false'],
254             'class': 'django.utils.log.AdminEmailHandler'
255         }
256     },
257     'loggers': {
258         'django.request': {
259             'handlers': ['mail_admins'],
260             'level': 'ERROR',
261             'propagate': True,
262         },
263     }
264 }
265 
266 CACHES = {
267     'default': {
268         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
269         'LOCATION': '127.0.0.1:11211',
270     }
271 }
272 
273 SESSION_ENGINE = "django.contrib.sessions.backends.cached_db"
274 
275 AUTH_PROFILE_MODULE = 'member.Profile'
276 LOGIN_URL = '/membres/connexion'
277 
278 ABSOLUTE_URL_OVERRIDES = {
279     'auth.user': lambda u: '/membres/voir/{0}/'.format(u.username.encode('utf-8'))
280 }
281 
282 
283 # Django fileserve settings (set to True for local dev version only)
284 SERVE = False
285 
286 # Max size image upload (in bytes)
287 IMAGE_MAX_SIZE = 1024 * 1024 * 2
288 
289 # git directory
290 REPO_PATH = os.path.join(SITE_ROOT, 'tutoriels-private')
291 REPO_PATH_PROD = os.path.join(SITE_ROOT, 'tutoriels-public')
292 REPO_ARTICLE_PATH = os.path.join(SITE_ROOT, 'articles-data')
293 
294 # Constants for pagination
295 POSTS_PER_PAGE = 21
296 TOPICS_PER_PAGE = 21
297 MEMBERS_PER_PAGE = 36
298 
299 # Constants to avoid spam
300 SPAM_LIMIT_SECONDS = 60 * 15
301 SPAM_LIMIT_PARTICIPANT = 2
302 FOLLOWED_TOPICS_PER_PAGE = 21
303 
304 BOT_ACCOUNT = 'admin'
305 
306 PANDOC_LOC = ''
307 
308 HAYSTACK_CONNECTIONS = {
309     'default': {
310         'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
311         'URL': 'http://127.0.0.1:8983/solr'
312         # ...or for multicore...
313         # 'URL': 'http://127.0.0.1:8983/solr/mysite',
314     },
315 }
316 
317 GEOIP_PATH = os.path.join(SITE_ROOT, 'geodata')
318 
319 from django.contrib.messages import constants as message_constants
320 MESSAGE_TAGS = {
321     message_constants.DEBUG: 'debug',
322     message_constants.INFO: 'info',
323     message_constants.SUCCESS: 'success',
324     message_constants.WARNING: 'warning',
325     message_constants.ERROR: 'alert',
326 }
327 
328 
329 MAX_POST_LENGTH = 1000000
330 SDZ_TUTO_DIR = ''
331 
332 MAIL_CA_ASSO = 'ca-zeste-de-savoir@googlegroups.com'
333 
334 # Load the production settings, overwrite the existing ones if needed
335 try:
336     from settings_prod import *
337 except ImportError:
338     pass
339
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/zds/settings.py b/zds/settings.py
--- a/zds/settings.py
+++ b/zds/settings.py
@@ -129,6 +129,8 @@
             'js/custom/keyboard-navigation.js',
             'js/custom/message-hidden.js',
             'js/custom/spoiler.js',
+            'js/custom/karma-ajax.js',
+            'js/custom/markdown-help.js',
         ),
         'output_filename': 'js/main.js'
     }

{"golden_diff": "diff --git a/zds/settings.py b/zds/settings.py\n--- a/zds/settings.py\n+++ b/zds/settings.py\n@@ -129,6 +129,8 @@\n             'js/custom/keyboard-navigation.js',\n             'js/custom/message-hidden.js',\n             'js/custom/spoiler.js',\n+            'js/custom/karma-ajax.js',\n+            'js/custom/markdown-help.js',\n         ),\n         'output_filename': 'js/main.js'\n     }\n", "issue": "Avoir un rappel des bases du Mardkown \u00e0 c\u00f4t\u00e9 des zones de r\u00e9daction\nL'id\u00e9e est d'avoir un rappel des bases du Mardkown \u00e0 c\u00f4t\u00e9 des zones de r\u00e9daction (les grandes lignes + un lien vers le tuto).\n\nJe sais qu'on a les boutons, mais c'est toujours utile pour ceux qui pr\u00e9f\u00e8rent \u00e9viter de jouer avec la souris, et je pense am\u00e9liorera l'apprentissage du MD.\n\nLe truc le plus important \u00e0 y mettre est sans doute la gestion des sauts de ligne / paragraphes :)\n\n", "before_files": [{"content": "# coding: utf-8\n\nimport locale\nimport os\nimport platform\n\n\n# Python is platform-independent...or is it?\nif platform.system() == \"Windows\":\n    locale.setlocale(locale.LC_TIME, 'fra')\nelse:\n    locale.setlocale(locale.LC_TIME, 'fr_FR.UTF-8')\n\nDEBUG = True\nTEMPLATE_DEBUG = DEBUG\n# INTERNAL_IPS = ('127.0.0.1',)  # debug toolbar\n\n\nADMINS = (\n    ('user', 'mail'),\n)\n\nMANAGERS = ADMINS\n\nDATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.sqlite3',\n        'NAME': 'base.db',\n        'USER': '',\n        'PASSWORD': '',\n        'HOST': '',\n        'PORT': '',\n    }\n}\n\n# Local time zone for this installation. Choices can be found here:\n# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name\n# although not all choices may be available on all operating systems.\n# In a Windows environment this must be set to your system time zone.\nTIME_ZONE = 'Europe/Paris'\n\n# Language code for this installation. All choices can be found here:\n# http://www.i18nguy.com/unicode/language-identifiers.html\nLANGUAGE_CODE = 'fr-fr'\n\nSITE_ID = 1\n\n# If you set this to False, Django will make some optimizations so as not\n# to load the internationalization machinery.\nUSE_I18N = True\n\n# If you set this to False, Django will not format dates, numbers and\n# calendars according to the current locale.\nUSE_L10N = True\n\n# If you set this to False, Django will not use timezone-aware datetimes.\nUSE_TZ = False\n\nSITE_ROOT = os.path.realpath(os.path.dirname(os.path.dirname(__file__)))\n\nSITE_URL = 'http://127.0.0.1:8000'\n\n# Absolute filesystem path to the directory that will hold user-uploaded files.\n# Example: \"/home/media/media.lawrence.com/media/\"\nMEDIA_ROOT = os.path.join(SITE_ROOT, 'media')\n\n# URL that handles the media served from MEDIA_ROOT. Make sure to use a\n# trailing slash.\n# Examples: \"http://media.lawrence.com/media/\", \"http://example.com/media/\"\nMEDIA_URL = '/media/'\n\n# Absolute path to the directory static files should be collected to.\n# Don't put anything in this directory yourself; store your static files\n# in apps' \"static/\" subdirectories and in STATICFILES_DIRS.\n# Example: \"/home/media/media.lawrence.com/static/\"\nSTATIC_ROOT = os.path.join(SITE_ROOT, 'static')\n\n# URL prefix for static files.\n# Example: \"http://media.lawrence.com/static/\"\nSTATIC_URL = '/static/'\n\n# Additional locations of static files\nSTATICFILES_DIRS = (\n    # Put strings here, like \"/home/html/static\" or \"C:/www/django/static\".\n    # Always use forward slashes, even on Windows.\n    # Don't forget to use absolute paths, not relative paths.\n    os.path.join(SITE_ROOT, 'assets'),\n)\n\n# List of finder classes that know how to find static files in\n# various locations.\nSTATICFILES_FINDERS = (\n    'django.contrib.staticfiles.finders.FileSystemFinder',\n    'django.contrib.staticfiles.finders.AppDirectoriesFinder',\n    #    'django.contrib.staticfiles.finders.DefaultStorageFinder',\n)\n\nSTATICFILES_STORAGE = 'pipeline.storage.PipelineStorage'\n\nFIXTURE_DIRS = (os.path.join(SITE_ROOT, 'fixtures'))\n# You will need yuglify to be installed\nPIPELINE_JS = {\n    'modernizr' : {\n        'source_filenames': (\n            'js/vendor/custom.modernizr.js',\n        ),\n        'output_filename': 'js/modernizr.js'\n    }, \n    'css3-mediaqueries' : {\n        'source_filenames': (\n            'js/vendor/css3-mediaqueries.js',\n        ),\n        'output_filename': 'js/css3-mediaqueries.js'\n    },\n    'main-js': {\n        'source_filenames': (\n            'js/vendor/jquery.js',\n            'js/vendor/jquery.tabbable.js',\n\n            'js/custom/editor.js',\n\n            'js/custom/mobile-menu.js',\n            'js/custom/accessibility-links.js',\n            'js/custom/dropdown-menu.js',\n            'js/custom/data-click.js',\n            'js/custom/accordeon.js',\n            'js/custom/modal.js',\n            'js/custom/close-alert-box.js',\n            'js/custom/keyboard-navigation.js',\n            'js/custom/message-hidden.js',\n            'js/custom/spoiler.js',\n        ),\n        'output_filename': 'js/main.js'\n    }\n}\n\nPIPELINE_CSS = {\n    'main-css': {\n        'source_filenames': (\n            'css/main.css',\n        ),\n        'output_filename': 'css/design.css'\n    }\n}\n\n# Make this unique, and don't share it with anybody.\nSECRET_KEY = 'n!01nl+318#x75_%le8#s0=-*ysw&amp;y49uc#t=*wvi(9hnyii0z'\n\n# List of callables that know how to import templates from various sources.\nTEMPLATE_LOADERS = (\n    'django.template.loaders.filesystem.Loader',\n    'django.template.loaders.app_directories.Loader',\n    #     'django.template.loaders.eggs.Loader',\n)\n\nFILE_UPLOAD_HANDLERS = (\n    \"django.core.files.uploadhandler.MemoryFileUploadHandler\",\n    \"django.core.files.uploadhandler.TemporaryFileUploadHandler\",\n)\n\nMIDDLEWARE_CLASSES = (\n    'django.middleware.common.CommonMiddleware',\n    'django.contrib.sessions.middleware.SessionMiddleware',\n    'django.middleware.csrf.CsrfViewMiddleware',\n    'django.contrib.auth.middleware.AuthenticationMiddleware',\n    'django.contrib.messages.middleware.MessageMiddleware',\n    # Uncomment the next line for simple clickjacking protection:\n    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n    'zds.utils.ThreadLocals',\n    'zds.middlewares.SetLastVisitMiddleware.SetLastVisitMiddleware',\n)\n\nROOT_URLCONF = 'zds.urls'\n\n# Python dotted path to the WSGI application used by Django's runserver.\nWSGI_APPLICATION = 'zds.wsgi.application'\n\nTEMPLATE_DIRS = [\n    # Put strings here, like \"/home/html/django_templates\" or \"C:/www/django/templates\".\n    # Always use forward slashes, even on Windows.\n    # Don't forget to use absolute paths, not relative paths.\n    os.path.join(SITE_ROOT, 'templates')\n]\n\nTEMPLATE_CONTEXT_PROCESSORS = (\n    # Default context processors\n    'django.contrib.auth.context_processors.auth',\n    'django.core.context_processors.debug',\n    'django.core.context_processors.i18n',\n    'django.core.context_processors.media',\n    'django.core.context_processors.static',\n    'django.core.context_processors.request',\n    'django.core.context_processors.tz',\n    'django.contrib.messages.context_processors.messages'\n)\n\nCRISPY_TEMPLATE_PACK='bootstrap'\n\nINSTALLED_APPS = (\n    'django.contrib.auth',\n    'django.contrib.contenttypes',\n    'django.contrib.sessions',\n    'django.contrib.sites',\n    'django.contrib.messages',\n    'django.contrib.staticfiles',\n    'django.contrib.sitemaps',\n    'django.contrib.humanize',\n\n    'south',\n    'crispy_forms',\n    'email_obfuscator',\n    'pipeline',\n    'haystack',\n    'munin',\n\n    # Apps DB tables are created in THIS order by default\n    # --> Order is CRITICAL to properly handle foreign keys\n    'zds.utils',\n    'zds.pages',\n    'zds.gallery',\n    'zds.mp',\n    'zds.newsletter',\n    'zds.article',\n    'zds.forum',\n    'zds.tutorial',\n    'zds.member',\n    # Uncomment the next line to enable the admin:\n    'django.contrib.admin',\n    # Uncomment the next line to enable admin documentation:\n    # 'django.contrib.admindocs',\n)\nif (DEBUG):\n    INSTALLED_APPS += (\n        'debug_toolbar',\n    )\n\n# A sample logging configuration. The only tangible logging\n# performed by this configuration is to send an email to\n# the site admins on every HTTP 500 error when DEBUG=False.\n# See http://docs.djangoproject.com/en/dev/topics/logging for\n# more details on how to customize your logging configuration.\nLOGGING = {\n    'version': 1,\n    'disable_existing_loggers': False,\n    'filters': {\n        'require_debug_false': {\n            '()': 'django.utils.log.RequireDebugFalse'\n        }\n    },\n    'handlers': {\n        'mail_admins': {\n            'level': 'ERROR',\n            'filters': ['require_debug_false'],\n            'class': 'django.utils.log.AdminEmailHandler'\n        }\n    },\n    'loggers': {\n        'django.request': {\n            'handlers': ['mail_admins'],\n            'level': 'ERROR',\n            'propagate': True,\n        },\n    }\n}\n\nCACHES = {\n    'default': {\n        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',\n        'LOCATION': '127.0.0.1:11211',\n    }\n}\n\nSESSION_ENGINE = \"django.contrib.sessions.backends.cached_db\"\n\nAUTH_PROFILE_MODULE = 'member.Profile'\nLOGIN_URL = '/membres/connexion'\n\nABSOLUTE_URL_OVERRIDES = {\n    'auth.user': lambda u: '/membres/voir/{0}/'.format(u.username.encode('utf-8'))\n}\n\n\n# Django fileserve settings (set to True for local dev version only)\nSERVE = False\n\n# Max size image upload (in bytes)\nIMAGE_MAX_SIZE = 1024 * 1024 * 2\n\n# git directory\nREPO_PATH = os.path.join(SITE_ROOT, 'tutoriels-private')\nREPO_PATH_PROD = os.path.join(SITE_ROOT, 'tutoriels-public')\nREPO_ARTICLE_PATH = os.path.join(SITE_ROOT, 'articles-data')\n\n# Constants for pagination\nPOSTS_PER_PAGE = 21\nTOPICS_PER_PAGE = 21\nMEMBERS_PER_PAGE = 36\n\n# Constants to avoid spam\nSPAM_LIMIT_SECONDS = 60 * 15\nSPAM_LIMIT_PARTICIPANT = 2\nFOLLOWED_TOPICS_PER_PAGE = 21\n\nBOT_ACCOUNT = 'admin'\n\nPANDOC_LOC = ''\n\nHAYSTACK_CONNECTIONS = {\n    'default': {\n        'ENGINE': 'haystack.backends.solr_backend.SolrEngine',\n        'URL': 'http://127.0.0.1:8983/solr'\n        # ...or for multicore...\n        # 'URL': 'http://127.0.0.1:8983/solr/mysite',\n    },\n}\n\nGEOIP_PATH = os.path.join(SITE_ROOT, 'geodata')\n\nfrom django.contrib.messages import constants as message_constants\nMESSAGE_TAGS = {\n    message_constants.DEBUG: 'debug',\n    message_constants.INFO: 'info',\n    message_constants.SUCCESS: 'success',\n    message_constants.WARNING: 'warning',\n    message_constants.ERROR: 'alert',\n}\n\n\nMAX_POST_LENGTH = 1000000\nSDZ_TUTO_DIR = ''\n\nMAIL_CA_ASSO = 'ca-zeste-de-savoir@googlegroups.com'\n\n# Load the production settings, overwrite the existing ones if needed\ntry:\n    from settings_prod import *\nexcept ImportError:\n    pass\n", "path": "zds/settings.py"}], "after_files": [{"content": "# coding: utf-8\n\nimport locale\nimport os\nimport platform\n\n\n# Python is platform-independent...or is it?\nif platform.system() == \"Windows\":\n    locale.setlocale(locale.LC_TIME, 'fra')\nelse:\n    locale.setlocale(locale.LC_TIME, 'fr_FR.UTF-8')\n\nDEBUG = True\nTEMPLATE_DEBUG = DEBUG\n# INTERNAL_IPS = ('127.0.0.1',)  # debug toolbar\n\n\nADMINS = (\n    ('user', 'mail'),\n)\n\nMANAGERS = ADMINS\n\nDATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.sqlite3',\n        'NAME': 'base.db',\n        'USER': '',\n        'PASSWORD': '',\n        'HOST': '',\n        'PORT': '',\n    }\n}\n\n# Local time zone for this installation. Choices can be found here:\n# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name\n# although not all choices may be available on all operating systems.\n# In a Windows environment this must be set to your system time zone.\nTIME_ZONE = 'Europe/Paris'\n\n# Language code for this installation. All choices can be found here:\n# http://www.i18nguy.com/unicode/language-identifiers.html\nLANGUAGE_CODE = 'fr-fr'\n\nSITE_ID = 1\n\n# If you set this to False, Django will make some optimizations so as not\n# to load the internationalization machinery.\nUSE_I18N = True\n\n# If you set this to False, Django will not format dates, numbers and\n# calendars according to the current locale.\nUSE_L10N = True\n\n# If you set this to False, Django will not use timezone-aware datetimes.\nUSE_TZ = False\n\nSITE_ROOT = os.path.realpath(os.path.dirname(os.path.dirname(__file__)))\n\nSITE_URL = 'http://127.0.0.1:8000'\n\n# Absolute filesystem path to the directory that will hold user-uploaded files.\n# Example: \"/home/media/media.lawrence.com/media/\"\nMEDIA_ROOT = os.path.join(SITE_ROOT, 'media')\n\n# URL that handles the media served from MEDIA_ROOT. Make sure to use a\n# trailing slash.\n# Examples: \"http://media.lawrence.com/media/\", \"http://example.com/media/\"\nMEDIA_URL = '/media/'\n\n# Absolute path to the directory static files should be collected to.\n# Don't put anything in this directory yourself; store your static files\n# in apps' \"static/\" subdirectories and in STATICFILES_DIRS.\n# Example: \"/home/media/media.lawrence.com/static/\"\nSTATIC_ROOT = os.path.join(SITE_ROOT, 'static')\n\n# URL prefix for static files.\n# Example: \"http://media.lawrence.com/static/\"\nSTATIC_URL = '/static/'\n\n# Additional locations of static files\nSTATICFILES_DIRS = (\n    # Put strings here, like \"/home/html/static\" or \"C:/www/django/static\".\n    # Always use forward slashes, even on Windows.\n    # Don't forget to use absolute paths, not relative paths.\n    os.path.join(SITE_ROOT, 'assets'),\n)\n\n# List of finder classes that know how to find static files in\n# various locations.\nSTATICFILES_FINDERS = (\n    'django.contrib.staticfiles.finders.FileSystemFinder',\n    'django.contrib.staticfiles.finders.AppDirectoriesFinder',\n    #    'django.contrib.staticfiles.finders.DefaultStorageFinder',\n)\n\nSTATICFILES_STORAGE = 'pipeline.storage.PipelineStorage'\n\nFIXTURE_DIRS = (os.path.join(SITE_ROOT, 'fixtures'))\n# You will need yuglify to be installed\nPIPELINE_JS = {\n    'modernizr' : {\n        'source_filenames': (\n            'js/vendor/custom.modernizr.js',\n        ),\n        'output_filename': 'js/modernizr.js'\n    }, \n    'css3-mediaqueries' : {\n        'source_filenames': (\n            'js/vendor/css3-mediaqueries.js',\n        ),\n        'output_filename': 'js/css3-mediaqueries.js'\n    },\n    'main-js': {\n        'source_filenames': (\n            'js/vendor/jquery.js',\n            'js/vendor/jquery.tabbable.js',\n\n            'js/custom/editor.js',\n\n            'js/custom/mobile-menu.js',\n            'js/custom/accessibility-links.js',\n            'js/custom/dropdown-menu.js',\n            'js/custom/data-click.js',\n            'js/custom/accordeon.js',\n            'js/custom/modal.js',\n            'js/custom/close-alert-box.js',\n            'js/custom/keyboard-navigation.js',\n            'js/custom/message-hidden.js',\n            'js/custom/spoiler.js',\n            'js/custom/karma-ajax.js',\n            'js/custom/markdown-help.js',\n        ),\n        'output_filename': 'js/main.js'\n    }\n}\n\nPIPELINE_CSS = {\n    'main-css': {\n        'source_filenames': (\n            'css/main.css',\n        ),\n        'output_filename': 'css/design.css'\n    }\n}\n\n# Make this unique, and don't share it with anybody.\nSECRET_KEY = 'n!01nl+318#x75_%le8#s0=-*ysw&amp;y49uc#t=*wvi(9hnyii0z'\n\n# List of callables that know how to import templates from various sources.\nTEMPLATE_LOADERS = (\n    'django.template.loaders.filesystem.Loader',\n    'django.template.loaders.app_directories.Loader',\n    #     'django.template.loaders.eggs.Loader',\n)\n\nFILE_UPLOAD_HANDLERS = (\n    \"django.core.files.uploadhandler.MemoryFileUploadHandler\",\n    \"django.core.files.uploadhandler.TemporaryFileUploadHandler\",\n)\n\nMIDDLEWARE_CLASSES = (\n    'django.middleware.common.CommonMiddleware',\n    'django.contrib.sessions.middleware.SessionMiddleware',\n    'django.middleware.csrf.CsrfViewMiddleware',\n    'django.contrib.auth.middleware.AuthenticationMiddleware',\n    'django.contrib.messages.middleware.MessageMiddleware',\n    # Uncomment the next line for simple clickjacking protection:\n    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n    'zds.utils.ThreadLocals',\n    'zds.middlewares.SetLastVisitMiddleware.SetLastVisitMiddleware',\n)\n\nROOT_URLCONF = 'zds.urls'\n\n# Python dotted path to the WSGI application used by Django's runserver.\nWSGI_APPLICATION = 'zds.wsgi.application'\n\nTEMPLATE_DIRS = [\n    # Put strings here, like \"/home/html/django_templates\" or \"C:/www/django/templates\".\n    # Always use forward slashes, even on Windows.\n    # Don't forget to use absolute paths, not relative paths.\n    os.path.join(SITE_ROOT, 'templates')\n]\n\nTEMPLATE_CONTEXT_PROCESSORS = (\n    # Default context processors\n    'django.contrib.auth.context_processors.auth',\n    'django.core.context_processors.debug',\n    'django.core.context_processors.i18n',\n    'django.core.context_processors.media',\n    'django.core.context_processors.static',\n    'django.core.context_processors.request',\n    'django.core.context_processors.tz',\n    'django.contrib.messages.context_processors.messages'\n)\n\nCRISPY_TEMPLATE_PACK='bootstrap'\n\nINSTALLED_APPS = (\n    'django.contrib.auth',\n    'django.contrib.contenttypes',\n    'django.contrib.sessions',\n    'django.contrib.sites',\n    'django.contrib.messages',\n    'django.contrib.staticfiles',\n    'django.contrib.sitemaps',\n    'django.contrib.humanize',\n\n    'south',\n    'crispy_forms',\n    'email_obfuscator',\n    'pipeline',\n    'haystack',\n    'munin',\n\n    # Apps DB tables are created in THIS order by default\n    # --> Order is CRITICAL to properly handle foreign keys\n    'zds.utils',\n    'zds.pages',\n    'zds.gallery',\n    'zds.mp',\n    'zds.newsletter',\n    'zds.article',\n    'zds.forum',\n    'zds.tutorial',\n    'zds.member',\n    # Uncomment the next line to enable the admin:\n    'django.contrib.admin',\n    # Uncomment the next line to enable admin documentation:\n    # 'django.contrib.admindocs',\n)\nif (DEBUG):\n    INSTALLED_APPS += (\n        'debug_toolbar',\n    )\n\n# A sample logging configuration. The only tangible logging\n# performed by this configuration is to send an email to\n# the site admins on every HTTP 500 error when DEBUG=False.\n# See http://docs.djangoproject.com/en/dev/topics/logging for\n# more details on how to customize your logging configuration.\nLOGGING = {\n    'version': 1,\n    'disable_existing_loggers': False,\n    'filters': {\n        'require_debug_false': {\n            '()': 'django.utils.log.RequireDebugFalse'\n        }\n    },\n    'handlers': {\n        'mail_admins': {\n            'level': 'ERROR',\n            'filters': ['require_debug_false'],\n            'class': 'django.utils.log.AdminEmailHandler'\n        }\n    },\n    'loggers': {\n        'django.request': {\n            'handlers': ['mail_admins'],\n            'level': 'ERROR',\n            'propagate': True,\n        },\n    }\n}\n\nCACHES = {\n    'default': {\n        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',\n        'LOCATION': '127.0.0.1:11211',\n    }\n}\n\nSESSION_ENGINE = \"django.contrib.sessions.backends.cached_db\"\n\nAUTH_PROFILE_MODULE = 'member.Profile'\nLOGIN_URL = '/membres/connexion'\n\nABSOLUTE_URL_OVERRIDES = {\n    'auth.user': lambda u: '/membres/voir/{0}/'.format(u.username.encode('utf-8'))\n}\n\n\n# Django fileserve settings (set to True for local dev version only)\nSERVE = False\n\n# Max size image upload (in bytes)\nIMAGE_MAX_SIZE = 1024 * 1024 * 2\n\n# git directory\nREPO_PATH = os.path.join(SITE_ROOT, 'tutoriels-private')\nREPO_PATH_PROD = os.path.join(SITE_ROOT, 'tutoriels-public')\nREPO_ARTICLE_PATH = os.path.join(SITE_ROOT, 'articles-data')\n\n# Constants for pagination\nPOSTS_PER_PAGE = 21\nTOPICS_PER_PAGE = 21\nMEMBERS_PER_PAGE = 36\n\n# Constants to avoid spam\nSPAM_LIMIT_SECONDS = 60 * 15\nSPAM_LIMIT_PARTICIPANT = 2\nFOLLOWED_TOPICS_PER_PAGE = 21\n\nBOT_ACCOUNT = 'admin'\n\nPANDOC_LOC = ''\n\nHAYSTACK_CONNECTIONS = {\n    'default': {\n        'ENGINE': 'haystack.backends.solr_backend.SolrEngine',\n        'URL': 'http://127.0.0.1:8983/solr'\n        # ...or for multicore...\n        # 'URL': 'http://127.0.0.1:8983/solr/mysite',\n    },\n}\n\nGEOIP_PATH = os.path.join(SITE_ROOT, 'geodata')\n\nfrom django.contrib.messages import constants as message_constants\nMESSAGE_TAGS = {\n    message_constants.DEBUG: 'debug',\n    message_constants.INFO: 'info',\n    message_constants.SUCCESS: 'success',\n    message_constants.WARNING: 'warning',\n    message_constants.ERROR: 'alert',\n}\n\n\nMAX_POST_LENGTH = 1000000\nSDZ_TUTO_DIR = ''\n\nMAIL_CA_ASSO = 'ca-zeste-de-savoir@googlegroups.com'\n\n# Load the production settings, overwrite the existing ones if needed\ntry:\n    from settings_prod import *\nexcept ImportError:\n    pass\n", "path": "zds/settings.py"}]}