Mercurial > iscconf
changeset 7:49f94930365f
Handle lists of values
| author | Radomir Dopieralski <radomir.dopieralski@allegro.pl> |
|---|---|
| date | Tue, 26 Jun 2012 14:59:28 +0200 |
| parents | db918011f419 |
| children | 4f3edfb987c7 |
| files | iscconf/parser.py tests/test_dhcp.py |
| diffstat | 2 files changed, 25 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/iscconf/parser.py Tue Jun 26 14:52:22 2012 +0200 +++ b/iscconf/parser.py Tue Jun 26 14:59:28 2012 +0200 @@ -3,8 +3,8 @@ tokens = ( 'NAME', 'IPADDR', 'DOMAIN', 'MACADDR', - 'BRACE_OPEN', 'BRACE_CLOSE', 'SEMICOLON', - 'STRING', 'COMMENT', + 'BRACE_OPEN', 'BRACE_CLOSE', 'SEMICOLON', 'COMMA', + 'STRING' ) t_ignore = ' \t' @@ -15,6 +15,7 @@ t_BRACE_OPEN = r'{' t_BRACE_CLOSE = r'}' t_SEMICOLON = ';' +t_COMMA = ',' t_ignore_COMMENT = r'[#][^\n]*' @@ -57,6 +58,14 @@ ''' p[0] = p[1] +def p_value_list_start(p): + r'''value_list : value COMMA value''' + p[0] = [p[1], p[3]] + +def p_value_list(p): + r'''value_list : value_list COMMA value''' + p[0] = p[1] + [p[3]] + def p_key_part(p): r''' key_part : NAME @@ -78,6 +87,7 @@ def p_entry(p): r''' entry : key value SEMICOLON + | key value_list SEMICOLON | key block | key block SEMICOLON '''
--- a/tests/test_dhcp.py Tue Jun 26 14:52:22 2012 +0200 +++ b/tests/test_dhcp.py Tue Jun 26 14:59:28 2012 +0200 @@ -27,6 +27,19 @@ }, }) + def test_list(self): + data = iscconf.parse("""\ +host s10557.dc2 { + fixed-address 10.242.15.6, 127.0.0.1; + hardware ethernet 00:1b:78:cf:b3:90; +}""") + self.assertEqual(data, { + ('host', 's10557.dc2'): { + ('fixed-address',): ['10.242.15.6', '127.0.0.1'], + ('hardware', 'ethernet'): '00:1b:78:cf:b3:90', + }, + }) + def test_single_comments(self): data = iscconf.parse("""\ # comment
