def save(self): subtitles = self.cleaned_data["subtitles"] video = self.cleaned_data["video"] key = str(uuid4()).replace("-", "") video._make_writelock(self.user, key) video.save() language = video.subtitle_language() if not language: language = SubtitleLanguage(video=video, is_original=True, is_complete=True) language.save() latest_captions = language.latest_version() if latest_captions is None: version_no = 0 else: version_no = latest_captions.version_no + 1 version = SubtitleVersion( language=language, version_no=version_no, datetime_started=datetime.now(), user=self.user, note=u"Uploaded" ) version.save() text = subtitles.read() parser = self._get_parser(subtitles.name)(force_unicode(text, chardet.detect(text)["encoding"])) ids = [] for i, item in enumerate(parser): id = int(random.random() * 10e12) while id in ids: id = int(random.random() * 10e12) ids.append(id) caption = Subtitle(**item) caption.version = version caption.subtitle_id = str(id) caption.sub_order = i + 1 caption.save() version.finished = True version.save() video.release_writelock() video.save()