diff --git a/doc/source/back-end/contents.rst b/doc/source/back-end/contents.rst index 8d95ee9b38..2a1dd4515b 100644 --- a/doc/source/back-end/contents.rst +++ b/doc/source/back-end/contents.rst @@ -548,7 +548,7 @@ Si vous souhaitez implémenter votre propre convertisseur, voici l'algorithme ut .. sourcecode:: python with open(_file, "r") as json_file: - data = json_reader.load(json_file) + data = json_handler.load(json_file) _type = "TUTORIAL" if "type" not in data: _type = "ARTICLE" diff --git a/zds/__init__.py b/zds/__init__.py index e69de29bb2..6dcde74a70 100644 --- a/zds/__init__.py +++ b/zds/__init__.py @@ -0,0 +1,10 @@ +try: + import ujson as json_handler +except ImportError: + try: + import simplejson as json_handler + except ImportError: + import json as json_handler +import logging +logging.debug('json is loaded, module is %s', json_handler.__name__) # this allows to know which one we loaded +# and avoid pep8 warning. diff --git a/zds/pages/views.py b/zds/pages/views.py index d7746fcae1..dd0aa9f699 100644 --- a/zds/pages/views.py +++ b/zds/pages/views.py @@ -101,8 +101,8 @@ def form_valid(self, form): @method_decorator(login_required) @method_decorator(can_write_and_read_now) - def dispatch(self, *args, **kwargs): - return super(AssocSubscribeView, self).dispatch(*args, **kwargs) + def dispatch(self, request, *args, **kwargs): + return super().dispatch(request, *args, **kwargs) def get_success_url(self): return reverse('pages-assoc-subscribe') diff --git a/zds/searchv2/tests/tests_views.py b/zds/searchv2/tests/tests_views.py index e0a4dba949..d362763c31 100644 --- a/zds/searchv2/tests/tests_views.py +++ b/zds/searchv2/tests/tests_views.py @@ -1,7 +1,7 @@ # coding: utf-8 import os -import json +from zds import json_handler import shutil import datetime @@ -152,7 +152,7 @@ def test_get_similar_topics(self): # 1. Should not get any result result = self.client.get(reverse('search:similar') + '?q=est', follow=False) self.assertEqual(result.status_code, 200) - content = json.loads(result.content.decode('utf-8')) + content = json_handler.loads(result.content.decode('utf-8')) self.assertEqual(len(content['results']), 0) # index @@ -165,13 +165,13 @@ def test_get_similar_topics(self): # 2. Should get exactly one result result = self.client.get(reverse('search:similar') + '?q=mange', follow=False) self.assertEqual(result.status_code, 200) - content = json.loads(result.content.decode('utf-8')) + content = json_handler.loads(result.content.decode('utf-8')) self.assertEqual(len(content['results']), 1) # 2. Should get exactly two results result = self.client.get(reverse('search:similar') + '?q=Clem', follow=False) self.assertEqual(result.status_code, 200) - content = json.loads(result.content.decode('utf-8')) + content = json_handler.loads(result.content.decode('utf-8')) self.assertEqual(len(content['results']), 2) def test_hidden_post_are_not_result(self): diff --git a/zds/searchv2/views.py b/zds/searchv2/views.py index 090b19cec7..95287e245e 100644 --- a/zds/searchv2/views.py +++ b/zds/searchv2/views.py @@ -1,5 +1,5 @@ # coding: utf-8 -import json +from zds import json_handler import operator from elasticsearch_dsl import Search @@ -68,7 +68,7 @@ def get(self, request, *args, **kwargs): results.append(result) data = {'results': results} - return HttpResponse(json.dumps(data), content_type='application/json') + return HttpResponse(json_handler.dumps(data), content_type='application/json') class SearchView(ZdSPagingListView): diff --git a/zds/tutorialv2/factories.py b/zds/tutorialv2/factories.py index f10ebce4d1..d7ed30f275 100644 --- a/zds/tutorialv2/factories.py +++ b/zds/tutorialv2/factories.py @@ -23,7 +23,6 @@ 'Image: ![SVG qui existe pas](example.com/test.svg)\n\n' \ 'Image: ![GIF qui existe](http://upload.wikimedia.org/wikipedia/commons/2/27/AnimatedStar.gif)\n\n' \ 'Image: ![GIF qui existe pas](example.com/test.gif)\n\n' \ - 'Image: ![Image locale qui existe](fixtures/image_test.jpg)\n\n' \ 'Image: ![Image locale qui existe pas](does-not-exist/test.png)\n\n' \ 'Image: ![Bonus: image bizarre](https://s.qwant.com/thumbr/?u=http%3A%2F%2Fwww.blogoergosum.com%2Fwp-content%2F' \ 'uploads%2F2010%2F02%2Fwikipedia-logo.jpg&h=338&w=600)\n\n' \ @@ -37,8 +36,8 @@ class PublishableContentFactory(factory.DjangoModelFactory): class Meta: model = PublishableContent - title = factory.Sequence(lambda n: 'Mon contenu No{0}'.format(n)) - description = factory.Sequence(lambda n: 'Description du contenu No{0}'.format(n)) + title = factory.Sequence('Mon contenu No{0}'.format) + description = factory.Sequence('Description du contenu No{0}'.format) type = 'TUTORIAL' creation_date = datetime.now() pubdate = datetime.now() diff --git a/zds/tutorialv2/forms.py b/zds/tutorialv2/forms.py index 29fe34b183..80e398fef8 100644 --- a/zds/tutorialv2/forms.py +++ b/zds/tutorialv2/forms.py @@ -456,7 +456,7 @@ class ImportNewContentForm(ImportContentForm): ) def __init__(self, *args, **kwargs): - super(ImportContentForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.helper = FormHelper() self.helper.form_class = 'content-wrapper' diff --git a/zds/tutorialv2/management/commands/upgrade_manifest_to_v2.py b/zds/tutorialv2/management/commands/upgrade_manifest_to_v2.py index db514dd561..f4337d7bc2 100644 --- a/zds/tutorialv2/management/commands/upgrade_manifest_to_v2.py +++ b/zds/tutorialv2/management/commands/upgrade_manifest_to_v2.py @@ -3,14 +3,7 @@ from zds.utils.models import Licence from uuslug import slugify import os - -try: - import ujson as json_reader -except ImportError: - try: - import simplejson as json_reader - except ImportError: - import json as json_reader +from zds import json_handler class Command(BaseCommand): @@ -23,7 +16,7 @@ def handle(self, *args, **options): _file = options['manifest_path'] if os.path.isfile(_file) and _file[-5:] == '.json': with open(_file, 'r') as json_file: - data = json_reader.load(json_file) + data = json_handler.load(json_file) _type = 'TUTORIAL' if data['type'].lower() == 'article': _type = 'ARTICLE' diff --git a/zds/tutorialv2/models/database.py b/zds/tutorialv2/models/database.py index aa13b33b76..408697981e 100644 --- a/zds/tutorialv2/models/database.py +++ b/zds/tutorialv2/models/database.py @@ -5,14 +5,7 @@ from datetime import datetime from zds.tutorialv2.models.mixins import TemplatableContentModelMixin, OnlineLinkableContentMixin - -try: - import ujson as json_reader -except ImportError: - try: - import simplejson as json_reader - except: - import json as json_reader +from zds import json_handler from math import ceil import shutil @@ -358,7 +351,7 @@ def load_version(self, sha=None, public=None): raise NotAPublicVersion with open(os.path.join(path, 'manifest.json'), 'r', encoding='utf-8') as manifest: - json = json_reader.loads(manifest.read()) + json = json_handler.loads(manifest.read()) versioned = get_content_from_json( json, public.sha_public, @@ -377,7 +370,7 @@ def load_version(self, sha=None, public=None): repo = Repo(path) data = get_blob(repo.commit(sha).tree, 'manifest.json') try: - json = json_reader.loads(data) + json = json_handler.loads(data) except ValueError: raise BadManifestError( _('Une erreur est survenue lors de la lecture du manifest.json, est-ce du JSON ?')) diff --git a/zds/tutorialv2/models/versioned.py b/zds/tutorialv2/models/versioned.py index 3c9ede159c..3b75092e7c 100644 --- a/zds/tutorialv2/models/versioned.py +++ b/zds/tutorialv2/models/versioned.py @@ -1,6 +1,4 @@ -# coding: utf-8 - -import json as json_writer +from zds import json_handler from git import Repo import os import shutil @@ -1199,7 +1197,7 @@ def get_json(self): :rtype: str """ dct = export_content(self) - data = json_writer.dumps(dct, indent=4, ensure_ascii=False) + data = json_handler.dumps(dct, indent=4, ensure_ascii=False) return data def dump_json(self, path=None): @@ -1290,7 +1288,7 @@ def __init__(self, current_version, _type, title, slug): :param slug: slug of the content """ - Container.__init__(self, title, slug) + super().__init__(current_version, _type, title, slug) self.current_version = current_version self.type = _type self.PUBLIC = True # this is a public version diff --git a/zds/tutorialv2/tests/__init__.py b/zds/tutorialv2/tests/__init__.py index e69de29bb2..3116afc038 100644 --- a/zds/tutorialv2/tests/__init__.py +++ b/zds/tutorialv2/tests/__init__.py @@ -0,0 +1,18 @@ +from django.conf import settings +import os +import shutil + + +class TutorialTestMixin: + def clean_media_dir(self): + if os.path.isdir(self.overridden_zds_app['content']['repo_private_path']): + shutil.rmtree(self.overridden_zds_app['content']['repo_private_path']) + if os.path.isdir(self.overridden_zds_app['content']['repo_public_path']): + shutil.rmtree(self.overridden_zds_app['content']['repo_public_path']) + if os.path.isdir(self.overridden_zds_app['content']['extra_content_watchdog_dir']): + shutil.rmtree(self.overridden_zds_app['content']['extra_content_watchdog_dir']) + if os.path.isdir(settings.MEDIA_ROOT): + shutil.rmtree(settings.MEDIA_ROOT) + + def tearDown(self): + self.clean_media_dir() diff --git a/zds/tutorialv2/tests/tests_feeds.py b/zds/tutorialv2/tests/tests_feeds.py index c9ed430c77..b05ec1f928 100644 --- a/zds/tutorialv2/tests/tests_feeds.py +++ b/zds/tutorialv2/tests/tests_feeds.py @@ -1,7 +1,4 @@ -# coding: utf-8 - import os -import shutil from django.conf import settings from django.test import TestCase @@ -16,6 +13,7 @@ from zds.tutorialv2.factories import LicenceFactory, SubCategoryFactory, PublishableContentFactory, ContainerFactory, \ ExtractFactory from zds.tutorialv2.publication_utils import publish_content +from zds.tutorialv2.tests import TutorialTestMixin from copy import deepcopy overridden_zds_app = deepcopy(settings.ZDS_APP) @@ -25,10 +23,10 @@ @override_settings(MEDIA_ROOT=os.path.join(settings.BASE_DIR, 'media-test')) @override_settings(ZDS_APP=overridden_zds_app) -class LastTutorialsFeedRSSTest(TestCase): +class LastTutorialsFeedRSSTest(TestCase, TutorialTestMixin): def setUp(self): - + settings.overridden_zds_app = overridden_zds_app # don't build PDF to speed up the tests overridden_zds_app['content']['build_pdf_when_published'] = False @@ -139,20 +137,12 @@ def test_get_item_link(self): ret = self.tutofeed.item_link(item=tuto) self.assertEqual(ret, ref) - def tearDown(self): - if os.path.isdir(overridden_zds_app['content']['repo_private_path']): - shutil.rmtree(overridden_zds_app['content']['repo_private_path']) - if os.path.isdir(overridden_zds_app['content']['repo_public_path']): - shutil.rmtree(overridden_zds_app['content']['repo_public_path']) - if os.path.isdir(settings.MEDIA_ROOT): - shutil.rmtree(settings.MEDIA_ROOT) - @override_settings(ZDS_APP=overridden_zds_app) -class LastArticlesFeedRSSTest(TestCase): +class LastArticlesFeedRSSTest(TestCase, TutorialTestMixin): def setUp(self): - + settings.overridden_zds_app = overridden_zds_app # don't build PDF to speed up the tests overridden_zds_app['content']['build_pdf_when_published'] = False @@ -260,11 +250,3 @@ def test_get_item_link(self): article = list(self.articlefeed.items())[0] ret = self.articlefeed.item_link(item=article) self.assertEqual(ret, ref) - - def tearDown(self): - if os.path.isdir(overridden_zds_app['content']['repo_private_path']): - shutil.rmtree(overridden_zds_app['content']['repo_private_path']) - if os.path.isdir(overridden_zds_app['content']['repo_public_path']): - shutil.rmtree(overridden_zds_app['content']['repo_public_path']) - if os.path.isdir(settings.MEDIA_ROOT): - shutil.rmtree(settings.MEDIA_ROOT) diff --git a/zds/tutorialv2/tests/tests_lists.py b/zds/tutorialv2/tests/tests_lists.py index dbef70962c..bac02b8603 100644 --- a/zds/tutorialv2/tests/tests_lists.py +++ b/zds/tutorialv2/tests/tests_lists.py @@ -1,8 +1,6 @@ -# coding: utf-8 from django.contrib.auth.models import Group import os -import shutil import datetime from django.conf import settings from django.test import TestCase @@ -12,6 +10,7 @@ from zds.member.factories import ProfileFactory, StaffProfileFactory, UserFactory from zds.tutorialv2.factories import PublishableContentFactory, ContainerFactory, ExtractFactory, LicenceFactory, \ SubCategoryFactory, PublishedContentFactory, ValidationFactory +from zds.tutorialv2.tests import TutorialTestMixin from zds.gallery.factories import UserGalleryFactory from zds.forum.factories import ForumFactory, CategoryFactory from copy import deepcopy @@ -24,9 +23,9 @@ @override_settings(MEDIA_ROOT=os.path.join(settings.BASE_DIR, 'media-test')) @override_settings(ZDS_APP=overridden_zds_app) @override_settings(ES_ENABLED=False) -class ContentTests(TestCase): +class ContentTests(TestCase, TutorialTestMixin): def setUp(self): - + self.overridden_zds_app = overridden_zds_app # don't build PDF to speed up the tests overridden_zds_app['content']['build_pdf_when_published'] = False @@ -202,12 +201,3 @@ def test_validation_list(self): self.assertEqual(len(validations), 1) # 1 content with this category self.assertEqual(validations[0].content, article_reserved) # the right content - - def tearDown(self): - - if os.path.isdir(overridden_zds_app['content']['repo_private_path']): - shutil.rmtree(overridden_zds_app['content']['repo_private_path']) - if os.path.isdir(overridden_zds_app['content']['repo_public_path']): - shutil.rmtree(overridden_zds_app['content']['repo_public_path']) - if os.path.isdir(settings.MEDIA_ROOT): - shutil.rmtree(settings.MEDIA_ROOT) diff --git a/zds/tutorialv2/tests/tests_models.py b/zds/tutorialv2/tests/tests_models.py index 61ffac02e3..a44ec208eb 100644 --- a/zds/tutorialv2/tests/tests_models.py +++ b/zds/tutorialv2/tests/tests_models.py @@ -1,10 +1,8 @@ -# coding: utf-8 import unittest from django.core.urlresolvers import reverse from datetime import datetime, timedelta import os -import shutil from django.conf import settings from django.test import TestCase @@ -18,6 +16,7 @@ from zds.gallery.factories import UserGalleryFactory from zds.tutorialv2.models.database import PublishableContent, PublishedContent from zds.tutorialv2.publication_utils import publish_content +from zds.tutorialv2.tests import TutorialTestMixin from zds.utils.models import Tag from django.template.defaultfilters import date from copy import deepcopy @@ -30,10 +29,10 @@ @override_settings(MEDIA_ROOT=os.path.join(settings.BASE_DIR, 'media-test')) @override_settings(ZDS_APP=overridden_zds_app) @override_settings(ES_ENABLED=False) -class ContentTests(TestCase): +class ContentTests(TestCase, TutorialTestMixin): def setUp(self): - + self.overridden_zds_app = overridden_zds_app # don't build PDF to speed up the tests overridden_zds_app['content']['build_pdf_when_published'] = False @@ -125,13 +124,14 @@ def test_ensure_unique_slug_2(self): slugs = [new_version.children[-1].slug] for i in range(0, 2): # will add 3 new container - version = versioned.repo_add_container(title, random, random) - new_version = self.tuto.load_version(sha=version) - self.assertEqual(new_version.children[-1].slug, versioned.children[-1].slug) - self.assertTrue(new_version.children[-1].slug not in slugs) # slug is different - self.assertTrue(versioned.children[-1].slug not in slugs) + with self.subTest('subcontainer {}'.format(i)): + version = versioned.repo_add_container(title, random, random) + new_version = self.tuto.load_version(sha=version) + self.assertEqual(new_version.children[-1].slug, versioned.children[-1].slug) + self.assertTrue(new_version.children[-1].slug not in slugs) # slug is different + self.assertTrue(versioned.children[-1].slug not in slugs) - slugs.append(new_version.children[-1].slug) + slugs.append(new_version.children[-1].slug) # add extracts extract_title = "On va changer de titre (parce qu'on sais jamais) !" @@ -577,11 +577,3 @@ def test_ensure_gallery(self): content.save() content.ensure_author_gallery() self.assertEqual(UserGallery.objects.filter(gallery__pk=content.gallery.pk).count(), content.authors.count()) - - def tearDown(self): - if os.path.isdir(overridden_zds_app['content']['repo_private_path']): - shutil.rmtree(overridden_zds_app['content']['repo_private_path']) - if os.path.isdir(overridden_zds_app['content']['repo_public_path']): - shutil.rmtree(overridden_zds_app['content']['repo_public_path']) - if os.path.isdir(settings.MEDIA_ROOT): - shutil.rmtree(settings.MEDIA_ROOT) diff --git a/zds/tutorialv2/tests/tests_move.py b/zds/tutorialv2/tests/tests_move.py index 030bee89e4..285db80f10 100644 --- a/zds/tutorialv2/tests/tests_move.py +++ b/zds/tutorialv2/tests/tests_move.py @@ -2,7 +2,6 @@ from django.contrib.auth.models import Group import os -import shutil from os.path import isdir, isfile, join, dirname from django.conf import settings from django.test import TestCase @@ -16,6 +15,7 @@ from zds.gallery.factories import UserGalleryFactory from zds.forum.factories import ForumFactory, CategoryFactory from zds.tutorialv2.publication_utils import publish_content +from zds.tutorialv2.tests import TutorialTestMixin from copy import deepcopy overridden_zds_app = deepcopy(settings.ZDS_APP) @@ -26,10 +26,10 @@ @override_settings(MEDIA_ROOT=os.path.join(settings.BASE_DIR, 'media-test')) @override_settings(ZDS_APP=overridden_zds_app) @override_settings(ES_ENABLED=False) -class ContentMoveTests(TestCase): +class ContentMoveTests(TestCase, TutorialTestMixin): def setUp(self): - + self.overridden_zds_app = overridden_zds_app # don't build PDF to speed up the tests overridden_zds_app['content']['build_pdf_when_published'] = False @@ -559,11 +559,3 @@ def test_move_no_slug_update(self): follow=True) self.assertEqual(200, result.status_code) self.assertTrue(isdir(tuto.get_repo_path())) - - def tearDown(self): - if os.path.isdir(overridden_zds_app['content']['repo_private_path']): - shutil.rmtree(overridden_zds_app['content']['repo_private_path']) - if os.path.isdir(overridden_zds_app['content']['repo_public_path']): - shutil.rmtree(overridden_zds_app['content']['repo_public_path']) - if os.path.isdir(settings.MEDIA_ROOT): - shutil.rmtree(settings.MEDIA_ROOT) diff --git a/zds/tutorialv2/tests/tests_opinion_views.py b/zds/tutorialv2/tests/tests_opinion_views.py index dbe2ce2cd5..32fa8ebf31 100644 --- a/zds/tutorialv2/tests/tests_opinion_views.py +++ b/zds/tutorialv2/tests/tests_opinion_views.py @@ -1,5 +1,3 @@ -# coding: utf-8 -import shutil import os import datetime @@ -13,6 +11,7 @@ from zds.member.factories import ProfileFactory, StaffProfileFactory from zds.tutorialv2.factories import PublishableContentFactory, ExtractFactory, LicenceFactory, PublishedContentFactory from zds.tutorialv2.models.database import PublishableContent, PublishedContent, PickListOperation +from zds.tutorialv2.tests import TutorialTestMixin from zds.utils.models import Alert from copy import deepcopy @@ -25,8 +24,9 @@ @override_settings(MEDIA_ROOT=os.path.join(settings.BASE_DIR, 'media-test')) @override_settings(ZDS_APP=overridden_zds_app) @override_settings(ES_ENABLED=False) -class PublishedContentTests(TestCase): +class PublishedContentTests(TestCase, TutorialTestMixin): def setUp(self): + self.overridden_zds_app = overridden_zds_app overridden_zds_app['member']['bot_account'] = ProfileFactory().user.username self.licence = LicenceFactory() overridden_zds_app['content']['default_licence_pk'] = LicenceFactory().pk @@ -944,12 +944,3 @@ def test_opinion_alert(self): alert = Alert.objects.get(pk=alert.pk) self.assertTrue(alert.solved) - - def tearDown(self): - - if os.path.isdir(overridden_zds_app['content']['repo_private_path']): - shutil.rmtree(overridden_zds_app['content']['repo_private_path']) - if os.path.isdir(overridden_zds_app['content']['repo_public_path']): - shutil.rmtree(overridden_zds_app['content']['repo_public_path']) - if os.path.isdir(settings.MEDIA_ROOT): - shutil.rmtree(settings.MEDIA_ROOT) diff --git a/zds/tutorialv2/tests/tests_utils.py b/zds/tutorialv2/tests/tests_utils.py index 3d88741847..0992fcf4cc 100644 --- a/zds/tutorialv2/tests/tests_utils.py +++ b/zds/tutorialv2/tests/tests_utils.py @@ -1,5 +1,3 @@ -# coding: utf-8 - import os import shutil import tempfile @@ -24,15 +22,10 @@ from zds.tutorialv2.publication_utils import Publicator, PublicatorRegistery from watchdog.events import FileCreatedEvent from zds.tutorialv2.management.commands.publication_watchdog import TutorialIsPublished +from zds.tutorialv2.tests import TutorialTestMixin from mock import Mock from copy import deepcopy -try: - import ujson as json_reader -except ImportError: - try: - import simplejson as json_reader - except: - import json as json_reader +from zds import json_handler BASE_DIR = settings.BASE_DIR @@ -46,9 +39,10 @@ @override_settings(ZDS_APP=overridden_zds_app) @override_settings(ES_ENABLED=False) @override_settings(EMAIL_BACKEND='django.core.mail.backends.locmem.EmailBackend') -class UtilsTests(TestCase): +class UtilsTests(TestCase, TutorialTestMixin): def setUp(self): + self.overridden_zds_app = overridden_zds_app self.mas = ProfileFactory().user overridden_zds_app['member']['bot_account'] = self.mas.username @@ -278,7 +272,7 @@ def test_update_manifest(self): args = [os.path.join(BASE_DIR, 'fixtures', 'tuto', 'balise_audio', 'manifest2.json')] call_command('upgrade_manifest_to_v2', *args, **opts) manifest = open(os.path.join(BASE_DIR, 'fixtures', 'tuto', 'balise_audio', 'manifest2.json'), 'r') - json = json_reader.loads(manifest.read()) + json = json_handler.loads(manifest.read()) self.assertTrue('version' in json) self.assertTrue('licence' in json) @@ -293,7 +287,7 @@ def test_update_manifest(self): ) call_command('upgrade_manifest_to_v2', *args, **opts) manifest = open(os.path.join(BASE_DIR, 'fixtures', 'tuto', 'big_tuto_v1', 'manifest2.json'), 'r') - json = json_reader.loads(manifest.read()) + json = json_handler.loads(manifest.read()) os.unlink(args[0]) self.assertTrue('version' in json) self.assertTrue('licence' in json) @@ -309,7 +303,7 @@ def test_update_manifest(self): ) call_command('upgrade_manifest_to_v2', *args, **opts) manifest = open(os.path.join(BASE_DIR, 'fixtures', 'tuto', 'article_v1', 'manifest2.json'), 'r') - json = json_reader.loads(manifest.read()) + json = json_handler.loads(manifest.read()) self.assertTrue('version' in json) self.assertTrue('licence' in json) @@ -446,7 +440,7 @@ def testParseBadManifest(self): versioned.add_container(Container('un peu plus près de 42')) versioned.dump_json() manifest = os.path.join(versioned.get_path(), 'manifest.json') - dictionary = json_reader.load(open(manifest)) + dictionary = json_handler.load(open(manifest)) old_title = dictionary['title'] @@ -589,12 +583,5 @@ def test_image_with_non_ascii_chars(self): self.assertTrue(PublishedContent.objects.filter(content_id=article.pk).exists()) def tearDown(self): - if os.path.isdir(overridden_zds_app['content']['repo_private_path']): - shutil.rmtree(overridden_zds_app['content']['repo_private_path']) - if os.path.isdir(overridden_zds_app['content']['repo_public_path']): - shutil.rmtree(overridden_zds_app['content']['repo_public_path']) - if os.path.isdir(settings.MEDIA_ROOT): - shutil.rmtree(settings.MEDIA_ROOT) - if os.path.isdir(overridden_zds_app['content']['extra_content_watchdog_dir']): - shutil.rmtree(overridden_zds_app['content']['extra_content_watchdog_dir']) + super().tearDown() PublicatorRegistery.registry = self.old_registry diff --git a/zds/tutorialv2/tests/tests_views.py b/zds/tutorialv2/tests/tests_views.py index b48ef595b8..5fa153658e 100644 --- a/zds/tutorialv2/tests/tests_views.py +++ b/zds/tutorialv2/tests/tests_views.py @@ -1,4 +1,3 @@ -# coding: utf-8 import datetime import shutil import tempfile @@ -28,24 +27,17 @@ from zds.tutorialv2.models.database import PublishableContent, Validation, PublishedContent, ContentReaction, \ ContentRead from zds.tutorialv2.publication_utils import publish_content, Publicator, PublicatorRegistery +from zds.tutorialv2.tests import TutorialTestMixin from zds.utils.models import HelpWriting, Alert, Tag, Hat from zds.utils.factories import HelpWritingFactory, CategoryFactory from zds.utils.templatetags.interventions import interventions_topics from copy import deepcopy +from zds import json_handler BASE_DIR = settings.BASE_DIR -try: - import ujson as json_reader -except ImportError: - try: - import simplejson as json_reader - except: - import json as json_reader - - overridden_zds_app = deepcopy(settings.ZDS_APP) overridden_zds_app['content']['repo_private_path'] = os.path.join(BASE_DIR, 'contents-private-test') overridden_zds_app['content']['repo_public_path'] = os.path.join(BASE_DIR, 'contents-public-test') @@ -62,9 +54,10 @@ def publish(self, md_file_path, base_name, **kwargs): @override_settings(MEDIA_ROOT=os.path.join(BASE_DIR, 'media-test')) @override_settings(ZDS_APP=overridden_zds_app) @override_settings(ES_ENABLED=False) -class ContentTests(TestCase): +class ContentTests(TestCase, TutorialTestMixin): def setUp(self): + self.overridden_zds_app = overridden_zds_app overridden_zds_app['content']['default_licence_pk'] = LicenceFactory().pk # don't build PDF to speed up the tests overridden_zds_app['content']['build_pdf_when_published'] = False @@ -3588,7 +3581,7 @@ def test_import_old_version(self): follow=False ) manifest = open(os.path.join(old_path, 'manifest.json'), 'rb') - json = json_reader.loads(manifest.read()) + json = json_handler.loads(manifest.read()) manifest.close() self.assertEqual(result.status_code, 302) self.assertEqual(json['title'], PublishableContent.objects.last().title) @@ -4091,21 +4084,13 @@ def test_no_invalid_titles(self): self.assertNotEqual(PublishableContent.objects.all().count(), prev_count) prev_count += 1 - def tearDown(self): - - if os.path.isdir(overridden_zds_app['content']['repo_private_path']): - shutil.rmtree(overridden_zds_app['content']['repo_private_path']) - if os.path.isdir(overridden_zds_app['content']['repo_public_path']): - shutil.rmtree(overridden_zds_app['content']['repo_public_path']) - if os.path.isdir(settings.MEDIA_ROOT): - shutil.rmtree(settings.MEDIA_ROOT) - @override_settings(MEDIA_ROOT=os.path.join(BASE_DIR, 'media-test')) @override_settings(ZDS_APP=overridden_zds_app) @override_settings(ES_ENABLED=False) -class PublishedContentTests(TestCase): +class PublishedContentTests(TestCase, TutorialTestMixin): def setUp(self): + self.overridden_zds_app = overridden_zds_app overridden_zds_app['content']['default_licence_pk'] = LicenceFactory().pk # don't build PDF to speed up the tests overridden_zds_app['content']['build_pdf_when_published'] = False @@ -4717,7 +4702,7 @@ def test_add_note(self): json = {} try: - json = json_reader.loads(''.join(a.decode() for a in result.streaming_content)) + json = json_handler.loads(''.join(a.decode() for a in result.streaming_content)) except Exception as e: # broad exception on purpose self.assertEqual(e, '') @@ -6170,11 +6155,3 @@ def test_list_publications(self): for url in wrong_urls: self.assertEqual(self.client.get(url).status_code, 404, msg=url) - - def tearDown(self): - if os.path.isdir(overridden_zds_app['content']['repo_private_path']): - shutil.rmtree(overridden_zds_app['content']['repo_private_path']) - if os.path.isdir(overridden_zds_app['content']['repo_public_path']): - shutil.rmtree(overridden_zds_app['content']['repo_public_path']) - if os.path.isdir(settings.MEDIA_ROOT): - shutil.rmtree(settings.MEDIA_ROOT) diff --git a/zds/tutorialv2/views/contents.py b/zds/tutorialv2/views/contents.py index 70be4c7031..9f5bfa3fd2 100644 --- a/zds/tutorialv2/views/contents.py +++ b/zds/tutorialv2/views/contents.py @@ -1,6 +1,6 @@ # coding: utf-8 import logging -import json as json_reader +from zds import json_handler import os import re import shutil @@ -535,7 +535,7 @@ def extract_content_from_zip(zip_archive): # is the manifest ok ? try: - json_ = json_reader.loads(manifest) + json_ = json_handler.loads(manifest) except ValueError: raise BadArchiveError( _('Une erreur est survenue durant la lecture du manifest, ' @@ -731,7 +731,7 @@ def form_valid(self, form): else: # warn user if licence have changed: - manifest = json_reader.loads(str(zfile.read('manifest.json'), 'utf-8')) + manifest = json_handler.loads(str(zfile.read('manifest.json'), 'utf-8')) if 'licence' not in manifest or manifest['licence'] != new_version.licence.code: messages.info( self.request, _('la licence « {} » a été appliquée.').format(new_version.licence.code)) @@ -842,7 +842,7 @@ def form_valid(self, form): else: # warn user if licence have changed: - manifest = json_reader.loads(str(zfile.read('manifest.json'), 'utf-8')) + manifest = json_handler.loads(str(zfile.read('manifest.json'), 'utf-8')) if 'licence' not in manifest or manifest['licence'] != new_content.licence.code: messages.info( self.request, _('la licence « {} » a été appliquée.'.format(new_content.licence.code))) diff --git a/zds/tutorialv2/views/published.py b/zds/tutorialv2/views/published.py index 5062b81fb3..d663649d7f 100644 --- a/zds/tutorialv2/views/published.py +++ b/zds/tutorialv2/views/published.py @@ -1,6 +1,5 @@ -# coding: utf-8 from datetime import datetime -import json as json_writer +from zds import json_handler import logging import os @@ -666,7 +665,7 @@ def get(self, request, *args, **kwargs): text += '\nSource: [{}]({})'.format(reaction.author.username, reaction.get_absolute_url()) if self.request.is_ajax(): - return StreamingHttpResponse(json_writer.dumps({'text': text}, ensure_ascii=False)) + return StreamingHttpResponse(json_handler.dumps({'text': text}, ensure_ascii=False)) else: self.quoted_reaction_text = text try: @@ -989,7 +988,7 @@ def post(self, request, *args, **kwargs): response['follow'] = ContentReactionAnswerSubscription.objects\ .toggle_follow(self.get_object(), self.request.user, True).is_active if self.request.is_ajax(): - return HttpResponse(json_writer.dumps(response), content_type='application/json') + return HttpResponse(json_handler.dumps(response), content_type='application/json') return redirect(self.get_object().get_absolute_url()) @@ -1024,7 +1023,7 @@ def post(self, request, *args, **kwargs): response['email'] = self.perform_follow_by_email(user_to_follow, request.user) if request.is_ajax(): - return HttpResponse(json_writer.dumps(response), content_type='application/json') + return HttpResponse(json_handler.dumps(response), content_type='application/json') return redirect(request.META.get('HTTP_REFERER')) diff --git a/zds/utils/templatetags/topbar.py b/zds/utils/templatetags/topbar.py index 943dac8992..9bee682b86 100644 --- a/zds/utils/templatetags/topbar.py +++ b/zds/utils/templatetags/topbar.py @@ -64,7 +64,7 @@ def top_categories_content(_type): """ # get subcategories from PublishedContent if _type: - if type(_type) is not list: + if not isinstance(_type, list): _type = [_type] subcategories_contents = PublishedContent.objects\