We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Mauvais format (taille d'image) avec la TwitterCard
Le problème : 

https://twitter.com/A312_zds/status/1027577197987606528

L'image est flou car 60x60 :(


HTML :

    <meta property="twitter:image" content="http://zestedesavoir.com/media/galleries/5313/e35c638c-b58c-4ed7-851b-03f0c21cef2c.png.60x60_q95_crop.jpg">

Le format de la TwitterCard devrait être au minimum : 96x96 

--- 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/abstract_base/zds.py`
Content:
```
1 from os.path import join
2 from pathlib import Path
3 
4 from django.utils.translation import gettext_lazy as _
5 
6 from .config import config
7 from .base_dir import BASE_DIR
8 
9 
10 zds_config = config.get('zds', {})
11 
12 
13 GEOIP_PATH = join(BASE_DIR, 'geodata')
14 
15 
16 ES_ENABLED = True
17 
18 ES_CONNECTIONS = {
19     'default': {
20         'hosts': ['localhost:9200'],
21     }
22 }
23 
24 ES_SEARCH_INDEX = {
25     'name': 'zds_search',
26     'shards': 3,
27     'replicas': 0,
28 }
29 
30 
31 # Anonymous [Dis]Likes. Authors of [dis]likes before those pk will never be shown
32 VOTES_ID_LIMIT = zds_config.get('VOTES_ID_LIMIT', 0)
33 
34 
35 THUMBNAIL_ALIASES = {
36     '': {
37         'avatar': {'size': (60, 60), 'crop': True},
38         'avatar_mini': {'size': (24, 24), 'crop': True},
39         'tutorial_illu': {'size': (60, 60), 'crop': True},
40         'article_illu': {'size': (60, 60), 'crop': True},
41         'content_thumb': {'size': (96, 96), 'crop': True},
42         'help_illu': {'size': (48, 48), 'crop': True},
43         'help_mini_illu': {'size': (26, 26), 'crop': True},
44         'gallery': {'size': (120, 120), 'crop': True},
45         'featured': {'size': (228, 228), 'crop': True},
46         'gallery_illu': {'size': (480, 270), 'crop': True},
47         'content': {'size': (960, 960), 'crop': False},
48     },
49 }
50 
51 
52 ZDS_APP = {
53     'site': {
54         'name': 'ZesteDeSavoir',
55         'literal_name': 'Zeste de Savoir',
56         'slogan': 'Zeste de Savoir, la connaissance pour tous et sans pépins',
57         'abbr': 'zds',
58         'url': 'https://zestedesavoir.com',
59         'dns': 'zestedesavoir.com',
60         'email_contact': 'zestedesavoir@gmail.com',
61         'email_noreply': 'noreply@zestedesavoir.com',
62         'forum_feedback_users': '/forums/communaute/bug-suggestions/',
63         'contribute_link': 'https://docs.zestedesavoir.com/contributing.html',
64         'short_description': '',
65         'long_description': 'Zeste de Savoir est un site de partage de connaissances '
66                             'sur lequel vous trouverez des tutoriels de tous niveaux, '
67                             'des articles et des forums d’entraide animés par et pour '
68                             'la communauté.',
69         'googleAnalyticsID': zds_config.get('google_analytics_id'),
70         'googleTagManagerID': zds_config.get('google_tag_manager_id'),
71         'association': {
72             'name': 'Zeste de Savoir',
73             'fee': zds_config.get('association_fee', '20 €'),
74             'email': 'zestedesavoir@gmail.com',
75             'email_ca': 'ca-zeste-de-savoir@googlegroups.com',
76             'forum_ca_pk': 25
77         },
78         'repository': {
79             'url': 'https://github.com/zestedesavoir/zds-site',
80             'bugtracker': 'https://github.com/zestedesavoir/zds-site/issues',
81             'api': 'https://api.github.com/repos/zestedesavoir/zds-site',
82             'tags': [
83                 'C-Back', 'C-Front', 'C-API', 'C-Documentation', 'C-Infra', 'S-Bug', 'S-Régression',
84                 'S-Évolution'
85             ]
86         },
87         'licenses': {
88             'logo': {
89                 'code': 'CC-BY',
90                 'title': 'Creative Commons License',
91                 'description': 'Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - '
92                                'Partage dans les Mêmes Conditions 4.0 International.',
93                 'url_image': 'http://i.creativecommons.org/l/by-nc-sa/4.0/80x15.png',
94                 'url_license': 'http://creativecommons.org/licenses/by-nc-sa/4.0/',
95                 'author': 'MaxRoyo'
96             },
97             'cookies': {
98                 'code': 'CC-BY',
99                 'title': 'Licence Creative Commons',
100                 'description': 'licence Creative Commons Attribution 4.0 International',
101                 'url_image': 'http://i.creativecommons.org/l/by-nc-sa/4.0/80x15.png',
102                 'url_license': 'http://creativecommons.org/licenses/by-nc-sa/4.0/'
103             },
104             'source': {
105                 'code': 'GPL v3',
106                 'url_license': 'http://www.gnu.org/licenses/gpl-3.0.html',
107                 'provider_name': 'Progdupeupl',
108                 'provider_url': 'http://pdp.microjoe.org',
109             },
110             'licence_info_title': 'http://zestedesavoir.com/tutoriels/281/le-droit-dauteur-creative-commons-et-les-lic'
111                                   'ences-sur-zeste-de-savoir/',
112             'licence_info_link': 'Le droit d\'auteur, Creative Commons et les licences sur Zeste de Savoir'
113         },
114         'hosting': {
115             'name': 'GANDI SAS',
116             'address': '63-65 boulevard Massena - 75013 Paris - France'
117         },
118         'social': {
119             'facebook': 'https://www.facebook.com/ZesteDeSavoir',
120             'twitter': 'https://twitter.com/ZesteDeSavoir',
121             'googleplus': 'https://plus.google.com/u/0/107033688356682807298'
122         },
123         'cnil': '1771020',
124     },
125     'member': {
126         'bot_account': zds_config.get('member_bot_username', 'admin'),
127         'anonymous_account': zds_config.get('member_anonymous_username', 'anonymous'),
128         'external_account': zds_config.get('member_external_username', 'external'),
129         'bot_group': 'bot',
130         'dev_group': 'devs',
131         'members_per_page': 100,
132         'providers_per_page': 100,
133         'hats_per_page': 50,
134         'users_in_hats_list': 5,
135         'requested_hats_per_page': 100,
136         'update_last_visit_interval': 600,  # seconds
137         'old_smileys_allowed': False,
138         'old_smileys_cookie_key': 'use_old_smileys',
139     },
140     'hats': {
141         'moderation': 'Staff',
142         'validation': 'Staff',
143         'hats_management': 'Staff',
144     },
145     'gallery': {
146         'image_max_size': 1024 * 1024,
147         'gallery_per_page': 21,
148         'images_per_page': 21,
149     },
150     'tutorial': {
151         'home_number': 4,
152     },
153     'article': {
154         'home_number': 3
155     },
156     'opinions': {
157         'home_number': 5
158     },
159     'content': {
160         'repo_private_path': join(BASE_DIR, 'contents-private'),
161         'repo_public_path': join(BASE_DIR, 'contents-public'),
162         'extra_contents_dirname': 'extra_contents',
163         # can also be 'extra_content_generation_policy': 'WATCHDOG'
164         # or 'extra_content_generation_policy': 'NOTHING'
165         'extra_content_generation_policy': 'SYNC',
166         'extra_content_watchdog_dir': join(BASE_DIR, 'watchdog-build'),
167         'max_tree_depth': 3,
168         'default_licence_pk': 7,
169         'content_per_page': 42,
170         'max_last_publications_level_1': 6,
171         'max_last_publications_level_2': 12,
172         'max_last_publications_level_3': 12,
173         'notes_per_page': 25,
174         'helps_per_page': 20,
175         'commits_per_page': 20,
176         'feed_length': 5,
177         'user_page_number': 5,
178         'default_image': join(BASE_DIR, 'fixtures', 'noir_black.png'),
179         'import_image_prefix': 'archive',
180         'build_pdf_when_published': True,
181         'maximum_slug_size': 150,
182         'characters_per_minute': 1500,
183         'editorial_line_link':
184         'https://zestedesavoir.com/articles/222/la-ligne-editoriale-officielle-de-zeste-de-savoir/',
185         'epub_stylesheets': {
186             'toc': Path('toc.css'),
187             'full': Path(BASE_DIR) / 'dist' / 'css' / 'zmd.css',
188             'katex': Path(BASE_DIR) / 'dist' / 'css' / 'katex.min.css'
189         },
190         'latex_template_repo': 'NOT_EXISTING_DIR'
191     },
192     'forum': {
193         'posts_per_page': 21,
194         'topics_per_page': 21,
195         'spam_limit_seconds': 60 * 15,
196         'spam_limit_participant': 2,
197         'beta_forum_id': zds_config.get('publications_being_written_forum_id', 1),
198         'max_post_length': 1000000,
199         'top_tag_max': 5,
200         'home_number': 5,
201         'old_post_limit_days': 90,
202         # Exclude tags from top tags list. Tags listed here should not be relevant for most of users.
203         # Be warned exclude too much tags can restrict performance
204         'top_tag_exclu': ['bug', 'suggestion', 'tutoriel', 'beta', 'article']
205     },
206     'topic': {
207         'home_number': 5,
208     },
209     'comment': {
210         'max_pings': 15,
211         # allow to mention (and notify) members in messages
212         'enable_pings': True,
213     },
214     'featured_resource': {
215         'featured_per_page': 100,
216         'home_number': 5,
217     },
218     'notification': {
219         'per_page': 50,
220     },
221     'paginator': {
222         'folding_limit': 4
223     },
224     'search': {
225         'mark_keywords': ['javafx', 'haskell', 'groovy', 'powershell', 'latex', 'linux', 'windows'],
226         'results_per_page': 20,
227         'search_groups': {
228             'content': (
229                 _('Contenus publiés'), ['publishedcontent', 'chapter']
230             ),
231             'topic': (
232                 _('Sujets du forum'), ['topic']
233             ),
234             'post': (
235                 _('Messages du forum'), ['post']
236             ),
237         },
238         'boosts': {
239             'publishedcontent': {
240                 'global': 3.0,
241                 'if_article': 1.0,
242                 'if_tutorial': 1.0,
243                 'if_medium_or_big_tutorial': 1.5,
244                 'if_opinion': 0.66,
245                 'if_opinion_not_picked': 0.5
246             },
247             'topic': {
248                 'global': 2.0,
249                 'if_solved': 1.1,
250                 'if_sticky': 1.2,
251                 'if_locked': 0.1,
252             },
253             'chapter': {
254                 'global': 1.5,
255             },
256             'post': {
257                 'global': 1.0,
258                 'if_first': 1.2,
259                 'if_useful': 1.5,
260                 'ld_ratio_above_1': 1.05,
261                 'ld_ratio_below_1': 0.95,
262             }
263         }
264     },
265     'visual_changes': [],
266     'display_search_bar': True,
267     'zmd': {
268         'server': 'http://127.0.0.1:27272',
269         'disable_pings': False
270     },
271     'stats_ga_viewid': 'ga:86962671'
272 }
273
```
--- 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/abstract_base/zds.py b/zds/settings/abstract_base/zds.py
--- a/zds/settings/abstract_base/zds.py
+++ b/zds/settings/abstract_base/zds.py
@@ -45,6 +45,9 @@
         'featured': {'size': (228, 228), 'crop': True},
         'gallery_illu': {'size': (480, 270), 'crop': True},
         'content': {'size': (960, 960), 'crop': False},
+        'social_network': {'size': (144, 144), 'crop': True},
+        #                           ^^^  ^^^ -> minimum dimensions of 144x144
+        # https://developer.twitter.com/en/docs/tweets/optimize-with-cards/overview/summary
     },
 }

{"golden_diff": "diff --git a/zds/settings/abstract_base/zds.py b/zds/settings/abstract_base/zds.py\n--- a/zds/settings/abstract_base/zds.py\n+++ b/zds/settings/abstract_base/zds.py\n@@ -45,6 +45,9 @@\n         'featured': {'size': (228, 228), 'crop': True},\n         'gallery_illu': {'size': (480, 270), 'crop': True},\n         'content': {'size': (960, 960), 'crop': False},\n+        'social_network': {'size': (144, 144), 'crop': True},\n+        #                           ^^^  ^^^ -> minimum dimensions of 144x144\n+        # https://developer.twitter.com/en/docs/tweets/optimize-with-cards/overview/summary\n     },\n }\n", "issue": "Mauvais format (taille d'image) avec la TwitterCard\nLe probl\u00e8me : \r\n\r\nhttps://twitter.com/A312_zds/status/1027577197987606528\r\n\r\nL'image est flou car 60x60 :(\r\n\r\n\r\nHTML :\r\n\r\n    <meta property=\"twitter:image\" content=\"http://zestedesavoir.com/media/galleries/5313/e35c638c-b58c-4ed7-851b-03f0c21cef2c.png.60x60_q95_crop.jpg\">\r\n\r\nLe format de la TwitterCard devrait \u00eatre au minimum : 96x96 \n", "before_files": [{"content": "from os.path import join\nfrom pathlib import Path\n\nfrom django.utils.translation import gettext_lazy as _\n\nfrom .config import config\nfrom .base_dir import BASE_DIR\n\n\nzds_config = config.get('zds', {})\n\n\nGEOIP_PATH = join(BASE_DIR, 'geodata')\n\n\nES_ENABLED = True\n\nES_CONNECTIONS = {\n    'default': {\n        'hosts': ['localhost:9200'],\n    }\n}\n\nES_SEARCH_INDEX = {\n    'name': 'zds_search',\n    'shards': 3,\n    'replicas': 0,\n}\n\n\n# Anonymous [Dis]Likes. Authors of [dis]likes before those pk will never be shown\nVOTES_ID_LIMIT = zds_config.get('VOTES_ID_LIMIT', 0)\n\n\nTHUMBNAIL_ALIASES = {\n    '': {\n        'avatar': {'size': (60, 60), 'crop': True},\n        'avatar_mini': {'size': (24, 24), 'crop': True},\n        'tutorial_illu': {'size': (60, 60), 'crop': True},\n        'article_illu': {'size': (60, 60), 'crop': True},\n        'content_thumb': {'size': (96, 96), 'crop': True},\n        'help_illu': {'size': (48, 48), 'crop': True},\n        'help_mini_illu': {'size': (26, 26), 'crop': True},\n        'gallery': {'size': (120, 120), 'crop': True},\n        'featured': {'size': (228, 228), 'crop': True},\n        'gallery_illu': {'size': (480, 270), 'crop': True},\n        'content': {'size': (960, 960), 'crop': False},\n    },\n}\n\n\nZDS_APP = {\n    'site': {\n        'name': 'ZesteDeSavoir',\n        'literal_name': 'Zeste de Savoir',\n        'slogan': 'Zeste de Savoir, la connaissance pour tous et sans p\u00e9pins',\n        'abbr': 'zds',\n        'url': 'https://zestedesavoir.com',\n        'dns': 'zestedesavoir.com',\n        'email_contact': 'zestedesavoir@gmail.com',\n        'email_noreply': 'noreply@zestedesavoir.com',\n        'forum_feedback_users': '/forums/communaute/bug-suggestions/',\n        'contribute_link': 'https://docs.zestedesavoir.com/contributing.html',\n        'short_description': '',\n        'long_description': 'Zeste de Savoir est un site de partage de connaissances '\n                            'sur lequel vous trouverez des tutoriels de tous niveaux, '\n                            'des articles et des forums d\u2019entraide anim\u00e9s par et pour '\n                            'la communaut\u00e9.',\n        'googleAnalyticsID': zds_config.get('google_analytics_id'),\n        'googleTagManagerID': zds_config.get('google_tag_manager_id'),\n        'association': {\n            'name': 'Zeste de Savoir',\n            'fee': zds_config.get('association_fee', '20\u00a0\u20ac'),\n            'email': 'zestedesavoir@gmail.com',\n            'email_ca': 'ca-zeste-de-savoir@googlegroups.com',\n            'forum_ca_pk': 25\n        },\n        'repository': {\n            'url': 'https://github.com/zestedesavoir/zds-site',\n            'bugtracker': 'https://github.com/zestedesavoir/zds-site/issues',\n            'api': 'https://api.github.com/repos/zestedesavoir/zds-site',\n            'tags': [\n                'C-Back', 'C-Front', 'C-API', 'C-Documentation', 'C-Infra', 'S-Bug', 'S-R\u00e9gression',\n                'S-\u00c9volution'\n            ]\n        },\n        'licenses': {\n            'logo': {\n                'code': 'CC-BY',\n                'title': 'Creative Commons License',\n                'description': 'Licence Creative Commons Attribution - Pas d\u2019Utilisation Commerciale - '\n                               'Partage dans les M\u00eames Conditions 4.0 International.',\n                'url_image': 'http://i.creativecommons.org/l/by-nc-sa/4.0/80x15.png',\n                'url_license': 'http://creativecommons.org/licenses/by-nc-sa/4.0/',\n                'author': 'MaxRoyo'\n            },\n            'cookies': {\n                'code': 'CC-BY',\n                'title': 'Licence Creative Commons',\n                'description': 'licence Creative Commons Attribution 4.0 International',\n                'url_image': 'http://i.creativecommons.org/l/by-nc-sa/4.0/80x15.png',\n                'url_license': 'http://creativecommons.org/licenses/by-nc-sa/4.0/'\n            },\n            'source': {\n                'code': 'GPL v3',\n                'url_license': 'http://www.gnu.org/licenses/gpl-3.0.html',\n                'provider_name': 'Progdupeupl',\n                'provider_url': 'http://pdp.microjoe.org',\n            },\n            'licence_info_title': 'http://zestedesavoir.com/tutoriels/281/le-droit-dauteur-creative-commons-et-les-lic'\n                                  'ences-sur-zeste-de-savoir/',\n            'licence_info_link': 'Le droit d\\'auteur, Creative Commons et les licences sur Zeste de Savoir'\n        },\n        'hosting': {\n            'name': 'GANDI SAS',\n            'address': '63-65 boulevard Massena - 75013 Paris - France'\n        },\n        'social': {\n            'facebook': 'https://www.facebook.com/ZesteDeSavoir',\n            'twitter': 'https://twitter.com/ZesteDeSavoir',\n            'googleplus': 'https://plus.google.com/u/0/107033688356682807298'\n        },\n        'cnil': '1771020',\n    },\n    'member': {\n        'bot_account': zds_config.get('member_bot_username', 'admin'),\n        'anonymous_account': zds_config.get('member_anonymous_username', 'anonymous'),\n        'external_account': zds_config.get('member_external_username', 'external'),\n        'bot_group': 'bot',\n        'dev_group': 'devs',\n        'members_per_page': 100,\n        'providers_per_page': 100,\n        'hats_per_page': 50,\n        'users_in_hats_list': 5,\n        'requested_hats_per_page': 100,\n        'update_last_visit_interval': 600,  # seconds\n        'old_smileys_allowed': False,\n        'old_smileys_cookie_key': 'use_old_smileys',\n    },\n    'hats': {\n        'moderation': 'Staff',\n        'validation': 'Staff',\n        'hats_management': 'Staff',\n    },\n    'gallery': {\n        'image_max_size': 1024 * 1024,\n        'gallery_per_page': 21,\n        'images_per_page': 21,\n    },\n    'tutorial': {\n        'home_number': 4,\n    },\n    'article': {\n        'home_number': 3\n    },\n    'opinions': {\n        'home_number': 5\n    },\n    'content': {\n        'repo_private_path': join(BASE_DIR, 'contents-private'),\n        'repo_public_path': join(BASE_DIR, 'contents-public'),\n        'extra_contents_dirname': 'extra_contents',\n        # can also be 'extra_content_generation_policy': 'WATCHDOG'\n        # or 'extra_content_generation_policy': 'NOTHING'\n        'extra_content_generation_policy': 'SYNC',\n        'extra_content_watchdog_dir': join(BASE_DIR, 'watchdog-build'),\n        'max_tree_depth': 3,\n        'default_licence_pk': 7,\n        'content_per_page': 42,\n        'max_last_publications_level_1': 6,\n        'max_last_publications_level_2': 12,\n        'max_last_publications_level_3': 12,\n        'notes_per_page': 25,\n        'helps_per_page': 20,\n        'commits_per_page': 20,\n        'feed_length': 5,\n        'user_page_number': 5,\n        'default_image': join(BASE_DIR, 'fixtures', 'noir_black.png'),\n        'import_image_prefix': 'archive',\n        'build_pdf_when_published': True,\n        'maximum_slug_size': 150,\n        'characters_per_minute': 1500,\n        'editorial_line_link':\n        'https://zestedesavoir.com/articles/222/la-ligne-editoriale-officielle-de-zeste-de-savoir/',\n        'epub_stylesheets': {\n            'toc': Path('toc.css'),\n            'full': Path(BASE_DIR) / 'dist' / 'css' / 'zmd.css',\n            'katex': Path(BASE_DIR) / 'dist' / 'css' / 'katex.min.css'\n        },\n        'latex_template_repo': 'NOT_EXISTING_DIR'\n    },\n    'forum': {\n        'posts_per_page': 21,\n        'topics_per_page': 21,\n        'spam_limit_seconds': 60 * 15,\n        'spam_limit_participant': 2,\n        'beta_forum_id': zds_config.get('publications_being_written_forum_id', 1),\n        'max_post_length': 1000000,\n        'top_tag_max': 5,\n        'home_number': 5,\n        'old_post_limit_days': 90,\n        # Exclude tags from top tags list. Tags listed here should not be relevant for most of users.\n        # Be warned exclude too much tags can restrict performance\n        'top_tag_exclu': ['bug', 'suggestion', 'tutoriel', 'beta', 'article']\n    },\n    'topic': {\n        'home_number': 5,\n    },\n    'comment': {\n        'max_pings': 15,\n        # allow to mention (and notify) members in messages\n        'enable_pings': True,\n    },\n    'featured_resource': {\n        'featured_per_page': 100,\n        'home_number': 5,\n    },\n    'notification': {\n        'per_page': 50,\n    },\n    'paginator': {\n        'folding_limit': 4\n    },\n    'search': {\n        'mark_keywords': ['javafx', 'haskell', 'groovy', 'powershell', 'latex', 'linux', 'windows'],\n        'results_per_page': 20,\n        'search_groups': {\n            'content': (\n                _('Contenus publi\u00e9s'), ['publishedcontent', 'chapter']\n            ),\n            'topic': (\n                _('Sujets du forum'), ['topic']\n            ),\n            'post': (\n                _('Messages du forum'), ['post']\n            ),\n        },\n        'boosts': {\n            'publishedcontent': {\n                'global': 3.0,\n                'if_article': 1.0,\n                'if_tutorial': 1.0,\n                'if_medium_or_big_tutorial': 1.5,\n                'if_opinion': 0.66,\n                'if_opinion_not_picked': 0.5\n            },\n            'topic': {\n                'global': 2.0,\n                'if_solved': 1.1,\n                'if_sticky': 1.2,\n                'if_locked': 0.1,\n            },\n            'chapter': {\n                'global': 1.5,\n            },\n            'post': {\n                'global': 1.0,\n                'if_first': 1.2,\n                'if_useful': 1.5,\n                'ld_ratio_above_1': 1.05,\n                'ld_ratio_below_1': 0.95,\n            }\n        }\n    },\n    'visual_changes': [],\n    'display_search_bar': True,\n    'zmd': {\n        'server': 'http://127.0.0.1:27272',\n        'disable_pings': False\n    },\n    'stats_ga_viewid': 'ga:86962671'\n}\n", "path": "zds/settings/abstract_base/zds.py"}], "after_files": [{"content": "from os.path import join\nfrom pathlib import Path\n\nfrom django.utils.translation import gettext_lazy as _\n\nfrom .config import config\nfrom .base_dir import BASE_DIR\n\n\nzds_config = config.get('zds', {})\n\n\nGEOIP_PATH = join(BASE_DIR, 'geodata')\n\n\nES_ENABLED = True\n\nES_CONNECTIONS = {\n    'default': {\n        'hosts': ['localhost:9200'],\n    }\n}\n\nES_SEARCH_INDEX = {\n    'name': 'zds_search',\n    'shards': 3,\n    'replicas': 0,\n}\n\n\n# Anonymous [Dis]Likes. Authors of [dis]likes before those pk will never be shown\nVOTES_ID_LIMIT = zds_config.get('VOTES_ID_LIMIT', 0)\n\n\nTHUMBNAIL_ALIASES = {\n    '': {\n        'avatar': {'size': (60, 60), 'crop': True},\n        'avatar_mini': {'size': (24, 24), 'crop': True},\n        'tutorial_illu': {'size': (60, 60), 'crop': True},\n        'article_illu': {'size': (60, 60), 'crop': True},\n        'content_thumb': {'size': (96, 96), 'crop': True},\n        'help_illu': {'size': (48, 48), 'crop': True},\n        'help_mini_illu': {'size': (26, 26), 'crop': True},\n        'gallery': {'size': (120, 120), 'crop': True},\n        'featured': {'size': (228, 228), 'crop': True},\n        'gallery_illu': {'size': (480, 270), 'crop': True},\n        'content': {'size': (960, 960), 'crop': False},\n        'social_network': {'size': (144, 144), 'crop': True},\n        #                           ^^^  ^^^ -> minimum dimensions of 144x144\n        # https://developer.twitter.com/en/docs/tweets/optimize-with-cards/overview/summary\n    },\n}\n\n\nZDS_APP = {\n    'site': {\n        'name': 'ZesteDeSavoir',\n        'literal_name': 'Zeste de Savoir',\n        'slogan': 'Zeste de Savoir, la connaissance pour tous et sans p\u00e9pins',\n        'abbr': 'zds',\n        'url': 'https://zestedesavoir.com',\n        'dns': 'zestedesavoir.com',\n        'email_contact': 'zestedesavoir@gmail.com',\n        'email_noreply': 'noreply@zestedesavoir.com',\n        'forum_feedback_users': '/forums/communaute/bug-suggestions/',\n        'contribute_link': 'https://docs.zestedesavoir.com/contributing.html',\n        'short_description': '',\n        'long_description': 'Zeste de Savoir est un site de partage de connaissances '\n                            'sur lequel vous trouverez des tutoriels de tous niveaux, '\n                            'des articles et des forums d\u2019entraide anim\u00e9s par et pour '\n                            'la communaut\u00e9.',\n        'googleAnalyticsID': zds_config.get('google_analytics_id'),\n        'googleTagManagerID': zds_config.get('google_tag_manager_id'),\n        'association': {\n            'name': 'Zeste de Savoir',\n            'fee': zds_config.get('association_fee', '20\u00a0\u20ac'),\n            'email': 'zestedesavoir@gmail.com',\n            'email_ca': 'ca-zeste-de-savoir@googlegroups.com',\n            'forum_ca_pk': 25\n        },\n        'repository': {\n            'url': 'https://github.com/zestedesavoir/zds-site',\n            'bugtracker': 'https://github.com/zestedesavoir/zds-site/issues',\n            'api': 'https://api.github.com/repos/zestedesavoir/zds-site',\n            'tags': [\n                'C-Back', 'C-Front', 'C-API', 'C-Documentation', 'C-Infra', 'S-Bug', 'S-R\u00e9gression',\n                'S-\u00c9volution'\n            ]\n        },\n        'licenses': {\n            'logo': {\n                'code': 'CC-BY',\n                'title': 'Creative Commons License',\n                'description': 'Licence Creative Commons Attribution - Pas d\u2019Utilisation Commerciale - '\n                               'Partage dans les M\u00eames Conditions 4.0 International.',\n                'url_image': 'http://i.creativecommons.org/l/by-nc-sa/4.0/80x15.png',\n                'url_license': 'http://creativecommons.org/licenses/by-nc-sa/4.0/',\n                'author': 'MaxRoyo'\n            },\n            'cookies': {\n                'code': 'CC-BY',\n                'title': 'Licence Creative Commons',\n                'description': 'licence Creative Commons Attribution 4.0 International',\n                'url_image': 'http://i.creativecommons.org/l/by-nc-sa/4.0/80x15.png',\n                'url_license': 'http://creativecommons.org/licenses/by-nc-sa/4.0/'\n            },\n            'source': {\n                'code': 'GPL v3',\n                'url_license': 'http://www.gnu.org/licenses/gpl-3.0.html',\n                'provider_name': 'Progdupeupl',\n                'provider_url': 'http://pdp.microjoe.org',\n            },\n            'licence_info_title': 'http://zestedesavoir.com/tutoriels/281/le-droit-dauteur-creative-commons-et-les-lic'\n                                  'ences-sur-zeste-de-savoir/',\n            'licence_info_link': 'Le droit d\\'auteur, Creative Commons et les licences sur Zeste de Savoir'\n        },\n        'hosting': {\n            'name': 'GANDI SAS',\n            'address': '63-65 boulevard Massena - 75013 Paris - France'\n        },\n        'social': {\n            'facebook': 'https://www.facebook.com/ZesteDeSavoir',\n            'twitter': 'https://twitter.com/ZesteDeSavoir',\n            'googleplus': 'https://plus.google.com/u/0/107033688356682807298'\n        },\n        'cnil': '1771020',\n    },\n    'member': {\n        'bot_account': zds_config.get('member_bot_username', 'admin'),\n        'anonymous_account': zds_config.get('member_anonymous_username', 'anonymous'),\n        'external_account': zds_config.get('member_external_username', 'external'),\n        'bot_group': 'bot',\n        'dev_group': 'devs',\n        'members_per_page': 100,\n        'providers_per_page': 100,\n        'hats_per_page': 50,\n        'users_in_hats_list': 5,\n        'requested_hats_per_page': 100,\n        'update_last_visit_interval': 600,  # seconds\n        'old_smileys_allowed': False,\n        'old_smileys_cookie_key': 'use_old_smileys',\n    },\n    'hats': {\n        'moderation': 'Staff',\n        'validation': 'Staff',\n        'hats_management': 'Staff',\n    },\n    'gallery': {\n        'image_max_size': 1024 * 1024,\n        'gallery_per_page': 21,\n        'images_per_page': 21,\n    },\n    'tutorial': {\n        'home_number': 4,\n    },\n    'article': {\n        'home_number': 3\n    },\n    'opinions': {\n        'home_number': 5\n    },\n    'content': {\n        'repo_private_path': join(BASE_DIR, 'contents-private'),\n        'repo_public_path': join(BASE_DIR, 'contents-public'),\n        'extra_contents_dirname': 'extra_contents',\n        # can also be 'extra_content_generation_policy': 'WATCHDOG'\n        # or 'extra_content_generation_policy': 'NOTHING'\n        'extra_content_generation_policy': 'SYNC',\n        'extra_content_watchdog_dir': join(BASE_DIR, 'watchdog-build'),\n        'max_tree_depth': 3,\n        'default_licence_pk': 7,\n        'content_per_page': 42,\n        'max_last_publications_level_1': 6,\n        'max_last_publications_level_2': 12,\n        'max_last_publications_level_3': 12,\n        'notes_per_page': 25,\n        'helps_per_page': 20,\n        'commits_per_page': 20,\n        'feed_length': 5,\n        'user_page_number': 5,\n        'default_image': join(BASE_DIR, 'fixtures', 'noir_black.png'),\n        'import_image_prefix': 'archive',\n        'build_pdf_when_published': True,\n        'maximum_slug_size': 150,\n        'characters_per_minute': 1500,\n        'editorial_line_link':\n        'https://zestedesavoir.com/articles/222/la-ligne-editoriale-officielle-de-zeste-de-savoir/',\n        'epub_stylesheets': {\n            'toc': Path('toc.css'),\n            'full': Path(BASE_DIR) / 'dist' / 'css' / 'zmd.css',\n            'katex': Path(BASE_DIR) / 'dist' / 'css' / 'katex.min.css'\n        },\n        'latex_template_repo': 'NOT_EXISTING_DIR'\n    },\n    'forum': {\n        'posts_per_page': 21,\n        'topics_per_page': 21,\n        'spam_limit_seconds': 60 * 15,\n        'spam_limit_participant': 2,\n        'beta_forum_id': zds_config.get('publications_being_written_forum_id', 1),\n        'max_post_length': 1000000,\n        'top_tag_max': 5,\n        'home_number': 5,\n        'old_post_limit_days': 90,\n        # Exclude tags from top tags list. Tags listed here should not be relevant for most of users.\n        # Be warned exclude too much tags can restrict performance\n        'top_tag_exclu': ['bug', 'suggestion', 'tutoriel', 'beta', 'article']\n    },\n    'topic': {\n        'home_number': 5,\n    },\n    'comment': {\n        'max_pings': 15,\n        # allow to mention (and notify) members in messages\n        'enable_pings': True,\n    },\n    'featured_resource': {\n        'featured_per_page': 100,\n        'home_number': 5,\n    },\n    'notification': {\n        'per_page': 50,\n    },\n    'paginator': {\n        'folding_limit': 4\n    },\n    'search': {\n        'mark_keywords': ['javafx', 'haskell', 'groovy', 'powershell', 'latex', 'linux', 'windows'],\n        'results_per_page': 20,\n        'search_groups': {\n            'content': (\n                _('Contenus publi\u00e9s'), ['publishedcontent', 'chapter']\n            ),\n            'topic': (\n                _('Sujets du forum'), ['topic']\n            ),\n            'post': (\n                _('Messages du forum'), ['post']\n            ),\n        },\n        'boosts': {\n            'publishedcontent': {\n                'global': 3.0,\n                'if_article': 1.0,\n                'if_tutorial': 1.0,\n                'if_medium_or_big_tutorial': 1.5,\n                'if_opinion': 0.66,\n                'if_opinion_not_picked': 0.5\n            },\n            'topic': {\n                'global': 2.0,\n                'if_solved': 1.1,\n                'if_sticky': 1.2,\n                'if_locked': 0.1,\n            },\n            'chapter': {\n                'global': 1.5,\n            },\n            'post': {\n                'global': 1.0,\n                'if_first': 1.2,\n                'if_useful': 1.5,\n                'ld_ratio_above_1': 1.05,\n                'ld_ratio_below_1': 0.95,\n            }\n        }\n    },\n    'visual_changes': [],\n    'display_search_bar': True,\n    'zmd': {\n        'server': 'http://127.0.0.1:27272',\n        'disable_pings': False\n    },\n    'stats_ga_viewid': 'ga:86962671'\n}\n", "path": "zds/settings/abstract_base/zds.py"}]}