#from celery.decorators import task
from celery.task import Task
from fabric import api
+from fabric.network import disconnect_all
from mutagen import File
from mutagen import id3
@classmethod
def set_status(cls, audiobook, status):
- setattr(audiobook, '%s_status' % cls.ext, status)
- audiobook.save()
+ Audiobook.objects.filter(pk=audiobook.pk).update(
+ **{'%s_status' % cls.ext: status})
@staticmethod
def encode(in_path, out_path):
@classmethod
def save(cls, audiobook, file_name):
- getattr(audiobook, "%s_file" % cls.ext).save(
+ field = "%s_file" % cls.ext
+ getattr(audiobook, field).save(
"%d.%s" % (audiobook.pk, cls.ext),
- ExistingFile(file_name)
+ ExistingFile(file_name),
+ save=False
)
+ Audiobook.objects.filter(pk=audiobook.pk).update(
+ **{field: getattr(audiobook, field)})
@classmethod
def published(cls, audiobook):
- setattr(audiobook, "%s_published_tags" % cls.ext,
- getattr(audiobook, "%s_tags" % cls.ext))
- setattr(audiobook, "%s_tags" % cls.ext, None)
- setattr(audiobook, "%s_published" % cls.ext, datetime.now())
- cls.set_status(audiobook, None)
+ kwargs = {
+ "%s_published_tags" % cls.ext:
+ getattr(audiobook, "%s_tags" % cls.ext),
+ "%s_tags" % cls.ext: None,
+ "%s_published" % cls.ext: datetime.now(),
+ '%s_status' % cls.ext: None,
+ }
+ Audiobook.objects.filter(pk=audiobook.pk).update(**kwargs)
@classmethod
def put(cls, audiobook):
pipes.quote(slug),
pipes.quote(name)
)).encode('utf-8')
- print command
if UPLOAD_SUDO:
api.sudo(command, user=UPLOAD_SUDO, shell=False)
else:
api.run(command)
+ disconnect_all()
def run(self, aid):
audiobook = Audiobook.objects.get(id=aid)
self.put(audiobook)
self.published(audiobook)
- audiobook.save()
class Mp3Task(AudioFormatTask):