diff --git a/AzuraCast/__init__.py b/AzuraCast/__init__.py index d667356..7ecbc12 100644 --- a/AzuraCast/__init__.py +++ b/AzuraCast/__init__.py @@ -25,10 +25,11 @@ __author__ = supybot.authors.unknown __contributors__ = {} # This is a url where the most recent plugin package can be downloaded. -__url__ = '' +__url__ = "" from . import config from . import plugin + if sys.version_info >= (3, 4): from importlib import reload else: diff --git a/AzuraCast/config.py b/AzuraCast/config.py index 4e19ccb..3bc45e8 100644 --- a/AzuraCast/config.py +++ b/AzuraCast/config.py @@ -6,9 +6,11 @@ ### from supybot import conf, registry + try: from supybot.i18n import PluginInternationalization - _ = PluginInternationalization('AzuraCast') + + _ = PluginInternationalization("AzuraCast") except: # Placeholder that allows to run the plugin on a bot # without the i18n module @@ -21,16 +23,19 @@ def configure(advanced): # user or not. You should effect your configuration by manipulating the # registry as appropriate. from supybot.questions import expect, anything, something, yn - conf.registerPlugin('AzuraCast', True) + + conf.registerPlugin("AzuraCast", True) -AzuraCast = conf.registerPlugin('AzuraCast') +AzuraCast = conf.registerPlugin("AzuraCast") # This is where your configuration variables (if any) should go. For example: # conf.registerGlobalValue(AzuraCast, 'someConfigVariableName', # registry.Boolean(False, _("""Help for someConfigVariableName."""))) -conf.registerGlobalValue(AzuraCast, 'AzuraAPI', - registry.String('', _("""AzuraCast local API URL"""))) -conf.registerGlobalValue(AzuraCast, 'PublicURL', - registry.String('', _("""Public URL for your radio"""))) +conf.registerGlobalValue( + AzuraCast, "AzuraAPI", registry.String("", _("""AzuraCast local API URL""")) +) +conf.registerGlobalValue( + AzuraCast, "PublicURL", registry.String("", _("""Public URL for your radio""")) +) # vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79: diff --git a/AzuraCast/plugin.py b/AzuraCast/plugin.py index 3287aa2..85a2fcb 100644 --- a/AzuraCast/plugin.py +++ b/AzuraCast/plugin.py @@ -9,9 +9,11 @@ import requests from supybot import utils, plugins, ircutils, callbacks from supybot.commands import * + try: from supybot.i18n import PluginInternationalization - _ = PluginInternationalization('AzuraCast') + + _ = PluginInternationalization("AzuraCast") except ImportError: # Placeholder that allows to run the plugin on a bot # without the i18n module @@ -20,140 +22,154 @@ except ImportError: class AzuraCast(callbacks.Plugin): """Plugin for the AzuraCast API""" + threaded = True - + def __init__(self, irc): self.__parent = super(AzuraCast, self) self.__parent.__init__(irc) - - self.BASE_API = self.registryValue('AzuraAPI') - self.PUB_URL = self.registryValue('PublicURL') + '#{name}' - + + self.BASE_API = self.registryValue("AzuraAPI") + self.PUB_URL = self.registryValue("PublicURL") + "#{name}" + def _fetchURL(self, url, headers=None): return requests.get(url, headers=headers).json() - + def _parseData(self, data): stations = {} for station in data: tmp_dict = {} - code = station['station']['shortcode'] - tmp_dict['id'] = station['station']['id'] - tmp_dict['name'] = station['station']['name'] - tmp_dict['description'] = station['station']['description'] - tmp_dict['player_url'] = station['station']['listen_url'].split('?')[0] \ - if station['station']['is_public'] else '' - tmp_dict['public_url'] = self.PUB_URL.format( - name=code) if station['station']['is_public'] else '' - tmp_dict['listeners'] = station['listeners'] - tmp_dict['nowplaying'] = station['now_playing'] + code = station["station"]["shortcode"] + tmp_dict["id"] = station["station"]["id"] + tmp_dict["name"] = station["station"]["name"] + tmp_dict["description"] = station["station"]["description"] + tmp_dict["player_url"] = ( + station["station"]["listen_url"].split("?")[0] + if station["station"]["is_public"] + else "" + ) + tmp_dict["public_url"] = ( + self.PUB_URL.format(name=code) + if station["station"]["is_public"] + else "" + ) + tmp_dict["listeners"] = station["listeners"] + tmp_dict["nowplaying"] = station["now_playing"] stations[code] = tmp_dict return stations - - @wrap([getopts({'station': 'somethingWithoutSpaces'})]) + + @wrap([getopts({"station": "somethingWithoutSpaces"})]) def nowplaying(self, irc, msg, args, options): """ Fetches what is now playing """ options = dict(options) - station = options.get('station') - url = self.BASE_API + 'nowplaying' - + station = options.get("station") + url = self.BASE_API + "nowplaying" + data = self._fetchURL(url) - + if not data: - irc.reply('ERROR: Something went wrong fetching data @ {}'.format(url)) + irc.reply("ERROR: Something went wrong fetching data @ {}".format(url)) return - + data = self._parseData(data) - + output = [] if station: # one station only d = data.get(station.lower()) - prefix = ircutils.bold('Now Playing on {}:'.format(d['name'])) - album = ' [{}]'.format(d['nowplaying']['song']['album']) \ - if d['nowplaying']['song']['album'] else '' - url = ' | {}'.format(d['public_url']) if d['public_url'] else '' - np = '{}'.format(d['nowplaying']['song']['text']) - listeners = " | Listeners: {}".format(d['listeners']['current']) - listen = " | Audio player link: {}/public/{}/playlist/pls".format(self.BASE_API.replace("/api/", ""), d['id']) - string = '{} {}{}{}{}{}'.format(prefix, np, album, listeners, url, listen) + prefix = ircutils.bold("Now Playing on {}:".format(d["name"])) + album = ( + " [{}]".format(d["nowplaying"]["song"]["album"]) + if d["nowplaying"]["song"]["album"] + else "" + ) + url = " | {}".format(d["public_url"]) if d["public_url"] else "" + np = "{}".format(d["nowplaying"]["song"]["text"]) + listeners = " | Listeners: {}".format(d["listeners"]["current"]) + listen = " | Audio player link: {}/public/{}/playlist/pls".format( + self.BASE_API.replace("/api/", ""), d["id"] + ) + string = "{} {}{}{}{}{}".format(prefix, np, album, listeners, url, listen) output.append(string) else: # all stations? - for s,d in data.items(): - prefix = ircutils.bold('Now Playing on {}:'.format(d['name'])) - album = ' [{}]'.format(d['nowplaying']['song']['album']) \ - if d['nowplaying']['song']['album'] else '' - url = ' | {}'.format(d['public_url']) if d['public_url'] else '' - np = '{}'.format(d['nowplaying']['song']['text']) - listeners = " | Listeners: {}".format(d['listeners']['current']) - listen = " | Audio player link: {}/public/{}/playlist/pls".format(self.BASE_API.replace("/api/", ""), d['id']) - string = '{} {}{}{}{}{}'.format(prefix, np, album, listeners, url, listen) + for s, d in data.items(): + prefix = ircutils.bold("Now Playing on {}:".format(d["name"])) + album = ( + " [{}]".format(d["nowplaying"]["song"]["album"]) + if d["nowplaying"]["song"]["album"] + else "" + ) + url = " | {}".format(d["public_url"]) if d["public_url"] else "" + np = "{}".format(d["nowplaying"]["song"]["text"]) + listeners = " | Listeners: {}".format(d["listeners"]["current"]) + listen = " | Audio player link: {}/public/{}/playlist/pls".format( + self.BASE_API.replace("/api/", ""), d["id"] + ) + string = "{} {}{}{}{}{}".format( + prefix, np, album, listeners, url, listen + ) output.append(string) - + for string in output: irc.reply(string) - + return - - @wrap([getopts({'station': 'somethingWithoutSpaces'})]) + + @wrap([getopts({"station": "somethingWithoutSpaces"})]) def listeners(self, irc, msg, args, options): """ Fetches listeners """ options = dict(options) - station = options.get('station') - url = self.BASE_API + 'nowplaying' - + station = options.get("station") + url = self.BASE_API + "nowplaying" + data = self._fetchURL(url) - + if not data: - irc.reply('ERROR: Something went wrong fetching data @ {}'.format(url)) + irc.reply("ERROR: Something went wrong fetching data @ {}".format(url)) return - + data = self._parseData(data) - + output = [] if station: # one station only d = data.get(station.lower()) - count = d['listeners']['current'] + count = d["listeners"]["current"] if count > 1 and count != 0: - cur = 'are currently' - plr = ' {} listeners '.format(ircutils.bold(count)) + cur = "are currently" + plr = " {} listeners ".format(ircutils.bold(count)) elif count == 1: - cur = 'is currently' - plr = ' {} listener '.format(ircutils.bold(count)) + cur = "is currently" + plr = " {} listener ".format(ircutils.bold(count)) else: - cur = 'are no listeners' - plr = ' ' - string = 'There {}{}on {}'.format( - cur, plr, - ircutils.bold(d['name'])) + cur = "are no listeners" + plr = " " + string = "There {}{}on {}".format(cur, plr, ircutils.bold(d["name"])) output.append(string) else: # all stations? - for s,d in data.items(): - count = d['listeners']['current'] + for s, d in data.items(): + count = d["listeners"]["current"] if count > 1 and count != 0: - cur = 'are currently' - plr = ' {} listeners '.format(ircutils.bold(count)) + cur = "are currently" + plr = " {} listeners ".format(ircutils.bold(count)) elif count == 1: - cur = 'is currently' - plr = ' {} listener '.format(ircutils.bold(count)) + cur = "is currently" + plr = " {} listener ".format(ircutils.bold(count)) else: - cur = 'are no listeners' - plr = ' ' - string = 'There {}{}on {}'.format( - cur, plr, - ircutils.bold(d['name'])) + cur = "are no listeners" + plr = " " + string = "There {}{}on {}".format(cur, plr, ircutils.bold(d["name"])) output.append(string) - - + for string in output: irc.reply(string) - + return diff --git a/AzuraCast/test.py b/AzuraCast/test.py index df22f54..0901ea8 100644 --- a/AzuraCast/test.py +++ b/AzuraCast/test.py @@ -9,7 +9,7 @@ from supybot.test import * class AzuraCastTestCase(PluginTestCase): - plugins = ('AzuraCast',) + plugins = ("AzuraCast",) # vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79: