-#!/usr/bin/python
-#
# Copyright (C) 2014 Ipsilon project Contributors, for licensee see COPYING
from ipsilon.util.log import Log
+import json
class Config(Log):
return None
def _str_import_value(self, value):
- if type(value) is not str:
+ if not isinstance(value, str):
raise ValueError('Value must be string')
self._assigned_value = value
def __init__(self, name, description, default_list=None):
super(List, self).__init__(name, description)
if default_list:
- self._default_value = list(default_list)
+ self._default_value = default_list
+ else:
+ self._default_value = []
def set_value(self, value):
self._assigned_value = list(value)
return None
def import_value(self, value):
- if type(value) is not str:
+ if not isinstance(value, str):
raise ValueError('Value (type: %s) must be string' % type(value))
self._assigned_value = [x.strip() for x in value.split(',')]
+class ComplexList(List):
+
+ def _check_value(self, value):
+ if value is None:
+ return
+ if not isinstance(value, list):
+ raise ValueError('The value type must be a list, not "%s"' %
+ type(value))
+
+ def set_value(self, value):
+ self._check_value(value)
+ self._assigned_value = value
+
+ def export_value(self):
+ if self._assigned_value:
+ return json.dumps(self._assigned_value)
+ return None
+
+ def import_value(self, value):
+ if not isinstance(value, str):
+ raise ValueError('The value type must be a string, not "%s"' %
+ type(value))
+ jsonval = json.loads(value)
+ self.set_value(jsonval)
+
+
+class MappingList(ComplexList):
+
+ def _check_value(self, value):
+ if value is None:
+ return
+ if not isinstance(value, list):
+ raise ValueError('The value type must be a list, not "%s"' %
+ type(value))
+ for v in value:
+ if not isinstance(v, list):
+ raise ValueError('Each element must be a list, not "%s"' %
+ type(v))
+ if len(v) != 2:
+ raise ValueError('Each element must contain 2 values,'
+ ' not %d' % len(v))
+
+ def import_value(self, value):
+ if not isinstance(value, str):
+ raise ValueError('Value (type: %s) must be string' % type(value))
+ jsonval = json.loads(value)
+ self.set_value(jsonval)
+
+
class Choice(Option):
def __init__(self, name, description, allowed=None, default=None):
return '%s=%s' % (self.name, self.get_value())
def set_value(self, value):
- if type(value) is not list:
+ if not isinstance(value, list):
value = [value]
self._assigned_value = list()
for val in value:
self._assigned_value = None
def unset_value(self, value):
- if type(value) is str:
+ if isinstance(value, str):
value = [value]
unset = list()
for val in value:
def import_value(self, value):
self._assigned_value = value == 'True'
+
+
+class ConfigHelper(Log):
+
+ def __init__(self):
+ self._config = None
+
+ def new_config(self, name, *config_args):
+ self._config = Config(name, *config_args)
+
+ def get_config_obj(self):
+ if self._config is None:
+ raise AttributeError('Config not initialized')
+ return self._config
+
+ def import_config(self, config):
+ if not self._config:
+ raise AttributeError('Config not initialized, cannot import')
+
+ for key, value in config.iteritems():
+ if key in self._config:
+ self._config[key].import_value(str(value))
+
+ def export_config(self):
+ config = dict()
+ for name, option in self._config.iteritems():
+ config[name] = option.export_value()
+ return config
+
+ def get_config_value(self, name):
+ if not self._config:
+ raise AttributeError('Config not initialized')
+ return self._config[name].get_value()
+
+ def set_config_value(self, name, value):
+ if not self._config:
+ raise AttributeError('Config not initialized')
+ return self._config[name].set_value(value)