From 6af8b4b0905fea13a80c54cf8a47f8008acca035 Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Mon, 1 Apr 2013 14:02:28 +0200 Subject: [PATCH] config: Add LogLevel ConfigValue and tests. --- mopidy/utils/config.py | 17 +++++++++++++++++ tests/utils/config_test.py | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/mopidy/utils/config.py b/mopidy/utils/config.py index a1a91b88..0d6eb928 100644 --- a/mopidy/utils/config.py +++ b/mopidy/utils/config.py @@ -1,5 +1,6 @@ from __future__ import unicode_literals +import logging import re @@ -122,3 +123,19 @@ class List(ConfigValue): def serialize(self, value): return '\n '.join(value) + + +class LogLevel(ConfigValue): + levels = {'critical' : logging.CRITICAL, + 'error' : logging.ERROR, + 'warning' : logging.WARNING, + 'info' : logging.INFO, + 'debug' : logging.DEBUG} + + def deserialize(self, value): + if value.lower() not in self.levels: + raise ValueError('%r must be one of %s.' % (value, ', '.join(self.levels))) + return self.levels.get(value.lower()) + + def serialize(self, value): + return dict((v, k) for k, v in self.levels.items()).get(value) diff --git a/tests/utils/config_test.py b/tests/utils/config_test.py index bcc80561..e7583cfb 100644 --- a/tests/utils/config_test.py +++ b/tests/utils/config_test.py @@ -1,5 +1,7 @@ from __future__ import unicode_literals +import logging + from mopidy.utils import config from tests import unittest @@ -192,3 +194,34 @@ class ListTest(unittest.TestCase): value = config.List() self.assertRegexpMatches(value.serialize(['foo', 'bar', 'baz']), r'foo\n\s*bar\n\s*baz') + + +class BooleanTest(unittest.TestCase): + levels = {'critical' : logging.CRITICAL, + 'error' : logging.ERROR, + 'warning' : logging.WARNING, + 'info' : logging.INFO, + 'debug' : logging.DEBUG} + + def test_deserialize_converts_to_numeric_loglevel(self): + value = config.LogLevel() + for name, level in self.levels.items(): + self.assertEqual(level, value.deserialize(name)) + self.assertEqual(level, value.deserialize(name.upper())) + self.assertEqual(level, value.deserialize(name.capitalize())) + + def test_deserialize_fails_on_bad_data(self): + value = config.LogLevel() + with self.assertRaises(ValueError): + value.deserialize('nope') + with self.assertRaises(ValueError): + value.deserialize('sure') + + def test_serialize_converts_to_string(self): + value = config.LogLevel() + for name, level in self.levels.items(): + self.assertEqual(name, value.serialize(level)) + + def test_serialize_unknown_level(self): + value = config.LogLevel() + self.assertIsNone(value.serialize(1337))