flying-sheep via GS

This commit is contained in:
enkore 2013-02-23 21:05:27 +01:00
parent c96410e92d
commit 3f46ab24c6
2 changed files with 18 additions and 33 deletions

View File

@ -37,15 +37,19 @@ as you like.
### batterychecker
This class uses the /proc/acpi/battery interface to check for the
battery status
* battery_ident — (default: BAT0)
### clock
This class shows a clock
* format — stftime format string
### mail
@ -57,9 +61,11 @@ This class shows a clock
### modsde
This class returns i3status parsable output of the number of
unread posts in any bookmark in the mods.de forums.
* format — Use {unread} as the formatter for number of unread posts (default: {unread} new posts in bookmarks)
* offset — subtract number of posts before output
* color — (default: #7181fe)
@ -68,8 +74,10 @@ unread posts in any bookmark in the mods.de forums.
### regex
Simple regex file watcher
* format — format string used for output (default: {0})
* regex — (required)
* file — file to search for regex matches

View File

@ -4,6 +4,7 @@ import sys
import io
import pkgutil
from collections import namedtuple
import textwrap
import i3pystatus
@ -15,31 +16,6 @@ MODULE_FORMAT = """
{settings}\n"""
def trim(docstring):
if not docstring:
return ''
# Convert tabs to spaces (following the normal Python rules)
# and split into a list of lines:
lines = docstring.expandtabs().splitlines()
# Determine minimum indentation (first line doesn't count):
indent = sys.maxsize
for line in lines[1:]:
stripped = line.lstrip()
if stripped:
indent = min(indent, len(line) - len(stripped))
# Remove indentation (first line is special):
trimmed = [lines[0].strip()]
if indent < sys.maxsize:
for line in lines[1:]:
trimmed.append(line[indent:].rstrip())
# Strip off trailing and leading blank lines:
while trimmed and not trimmed[-1]:
trimmed.pop()
while trimmed and not trimmed[0]:
trimmed.pop(0)
# Return a single string:
return '\n'.join(trimmed)
class Module:
name = ""
doc = ""
@ -53,11 +29,12 @@ class Module:
else:
self.name = "{module}.{cls}".format(module=module_name, cls=self.cls.__name__)
if hasattr(self.cls, "__doc__"):
if self.cls.__doc__ is not None:
self.doc = self.cls.__doc__
elif hasattr(module, "__doc__"):
elif module.__doc__ is not None:
self.doc = module.__doc__
else:
self.doc = ""
self.get_settings()
def get_settings(self):
@ -65,12 +42,12 @@ class Module:
self.settings.append(Setting(self, setting))
def format_settings(self):
return "\n".join(map(lambda setting: setting.format(), self.settings))
return "\n".join(map(str, self.settings))
def format(self):
def __str__(self):
return MODULE_FORMAT.format(
name=self.name,
doc=trim(self.doc),
doc=textwrap.dedent(self.doc),
settings=self.format_settings(),
)
@ -92,7 +69,7 @@ class Setting:
elif hasattr(mod.cls, self.name):
self.default = getattr(mod.cls, self.name)
def format(self):
def __str__(self):
attrs = []
if self.required:
attrs.append("required")
@ -134,6 +111,6 @@ def get_all():
return sorted(mods, key=lambda module: module.name)
with open("template.md", "r") as template:
moddoc = "".join(map(lambda module: module.format(), get_all()))
moddoc = "".join(map(str, get_all()))
print(template.read().replace("!!module_doc!!", moddoc))