示例#1
0
def func_copymerge(parser, new, old):
    new = normalize_tagname(new)
    old = normalize_tagname(old)
    newvals = parser.context.getall(new)
    oldvals = parser.context.getall(old)
    parser.context[new] = uniqify(newvals + oldvals)
    return ""
示例#2
0
def func_copymerge(parser, new, old, keep_duplicates=False):
    new = normalize_tagname(new)
    old = normalize_tagname(old)
    newvals = parser.context.getall(new)
    oldvals = parser.context.getall(old)
    parser.context[new] = newvals + oldvals if keep_duplicates else uniqify(
        newvals + oldvals)
    return ""
示例#3
0
def func_cleanmulti(parser, multi):
    name = normalize_tagname(multi)
    values = [
        str(value) for value in parser.context.getall(name)
        if value or value == 0
    ]
    parser.context[multi] = values
    return ""
示例#4
0
def aggregate_release_tags(parser, name, aggregate_func, multi=False):
    name = normalize_tagname(name)
    file = parser.file
    if file:
        iter_func = iter_release_values_multi if multi else iter_release_values
        return aggregate_func(iter_func(name, file))
    else:  # Nothing to aggregate, return base value
        return parser.context.get(name, '')
示例#5
0
def func_unset(parser, name):
    name = normalize_tagname(name)
    # Allow wild-card unset for certain keys
    if name in ('performer:*', 'comment:*', 'lyrics:*'):
        name = name[:-1]
        for key in list(parser.context.keys()):
            if key.startswith(name):
                parser.context.unset(key)
        return ""
    parser.context.unset(name)
    return ""
示例#6
0
 def _parse(self, expression):
     self._group_map = OrderedDict()
     format_re = ['(?:^|/)']
     for i, part in enumerate(self._tag_re.split(expression)):
         if part.startswith('%') and part.endswith('%'):
             name = part[1:-1]
             group = '%s_%i' % (name, i)
             tag = normalize_tagname(name)
             self._group_map[group] = tag
             if tag in self._numeric_tags:
                 format_re.append(r'(?P<' + group + r'>\d+)')
             elif tag == 'date':
                 format_re.append(r'(?P<' + group + r'>\d+(?:-\d+(?:-\d+)?)?)')
             else:
                 format_re.append(r'(?P<' + group + r'>[^/]*?)')
         else:
             format_re.append(re.escape(part))
     # Optional extension
     format_re.append(r'(?:\.\w+)?$')
     self._format_re = re.compile("".join(format_re))
示例#7
0
def func_copy(parser, new, old):
    new = normalize_tagname(new)
    old = normalize_tagname(old)
    parser.context[new] = parser.context.getall(old)[:]
    return ""
示例#8
0
def func_get(parser, name):
    """Returns the variable ``name`` (equivalent to ``%name%``)."""
    return parser.context.get(normalize_tagname(name), "")
示例#9
0
def func_set(parser, name, value):
    if value:
        parser.context[normalize_tagname(name)] = value
    else:
        func_unset(parser, name)
    return ""
示例#10
0
def func_delete(parser, name):
    parser.context.delete(normalize_tagname(name))
    return ""