From 4113b68661624912b407ec4f67ee42ca15b3bed1 Mon Sep 17 00:00:00 2001 From: zenrac Date: Fri, 29 Dec 2017 02:38:36 +0100 Subject: [PATCH 1/4] Minor fix to prevent from an error in some cases Sometime, the anime don't have any rank, especially if it is an hentai. It prevent from an IndexError. --- myanimelist/media.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/myanimelist/media.py b/myanimelist/media.py index 01aa57f..bdc21b9 100644 --- a/myanimelist/media.py +++ b/myanimelist/media.py @@ -270,8 +270,11 @@ def parse_sidebar(self, media_page): if len(rank_tag_results) == 0: raise Exception("Couldn't find rank tag.") # rank_tag is a lxml.etree._ElementUnicodeResult here: - rank_tag = rank_tag_results[0].getparent().xpath(".//text()[contains(.,'#')]")[0] - media_info['rank'] = int(rank_tag.strip()[1:].replace(',', '')) + try: + rank_tag = rank_tag_results[0].getparent().xpath(".//text()[contains(.,'#')]")[0] + media_info['rank'] = int(rank_tag.strip()[1:].replace(',', '')) + except IndexError: # It may happen + media_info['rank'] = "N/A" except: if not self.session.suppress_parse_exceptions: raise From 493ab28d89b7d9e60c38b14dcd1e5dd6f7b63c9e Mon Sep 17 00:00:00 2001 From: zenrac Date: Fri, 29 Dec 2017 02:49:55 +0100 Subject: [PATCH 2/4] Update setup.py --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 6b61b6d..ce08a2b 100644 --- a/setup.py +++ b/setup.py @@ -21,7 +21,7 @@ 'download_url': 'https://github.com/pushrbx/python3-mal/archive/master.zip', 'author_email': 'contact@pushrbx.net', 'version': '0.2.10', - 'install_requires': ['urllib3==1.21.1', 'requests', 'pytz', 'lxml', 'cssselect'], + 'install_requires': ['urllib3', 'requests', 'pytz', 'lxml', 'cssselect'], 'tests_require': ['nose'], 'packages': ['myanimelist'] } From da7f0047064c59fdc81619642a3177d0934a3b73 Mon Sep 17 00:00:00 2001 From: zenrac Date: Fri, 29 Dec 2017 03:00:08 +0100 Subject: [PATCH 3/4] Bad fix but prevent from an error This is a lazy fix to avoid an error when the mal user don't display his birthday year. (It should check if it can display month or day at least instead) --- myanimelist/utilities.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/myanimelist/utilities.py b/myanimelist/utilities.py index bdf6018..fbdec47 100644 --- a/myanimelist/utilities.py +++ b/myanimelist/utilities.py @@ -156,7 +156,10 @@ def parse_profile_date(text, suppress=False): try: parsed_date = datetime.datetime.strptime(text, '%b %d, %I:%M %p') except ValueError: - parsed_date = datetime.datetime.strptime(text, '%b %d, %Y %I:%M %p') + try: + parsed_date = datetime.datetime.strptime(text, '%b %d, %Y %I:%M %p') + except ValueError: # if the user don't display his birthday year, it never work. + parsed_date = None # see if it's a month/year pairing. return parsed_date if parsed_date is not None else None except: From 6e16644ab1d62bcaf83cb669997601b715821fed Mon Sep 17 00:00:00 2001 From: zenrac Date: Fri, 29 Dec 2017 14:16:40 +0100 Subject: [PATCH 4/4] Check if the dict is empty instead of catching an Exception --- myanimelist/media.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/myanimelist/media.py b/myanimelist/media.py index bdc21b9..9428443 100644 --- a/myanimelist/media.py +++ b/myanimelist/media.py @@ -270,11 +270,14 @@ def parse_sidebar(self, media_page): if len(rank_tag_results) == 0: raise Exception("Couldn't find rank tag.") # rank_tag is a lxml.etree._ElementUnicodeResult here: - try: - rank_tag = rank_tag_results[0].getparent().xpath(".//text()[contains(.,'#')]")[0] + + contains = rank_tag_results[0].getparent().xpath(".//text()[contains(.,'#')]") + if contains: + rank_tag = contains[0] media_info['rank'] = int(rank_tag.strip()[1:].replace(',', '')) - except IndexError: # It may happen + else: media_info['rank'] = "N/A" + except: if not self.session.suppress_parse_exceptions: raise