Check if schema exists before load a config.
authorIvan Alejandro <ivanalejandro0@gmail.com>
Tue, 6 Aug 2013 14:55:44 +0000 (11:55 -0300)
committerIvan Alejandro <ivanalejandro0@gmail.com>
Tue, 6 Aug 2013 14:59:08 +0000 (11:59 -0300)
Related to #3310.

changes/check-if-schema-exists [new file with mode: 0644]
src/leap/common/config/baseconfig.py

diff --git a/changes/check-if-schema-exists b/changes/check-if-schema-exists
new file mode 100644 (file)
index 0000000..1459112
--- /dev/null
@@ -0,0 +1 @@
+  o Check if schema exists before load a config. Related to #3310.
index 699d734..7bf08dd 100644 (file)
@@ -26,7 +26,7 @@ import os
 
 from abc import ABCMeta, abstractmethod
 
-from leap.common.check import leap_assert
+from leap.common.check import leap_assert, leap_check
 from leap.common.files import mkdir_p
 from leap.common.config.pluggableconfig import PluggableConfig
 from leap.common.config.prefixers import get_platform_prefixer
@@ -34,6 +34,12 @@ from leap.common.config.prefixers import get_platform_prefixer
 logger = logging.getLogger(__name__)
 
 
+class NonExistingSchema(Exception):
+    """
+    Raised if the schema needed to verify the config is None.
+    """
+
+
 class BaseConfig:
     """
     Abstract base class for any JSON based configuration.
@@ -112,6 +118,7 @@ class BaseConfig:
     def load(self, path="", data=None, mtime=None, relative=True):
         """
         Loads the configuration from disk.
+        It may raise NonExistingSchema exception.
 
         :param path: if relative=True, this is a relative path
                      to configuration. The absolute path
@@ -131,8 +138,12 @@ class BaseConfig:
         else:
             config_path = path
 
+        schema = self._get_spec()
+        leap_check(schema is not None,
+                   "There is no schema to use.", NonExistingSchema)
+
         self._config_checker = PluggableConfig(format="json")
-        self._config_checker.options = copy.deepcopy(self._get_spec())
+        self._config_checker.options = copy.deepcopy(schema)
 
         try:
             if data is None: