From 602dfbb36eb28df29fac301174cdc97f51a5aaba Mon Sep 17 00:00:00 2001 From: Sophist Date: Sat, 29 Apr 2017 13:51:18 +0100 Subject: [PATCH] Add $lenmulti function --- picard/script.py | 18 ++++++++++++++++++ test/test_script.py | 15 +++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/picard/script.py b/picard/script.py index dd994642d..0b43e3f41 100644 --- a/picard/script.py +++ b/picard/script.py @@ -666,6 +666,23 @@ def func_len(parser, text=""): return string_(len(text)) +def func_lenmulti(parser, multi, separator=MULTI_VALUED_JOINER): + if (isinstance(multi, ScriptExpression) and + len(multi) == 1 and + isinstance(multi[0], ScriptVariable)): + multi = multi[0] + + if isinstance(multi, ScriptVariable): + if multi.name.startswith(u"_"): + name = u"~" + multi.name[1:] + else: + name = multi.name + return func_len(parser, parser.context.getall(name)) + + multi = multi.eval(parser) + return func_len(parser, multi.split(separator) if separator else [multi]) + + def func_performer(parser, pattern="", join=", "): values = [] for name, value in parser.context.items(): @@ -853,6 +870,7 @@ register_script_function(func_inmulti, "inmulti", eval_args=False) register_script_function(func_copy, "copy") register_script_function(func_copymerge, "copymerge") register_script_function(func_len, "len") +register_script_function(func_lenmulti, "lenmulti", eval_args=False) register_script_function(func_performer, "performer") register_script_function(func_matchedtracks, "matchedtracks") register_script_function(func_is_complete, "is_complete") diff --git a/test/test_script.py b/test/test_script.py index 9cc806906..d5761b92c 100644 --- a/test/test_script.py +++ b/test/test_script.py @@ -418,3 +418,18 @@ class ScriptParserTest(unittest.TestCase): self.parser.eval("$inmulti(%foo%,irst; Second; Thi)", context), "") self.assertEqual( self.parser.eval("$inmulti(%foo%,First; Second; Third)", context), "") + + def test_cmd_lenmulti(self): + context = Metadata() + context["foo"] = "First; Second; Third" + context["bar"] = ["First", "Second", "Third"] + self.assertEqual( + self.parser.eval("$len(%foo%)", context), "20") + self.assertEqual( + self.parser.eval("$len(%bar%)", context), "20") + self.assertEqual( + self.parser.eval("$lenmulti(%foo%)", context), "1") + self.assertEqual( + self.parser.eval("$lenmulti(%bar%)", context), "3") + self.assertEqual( + self.parser.eval("$lenmulti(%foo%.)", context), "3")