def postprocess(self, folder, skipJobs): """ Post-processing to be run after media/annotation import When skipJobs=False, the following may run as jobs: Transcoding of Video Transcoding of Images Conversion of KPF annotations into track JSON In either case, the following may run synchronously: Conversion of CSV annotations into track JSON """ user = self.getCurrentUser() auxiliary = get_or_create_auxiliary_folder(folder, user) if not skipJobs: token = Token().createToken(user=user, days=1) # transcode VIDEO if necessary videoItems = Folder().childItems( folder, filters={"lowerName": { "$regex": videoRegex }}) for item in videoItems: convert_video.delay( GetPathFromItemId(str(item["_id"])), str(item["folderId"]), auxiliary["_id"], girder_job_title=( "Converting {} to a web friendly format".format( str(item["_id"]))), girder_client_token=str(token["_id"]), ) # transcode IMAGERY if necessary imageItems = Folder().childItems( folder, filters={"lowerName": { "$regex": imageRegex }}) safeImageItems = Folder().childItems( folder, filters={"lowerName": { "$regex": safeImageRegex }}) if imageItems.count() > safeImageItems.count(): convert_images.delay( folder["_id"], girder_client_token=str(token["_id"]), girder_job_title= f"Converting {folder['_id']} to a web friendly format", ) elif imageItems.count() > 0: folder["meta"]["annotate"] = True # transform KPF if necessary ymlItems = Folder().childItems( folder, filters={"lowerName": { "$regex": ymlRegex }}) if ymlItems.count() > 0: # There might be up to 3 yamls allFiles = [Item().childFiles(item)[0] for item in ymlItems] saveTracks(folder, meva_serializer.load_kpf_as_tracks(allFiles), user) ymlItems.rewind() for item in ymlItems: Item().move(item, auxiliary) Folder().save(folder) # transform CSV if necessasry csvItems = Folder().childItems( folder, filters={"lowerName": { "$regex": csvRegex }}, sort=[("created", pymongo.DESCENDING)], ) if csvItems.count() >= 1: file = Item().childFiles(csvItems.next())[0] json_output = getTrackData(file) saveTracks(folder, json_output, user) csvItems.rewind() for item in csvItems: Item().move(item, auxiliary) return folder