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