[svn] commit: r2532 - in /branches/trac284/src: bin/cmdctl/tests/cmdctl_test.py lib/config/testdata/spec28.spec lib/python/isc/config/cfgmgr.py lib/python/isc/config/module_spec.py lib/python/isc/config/tests/module_spec_test.py

BIND 10 source code commits bind10-changes at lists.isc.org
Mon Jul 19 09:33:15 UTC 2010


Author: jelte
Date: Mon Jul 19 09:33:15 2010
New Revision: 2532

Log:
addressed comments from trac review

Added:
    branches/trac284/src/lib/config/testdata/spec28.spec
Modified:
    branches/trac284/src/bin/cmdctl/tests/cmdctl_test.py
    branches/trac284/src/lib/python/isc/config/cfgmgr.py
    branches/trac284/src/lib/python/isc/config/module_spec.py
    branches/trac284/src/lib/python/isc/config/tests/module_spec_test.py

Modified: branches/trac284/src/bin/cmdctl/tests/cmdctl_test.py
==============================================================================
--- branches/trac284/src/bin/cmdctl/tests/cmdctl_test.py (original)
+++ branches/trac284/src/bin/cmdctl/tests/cmdctl_test.py Mon Jul 19 09:33:15 2010
@@ -17,6 +17,7 @@
 import unittest
 import socket
 import tempfile
+import sys
 from cmdctl import *
 
 SPEC_FILE_PATH = '..' + os.sep
@@ -279,7 +280,6 @@
         rcode, reply = self.handler._handle_post_request()
         self.assertEqual(http.client.BAD_REQUEST, rcode)
 
-import sys
 class MyCommandControl(CommandControl):
     def _get_modules_specification(self):
         return {}

Modified: branches/trac284/src/lib/python/isc/config/cfgmgr.py
==============================================================================
--- branches/trac284/src/lib/python/isc/config/cfgmgr.py (original)
+++ branches/trac284/src/lib/python/isc/config/cfgmgr.py Mon Jul 19 09:33:15 2010
@@ -22,7 +22,6 @@
 import isc
 import signal
 import ast
-import pprint
 import os
 import copy
 import tempfile
@@ -94,8 +93,6 @@
                                                dir=self.data_path,
                                                delete=False)
             filename = file.name
-            #pp = pprint.PrettyPrinter(indent=4)
-            #s = pp.pformat(self.data)
             file.write(json.dumps(self.data))
             file.write("\n")
             file.close()

Modified: branches/trac284/src/lib/python/isc/config/module_spec.py
==============================================================================
--- branches/trac284/src/lib/python/isc/config/module_spec.py (original)
+++ branches/trac284/src/lib/python/isc/config/module_spec.py Mon Jul 19 09:33:15 2010
@@ -22,6 +22,7 @@
 """
 
 import json
+import sys
 
 import isc.cc.data
 
@@ -34,27 +35,29 @@
        file"""
     pass
 
-import sys
 def module_spec_from_file(spec_file, check = True):
     """Returns a ModuleSpec object defined by the file at spec_file.
        If check is True, the contents are verified. If there is an error
-       in those contents, a ModuleSpecError is raised."""
+       in those contents, a ModuleSpecError is raised.
+       A ModuleSpecError is also raised if the file cannot be read, or
+       if it is not valid JSON."""
     module_spec = None
-    if hasattr(spec_file, 'read'):
-        
-        json_str = spec_file.read(-1)
-        module_spec = json.loads(json_str)
-    elif type(spec_file) == str:
-        file = open(spec_file)
-        json_str = file.read(-1)
-        try:
+    try:
+        if hasattr(spec_file, 'read'):
+            json_str = spec_file.read()
             module_spec = json.loads(json_str)
-        except Exception as err:
-            module_spec = {}
-        
-        file.close()
-    else:
-        raise ModuleSpecError("spec_file not a str or file-like object")
+        elif type(spec_file) == str:
+            file = open(spec_file)
+            json_str = file.read(-1)
+            module_spec = json.loads(json_str)
+            file.close()
+        else:
+            raise ModuleSpecError("spec_file not a str or file-like object")
+    except ValueError as ve:
+        raise ModuleSpecError("JSON parse error: " + str(ve))
+    except IOError as ioe:
+        raise ModuleSpecError("JSON read error: " + str(ioe))
+
     if 'module_spec' not in module_spec:
         raise ModuleSpecError("Data definition has no module_spec element")
 

Modified: branches/trac284/src/lib/python/isc/config/tests/module_spec_test.py
==============================================================================
--- branches/trac284/src/lib/python/isc/config/tests/module_spec_test.py (original)
+++ branches/trac284/src/lib/python/isc/config/tests/module_spec_test.py Mon Jul 19 09:33:15 2010
@@ -54,6 +54,13 @@
 
     def test_open_bad_file_obj(self):
         self.assertRaises(ModuleSpecError, isc.config.module_spec_from_file, 1)
+        # contains single quotes which json parser does not accept
+        
+        self.assertRaises(ModuleSpecError, isc.config.module_spec_from_file, self.spec_file("spec28.spec"), False)
+        my_spec_file = open(self.spec_file("spec28.spec"))
+        self.assertRaises(ModuleSpecError, isc.config.module_spec_from_file, my_spec_file, False)
+
+        self.assertRaises(ModuleSpecError, isc.config.module_spec_from_file, self.spec_file("does_not_exist"), False)
 
     def test_bad_specfiles(self):
         self.assertRaises(ModuleSpecError, self.read_spec_file, "spec3.spec")




More information about the bind10-changes mailing list