Example #1
0
    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
Example #2
0
 def test_invalid(self):
     self.failUnlessEqual(util.pattern("<date"), "")
     util.pattern("<d\\")
Example #3
0
 def test_condition(self):
     self.failUnlessEqual(util.pattern("<~year|<~year> - <album>|<album>>"),
                          "Year - Album")
Example #4
0
 def test_tied(self):
     self.failUnlessEqual(util.pattern("<~title~album>"), "Title - Album")
Example #5
0
 def test_basic_nocap(self):
     self.failUnlessEqual(util.pattern("<title>", False), "title")
Example #6
0
 def test_empty(self):
     self.failUnlessEqual(util.pattern(""), "")
Example #7
0
 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
Example #8
0
 def test_unknown(self):
     self.failUnlessEqual(util.pattern("<foobarbaz>"), "Foobarbaz")
Example #9
0
 def test_internal(self):
     self.failUnlessEqual(util.pattern("<~plays>"), "Plays")
Example #10
0
 def test_tied(self):
     self.failUnlessEqual(util.pattern("<~title~album>"), "Title - Album")
Example #11
0
 def test_basic_nocap(self):
     self.failUnlessEqual(util.pattern("<title>", False), "title")
Example #12
0
 def test_basic(self):
     self.failUnlessEqual(util.pattern("<title>"), "Title")
Example #13
0
 def tag_title(tag):
     if tag.startswith("<"):
         return util.pattern(tag)
     return util.tag(tag)
Example #14
0
 def tag_title(tag: str):
     if "<" in tag:
         return util.pattern(tag)
     return util.tag(tag)
Example #15
0
 def test_condition(self):
     self.failUnlessEqual(util.pattern("<~year|<~year> - <album>|<album>>"),
                          "Year - Album")
Example #16
0
 def test_escape_condition(self):
     self.assertEqual(
         util.pattern(r"<~filename=/\/adsad\/sadads/|BLA|BLU>"), "BLU")
Example #17
0
 def test_escape(self):
     self.failUnlessEqual(util.pattern(r"\<i\><&>\</i\>", esc=True),
                          "<i>&amp;</i>")
Example #18
0
 def tag_title(tag):
     if "<" in tag:
         return util.pattern(tag)
     return util.tag(tag)
Example #19
0
 def test_invalid(self):
     self.failUnlessEqual(util.pattern("<date"), "")
     util.pattern("<d\\")
Example #20
0
 def tag_title(tag):
     if tag.startswith("<"):
         return util.pattern(tag)
     return util.tag(tag)
Example #21
0
 def test_complex_condition(self):
     self.assertEqual(util.pattern(r"<#(bitrate \> 150)|HQ|LQ>"), "LQ")
Example #22
0
 def test_basic(self):
     self.failUnlessEqual(util.pattern("<title>"), "Title")
Example #23
0
 def test_escape_condition(self):
     self.assertEqual(
         util.pattern(r"<~filename=/\/adsad\/sadads/|BLA|BLU>"), "BLU")
Example #24
0
 def test_internal(self):
     self.failUnlessEqual(util.pattern("<~plays>"), "Plays")
Example #25
0
 def _format_title(self, tag):
     return util.pattern(tag)
Example #26
0
 def test_unknown(self):
     self.failUnlessEqual(util.pattern("<foobarbaz>"), "Foobarbaz")
Example #27
0
 def test_empty(self):
     self.failUnlessEqual(util.pattern(""), "")
Example #28
0
 def test_escape(self):
     self.failUnlessEqual(util.pattern("\<i\><&>\</i\>", esc=True),
                         "<i>&amp;</i>")
Example #29
0
 def test_complex_condition(self):
     self.assertEqual(util.pattern("<#(bitrate \> 150)|HQ|LQ>"), "LQ")
Example #30
0
 def _format_title(self, tag):
     return util.pattern(tag)
Example #31
0
    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