def subdir(self): subdir = self.store.subdir if subdir != None: subdir = fileutils.str2path(subdir) subdir = fileutils.ensureRelDirPath(subdir) return fileutils.cleanupPath(subdir) subdir = fileutils.str2filename(self.store.name) return fileutils.ensureDirPath(subdir)
def _resolveOutgoingAsIncomingHack(self, oldCustConfig, custData, profData): self.info("Trying to upgrade outgoing-as-incoming hack for customer '%s' profiles '%s'", custData.name, profData.name) oldInput = profData.inputDir profData.inputDir = None currOutput = self._getDir(custData, profData, 'outgoing') oldInput = fileutils.ensureRelDirPath(oldInput) currOutput = fileutils.ensureRelDirPath(currOutput) haveIdent = False for oldProf in oldCustConfig.profiles.values(): haveIdent = haveIdent or oldProf.mimeCopy if not haveIdent: identData = dataprops.TargetData() profData.targets["identity"] = identData identData.name = "identity" identData.type = TargetTypeEnum.identity if currOutput != oldInput: identData.outputDir = oldInput
def __init__(self, profCtx, targStore): base.BaseStoreContext.__init__(self, profCtx, targStore) self._variables.addVar("targetName", self.name) subdir = self.store.subdir or "" subdir = fileutils.str2path(subdir) subdir = fileutils.ensureRelDirPath(subdir) subdir = fileutils.cleanupPath(subdir) self._variables.addVar("targetSubdir", subdir) targPath = (fileutils.joinPath(self._variables["sourceDir"], subdir) + self._variables["sourceFile"]) self._variables.addFileVars(fileutils.ensureRelPath(targPath), "target", extension=self.extension)
def _getDir(self, custData, profData, kind="incoming"): middle, attr = {"incoming": ("incoming", "inputDir"), "outgoing": ("outgoing", "outputDir"), "links": ("links", "linkDir"), "errors": ("failed", "errorDir")}[kind] if getattr(profData, attr): return getattr(profData, attr) if getattr(custData, attr): result = getattr(custData, attr) elif custData.subdir: result = custData.subdir else: result = fileutils.str2filename(custData.name) result = fileutils.ensureRelDirPath(result) result = "%sfiles/%s/" % (result, middle) if profData.subdir: result = result + profData.subdir else: result = result + fileutils.str2filename(profData.name) return fileutils.cleanupPath(result)
def _upgradeTarget(self, oldTargConf, custData, profData, targData): targData.extension = oldTargConf.extension if not oldTargConf.appendExt: targData.outputFileTemplate = "%(targetDir)s%(sourceBasename)s%(targetExtension)s" if profData.enableLinkFiles: targData.linkFileTemplate = "%(targetDir)s%(sourceBasename)s.link" if oldTargConf.getRequest and not self._disableRequests: req = self._upgradeVariables(oldTargConf.getRequest) targData.notifyDoneRequests.append(req) if oldTargConf.videoencoder: if oldTargConf.audioencoder: targData.type = TargetTypeEnum.audiovideo self._upgradeAudioConfig(oldTargConf, targData.config) self._upgradeVideoConfig(oldTargConf, targData.config) self._upgradeAudioVideoConfig(oldTargConf, targData.config) else: targData.type = TargetTypeEnum.video self._upgradeVideoConfig(oldTargConf, targData.config) elif oldTargConf.audioencoder: targData.type = TargetTypeEnum.audio self._upgradeAudioConfig(oldTargConf, targData.config) else: targData.type = TargetTypeEnum.identity if oldTargConf.postprocess: m = self._thumbnailerCmdPattern.match(oldTargConf.postprocess) if not m: cmd = self._upgradeVariables(oldTargConf.postprocess) targData.postprocessCommand = cmd return thumbnailerVersion = m.group(1) thumbnailSize = m.group(2) outputPath = m.group(3) if thumbnailerVersion == '-indexer': targData.postprocessCommand = "flvtool2 -U %(workPath)s" elif thumbnailerVersion != '': self.warning("Unknown thumbnailer version " "'flumotion-thumbnailer%s.sh' " "used for postprocess of customer '%s' " "profile '%s' target '%s'", thumbnailerVersion, custData.name, profData.name, targData.name) self.debug("Creating data container of thumbnails target") thumbData = dataprops.TargetData() profData.targets["thumbnails"] = thumbData thumbData.name = "thumbnails" thumbData.type = TargetTypeEnum.thumbnails if not (outputPath == '%(outputRoot)s'): if not outputPath.startswith(self._rootDir): raise Exception("Invalid thumbnail output directory '%s'; " "not a sub-directory of '%s'" % (outputPath, self._rootDir)) targDir = outputPath[len(self._rootDir):] targDir = self._guessOverridenDir(targDir.strip('/'), custData, profData) targDir = fileutils.ensureRelDirPath(targDir) profDir = self._getDir(custData, profData, "outgoing") profDir = fileutils.ensureRelDirPath(profDir) if targDir != profDir: thumbData.outputDir = targDir if oldTargConf.appendExt: thumbData.outputFileTemplate = "%(targetPath)s" else: thumbData.outputFileTemplate = "%(targetDir)s%(sourceBasename)s%(targetExtension)s" thumbData.config.periodValue = 30 thumbData.config.periodUnit = PeriodUnitEnum.percent thumbData.config.maxCount = 1 if 'x' in thumbnailSize: width, height = map(int, thumbnailSize.split('x')) thumbData.config.thumbsWidth = width thumbData.config.thumbsHeight = height else: thumbData.config.thumbsWidth = int(thumbnailSize) if self._pngOutputPattern.match(oldTargConf.postprocess): thumbData.extension = "png" thumbData.config.format = ThumbOutputTypeEnum.png else: thumbData.extension = "jpg" thumbData.config.format = ThumbOutputTypeEnum.jpg
def _upgradeProfile(self, oldCustConf, custData, profData): # List all subdirs subdirs = {} for kind, path in (("incoming", oldCustConf.inputDir), ("outgoing", oldCustConf.outputDir), ("links", oldCustConf.linkDir), ("errors", oldCustConf.errorDir)): if not path: continue if not path.startswith(self._rootDir): raise Exception("Unsupported %s path '%s'; not a subdirectory of '%s'" % (kind, path, self._rootDir)) subdirs[kind] = (path,) + self._extractSubdirs(path) # Count the used customer and profile subdirs custSubdirs = {} profSubdirs = {} for kind, (path, custSubdir, middle, profSubdir) in subdirs.items(): custSubdirs[custSubdir] = custSubdirs.setdefault(custSubdir, 0) + 1 profSubdirs[profSubdir] = profSubdirs.setdefault(profSubdir, 0) + 1 # Choose the most used subdirs k = custSubdirs.keys() k.sort(key=custSubdirs.get) custSubdir = k[-1] k = profSubdirs.keys() k.sort(key=profSubdirs.get) profSubdir = k[-1] if (not profSubdir) and ('/' in custSubdir): profSubdir = custSubdir[custSubdir.rindex('/') + 1:] custSubdir = custSubdir[:custSubdir.rindex('/')] # Arbitrary use the first profile to set the customer subdir if not custData.subdir: custData.subdir = custSubdir or "." profData.subdir = profSubdir or "." # Now check every path if they comply with the subdirs for kind, attr in (("incoming", "inputDir"), ("outgoing", "outputDir"), ("links", "linkDir"), ("errors", "failedDir")): if not (kind in subdirs): continue path, csd, middle, psd = subdirs[kind] if (csd != custSubdir) or (psd != profSubdir) or (middle != kind): dir = path[len(self._rootDir):].strip('/') override = self._guessOverridenDir(dir, custData, profData) setattr(profData, attr, fileutils.ensureRelDirPath(override)) profData.linkURLPrefix = oldCustConf.urlPrefix if oldCustConf.urlPrefix and oldCustConf.linkDir: profData.enableLinkFiles = True if oldCustConf.priority != 50: profData.transcodingPriority = oldCustConf.priority if oldCustConf.timeout != 30: profData.monitoringPeriod = oldCustConf.timeout if oldCustConf.ppTimeout != 60: profData.monitoringPeriod = oldCustConf.ppTimeout if oldCustConf.transTimeout != 30: profData.transcodingTimeout = oldCustConf.transTimeout if oldCustConf.getRequest and not self._disableRequests: req = self._upgradeVariables(oldCustConf.getRequest) profData.notifyDoneRequests.append(req) if oldCustConf.errGetRequest and not self._disableRequests: req = self._upgradeVariables(oldCustConf.errGetRequest) profData.notifyFailedRequests.append(req) if oldCustConf.errMail: mail = self._changeMail or oldCustConf.errMail profData.notifyFailedMailRecipients = mail for targName, oldTargConf in oldCustConf.profiles.items(): if targName in profData.targets: self.warning("Duplicated target '%s'", targName) continue self.debug("Creating data container of target '%s'", targName) targData = dataprops.TargetData() profData.targets[targName] = targData targData.name = targName try: self._upgradeTarget(oldTargConf, custData, profData, targData) except Exception, e: self.warning("Fail to upgrade target '%s' for profile '%s' " "of customer '%s': %s", targName, profData.name, custData.name, str(e)) del profData.targets[targName]