Handle schemas and api versions in base class.
authorIvan Alejandro <ivanalejandro0@gmail.com>
Tue, 6 Aug 2013 21:20:59 +0000 (18:20 -0300)
committerIvan Alejandro <ivanalejandro0@gmail.com>
Wed, 7 Aug 2013 17:53:37 +0000 (14:53 -0300)
changes/common-code-to-base-config [new file with mode: 0644]
src/leap/common/config/baseconfig.py

diff --git a/changes/common-code-to-base-config b/changes/common-code-to-base-config
new file mode 100644 (file)
index 0000000..d4e7fc1
--- /dev/null
@@ -0,0 +1 @@
+  o Handle schemas and api versions in base class. Related to #3310.
index 7bf08dd..ba87df9 100644 (file)
@@ -61,13 +61,25 @@ class BaseConfig:
     def __init__(self):
         self._data = {}
         self._config_checker = None
+        self._api_version = None
 
     @abstractmethod
+    def _get_schema(self):
+        """
+        Returns the schema corresponding to the version given.
+
+        :rtype: dict or None if the version is not supported.
+        """
+        pass
+
     def _get_spec(self):
         """
         Returns the spec object for the specific configuration.
         """
-        return None
+        leap_assert(self._api_version is not None,
+                    "You should set the API version.")
+
+        return self._get_schema()
 
     def _safe_get_value(self, key):
         """
@@ -79,6 +91,17 @@ class BaseConfig:
         leap_assert(self._config_checker, "Load the config first")
         return self._config_checker.config.get(key, None)
 
+    def set_api_version(self, version):
+        """
+        Sets the supported api version.
+
+        :param api_version: the version of the api supported by the provider.
+        :type api_version: str
+        """
+        self._api_version = version
+        leap_assert(self._get_schema(self._api_version) is not None,
+                    "Version %s is not supported." % (version, ))
+
     def get_path_prefix(self):
         """
         Returns the platform dependant path prefixer