From 6620e6419b596b1f81db2d9dee24e288905ac148 Mon Sep 17 00:00:00 2001 From: P0psicles Date: Thu, 6 Sep 2018 21:03:00 +0200 Subject: [PATCH 01/14] Use logging.getLogger(__name__) for the adba modules. --- ext/adba/__init__.py | 27 +++++++++++++++------------ ext/adba/aniDBAbstracter.py | 19 +++++++++++-------- ext/adba/aniDBfileInfo.py | 8 ++++++-- ext/adba/aniDBlink.py | 28 ++++++++++++++-------------- 4 files changed, 46 insertions(+), 36 deletions(-) diff --git a/ext/adba/__init__.py b/ext/adba/__init__.py index d589745a9f..1276600696 100644 --- a/ext/adba/__init__.py +++ b/ext/adba/__init__.py @@ -34,6 +34,9 @@ version = 100 +logger = logging.getLogger(__name__) +logger.addHandler(logging.NullHandler()) + def StartLogging(): # set up the format string @@ -118,7 +121,7 @@ def cut(self): def handle_response(self, response): if response.rescode in ('501', '506') and response.req.command != 'AUTH': - logging.debug("seems like the last command got a not authed error back trying to reconnect now") + logger.debug("seems like the last command got a not authed error back trying to reconnect now") if self._reAuthenticate(): response.req.resp = None self.handle(response.req, response.req.callback) @@ -151,7 +154,7 @@ def callback_wrapper(resp): if callback: callback(resp) - logging.debug("handling(" + str(self.counter) + "-" + str(self.link.delay) + ") command " + str(command.command)) + logger.debug("handling(" + str(self.counter) + "-" + str(self.link.delay) + ") command " + str(command.command)) # make live request command.authorize(self.mode, self.link.new_tag(), self.link.session, callback_wrapper) @@ -183,7 +186,7 @@ def authed(self, reAuthenticate=False): def _reAuthenticate(self): if self._username and self._password: - logging.info("auto re authenticating !") + logger.info("auto re authenticating !") resp = self.auth(self._username, self._password) if resp.rescode != '500': return True @@ -192,11 +195,11 @@ def _reAuthenticate(self): def _keep_alive(self): self.lastKeepAliveCheck = time() - logging.info("auto check !") + logger.info("auto check !") # check every 30 minutes if the session is still valid # if not reauthenticate if self.lastAuth and time() - self.lastAuth > 1800: - logging.info("auto uptime !") + logger.info("auto uptime !") self.uptime() # this will update the self.link.session and will refresh the session if it is still alive if self.authed(): # if we are authed we set the time @@ -207,7 +210,7 @@ def _keep_alive(self): # issue a ping every 20 minutes after the last package # this ensures the connection will be kept alive if self.link.lastpacket and time() - self.link.lastpacket > 1200: - logging.info("auto ping !") + logger.info("auto ping !") self.ping() def run(self): @@ -262,18 +265,18 @@ def auth(self, username, password, nat=None, mtu=None, callback=None): if needauth: self.lastAuth = time() - logging.debug('No valid session, so authenticating') + logger.debug('No valid session, so authenticating') try: self.handle(AuthCommand(username, password, 3, self.clientname, self.clientver, nat, 1, 'utf8', mtu), callback) except Exception as e: - logging.debug('Auth command with exception %s', e) + logger.debug('Auth command with exception %s', e) # we force a config file with logged out to ensure a known state if an exception occurs, forcing us to log in again config['DEFAULT'] = {'loggedin': 'yes', 'sessionkey': self.link.session, 'exception': str(e), 'lastcommandtime': repr(time())} with open(self.SessionFile, 'w') as configfile: config.write(configfile) return e - logging.debug('Successfully authenticated and recording session details') + logger.debug('Successfully authenticated and recording session details') config['DEFAULT'] = {'loggedin': 'yes', 'sessionkey': self.link.session, 'lastcommandtime': repr(time())} with open(self.SessionFile, 'w') as configfile: config.write(configfile) @@ -294,9 +297,9 @@ def logout(self, cutConnection=True, callback=None): config['DEFAULT']['loggedin'] = 'no' with open(self.SessionFile, 'w') as configfile: config.write(configfile) - logging.debug('Logging out') + logger.debug('Logging out') return result - logging.debug('Not logging out') + logger.debug('Not logging out') return def stayloggedin(self): @@ -309,7 +312,7 @@ def stayloggedin(self): with open(self.SessionFile, 'w') as configfile: config.write(configfile) self.link._do_delay() - logging.debug('Staying logged in') + logger.debug('Staying logged in') return def push(self, notify, msg, buddy=None, callback=None): diff --git a/ext/adba/aniDBAbstracter.py b/ext/adba/aniDBAbstracter.py index bbfaa5c64d..93851fc406 100644 --- a/ext/adba/aniDBAbstracter.py +++ b/ext/adba/aniDBAbstracter.py @@ -28,6 +28,9 @@ from .aniDBtvDBmaper import TvDBMap from .aniDBfileInfo import read_anidb_xml +logger = logging.getLogger(__name__) +logger.addHandler(logging.NullHandler()) + class aniDBabstractObject(object): def __init__(self, aniDB, load=False): @@ -276,10 +279,10 @@ def add_to_mylist(self, state=None, viewed=None, source=None, storage=None, othe try: self.aniDB.mylistadd(size=self.size, ed2k=self.ed2k, state=state, viewed=viewed, source=source, storage=storage, other=other) except Exception as e: - logging.exception("Exception: %s", e) + logger.exception("Exception: %s", e) else: # TODO: add the name or something - logging.info("Added the episode to anidb") + logger.info("Added the episode to anidb") def edit_to_mylist(self, state=None, viewed=None, source=None, storage=None, other=None): """ @@ -301,14 +304,14 @@ def edit_to_mylist(self, state=None, viewed=None, source=None, storage=None, oth try: edit_response = self.aniDB.mylistadd(size=self.size, ed2k=self.ed2k, edit=1, state=state, viewed=viewed, source=source, storage=storage, other=other) except Exception as e: - logging.exception("Exception: %s", e) + logger.exception("Exception: %s", e) # handling the case that the entry is not in anidb yet, non ideal to check the string but isinstance is having issue # currently raises an exception for less changes in the code, unsure if this is the ideal way to do so if edit_response.codestr == "NO_SUCH_MYLIST_ENTRY": - logging.info("attempted an edit before add") + logger.info("attempted an edit before add") raise AniDBError("Attempted to edit file without adding") else: - logging.info("Edited the episode in anidb") + logger.info("Edited the episode in anidb") def delete_from_mylist(self): if self.filePath and not (self.ed2k or self.size): @@ -316,15 +319,15 @@ def delete_from_mylist(self): try: self.aniDB.mylistdel(size=self.size, ed2k=self.ed2k) except Exception as e: - logging.exception("Exception: %s", e) + logger.exception("Exception: %s", e) else: - logging.info("Deleted the episode from anidb") + logger.info("Deleted the episode from anidb") @staticmethod def _calculate_file_stuff(filePath): if not filePath: return None, None - logging.info("Calculating the ed2k. Please wait...") + logger.info("Calculating the ed2k. Please wait...") ed2k = fileInfo.get_ED2K(filePath) size = fileInfo.get_file_size(filePath) return ed2k, size diff --git a/ext/adba/aniDBfileInfo.py b/ext/adba/aniDBfileInfo.py index eb25e8398f..c44c916046 100644 --- a/ext/adba/aniDBfileInfo.py +++ b/ext/adba/aniDBfileInfo.py @@ -27,6 +27,10 @@ import xml.etree.cElementTree as etree +logger = logging.getLogger(__name__) +logger.addHandler(logging.NullHandler()) + + # http://www.radicand.org/blog/orz/2010/2/21/edonkey2000-hash-in-python/ def get_ED2K(filePath, forceHash=False, cacheLocation=os.path.normpath(sys.path[0] + os.sep + "ED2KCache.pickle")): """ Returns the ed2k hash of a given file.""" @@ -62,7 +66,7 @@ def writeCacheToDisk(): with open(cacheLocation, 'wb') as f: pickle.dump(get_ED2K.ED2KCache, f, pickle.HIGHEST_PROTOCOL) except: - logging.error("Error occurred while writing back to disk") + logger.error("Error occurred while writing back to disk") return file_modified_time = os.path.getmtime(filePath) @@ -137,7 +141,7 @@ def _remove_file_failed(file): try: os.remove(file) except OSError: - logging.warning("Error occurred while trying to remove file %s", file) + logger.warning("Error occurred while trying to remove file %s", file) def download_file(url, filename): diff --git a/ext/adba/aniDBlink.py b/ext/adba/aniDBlink.py index f7faf7bf07..1055dd90ac 100644 --- a/ext/adba/aniDBlink.py +++ b/ext/adba/aniDBlink.py @@ -27,6 +27,9 @@ from .aniDBerrors import * from .aniDBresponses import ResponseResolver +logger = logging.getLogger(__name__) +logger.addHandler(logging.NullHandler()) + class AniDBLink(threading.Thread): def __init__(self, server, port, myport, delay=2, timeout=20): @@ -78,7 +81,7 @@ def disconnectSocket(self): # self.sock.close() def stop(self): - logging.info("Releasing socket and stopping link thread") + logger.info("Releasing socket and stopping link thread") self._quiting = True self.disconnectSocket() self._stop.set() @@ -92,17 +95,14 @@ def print_log_dummy(self, data): def run(self): while not self._quiting: try: - data = self.sock.recv(8192).decode('UTF-8') + data = self.sock.recv(8192) except socket.timeout: self._handle_timeouts() continue except OSError as error: - logging.exception('Exception: %s', error) - break - except UnicodeDecodeError as error: - logging.exception('Bad response from server: %s', error) + logger.exception('Exception: %s', error) break - logging.debug("NetIO < %r", data) + logger.debug("NetIO < %r", data) try: for i in range(2): try: @@ -110,10 +110,10 @@ def run(self): resp = None if tmp[:2] == '\x00\x00': tmp = zlib.decompressobj().decompress(tmp[2:]) - logging.debug("UnZip | %r", tmp) + logger.debug("UnZip | %r", tmp) resp = ResponseResolver(tmp) except Exception as e: - logging.exception('Exception: %s', e) + logger.exception('Exception: %s', e) sys.excepthook(*sys.exc_info()) self.crypt = None self.session = None @@ -127,7 +127,7 @@ def run(self): if resp.rescode in ('200', '201'): self.session = resp.attrs['sesskey'] if resp.rescode in ('209',): - logging.error("sorry encryption is not supported") + logger.error("sorry encryption is not supported") raise AniDBError() # self.crypt=aes(md5(resp.req.apipassword+resp.attrs['salt']).digest()) if resp.rescode in ('203', '403', '500', '501', '503', '506'): @@ -135,7 +135,7 @@ def run(self): self.crypt = None if resp.rescode in ('504', '555'): self.banned = True - logging.critical(("AniDB API informs that user or client is banned:", resp.resstr)) + logger.critical(("AniDB API informs that user or client is banned:", resp.resstr)) resp.handle() if not cmd or not cmd.mode: self._resp_queue(resp) @@ -143,7 +143,7 @@ def run(self): self.tags.remove(resp.restag) except: sys.excepthook(*sys.exc_info()) - logging.error("Avoiding flood by paranoidly panicing: Aborting link thread, killing connection, releasing waiters and quiting") + logger.error("Avoiding flood by paranoidly panicing: Aborting link thread, killing connection, releasing waiters and quiting") self.sock.close() try: cmd.waiter.release() @@ -206,7 +206,7 @@ def _do_delay(self): def _send(self, command): if self.banned: - logging.debug("NetIO | BANNED") + logger.debug("NetIO | BANNED") raise AniDBError("Not sending, banned") self._do_delay() self.lastpacket = time() @@ -215,7 +215,7 @@ def _send(self, command): self.sock.sendto(bytes(data, "ASCII"), self.target) if command.command == 'AUTH': - logging.debug("NetIO > sensitive data is not logged!") + logger.debug("NetIO > sensitive data is not logged!") def new_tag(self): if not len(self.tags): From db5cdbc6bc0eb8b9047fb51b6533398309e84a6a Mon Sep 17 00:00:00 2001 From: P0psicles Date: Thu, 6 Sep 2018 21:03:23 +0200 Subject: [PATCH 02/14] Add adba logger to medusa logger. --- medusa/logger/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/medusa/logger/__init__.py b/medusa/logger/__init__.py index 8776924bcd..7a1eb8226a 100644 --- a/medusa/logger/__init__.py +++ b/medusa/logger/__init__.py @@ -27,6 +27,7 @@ import pkgutil import re import sys +import adba from builtins import object from builtins import range from collections import OrderedDict @@ -606,11 +607,13 @@ def init_logging(self, console_logging): """ import medusa from medusa.helper.common import dateTimeFormat + from adba import StartLogging self.loggers.extend(get_loggers(medusa)) self.loggers.extend(get_loggers(subliminal)) self.loggers.extend([access_log, app_log, gen_log]) self.loggers.extend(get_loggers(traktor)) self.loggers.extend(get_loggers(knowit)) + self.loggers.extend(get_loggers(adba)) logging.addLevelName(DB, 'DB') # add a new logging level DB logging.getLogger().addHandler(NullHandler()) # nullify root logger From 7bdeffa5e697f8456dea48b263d61d781c7b5b0a Mon Sep 17 00:00:00 2001 From: P0psicles Date: Thu, 6 Sep 2018 21:32:02 +0200 Subject: [PATCH 03/14] Return groups unicode decoded. --- ext/adba/aniDBAbstracter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/adba/aniDBAbstracter.py b/ext/adba/aniDBAbstracter.py index 93851fc406..252c65cee8 100644 --- a/ext/adba/aniDBAbstracter.py +++ b/ext/adba/aniDBAbstracter.py @@ -166,7 +166,7 @@ def get_groups(self): self.rawData = self.aniDB.groupstatus(aid=self.aid) self.release_groups = [] for line in self.rawData.datalines: - self.release_groups.append({"name": line["name"], + self.release_groups.append({"name": line["name"].decode("utf-8"), "rating": line["rating"], "range": line["episode_range"] }) From bc9c582a015c6894236e29212b7a6cb74f160d1f Mon Sep 17 00:00:00 2001 From: P0psicles Date: Thu, 6 Sep 2018 21:32:34 +0200 Subject: [PATCH 04/14] Force bytecode. --- ext/adba/aniDBlink.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/adba/aniDBlink.py b/ext/adba/aniDBlink.py index 1055dd90ac..ff6d2c0535 100644 --- a/ext/adba/aniDBlink.py +++ b/ext/adba/aniDBlink.py @@ -108,7 +108,7 @@ def run(self): try: tmp = data resp = None - if tmp[:2] == '\x00\x00': + if tmp[:2] == b'\x00\x00': tmp = zlib.decompressobj().decompress(tmp[2:]) logger.debug("UnZip | %r", tmp) resp = ResponseResolver(tmp) From 534e9494073e63bd129f2f0d33029178e6da0222 Mon Sep 17 00:00:00 2001 From: p0ps Date: Thu, 6 Sep 2018 22:08:04 +0200 Subject: [PATCH 05/14] Update __init__.py Remove unused import --- medusa/logger/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/medusa/logger/__init__.py b/medusa/logger/__init__.py index 7a1eb8226a..9bf3fe71fc 100644 --- a/medusa/logger/__init__.py +++ b/medusa/logger/__init__.py @@ -607,7 +607,6 @@ def init_logging(self, console_logging): """ import medusa from medusa.helper.common import dateTimeFormat - from adba import StartLogging self.loggers.extend(get_loggers(medusa)) self.loggers.extend(get_loggers(subliminal)) self.loggers.extend([access_log, app_log, gen_log]) From 213d6ca3c8bd1142a47b7dbc7dedfe815a1258a6 Mon Sep 17 00:00:00 2001 From: P0psicles Date: Fri, 7 Sep 2018 08:13:36 +0200 Subject: [PATCH 06/14] Force strings to bytecode. --- ext/adba/aniDBlink.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/ext/adba/aniDBlink.py b/ext/adba/aniDBlink.py index ff6d2c0535..a4a54abf45 100644 --- a/ext/adba/aniDBlink.py +++ b/ext/adba/aniDBlink.py @@ -124,18 +124,18 @@ def run(self): cmd = self._cmd_dequeue(resp) resp = resp.resolve(cmd) resp.parse() - if resp.rescode in ('200', '201'): - self.session = resp.attrs['sesskey'] - if resp.rescode in ('209',): + if resp.rescode in (b'200', b'201'): + self.session = resp.attrs[b'sesskey'] + if resp.rescode in (b'209',): logger.error("sorry encryption is not supported") raise AniDBError() # self.crypt=aes(md5(resp.req.apipassword+resp.attrs['salt']).digest()) - if resp.rescode in ('203', '403', '500', '501', '503', '506'): + if resp.rescode in (b'203', b'403', b'500', b'501', b'503', b'506'): self.session = None self.crypt = None - if resp.rescode in ('504', '555'): + if resp.rescode in (b'504', b'555'): self.banned = True - logger.critical(("AniDB API informs that user or client is banned:", resp.resstr)) + logger.critical((b"AniDB API informs that user or client is banned:", resp.resstr)) resp.handle() if not cmd or not cmd.mode: self._resp_queue(resp) @@ -206,27 +206,27 @@ def _do_delay(self): def _send(self, command): if self.banned: - logger.debug("NetIO | BANNED") - raise AniDBError("Not sending, banned") + logger.debug(b"NetIO | BANNED") + raise AniDBError(b"Not sending, banned") self._do_delay() self.lastpacket = time() command.started = time() data = command.raw_data() - self.sock.sendto(bytes(data, "ASCII"), self.target) - if command.command == 'AUTH': - logger.debug("NetIO > sensitive data is not logged!") + self.sock.sendto(bytes(data, b"ASCII"), self.target) + if command.command == b'AUTH': + logger.debug(b"NetIO > sensitive data is not logged!") def new_tag(self): if not len(self.tags): - maxtag = "T000" + maxtag = b"T000" else: maxtag = max(self.tags) - newtag = "T%03d" % (int(maxtag[1:]) + 1) + newtag = b"T%03d" % (int(maxtag[1:]) + 1) return newtag def request(self, command): - if not (self.session and command.session) and command.command not in ('AUTH', 'PING', 'ENCRYPT'): + if not (self.session and command.session) and command.command not in (b'AUTH', b'PING', b'ENCRYPT'): raise AniDBMustAuthError("You must be authed to execute commands besides AUTH and PING") command.started = time() self._cmd_queue(command) From 0deb42bf0f3884ac64f3a7c68c5e3073aa0d9c66 Mon Sep 17 00:00:00 2001 From: P0psicles Date: Fri, 7 Sep 2018 08:14:40 +0200 Subject: [PATCH 07/14] Update changelog.md. --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 86371bc520..f2e5381dd9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ ## Unreleased +#### Fixes + +- Fixed adba lib trowing exceptions getting release groups for some anime shows ([#5125](https://github.com/pymedusa/Medusa/pull/5125)) + + ----- ## 0.2.9 (2018-09-06) From 7999142ca52e74b8317023556ff5f24633376ff9 Mon Sep 17 00:00:00 2001 From: P0psicles Date: Fri, 7 Sep 2018 08:22:45 +0200 Subject: [PATCH 08/14] adba import order. --- medusa/logger/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/medusa/logger/__init__.py b/medusa/logger/__init__.py index 9bf3fe71fc..4b2a3ef87b 100644 --- a/medusa/logger/__init__.py +++ b/medusa/logger/__init__.py @@ -27,7 +27,6 @@ import pkgutil import re import sys -import adba from builtins import object from builtins import range from collections import OrderedDict @@ -41,6 +40,7 @@ ) from logging.handlers import RotatingFileHandler +import adba import knowit from medusa import app From e74eeaf3ba44aa53816c8a2e992826be1aa1008d Mon Sep 17 00:00:00 2001 From: p0ps Date: Fri, 7 Sep 2018 08:24:55 +0200 Subject: [PATCH 09/14] Update cache.py Revert bad commit. Shouldn't be in this pr. --- medusa/cache.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/medusa/cache.py b/medusa/cache.py index 8d6aa2f3fa..5f07f0c840 100644 --- a/medusa/cache.py +++ b/medusa/cache.py @@ -45,7 +45,6 @@ def release_write_lock(self): # Some of the show titles that are used as keys, contain unicode encoded characters. We need to encode them to # bytestrings to be able to use them as keys in dogpile. anidb_cache = make_region() -episodes = make_region() def configure(cache_dir): @@ -80,12 +79,6 @@ def configure(cache_dir): arguments={'filename': os.path.join(cache_dir, 'anidb.dbm'), 'lock_factory': MutexLock}) - # epsisode parsing (knowit / guessit) cache - episodes.configure('dogpile.cache.dbm', - expiration_time=timedelta(days=365), - arguments={'filename': os.path.join(cache_dir, 'episodes.dbm'), - 'lock_factory': MutexLock}) - def fallback(): """Memory only configuration. Used for test purposes.""" From b4ca0c419860a86f4955e11547767ad4b10cb404 Mon Sep 17 00:00:00 2001 From: P0psicles Date: Sun, 9 Sep 2018 13:58:12 +0200 Subject: [PATCH 10/14] Do not use bytestrings for the loggers. --- ext/adba/aniDBlink.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ext/adba/aniDBlink.py b/ext/adba/aniDBlink.py index a4a54abf45..38ef9d5aba 100644 --- a/ext/adba/aniDBlink.py +++ b/ext/adba/aniDBlink.py @@ -135,7 +135,7 @@ def run(self): self.crypt = None if resp.rescode in (b'504', b'555'): self.banned = True - logger.critical((b"AniDB API informs that user or client is banned:", resp.resstr)) + logger.critical(("AniDB API informs that user or client is banned:", resp.resstr)) resp.handle() if not cmd or not cmd.mode: self._resp_queue(resp) @@ -206,7 +206,7 @@ def _do_delay(self): def _send(self, command): if self.banned: - logger.debug(b"NetIO | BANNED") + logger.debug("NetIO | BANNED") raise AniDBError(b"Not sending, banned") self._do_delay() self.lastpacket = time() @@ -215,7 +215,7 @@ def _send(self, command): self.sock.sendto(bytes(data, b"ASCII"), self.target) if command.command == b'AUTH': - logger.debug(b"NetIO > sensitive data is not logged!") + logger.debug("NetIO > sensitive data is not logged!") def new_tag(self): if not len(self.tags): From df68ad4dacc71045871feea080315aa7fdbcb744 Mon Sep 17 00:00:00 2001 From: P0psicles Date: Sun, 9 Sep 2018 14:03:57 +0200 Subject: [PATCH 11/14] Flake warning. --- medusa/logger/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/medusa/logger/__init__.py b/medusa/logger/__init__.py index 4b2a3ef87b..c08302b356 100644 --- a/medusa/logger/__init__.py +++ b/medusa/logger/__init__.py @@ -41,6 +41,7 @@ from logging.handlers import RotatingFileHandler import adba + import knowit from medusa import app From c8ae5c0488d070d3b81e34d11bafc861a99f64c1 Mon Sep 17 00:00:00 2001 From: P0psicles Date: Sun, 9 Sep 2018 14:06:04 +0200 Subject: [PATCH 12/14] Update ext/readme.md for adba changes. --- ext/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/readme.md b/ext/readme.md index 30cd779b3f..f2c9b509e8 100644 --- a/ext/readme.md +++ b/ext/readme.md @@ -1,7 +1,7 @@ ## ext Status | Package | Version / Commit | Usage | Notes :------: | :-------: | :----------------: | :---- | :---- -:: | `adba` | pymedusa/[70bc381](https://github.com/pymedusa/adba/tree/70bc381a75e20e1813c848c1edb7c6f16987397e) | **`medusa`** | - +:: | `adba` | pymedusa/[7a4819a](https://github.com/pymedusa/adba/tree/7a4819a477a68276d77fce2850a30a3ec4fb8ed8) | **`medusa`** | - :: | appdirs.py | [1.4.3](https://pypi.org/project/appdirs/1.4.3/) | `subliminal` (cli only), `simpleanidb` | - :: | `attrs` | [18.1.0](https://pypi.org/project/attrs/18.1.0/) | `imdbpie` | Module: `attr` :: | `babelfish` | [f403000](https://github.com/Diaoul/babelfish/tree/f403000dd63092cfaaae80be9f309fd85c7f20c9) | **`medusa`**, `guessit`, `knowit`, `subliminal` | - From 7afda0847d85bf56329d6d9c2a30c3d2ce53f015 Mon Sep 17 00:00:00 2001 From: p0ps Date: Thu, 20 Sep 2018 20:18:44 +0200 Subject: [PATCH 13/14] Update aniDBlink.py --- ext/adba/aniDBlink.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/adba/aniDBlink.py b/ext/adba/aniDBlink.py index 38ef9d5aba..8bf2d208cb 100644 --- a/ext/adba/aniDBlink.py +++ b/ext/adba/aniDBlink.py @@ -207,7 +207,7 @@ def _do_delay(self): def _send(self, command): if self.banned: logger.debug("NetIO | BANNED") - raise AniDBError(b"Not sending, banned") + raise AniDBError("Not sending, banned") self._do_delay() self.lastpacket = time() command.started = time() From 74680def5348b0b03f02fc2f7485b55f7e9d4ab7 Mon Sep 17 00:00:00 2001 From: p0ps Date: Thu, 20 Sep 2018 20:41:04 +0200 Subject: [PATCH 14/14] Update readme.md Updated adba commit. --- ext/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/readme.md b/ext/readme.md index 1e323321dd..469f2a513f 100644 --- a/ext/readme.md +++ b/ext/readme.md @@ -1,7 +1,7 @@ ## ext Status | Package | Version / Commit | Usage | py2 | py3 | Notes :------: | :-------: | :----------------: | :---- | :--: | :--: | :---- -:: | `adba` | pymedusa/[7a4819a](https://github.com/pymedusa/adba/tree/7a4819a477a68276d77fce2850a30a3ec4fb8ed8) | **`medusa`** | v | v | - +:: | `adba` | pymedusa/[fcb4bf4](https://github.com/pymedusa/adba/tree/fcb4bf43f10ca53f3beb915707c877581b1bf2a5) | **`medusa`** | v | v | - :: | appdirs.py | [1.4.3](https://pypi.org/project/appdirs/1.4.3/) | `subliminal` (cli only), `simpleanidb` | v | v | - :: | `attrs` | [18.1.0](https://pypi.org/project/attrs/18.1.0/) | `imdbpie` | v | v | Module: `attr` :: | `babelfish` | [f403000](https://github.com/Diaoul/babelfish/tree/f403000dd63092cfaaae80be9f309fd85c7f20c9) | **`medusa`**, `guessit`, `knowit`, `subliminal` | v | v | -