示例#1
0
def sync_sets(sets=[], targettids=()):
    tidexpr = Expr(Config["trackid"])
    targetcodec = Config["type"]
    if "," in targetcodec:
        allowedcodecs = targetcodec.split(",")
        targetcodec = allowedcodecs[0]
        allowedcodecs = set(allowedcodecs)
    else:
        allowedcodecs = set((targetcodec,))
    targetcodec = get_codec(targetcodec)
    postadd = {"type": targetcodec.type_, "ext": targetcodec.ext}
    dstdirs = set()
    onsplit = Config["onsplit"]
    newsets = []
    while sets:
        fileset = sets.pop()
        srcs = set(file.meta["dir"] for file in fileset)
        dsts = set(
            os.path.split(file.format(postadd=() if file.type_ in allowedcodecs else postadd))[0] for file in fileset
        )
        dsts = tuple(dsts)
        if onsplit == "abort":
            if len(dsts) > 1:
                fatal(
                    consoleformat=u"tracks in %(src)s would be placed in different target directories, aborting\nset onsplit to 'warn' or 'ignore' to proceed anyway",
                    format="split: {src:%(src)r",
                    src=srcs.pop(),
                    nologerror=1,
                )
            if len(srcs) > 1:
                fatal(
                    consoleformat=u"tracks in from directories %(src)s would be placed in target directory %(dst)r, aborting\nset onsplit to 'warn' or 'ignore' to proceed anyway",
                    format="split: %(src)r",
                    src=tuple(srcs),
                    dst=dsts[0],
                    nologerror=1,
                )
            if dsts[0] in dstdirs:
                fatal(
                    consoleformat=u"tracks in %(src)s would be placed in %(dst)s, which is already the target for other tracks, aborting\nset onsplit to 'warn' or 'ignore' to proceed anyway",
                    format="split: %(src)r",
                    src=tuple(srcs),
                    dst=dsts[0],
                    nologerror=1,
                )
        dstdirs.add(dsts[0])
        if any(file.meta.evaluate(tidexpr) not in targettids for file in fileset):
            newsets.append(fileset)
    sets = newsets
    if targetcodec.has_from_wav_pipe:
        task_generator = track_transcode_generator
    elif targetcodec.has_from_wav_multi:
        task_generator = album_transcode_generator
    reactor.suggestThreadPoolSize(max(len(alb) for alb in sets) * (2 + int(Config.get("jobs", cpu_count()))))
    PoolTask(task_generator(sets, targettids, allowedcodecs, targetcodec)).run()
    return
示例#2
0
def init_logs():
    global collector, logconsole, logfile
    if logconsole is None:
        logconsole = FilteredConsoleLogObserver(Config['consolelevel'])
        logconsole.start()

    if collector is None:
        collector = FilteredFileLogObserver(StringIO(), ERROR)
        collector.start()

    if logfile is None:
        logfile = FilteredFileLogObserver(Config.get('logfile', 'audiomangler-%d.log' % os.getpid()), get_level(Config['loglevel']))
        logfile.start()
示例#3
0
def fsdecode(string):
    return string.decode(Config['fs_encoding'], Config.get('fs_encoding_err', 'replace'))
示例#4
0
def fsencode(string):
    return string.encode(Config['fs_encoding'], Config.get('fs_encoding_err', 'underscorereplace'))
示例#5
0
 def __init__(self, tasks, **kwargs):
     self.max_tasks = kwargs.get('jobs') or int(Config.get('jobs', cpu_count()))
     tasks = iter(tasks)
     super(PoolTask, self).__init__(tasks)