[core/themes] Add theme loading

Load a theme from a JSON file.
This commit is contained in:
Tobi-wan Kenobi 2016-12-08 09:44:05 +01:00
parent c44744fa50
commit 2399cf9af1
4 changed files with 52 additions and 2 deletions

View file

@ -8,4 +8,8 @@ class ModuleLoadError(BaseError):
"""Raised whenever loading a module fails"""
pass
class ThemeLoadError(BaseError):
"""Raised whenever loading a theme fails"""
pass
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

View file

@ -1,7 +1,30 @@
"""Theme support"""
import os
import json
import bumblebee.error
def theme_path():
"""Return the path of the theme directory"""
return os.path.dirname("{}/../themes/".format(os.path.dirname(os.path.realpath(__file__))))
class Theme(object):
"""Represents a collection of icons and colors"""
pass
def __init__(self, name):
self._theme = self.load(name)
def load(self, name):
"""Load and parse a theme file"""
path = theme_path()
themefile = "{}/{}.json".format(path, name)
if os.path.isfile(themefile):
try:
with open(themefile) as data:
return json.load(data)
except ValueError as exception:
raise bumblebee.error.ThemeLoadError("JSON error: {}".format(exception))
else:
raise bumblebee.error.ThemeLoadError("no such theme: {}".format(name))
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

View file

@ -1,3 +1,25 @@
# pylint: disable=C0103,C0111
# pylint: disable=C0103,C0111,W0703
import unittest
from bumblebee.theme import Theme
from bumblebee.error import ThemeLoadError
class TestTheme(unittest.TestCase):
def setUp(self):
pass
def test_load_valid_theme(self):
try:
Theme("solarized-powerline")
except Exception as e:
self.fail(e)
def test_load_nonexistent_theme(self):
with self.assertRaises(ThemeLoadError):
Theme("no-such-theme")
def test_load_invalid_theme(self):
with self.assertRaises(ThemeLoadError):
Theme("invalid")
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

1
themes/invalid.json Normal file
View file

@ -0,0 +1 @@
this is really not json