def __init__(self, row_pattern): parts = re.split(r"(?<!\\):", row_pattern) parts = list(map(lambda p: p.replace(r"\:", ":"), parts)) is_numeric = lambda s: s[:2] == "~#" and "~" not in s[2:] is_pattern = lambda s: '<' in s f_round = lambda s: (isinstance(s, float) and "%.2f" % s) or s disp = (len(parts) >= 2 and parts[1]) or r"[i](<~#tracks>)[/i]" cat = parts[0] if is_pattern(cat): title = util.pattern(cat, esc=True, markup=True) try: pc = XMLFromPattern(cat) except ValueError: pc = XMLFromPattern("") tags = pc.tags format = pc.format_list has_markup = True else: title = util.tag(cat) tags = util.tagsplit(cat) has_markup = False if is_numeric(cat): def format(song): v = text_type(f_round(song(cat))) return [(v, v)] else: format = lambda song: song.list_separate(cat) if is_pattern(disp): try: pd = XMLFromPattern(disp) except ValueError: pd = XMLFromPattern("") format_display = pd.format else: if is_numeric(disp): format_display = lambda coll: text_type(f_round(coll(disp))) else: format_display = lambda coll: util.escape(coll.comma(disp)) self.title = title self.tags = set(tags) self.format = format self.format_display = format_display self.has_markup = has_markup
def test_invalid(self): self.failUnlessEqual(util.pattern("<date"), "") util.pattern("<d\\")
def test_condition(self): self.failUnlessEqual(util.pattern("<~year|<~year> - <album>|<album>>"), "Year - Album")
def test_tied(self): self.failUnlessEqual(util.pattern("<~title~album>"), "Title - Album")
def test_basic_nocap(self): self.failUnlessEqual(util.pattern("<title>", False), "title")
def test_empty(self): self.failUnlessEqual(util.pattern(""), "")
def __init__(self, pattern): super(SongList.PatternColumn, self).__init__(util.pattern(pattern)) self.header_name = pattern self._pattern = None try: self._pattern = Pattern(pattern) except ValueError: pass
def test_unknown(self): self.failUnlessEqual(util.pattern("<foobarbaz>"), "Foobarbaz")
def test_internal(self): self.failUnlessEqual(util.pattern("<~plays>"), "Plays")
def test_basic(self): self.failUnlessEqual(util.pattern("<title>"), "Title")
def tag_title(tag): if tag.startswith("<"): return util.pattern(tag) return util.tag(tag)
def tag_title(tag: str): if "<" in tag: return util.pattern(tag) return util.tag(tag)
def test_escape_condition(self): self.assertEqual( util.pattern(r"<~filename=/\/adsad\/sadads/|BLA|BLU>"), "BLU")
def test_escape(self): self.failUnlessEqual(util.pattern(r"\<i\><&>\</i\>", esc=True), "<i>&</i>")
def tag_title(tag): if "<" in tag: return util.pattern(tag) return util.tag(tag)
def test_complex_condition(self): self.assertEqual(util.pattern(r"<#(bitrate \> 150)|HQ|LQ>"), "LQ")
def _format_title(self, tag): return util.pattern(tag)
def test_escape(self): self.failUnlessEqual(util.pattern("\<i\><&>\</i\>", esc=True), "<i>&</i>")
def test_complex_condition(self): self.assertEqual(util.pattern("<#(bitrate \> 150)|HQ|LQ>"), "LQ")
def __init__(self, row_pattern): parts = [ p.replace(r"\:", ":") for p in (re.split(r"(?<!\\):", row_pattern)) ] is_numeric = lambda s: s[:2] == "~#" and "~" not in s[2:] is_pattern = lambda s: '<' in s f_round = lambda s: (isinstance(s, float) and "%.2f" % s) or s def is_date(s): return s in TIME_TAGS disp = parts[1] if len(parts) >= 2 else r"[i](<~#tracks>)[/i]" cat = parts[0] if is_pattern(cat): title = util.pattern(cat, esc=True, markup=True) try: pc = XMLFromPattern(cat) except ValueError: pc = XMLFromPattern("") tags = pc.tags format = pc.format_list has_markup = True else: title = util.tag(cat) tags = util.tagsplit(cat) has_markup = False if is_date(cat): def format(song: AudioFile) -> List[Tuple[Text, Text]]: fmt = config.gettext("settings", "datecolumn_timestamp_format") date_str = format_date(song(cat), fmt) return [(date_str, date_str)] elif is_numeric(cat): def format(song: AudioFile) -> List[Tuple[Text, Text]]: v = str(f_round(song(cat))) return [(v, v)] else: def format(song: AudioFile) -> List[Tuple[Text, Text]]: return song.list_separate(cat) if is_pattern(disp): try: pd = XMLFromPattern(disp) except ValueError: pd = XMLFromPattern("") format_display = pd.format else: if is_numeric(disp): format_display = lambda coll: str(f_round(coll(disp))) else: format_display = lambda coll: util.escape(coll.comma(disp)) self.title = title self.tags = set(tags) self.format = format self.format_display = format_display self.has_markup = has_markup