pvl.hosts: better reporting of ParseErrors (with filename:line), and implement down = ... setting
authorTero Marttila <terom@paivola.fi>
Mon, 17 Mar 2014 17:19:30 +0200
changeset 383 87b49aa52b3d
parent 382 ba47a64f61f9
child 384 caa3dbbdbe83
pvl.hosts: better reporting of ParseErrors (with filename:line), and implement down = ... setting
pvl/hosts.py
--- a/pvl/hosts.py	Mon Mar 17 15:52:42 2014 +0200
+++ b/pvl/hosts.py	Mon Mar 17 17:19:30 2014 +0200
@@ -100,6 +100,7 @@
     @classmethod
     def build (cls, options, host, domain,
             ip=None, ip6=None, owner=None, boot=None, alias=None, alias4=None, alias6=None, forward=None, reverse=None,
+            down=None,
             **extra) :
         """
             Return a Host from a config section's scalars.
@@ -167,6 +168,11 @@
             # omit
             reverse = False
        
+        if down :
+            down = True
+        else :
+            down = None
+        
         return cls(host,
                 domain      = domain,
                 ip          = ipaddr.IPv4Address(ip) if ip else None,
@@ -179,6 +185,7 @@
                 boot        = boot,
                 forward     = forward,
                 reverse     = reverse,
+                down        = down,
 
                 **extensions
         )
@@ -192,6 +199,7 @@
             boot=None,
             alias4=None, alias6=None,
             forward=None, reverse=None,
+            down=None,
             **extensions
     ) :
         """
@@ -206,6 +214,7 @@
             alias6      - list (CNAME -> AAAA)
             forward     - generate forward records, or CNAME into given zone
             reverse     - generate reverse records, or CNAME into given zone
+            down        - not online
         """
 
         self.host = host
@@ -220,6 +229,7 @@
         self.boot = boot
         self.forward = forward
         self.reverse = reverse
+        self.down = down
 
         self.extensions = extensions
 
@@ -310,14 +320,18 @@
         Load Hosts from a file.
 
     """
-
-    config = configobj.ConfigObj(file,
-            encoding    = options.hosts_charset,
-    )
     
     # use file basename as default
     path = file.name
     name = os.path.basename(path)
+
+    try :
+        config = configobj.ConfigObj(file,
+                encoding    = options.hosts_charset,
+        )
+    except configobj.ParseError as ex :
+        raise HostConfigError("%s:%d: %s" % (path, ex.line_number, ex))
+    
     
     return apply_hosts_config(options, path, name, config, parent=parent)