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