def testMacroArgs(self): abcd = ['a', 'b', 'c', 'd'] abcd_dict = {'a': '1', 'b': '2', 'c': '3', 'd': '4'} tests = [ # regular and quoting tests ('d = 4,c=3,b=2,a= 1 ', ([], abcd_dict, [])), ('a,b,c,d', (abcd, {}, [])), (' a , b , c , d ', (abcd, {}, [])), (' a ', (['a'], {}, [])), ('" a "', ([' a '], {}, [])), ('a,b,c,d, "a,b,c,d"', (abcd + ['a,b,c,d'], {}, [])), ('quote " :), b', (['quote " :)', 'b'], {}, [])), ('"quote "" :)", b', (['quote " :)', 'b'], {}, [])), ('=7', ([], {'': '7'}, [])), (',,', ([None, None, None], {}, [])), (',"",', ([None, '', None], {}, [])), (',"", ""', ([None, '', ''], {}, [])), (' "" ,"", ""', (['', '', ''], {}, [])), # some name=value test ('d = 4,c=3,b=2,a= 1 ', ([], abcd_dict, [])), ('d=d,e="a,b,c,d"', ([], {'d': 'd', 'e': 'a,b,c,d'}, [])), ('d = d,e = "a,b,c,d"', ([], {'d': 'd', 'e': 'a,b,c,d'}, [])), ('d = d, e = "a,b,c,d"', ([], {'d': 'd', 'e': 'a,b,c,d'}, [])), ('d = , e = "a,b,c,d"', ([], {'d': None, 'e': 'a,b,c,d'}, [])), ('d = "", e = "a,b,c,d"', ([], {'d': '', 'e': 'a,b,c,d'}, [])), ('d = "", e = ', ([], {'d': '', 'e': None}, [])), ('d=""', ([], {'d': ''}, [])), ('d = "", e = ""', ([], {'d': '', 'e': ''}, [])), # no, None as key isn't accepted (' = "", e = ""', ([], {'': '', 'e': ''}, [])), # can quote both name and value: ('d = d," e "= "a,b,c,d"', ([], {'d': 'd', ' e ': 'a,b,c,d'}, [])), # trailing args ('1,2,a=b,3,4', (['1', '2'], {'a': 'b'}, ['3', '4'])), # can quote quotes: ('d = """d"', ([], {'d': '"d'}, [])), ('d = """d"""', ([], {'d': '"d"'}, [])), ('d = "d"" ", e=7', ([], {'d': 'd" ', 'e': '7'}, [])), ('d = "d""", e=8', ([], {'d': 'd"', 'e': '8'}, [])), ] for args, expected in tests: result = paramparser.parse_quoted_separated(args) assert expected == result for val in result[0]: assert val is None or isinstance(val, str) for val in result[1].keys(): assert val is None or isinstance(val, str) for val in result[1].values(): assert val is None or isinstance(val, str) for val in result[2]: assert val is None or isinstance(val, str)
def parseargs(args, defpagename, defyear, defmonth, defoffset, defheight6, defanniversary): """ parse macro arguments """ _, args, _ = paramparser.parse_quoted_separated(args) parmpagename = paramparser.get_str(args.get('item'), 'item', defpagename) parmyear = paramparser.get_int(args.get('year'), 'year', defyear) parmmonth = paramparser.get_int(args.get('month'), 'month', defmonth) parmoffset = paramparser.get_int(args.get('month_offset'), 'month_offset', defoffset) parmheight6 = paramparser.get_bool(args.get('fixed_height'), 'fixed_height', defheight6) parmanniversary = paramparser.get_bool(args.get('anniversary'), 'anniversary', defanniversary) # multiple pagenames separated by "*" - split into list of pagenames parmpagename = re.split(r'\*', parmpagename) return parmpagename, parmyear, parmmonth, parmoffset, parmheight6, parmanniversary
def testLimited(self): tests = [ # regular and quoting tests ('d = 4,c=3,b=2,a= 1 ', ([], {'d': '4', 'c': '3,b=2,a= 1'}, [])), ('a,b,c,d', (['a', 'b,c,d'], {}, [])), ('a=b,b,c,d', ([], {'a': 'b'}, ['b,c,d'])), ] for args, expected in tests: result = paramparser.parse_quoted_separated(args, seplimit=1) assert expected == result for val in result[0]: assert val is None or isinstance(val, str) for val in result[1].keys(): assert val is None or isinstance(val, str) for val in result[1].values(): assert val is None or isinstance(val, str) for val in result[2]: assert val is None or isinstance(val, str)
def testNoNameValue(self): abcd = ['a', 'b', 'c', 'd'] tests = [ # regular and quoting tests ('d = 4,c=3,b=2,a= 1 ', ['d = 4', 'c=3', 'b=2', 'a= 1']), ('a,b,c,d', abcd), (' a , b , c , d ', abcd), (' a ', ['a']), ('" a "', [' a ']), ('a,b,c,d, "a,b,c,d"', abcd + ['a,b,c,d']), ('quote " :), b', ['quote " :)', 'b']), ('"quote "" :)", b', ['quote " :)', 'b']), ('"unended quote', ['"unended quote']), ('"', ['"']), ('d=d,e="a,b,c,d"', ['d=d', 'e="a', 'b', 'c', 'd"']), ] for args, expected in tests: result = paramparser.parse_quoted_separated(args, name_value=False) assert expected == result for val in result: assert val is None or isinstance(val, str)
def parseargs_legacy(args, defpagename, defyear, defmonth, defoffset, defoffset2, defheight6, defanniversary, deftemplate): """ Slightly modified parsing function from MonthCalendar.py in moin-1.9 From the moin-1.9 version of the function * the request argument was dropped * get_unicode was changed to get_str """ args = paramparser.parse_quoted_separated(args, name_value=False) args += [None] * 8 # fill up with None to trigger defaults parmpagename, parmyear, parmmonth, parmoffset, parmoffset2, parmheight6, parmanniversary, parmtemplate = args[: 8] parmpagename = paramparser.get_str(parmpagename, 'pagename', defpagename) parmyear = paramparser.get_int(parmyear, 'year', defyear) parmmonth = paramparser.get_int(parmmonth, 'month', defmonth) parmoffset = paramparser.get_int(parmoffset, 'offset', defoffset) parmoffset2 = paramparser.get_int(parmoffset2, 'offset2', defoffset2) parmheight6 = paramparser.get_bool(parmheight6, 'height6', defheight6) parmanniversary = paramparser.get_bool(parmanniversary, 'anniversary', defanniversary) parmtemplate = paramparser.get_str(parmtemplate, 'template', deftemplate) return parmpagename, parmyear, parmmonth, parmoffset, parmoffset2, parmheight6, parmanniversary, parmtemplate
def testDoubleNameValueSeparator(self, args, expected): result = paramparser.parse_quoted_separated(args) assert result == expected