]> git.0d.be Git - django-panik-nonstop.git/blob - nonstop/management/commands/compute_durations.py
add switch to compute-durations to handle jingles
[django-panik-nonstop.git] / nonstop / management / commands / compute_durations.py
1 import datetime
2 import os
3
4 from django.core.management.base import BaseCommand
5
6 from emissions.utils import get_duration
7 from ...models import Track, Jingle
8
9
10 class Command(BaseCommand):
11     def add_arguments(self, parser):
12         parser.add_argument(
13                 '--recent', action='store_true', default=False,
14                 help='Only do recent files')
15         parser.add_argument(
16                 '--jingles', action='store_true', default=False,
17                 help='Do jingles')
18         parser.add_argument(
19                 '--force', action='store_true', default=False,
20                 help='Recompute existing durations')
21
22     def handle(self, verbosity, **kwargs):
23         if kwargs.get('jingles'):
24             qs = Jingle.objects.all()
25         else:
26             qs = Track.objects.all()
27             if kwargs.get('recent'):
28                 qs = qs.filter(creation_timestamp__gt=datetime.date.today() - datetime.timedelta(days=10))
29         if not kwargs.get('force'):
30             qs = qs.filter(duration__isnull=True)
31         if verbosity:
32             total = qs.count()
33         for i, track in enumerate(qs):
34             if verbosity:
35                 print('[%s/%s] %s' % (i, total, track))
36             try:
37                 file_path = track.file_path()
38             except AttributeError:
39                 continue
40             if file_path is None or not os.path.exists(file_path):
41                 continue
42             duration = get_duration(file_path)
43             if duration:
44                 track.duration = datetime.timedelta(seconds=float(duration))
45                 track.save()