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 ""
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 ""
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 ""
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, '')
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 ""
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))
def func_copy(parser, new, old): new = normalize_tagname(new) old = normalize_tagname(old) parser.context[new] = parser.context.getall(old)[:] return ""
def func_get(parser, name): """Returns the variable ``name`` (equivalent to ``%name%``).""" return parser.context.get(normalize_tagname(name), "")
def func_set(parser, name, value): if value: parser.context[normalize_tagname(name)] = value else: func_unset(parser, name) return ""
def func_delete(parser, name): parser.context.delete(normalize_tagname(name)) return ""