]> git.0d.be Git - django-panik-emissions.git/commitdiff
load-from-drupal-json: adapt emission slug and do not duplicate soundfile
authorFrédéric Péters <fpeters@0d.be>
Thu, 26 Dec 2019 15:09:23 +0000 (16:09 +0100)
committerFrédéric Péters <fpeters@0d.be>
Thu, 26 Dec 2019 15:09:23 +0000 (16:09 +0100)
emissions/management/commands/load-from-drupal-json.py

index 0d15acf6defaed0b8fd39a8fb4f0cfd323634f14..9f5a6c203666887a684af4c32b326a51d8fb297a 100644 (file)
@@ -1,6 +1,7 @@
 import datetime
 import isodate
 import json
+import os
 import requests
 
 from django.conf import settings
@@ -8,6 +9,7 @@ from django.core.files import File
 from django.core.files.base import ContentFile
 from django.core.files.storage import default_storage
 from django.core.management.base import BaseCommand, CommandError
+from django.utils.six import BytesIO
 from django.utils.text import slugify
 from django.utils.timezone import make_naive
 
@@ -19,6 +21,16 @@ class Command(BaseCommand):
         parser.add_argument('filename', metavar='FILENAME', type=str,
                 help='name of file to import')
 
+    def adjust_slug(self, title):
+        slug = slugify(title.replace("'", " ").replace("’", " "))
+        if slug == 'quand-la-musique-est-bof':
+            slug = 'quand-la-musique-est-b-o-f'
+        elif slug == 'trad53-transmission-directe':
+            slug = 'trad-53-transmission-directe'
+        elif slug == 'tranzistor':
+            slug = 'tranzistor-l-emission'
+        return slug.strip('-')
+
     def handle(self, filename, verbosity, **options):
         self.verbose = (verbosity > 1)
         for episode_data in json.load(open(filename)).get('episodes').values():
@@ -28,10 +40,12 @@ class Command(BaseCommand):
                 continue
             if not episode_data.get('text') and not episode_data.get('sound'):
                 continue
+            emission_slug = self.adjust_slug(episode_data['emission'])
             emission, created = Emission.objects.get_or_create(
-                    slug=slugify(episode_data['emission']),
+                    slug=emission_slug,
                     defaults={'title': episode_data['emission']})
             if created:
+                emission.archived = True
                 emission.save()
             episode, created = Episode.objects.get_or_create(
                     slug=episode_data['path'].split('/')[-1],
@@ -80,16 +94,15 @@ class Command(BaseCommand):
                 diffusion.datetime = start_datetime
                 diffusion.save()
             if episode_data.get('sound') and not episode.has_sound():
-                orig_path = 'media/sounds.orig/%s/%s' % (emission.slug, episode_data.get('sound').split('/')[-1])
-                if not default_storage.exists(orig_path):
+                orig_path = os.path.join(
+                        settings.MEDIA_ROOT,
+                        'sounds.orig/%s/%s' % (emission.slug, episode_data.get('sound').split('/')[-1]))
+                if not os.path.exists(orig_path):
                     response = requests.get(episode_data.get('sound'))
                     if response.status_code == 200:
-                        path = default_storage.save(
-                                'sounds.orig/%s/%s' % (
-                                    emission.slug,
-                                    episode_data.get('sound').split('/')[-1]),
-                                ContentFile(response.content))
+                        bio = BytesIO(response.content)
                         soundfile = SoundFile(episode=episode, podcastable=True,
                                 fragment=False, title=episode.title)
-                        soundfile.file = default_storage.open(path)
+                        soundfile.file = File(bio)
+                        soundfile.file.name = episode_data.get('sound').split('/')[-1]
                         soundfile.save()