diff --git a/i3pystatus/__init__.py b/i3pystatus/__init__.py index 0f9993f..d18ca03 100644 --- a/i3pystatus/__init__.py +++ b/i3pystatus/__init__.py @@ -1,4 +1,3 @@ - from pkgutil import extend_path from i3pystatus.core import Status diff --git a/i3pystatus/alsa.py b/i3pystatus/alsa.py index 920589a..353e26c 100644 --- a/i3pystatus/alsa.py +++ b/i3pystatus/alsa.py @@ -4,7 +4,6 @@ from i3pystatus import IntervalModule class ALSA(IntervalModule): - """ Shows volume of ALSA mixer. You can also use this for inputs, btw. diff --git a/i3pystatus/backlight.py b/i3pystatus/backlight.py index 26ce3ce..55fd025 100644 --- a/i3pystatus/backlight.py +++ b/i3pystatus/backlight.py @@ -2,7 +2,6 @@ from i3pystatus.file import File class Backlight(File): - """ Screen backlight info diff --git a/i3pystatus/battery.py b/i3pystatus/battery.py index c62789b..4285b94 100644 --- a/i3pystatus/battery.py +++ b/i3pystatus/battery.py @@ -73,7 +73,8 @@ class BatteryCharge(Battery): else: return -1 else: - return (self.battery_info["CHARGE_FULL"] - self.battery_info["CHARGE_NOW"]) / self.battery_info["CURRENT_NOW"] * 60 + return (self.battery_info["CHARGE_FULL"] - self.battery_info["CHARGE_NOW"]) / self.battery_info[ + "CURRENT_NOW"] * 60 class BatteryEnergy(Battery): @@ -88,7 +89,8 @@ class BatteryEnergy(Battery): # Wh / W = h * 60 min = min return self.battery_info["ENERGY_NOW"] / self.battery_info["POWER_NOW"] * 60 else: - return (self.battery_info["ENERGY_FULL"] - self.battery_info["ENERGY_NOW"]) / self.battery_info["POWER_NOW"] * 60 + return (self.battery_info["ENERGY_FULL"] - self.battery_info["ENERGY_NOW"]) / self.battery_info[ + "POWER_NOW"] * 60 class BatteryChecker(IntervalModule): diff --git a/i3pystatus/clock.py b/i3pystatus/clock.py index 2d4fdb8..18f05f3 100644 --- a/i3pystatus/clock.py +++ b/i3pystatus/clock.py @@ -9,7 +9,6 @@ from i3pystatus import IntervalModule class Clock(IntervalModule): - """ This class shows a clock """ diff --git a/i3pystatus/core/__init__.py b/i3pystatus/core/__init__.py index 3d909a2..73bd820 100644 --- a/i3pystatus/core/__init__.py +++ b/i3pystatus/core/__init__.py @@ -1,4 +1,3 @@ - import sys import os from threading import Thread @@ -75,8 +74,8 @@ class Status: raise import_error except ConfigError as configuration_error: return self.modules.append(Text( - color="#FF0000", - text=configuration_error.message)) + color="#FF0000", + text=configuration_error.message)) def run(self): self.command_endpoint.start() diff --git a/i3pystatus/core/desktop.py b/i3pystatus/core/desktop.py index a457cad..5deacef 100644 --- a/i3pystatus/core/desktop.py +++ b/i3pystatus/core/desktop.py @@ -1,4 +1,3 @@ - class BaseDesktopNotification: """ Class to display a desktop notification @@ -25,9 +24,11 @@ class BaseDesktopNotification: """ return False + class DesktopNotification(BaseDesktopNotification): pass + try: from gi.repository import Notify except ImportError: diff --git a/i3pystatus/core/exceptions.py b/i3pystatus/core/exceptions.py index feefeca..cab7383 100644 --- a/i3pystatus/core/exceptions.py +++ b/i3pystatus/core/exceptions.py @@ -1,4 +1,3 @@ - class ConfigError(Exception): """ABC for configuration exceptions""" diff --git a/i3pystatus/core/imputil.py b/i3pystatus/core/imputil.py index 4315afe..453e647 100644 --- a/i3pystatus/core/imputil.py +++ b/i3pystatus/core/imputil.py @@ -17,6 +17,7 @@ class ClassFinder: issubclass(obj, self.baseclass) and obj.__module__ == module.__name__ ) + return predicate def get_matching_classes(self, module): diff --git a/i3pystatus/core/io.py b/i3pystatus/core/io.py index c57816b..f6fb856 100644 --- a/i3pystatus/core/io.py +++ b/i3pystatus/core/io.py @@ -1,4 +1,3 @@ - import time import json import sys @@ -6,7 +5,6 @@ from contextlib import contextmanager class IOHandler: - def __init__(self, inp=sys.stdin, out=sys.stdout): self.inp = inp self.out = out @@ -45,7 +43,6 @@ class IOHandler: class StandaloneIO(IOHandler): - """ I/O handler for standalone usage of i3pystatus (w/o i3status) @@ -76,7 +73,6 @@ class StandaloneIO(IOHandler): class JSONIO: - def __init__(self, io, skiplines=2): self.io = io for i in range(skiplines): diff --git a/i3pystatus/core/modules.py b/i3pystatus/core/modules.py index 20815d3..34fc355 100644 --- a/i3pystatus/core/modules.py +++ b/i3pystatus/core/modules.py @@ -1,4 +1,3 @@ - from i3pystatus.core.settings import SettingsBase from i3pystatus.core.threading import Manager from i3pystatus.core.util import convert_position @@ -45,7 +44,7 @@ class IntervalModuleMeta(type): super(IntervalModuleMeta, cls).__init__(name, bases, namespace) if not hasattr(cls, 'settings'): cls.settings = tuple() - if not 'interval' in SettingsBase.flatten_settings(cls.settings): + if 'interval' not in SettingsBase.flatten_settings(cls.settings): cls.settings += ('interval', ) diff --git a/i3pystatus/core/settings.py b/i3pystatus/core/settings.py index 992df69..56e641c 100644 --- a/i3pystatus/core/settings.py +++ b/i3pystatus/core/settings.py @@ -3,7 +3,6 @@ from i3pystatus.core.exceptions import ConfigKeyError, ConfigMissingError class SettingsBase: - """ Support class for providing a nice and flexible settings interface @@ -64,4 +63,5 @@ class SettingsBase: def flatten_settings(settings): def flatten_setting(setting): return setting[0] if isinstance(setting, tuple) else setting + return tuple(flatten_setting(setting) for setting in settings) diff --git a/i3pystatus/core/threading.py b/i3pystatus/core/threading.py index 0fe359e..8c8802c 100644 --- a/i3pystatus/core/threading.py +++ b/i3pystatus/core/threading.py @@ -8,7 +8,6 @@ timer = time.perf_counter if hasattr(time, "perf_counter") else time.clock class Thread(threading.Thread): - def __init__(self, target_interval, workloads=None, start_barrier=1): super().__init__() self.workloads = workloads or [] @@ -56,7 +55,6 @@ class Thread(threading.Thread): class Wrapper: - def __init__(self, workload): self.workload = workload @@ -65,7 +63,6 @@ class Wrapper: class ExceptionWrapper(Wrapper): - def __call__(self): try: self.workload() @@ -88,7 +85,6 @@ class WorkloadWrapper(Wrapper): class Manager: - def __init__(self, target_interval): self.target_interval = target_interval self.upper_bound = target_interval * 1.1 diff --git a/i3pystatus/core/util.py b/i3pystatus/core/util.py index 81a83c5..e0b05ba 100644 --- a/i3pystatus/core/util.py +++ b/i3pystatus/core/util.py @@ -1,4 +1,3 @@ - import collections import functools import re @@ -177,6 +176,7 @@ def formatp(string, **kwargs): They also have a string property containing associated text (empty for all tokens but String tokens). """ + class Token: string = "" @@ -333,13 +333,16 @@ def require(predicate): :py:func:`internet` """ + def decorator(method): @functools.wraps(method) def wrapper(*args, **kwargs): if predicate(): return method(*args, **kwargs) return None + return wrapper + return decorator diff --git a/i3pystatus/cpu_usage.py b/i3pystatus/cpu_usage.py index f1a832a..96246cd 100644 --- a/i3pystatus/cpu_usage.py +++ b/i3pystatus/cpu_usage.py @@ -15,19 +15,16 @@ class CpuUsage(IntervalModule): """ - format = "{usage:02}%" settings = ( ("format", "format string"), ) - def init(self): self.prev_idle = 0 self.prev_busy = 0 self.interval = 1 - def get_usage(self): """ parses /proc/stat and calcualtes total and busy time @@ -43,7 +40,6 @@ class CpuUsage(IntervalModule): return cpu_total, cpu_busy - def run(self): cpu_total, cpu_busy = self.get_usage() @@ -58,7 +54,5 @@ class CpuUsage(IntervalModule): self.output = { "full_text": self.format.format( usage=cpu_busy_percentage - ) + ) } - - diff --git a/i3pystatus/disk.py b/i3pystatus/disk.py index 9c159a4..a4b7600 100644 --- a/i3pystatus/disk.py +++ b/i3pystatus/disk.py @@ -5,7 +5,6 @@ from .core.util import round_dict class Disk(IntervalModule): - """ Gets ``{used}``, ``{free}``, ``{available}`` and ``{total}`` amount of bytes on the given mounted filesystem. diff --git a/i3pystatus/file.py b/i3pystatus/file.py index 251c78f..7663d9e 100644 --- a/i3pystatus/file.py +++ b/i3pystatus/file.py @@ -4,12 +4,11 @@ from i3pystatus import IntervalModule class File(IntervalModule): - """ Rip information from text files components is a dict of pairs of the form: - + :: name => (callable, file) diff --git a/i3pystatus/load.py b/i3pystatus/load.py index 6454cb2..2fe8db4 100644 --- a/i3pystatus/load.py +++ b/i3pystatus/load.py @@ -2,7 +2,6 @@ from i3pystatus import IntervalModule class Load(IntervalModule): - """ Shows system load """ diff --git a/i3pystatus/mail/__init__.py b/i3pystatus/mail/__init__.py index 44894e6..d3a18bc 100644 --- a/i3pystatus/mail/__init__.py +++ b/i3pystatus/mail/__init__.py @@ -1,11 +1,9 @@ - import subprocess from i3pystatus import SettingsBase, IntervalModule class Backend(SettingsBase): - """Handles the details of checking for mail""" unread = 0 @@ -15,7 +13,6 @@ class Backend(SettingsBase): class Mail(IntervalModule): - """ Generic mail checker diff --git a/i3pystatus/mail/imap.py b/i3pystatus/mail/imap.py index 7b3d478..2f99590 100644 --- a/i3pystatus/mail/imap.py +++ b/i3pystatus/mail/imap.py @@ -8,7 +8,6 @@ from i3pystatus.mail import Backend class IMAP(Backend): - """ Checks for mail on a IMAP server """ @@ -56,4 +55,5 @@ class IMAP(Backend): else: sys.stderr.write("no connection") + Backend = IMAP diff --git a/i3pystatus/mail/maildir.py b/i3pystatus/mail/maildir.py index 2eaccf7..abc146d 100644 --- a/i3pystatus/mail/maildir.py +++ b/i3pystatus/mail/maildir.py @@ -5,23 +5,25 @@ import sys from i3pystatus.mail import Backend import subprocess + class MaildirMail(Backend): """ Checks for local mail in Maildir """ settings = ( - "directory", - ) + "directory", + ) required = ("directory",) - directory="" + directory = "" @property def unread(self): - p = subprocess.Popen(['ls','-l',self.directory+'/new'], stdout=subprocess.PIPE) + p = subprocess.Popen(['ls', '-l', self.directory + '/new'], stdout=subprocess.PIPE) stdout, stderr = p.communicate() - stdout=stdout.decode('utf8') - return len(stdout.split('\n'))-2 + stdout = stdout.decode('utf8') + return len(stdout.split('\n')) - 2 + Backend = MaildirMail diff --git a/i3pystatus/mail/mbox.py b/i3pystatus/mail/mbox.py index 57e70b0..951d3f6 100644 --- a/i3pystatus/mail/mbox.py +++ b/i3pystatus/mail/mbox.py @@ -5,6 +5,7 @@ import sys from i3pystatus.mail import Backend import subprocess + class MboxMail(Backend): """ Checks for local mail in mbox @@ -22,4 +23,5 @@ class MboxMail(Backend): s_stuff, message_number = stdout.strip().rsplit(':', 1) return int(message_number.strip()) + Backend = MboxMail diff --git a/i3pystatus/mail/notmuchmail.py b/i3pystatus/mail/notmuchmail.py index a207fbe..054e91e 100644 --- a/i3pystatus/mail/notmuchmail.py +++ b/i3pystatus/mail/notmuchmail.py @@ -9,7 +9,6 @@ from i3pystatus.mail import Backend class Notmuch(Backend): - """ This class uses the notmuch python bindings to check for the number of messages in the notmuch database with the tags "inbox" @@ -25,4 +24,5 @@ class Notmuch(Backend): def unread(self): return notmuch.Query(self.db, "tag:unread and tag:inbox").count_messages() + Backend = Notmuch diff --git a/i3pystatus/mail/thunderbird.py b/i3pystatus/mail/thunderbird.py index ffe08ba..3760706 100644 --- a/i3pystatus/mail/thunderbird.py +++ b/i3pystatus/mail/thunderbird.py @@ -17,7 +17,6 @@ from i3pystatus.mail import Backend class Thunderbird(Backend): - """ This class listens for dbus signals emitted by the dbus-sender extension for thunderbird. @@ -55,4 +54,5 @@ class Thunderbird(Backend): self.run() return len(self._unread) + Backend = Thunderbird diff --git a/i3pystatus/mem.py b/i3pystatus/mem.py index 6546bc6..648a1bb 100644 --- a/i3pystatus/mem.py +++ b/i3pystatus/mem.py @@ -27,14 +27,14 @@ class Mem(IntervalModule): settings = ( ("format", "format string used for output."), ("divisor", - "divide all byte values by this value, default 1024**2(mebibytes"), + "divide all byte values by this value, default 1024**2(mebibytes"), ("warn_percentage", "minimal percentage for warn state"), ("alert_percentage", "minimal percentage for alert state"), ("color", "standard color"), ("warn_color", - "defines the color used wann warn percentage ist exceeded"), + "defines the color used wann warn percentage ist exceeded"), ("alert_color", - "defines the color used when alert percentage is exceeded"), + "defines the color used when alert percentage is exceeded"), ) def run(self): @@ -55,5 +55,5 @@ class Mem(IntervalModule): avail_mem=memory_usage.available / self.divisor, total_mem=memory_usage.total / self.divisor, percent_used_mem=memory_usage.percent), - "color":color + "color": color } diff --git a/i3pystatus/mkdocs.py b/i3pystatus/mkdocs.py index 4072a3b..18ee1c2 100755 --- a/i3pystatus/mkdocs.py +++ b/i3pystatus/mkdocs.py @@ -126,6 +126,7 @@ def get_all(module_path, heading, finder=None, ignore=None): def generate_doc_for_module(module_path, heading="+", finder=None, ignore=None): return "".join(map(str, get_all(module_path, heading, finder, ignore or []))) + with open("README.tpl.rst", "r") as template: tpl = template.read() tpl = tpl.replace( diff --git a/i3pystatus/modsde.py b/i3pystatus/modsde.py index 97e4dd8..b524c7c 100644 --- a/i3pystatus/modsde.py +++ b/i3pystatus/modsde.py @@ -12,7 +12,6 @@ from i3pystatus import IntervalModule class ModsDeChecker(IntervalModule): - """ This class returns i3status parsable output of the number of unread posts in any bookmark in the mods.de forums. diff --git a/i3pystatus/mpd.py b/i3pystatus/mpd.py index 7b7393c..3a749a8 100644 --- a/i3pystatus/mpd.py +++ b/i3pystatus/mpd.py @@ -1,4 +1,3 @@ - import socket from i3pystatus import IntervalModule, formatp @@ -10,7 +9,6 @@ def format_time(seconds): class MPD(IntervalModule): - """ Displays various information from MPD (the music player daemon) @@ -101,7 +99,7 @@ class MPD(IntervalModule): def on_leftclick(self): try: self._mpd_command(self.s, "pause %i" % - (0 if self._mpd_command(self.s, "status")["state"] == "pause" else 1)) + (0 if self._mpd_command(self.s, "status")["state"] == "pause" else 1)) except Exception as e: pass diff --git a/i3pystatus/network.py b/i3pystatus/network.py index c8b85f3..29c1501 100644 --- a/i3pystatus/network.py +++ b/i3pystatus/network.py @@ -11,7 +11,7 @@ from i3pystatus import IntervalModule def count_bits(integer): bits = 0 - while(integer): + while (integer): integer &= integer - 1 bits += 1 return bits @@ -47,7 +47,6 @@ def cidr4(addr, mask): class Network(IntervalModule): - """ Display network information about a interface. @@ -122,7 +121,7 @@ class Network(IntervalModule): fdict["v6"] = v6["addr"] fdict["v6mask"] = v6["netmask"] fdict["v6cidr"] = cidr6(v6["addr"], v6["netmask"]) - if not v6["addr"].startswith("fe80::"): # prefer non link-local addresses + if not v6["addr"].startswith("fe80::"): # prefer non link-local addresses break else: format = self.format_down diff --git a/i3pystatus/parcel.py b/i3pystatus/parcel.py index 21769da..fbbaa5a 100644 --- a/i3pystatus/parcel.py +++ b/i3pystatus/parcel.py @@ -1,4 +1,3 @@ - from urllib.request import urlopen import webbrowser @@ -10,7 +9,6 @@ from i3pystatus.core.util import internet, require class TrackerAPI: - def __init__(self, idcode): pass @@ -41,7 +39,7 @@ class DHL(TrackerAPI): if 'active' in picture_link: status = ''.join(element.xpath('./img/@alt')) - progress = '%i' % (i/len(elements)*100) + progress = '%i' % (i / len(elements) * 100) elif 'default' in picture_link: break @@ -51,7 +49,6 @@ class DHL(TrackerAPI): def status(self): ret = {} with urlopen(self.url) as page: - #with open('/home/marcel/ownCloud/dhl_site/paketzentrum/DHL Sendungsverfolgung.htm', 'r') as page: page = lxml.html.fromstring(page.read()) if not self.error(page): diff --git a/i3pystatus/pulseaudio/__init__.py b/i3pystatus/pulseaudio/__init__.py index 3a0e261..ffb0ea3 100644 --- a/i3pystatus/pulseaudio/__init__.py +++ b/i3pystatus/pulseaudio/__init__.py @@ -4,7 +4,6 @@ from i3pystatus import Module class PulseAudio(Module): - """ Shows volume of default PulseAudio sink (output). @@ -107,4 +106,5 @@ class PulseAudio(Module): def on_leftclick(self): import subprocess + subprocess.Popen(["pavucontrol"]) diff --git a/i3pystatus/pulseaudio/pulse.py b/i3pystatus/pulseaudio/pulse.py index a82bb29..99dfce8 100644 --- a/i3pystatus/pulseaudio/pulse.py +++ b/i3pystatus/pulseaudio/pulse.py @@ -31,6 +31,8 @@ class pa_format_info(Structure): class pa_context(Structure): pass + + pa_context._fields_ = [ ] pa_context_notify_cb_t = CFUNCTYPE(None, POINTER(pa_context), c_void_p) @@ -39,12 +41,16 @@ pa_context_success_cb_t = CFUNCTYPE(None, POINTER(pa_context), c_int, c_void_p) class pa_proplist(Structure): pass + + pa_context_event_cb_t = CFUNCTYPE( None, POINTER(pa_context), STRING, POINTER(pa_proplist), c_void_p) class pa_mainloop_api(Structure): pass + + pa_context_new = _libraries['libpulse.so.0'].pa_context_new pa_context_new.restype = POINTER(pa_context) pa_context_new.argtypes = [POINTER(pa_mainloop_api), STRING] @@ -85,6 +91,7 @@ class pa_spawn_api(Structure): ('atfork', CFUNCTYPE(None)), ] + pa_context_connect = _libraries['libpulse.so.0'].pa_context_connect pa_context_connect.restype = c_int pa_context_connect.argtypes = [ @@ -155,6 +162,8 @@ class pa_channel_map(Structure): ('channels', c_uint8), ('map', pa_channel_position_t * 32), ] + + pa_sink_info._fields_ = [ ('name', STRING), ('index', c_uint32), @@ -202,6 +211,8 @@ pa_context_get_sink_info_list.argtypes = [ class pa_server_info(Structure): pass + + pa_server_info._fields_ = [ ('user_name', STRING), ('host_name', STRING), @@ -224,6 +235,8 @@ pa_context_get_server_info.argtypes = [ class pa_threaded_mainloop(Structure): pass + + pa_threaded_mainloop._fields_ = [ ] pa_threaded_mainloop_new = _libraries['libpulse.so.0'].pa_threaded_mainloop_new @@ -278,7 +291,6 @@ pa_sw_volume_to_dB = _libraries['libpulse.so.0'].pa_sw_volume_to_dB pa_sw_volume_to_dB.restype = c_double pa_sw_volume_to_dB.argtypes = [pa_volume_t] - pa_operation_unref = _libraries['libpulse.so.0'].pa_operation_unref pa_operation_unref.restype = None pa_operation_unref.argtypes = [POINTER(pa_operation)] diff --git a/i3pystatus/pyload.py b/i3pystatus/pyload.py index 2be5a0b..05c6b93 100644 --- a/i3pystatus/pyload.py +++ b/i3pystatus/pyload.py @@ -1,4 +1,3 @@ - import urllib.request import urllib.parse import urllib.error @@ -10,7 +9,6 @@ from i3pystatus import IntervalModule class pyLoad(IntervalModule): - """ Shows pyLoad status @@ -46,7 +44,8 @@ class pyLoad(IntervalModule): if not data: data = {} urlencoded = urllib.parse.urlencode(data).encode("ascii") - return json.loads(self.opener.open("{address}/api/{method}/".format(address=self.address, method=method), urlencoded).read().decode("utf-8")) + return json.loads(self.opener.open("{address}/api/{method}/".format(address=self.address, method=method), + urlencoded).read().decode("utf-8")) def init(self): self.cj = http.cookiejar.CookieJar() diff --git a/i3pystatus/regex.py b/i3pystatus/regex.py index 49e8196..77b9b21 100644 --- a/i3pystatus/regex.py +++ b/i3pystatus/regex.py @@ -4,7 +4,6 @@ from i3pystatus import IntervalModule class Regex(IntervalModule): - """ Simple regex file watcher diff --git a/i3pystatus/runwatch.py b/i3pystatus/runwatch.py index f0f384c..c96532c 100644 --- a/i3pystatus/runwatch.py +++ b/i3pystatus/runwatch.py @@ -5,7 +5,6 @@ from i3pystatus import IntervalModule class RunWatch(IntervalModule): - """ Expands the given path using glob to a pidfile and checks if the process ID found inside is valid diff --git a/i3pystatus/spotify.py b/i3pystatus/spotify.py index 1599179..0d7d760 100644 --- a/i3pystatus/spotify.py +++ b/i3pystatus/spotify.py @@ -6,7 +6,6 @@ from gi.repository import Playerctl, GLib class Spotify(Module): - """ This class shows information from Spotify. @@ -39,7 +38,7 @@ class Spotify(Module): except Exception as e: self.output = { "full_text": "Error creating new thread!", - "color" : "#FF0000" + "color": "#FF0000" } def on_track_change(self, player, e): diff --git a/i3pystatus/temp.py b/i3pystatus/temp.py index 0570570..cb2348f 100644 --- a/i3pystatus/temp.py +++ b/i3pystatus/temp.py @@ -5,7 +5,6 @@ from i3pystatus import IntervalModule class Temperature(IntervalModule): - """ Shows CPU temperature of Intel processors diff --git a/i3pystatus/text.py b/i3pystatus/text.py index 0996fae..44b964b 100644 --- a/i3pystatus/text.py +++ b/i3pystatus/text.py @@ -2,7 +2,6 @@ from i3pystatus import Module class Text(Module): - """ Display static, colored text. """ diff --git a/i3pystatus/weather.py b/i3pystatus/weather.py index 0828c00..1f44b40 100644 --- a/i3pystatus/weather.py +++ b/i3pystatus/weather.py @@ -4,7 +4,6 @@ from i3pystatus.core.util import internet, require class Weather(IntervalModule): - """ This module gets the weather from weather.com using pywapi module First, you need to get the code for the location from the www.weather.com diff --git a/i3pystatus/wireless.py b/i3pystatus/wireless.py index 595cb26..a11b4c4 100644 --- a/i3pystatus/wireless.py +++ b/i3pystatus/wireless.py @@ -1,11 +1,9 @@ - import basiciw from i3pystatus.network import Network class Wireless(Network): - """ Display network information about a interface.