6 from django.conf import settings
7 from django.core.files import File
8 from django.core.files.base import ContentFile
9 from django.core.files.storage import default_storage
10 from django.core.management.base import BaseCommand, CommandError
11 from django.utils.text import slugify
12 from django.utils.timezone import make_naive
14 from ...models import Emission, Episode, Diffusion
17 class Command(BaseCommand):
18 def add_arguments(self, parser):
19 parser.add_argument('filename', metavar='FILENAME', type=str,
20 help='name of file to import')
22 def handle(self, filename, verbosity, **options):
23 self.verbose = (verbosity > 1)
24 for episode_data in json.load(open(filename)).get('episodes').values():
25 if not episode_data.get('title'):
27 if not episode_data.get('emission'):
29 if not episode_data.get('text') and not episode_data.get('sound'):
31 emission, created = Emission.objects.get_or_create(
32 slug=slugify(episode_data['emission']),
33 defaults={'title': episode_data['emission']})
36 episode, created = Episode.objects.get_or_create(
37 slug=episode_data['path'].split('/')[-1],
39 episode.title = episode_data['title']
40 episode.text = episode_data['text']
41 episode.creation_timestamp = isodate.parse_datetime(
42 episode_data['pub_date'].replace(' ', 'T', 1).replace(' ', ''))
43 if not settings.USE_TZ:
44 episode.creation_timestamp = make_naive(episode.creation_timestamp)
45 start_datetime = datetime.datetime.combine(
46 datetime.datetime.strptime(episode_data['start_date'], '%d/%m/%Y').date(),
47 datetime.datetime.strptime(episode_data['start_time'], '%H:%M').time())
48 if episode_data['end_time']:
49 end_datetime = datetime.datetime.combine(
50 start_datetime.date(),
51 datetime.datetime.strptime(episode_data['end_time'], '%H:%M').time())
53 end_datetime = start_datetime # fake
54 if end_datetime < start_datetime:
55 end_datetime = end_datetime + datetime.timedelta(days=1)
56 episode.duration = (end_datetime - start_datetime).seconds // 60
58 if not episode.image and episode_data.get('image'):
59 orig_path = 'images/%s/%s' % (emission.slug, episode_data.get('image').split('/')[-1])
60 if default_storage.exists(orig_path):
63 path = default_storage.save(
66 episode_data.get('image').split('/')[-1]),
67 ContentFile(requests.get(episode_data.get('image')).content))
68 episode.image = default_storage.open(path)
71 except OSError: # OSError: cannot identify image file
74 if episode.diffusion_set.count() == 0:
75 diffusion = Diffusion(episode=episode)
76 diffusion.datetime = start_datetime