summaryrefslogtreecommitdiffstats
path: root/pyload/config/convert.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyload/config/convert.py')
-rw-r--r--pyload/config/convert.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/pyload/config/convert.py b/pyload/config/convert.py
new file mode 100644
index 000000000..59f814020
--- /dev/null
+++ b/pyload/config/convert.py
@@ -0,0 +1,68 @@
+# -*- coding: utf-8 -*-
+
+from gettext import gettext
+
+from new_collections import namedtuple
+
+from pyload.Api import Input, InputType
+from pyload.utils import decode, to_bool
+
+ConfigData = namedtuple("ConfigData", "label description input")
+
+# Maps old config formats to new values
+input_dict = {
+ "int": InputType.Int,
+ "bool": InputType.Bool,
+ "time": InputType.Time,
+ "file": InputType.File,
+ "list": InputType.List,
+ "folder": InputType.Folder
+}
+
+
+def to_input(typ):
+ """ Converts old config format to input type"""
+ return input_dict.get(typ, InputType.Text)
+
+
+def to_configdata(entry):
+ if len(entry) != 4:
+ raise ValueError("Config entry must be of length 4")
+
+ # Values can have different roles depending on the two config formats
+ conf_name, type_label, label_desc, default_input = entry
+
+ # name, label, desc, input
+ if isinstance(default_input, Input):
+ _input = default_input
+ conf_label = type_label
+ conf_desc = label_desc
+ # name, type, label, default
+ else:
+ _input = Input(to_input(type_label))
+ _input.default_value = from_string(default_input, _input.type)
+ conf_label = label_desc
+ conf_desc = ""
+
+ return conf_name, ConfigData(gettext(conf_label), gettext(conf_desc), _input)
+
+
+def from_string(value, typ=None):
+ """ cast value to given type, unicode for strings """
+
+ # value is no string
+ if not isinstance(value, basestring):
+ return value
+
+ value = decode(value)
+
+ if typ == InputType.Int:
+ return int(value)
+ elif typ == InputType.Bool:
+ return to_bool(value)
+ elif typ == InputType.Time:
+ if not value: value = "0:00"
+ if not ":" in value: value += ":00"
+ return value
+ else:
+ return value \ No newline at end of file