[core] Refactor engine
This is going to be a bit more comprehensive than anticipated. In order to cleanly refactor the core and the engine, basically start from scratch with the implementation. Goals: * Test coverage * Maintain backwards compatibility with module interface as much as possible (but still make modules easier to code) * Simplicity see #23
This commit is contained in:
parent
20858991b9
commit
a8a6c9bba2
72 changed files with 19 additions and 2155 deletions
|
@ -1,123 +1,19 @@
|
|||
import os
|
||||
import argparse
|
||||
import textwrap
|
||||
|
||||
import bumblebee.theme
|
||||
import bumblebee.module
|
||||
|
||||
class print_usage(argparse.Action):
|
||||
def __init__(self, option_strings, dest, nargs=None, **kwargs):
|
||||
argparse.Action.__init__(self, option_strings, dest, nargs, **kwargs)
|
||||
self._indent = " "*4
|
||||
|
||||
def __call__(self, parser, namespace, value, option_string=None):
|
||||
if value == "modules":
|
||||
self.print_modules()
|
||||
elif value == "themes":
|
||||
self.print_themes()
|
||||
else:
|
||||
parser.print_help()
|
||||
parser.exit()
|
||||
|
||||
def print_themes(self):
|
||||
print(textwrap.fill(", ".join(bumblebee.theme.themes()),
|
||||
80, initial_indent = self._indent, subsequent_indent = self._indent
|
||||
))
|
||||
|
||||
def print_modules(self):
|
||||
for m in bumblebee.module.modules():
|
||||
print(textwrap.fill("{}: {}".format(m.name(), m.description()),
|
||||
80, initial_indent=self._indent*2, subsequent_indent=self._indent*3))
|
||||
print("{}Parameters:".format(self._indent*2))
|
||||
for p in m.parameters():
|
||||
print(textwrap.fill("* {}".format(p),
|
||||
80, initial_indent=self._indent*3, subsequent_indent=self._indent*4))
|
||||
print("")
|
||||
|
||||
class ModuleConfig(object):
|
||||
def __init__(self, config, name, alias):
|
||||
self._prefix = alias if alias else name
|
||||
self._config = config
|
||||
|
||||
def prefix(self):
|
||||
return self._prefix
|
||||
|
||||
def set(self, name, value):
|
||||
name = self._prefix + name
|
||||
return self._config.set(name, value)
|
||||
|
||||
def parameter(self, name, default=None):
|
||||
name = self._prefix + name
|
||||
return self._config.parameter(name, default)
|
||||
|
||||
def increase(self, name, limit, default):
|
||||
name = self._prefix + name
|
||||
return self._config.increase(name, limit, default)
|
||||
MODULE_HELP = ""
|
||||
|
||||
class Config(object):
|
||||
def __init__(self, args):
|
||||
self._parser = self._parser()
|
||||
self._store = {}
|
||||
|
||||
if len(args) == 0:
|
||||
self._parser.print_help()
|
||||
self._parser.exit()
|
||||
|
||||
self._args = self._parser.parse_args(args)
|
||||
|
||||
for p in self._args.parameters:
|
||||
key, value = p.split("=")
|
||||
self.parameter(key, value)
|
||||
|
||||
def set(self, name, value):
|
||||
self._store[name] = value
|
||||
|
||||
def parameter(self, name, default=None):
|
||||
if not name in self._store:
|
||||
self.set(name, default)
|
||||
return self._store.get(name, default)
|
||||
|
||||
def increase(self, name, limit, default):
|
||||
if not name in self._store:
|
||||
self._store[name] = default
|
||||
return default
|
||||
|
||||
self._store[name] += 1
|
||||
if self._store[name] >= limit:
|
||||
self._store[name] = default
|
||||
return self._store[name]
|
||||
|
||||
def theme(self):
|
||||
return self._args.theme
|
||||
def __init__(self, args = []):
|
||||
parser = self._create_parser()
|
||||
self._args = parser.parse_args(args)
|
||||
|
||||
def modules(self):
|
||||
result = []
|
||||
for m in self._args.modules:
|
||||
items = m.split(":")
|
||||
result.append({ "name": items[0], "alias": items[1] if len(items) > 1 else None })
|
||||
return result
|
||||
return map(lambda x: { "name": x, "module": x }, self._args.modules)
|
||||
|
||||
def _parser(self):
|
||||
def _create_parser(self):
|
||||
parser = argparse.ArgumentParser(description="display system data in the i3bar")
|
||||
parser.add_argument("-m", "--modules", nargs="+",
|
||||
help="List of modules to load. The order of the list determines "
|
||||
"their order in the i3bar (from left to right)",
|
||||
default=[],
|
||||
)
|
||||
parser.add_argument("-l", "--list",
|
||||
help="List: 'modules', 'themes' ",
|
||||
choices = [ "modules", "themes" ],
|
||||
action=print_usage,
|
||||
)
|
||||
parser.add_argument("-p", "--parameters", nargs="+",
|
||||
help="Provide configuration parameters to individual modules.",
|
||||
default=[]
|
||||
)
|
||||
parser.add_argument("-t", "--theme", help="Specify which theme to use for "
|
||||
"drawing the modules",
|
||||
default="default",
|
||||
)
|
||||
|
||||
parser.add_argument("-m", "--modules", nargs="+", default = [],
|
||||
help = MODULE_HELP)
|
||||
return parser
|
||||
|
||||
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue