# pylint: disable=C0111,R0903 """Displays the unread GitHub notifications for a GitHub user Requires the following library: * requests Parameters: * github.token: GitHub user access token, the token needs to have the 'notifications' scope. * github.interval: Interval in minutes between updates, default is 5. """ import shutil import requests import core.module import core.widget import core.decorators import core.input class Module(core.module.Module): @core.decorators.every(minutes=5) def __init__(self, config, theme): super().__init__(config, theme, core.widget.Widget(self.github)) self.__count = 0 self.__requests = requests.Session() self.__requests.headers.update({'Authorization':'token {}'.format(self.parameter('token', ''))}) cmd = 'xdg-open' if not shutil.which(cmd): cmd = 'x-www-browser' core.input.register(self, button=core.input.LEFT_MOUSE, cmd='{} https://github.com/notifications'.format(cmd)) core.input.register(self, button=core.input.RIGHT_MOUSE, cmd=self.update) def github(self, _): return str(self.__count) def update(self): try: self.__count = 0 url = 'https://api.github.com/notifications' while True: notifications = self.__requests.get(url) self.__count += len(list(filter(lambda notification: notification['unread'], notifications.json()))) next_link = notifications.links.get('next') if next_link is not None: url = next_link.get('url') else: break except Exception: self.__count = 'n/a' # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4