Esempio n. 1
0
 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)
Esempio n. 2
0
 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
Esempio n. 3
0
 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)
Esempio n. 4
0
 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)
Esempio n. 5
0
 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
Esempio n. 6
0
    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]