コード例 #1
0
def save_subtitle(video,
                  language,
                  parser,
                  user=None,
                  update_video=True,
                  forks=True,
                  as_forked=True,
                  translated_from=None):
    from videos.models import SubtitleVersion, Subtitle, SubtitleMetadata
    from videos.tasks import video_changed_tasks

    key = str(uuid4()).replace('-', '')

    if language.is_original:
        as_forked = True

    video._make_writelock(user, key)
    video.save()

    try:
        old_version = language.subtitleversion_set.all()[:1].get()
        version_no = old_version.version_no + 1
    except ObjectDoesNotExist:
        old_version = None
        version_no = 0

    version = None

    if not is_version_same(old_version, parser):
        forked_from = as_forked and translated_from and translated_from.version(
        )

        title = old_version.title if old_version and old_version.title else video.get_title_display(
        )
        description = old_version.description if old_version and old_version.description else video.get_description_display(
        )

        version = SubtitleVersion(language=language,
                                  version_no=version_no,
                                  datetime_started=datetime.now(),
                                  user=user,
                                  note=u'Uploaded',
                                  is_forked=as_forked,
                                  time_change=1,
                                  text_change=1,
                                  forked_from=forked_from,
                                  title=title,
                                  description=description)

        if len(parser) > 0:
            version.has_version = True

        version.save()

        ids = []

        for i, item in enumerate(parser):
            id = int(random.random() * 10e12)

            while id in ids:
                id = int(random.random() * 10e12)

            ids.append(id)

            metadata = item.pop('metadata', None)

            caption = Subtitle(**item)
            caption.version = version
            caption.datetime_started = datetime.now()
            caption.subtitle_id = str(id)
            caption.subtitle_order = i + 1
            caption.save()

            if metadata:
                for name, value in metadata.items():
                    SubtitleMetadata(subtitle=caption, key=name,
                                     data=value).save()

    version = version or old_version

    if version.is_forked != as_forked:
        version.is_forked = as_forked
        version.save()

    if version.user != user:
        # we might be only uptading the user , as in per bulk imports
        version.user = user
        version.save()

    language.video.release_writelock()
    language.video.save()

    if forks:
        translations = video.subtitlelanguage_set.filter(
            standard_language=language)
        [t.fork(from_version=old_version, user=user) for t in translations]

    if update_video:
        video_changed_tasks.delay(video.id,
                                  None if version is None else version.id)

    return language