[core/themes] Add theme loading
Load a theme from a JSON file.
This commit is contained in:
parent
c44744fa50
commit
2399cf9af1
4 changed files with 52 additions and 2 deletions
|
@ -8,4 +8,8 @@ class ModuleLoadError(BaseError):
|
||||||
"""Raised whenever loading a module fails"""
|
"""Raised whenever loading a module fails"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
class ThemeLoadError(BaseError):
|
||||||
|
"""Raised whenever loading a theme fails"""
|
||||||
|
pass
|
||||||
|
|
||||||
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
||||||
|
|
|
@ -1,7 +1,30 @@
|
||||||
"""Theme support"""
|
"""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):
|
class Theme(object):
|
||||||
"""Represents a collection of icons and colors"""
|
"""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
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
||||||
|
|
|
@ -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
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
||||||
|
|
1
themes/invalid.json
Normal file
1
themes/invalid.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
this is really not json
|
Loading…
Reference in a new issue