Skip to content

Commit

Permalink
Merge pull request #44 from alexlitvinenko/fix-priorities
Browse files Browse the repository at this point in the history
Preserve user-defined quality priorities
  • Loading branch information
idlesign committed Sep 2, 2019
2 parents ed90d84 + 9cba437 commit 4835572
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 15 deletions.
22 changes: 22 additions & 0 deletions tests/trackers/test_anilibria.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,25 @@
])
def test_sanitize_quantity(test_input, expected):
assert AnilibriaTracker.sanitize_quality(test_input) == expected


def test_get_download_link_preserve_priorities(monkeypatch):
"""
Test that `get_download_link` returns link according user-defined quality priorities
"""

# given
testable = AnilibriaTracker(quality_prefs=['webrip720p', 'webrip1080p'])
expected = 'https://www.anilibria.tv/upload/torrents/webrip720p.torrent'

def mockreturn(url):
return {
'webrip1080p': 'https://www.anilibria.tv/upload/torrents/webrip1080p.torrent',
'webrip720p': expected,
}

monkeypatch.setattr(testable, "find_available_qualities", mockreturn)
# when
actual = testable.get_download_link('https://anilibria.tv/release/dummy_release.html')
# then
assert actual == expected
45 changes: 30 additions & 15 deletions torrt/trackers/anilibria.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,25 +28,17 @@ def __init__(self, quality_prefs=None):

def get_download_link(self, url):
"""Tries to find .torrent file download link at forum thread page and return that one."""
page_soup = self.get_response(url, as_soup=True)

available_qualities = {}
rows = page_soup.select('#publicTorrentTable tr')
for row in rows:
quality_td = row.select('td.torrentcol1')
quality_str = quality_td[0].text.strip()
match = REGEX_QUALITY.search(quality_str)
if match:
quality = self.sanitize_quality(match.group(1))
link = self.expand_link(url, row.select('td.torrentcol4 a.torrent-download-link')[0]['href'])
available_qualities[quality] = link
else:
LOGGER.warning('Cannot extract quality from `%s`', quality_str)
available_qualities = self.find_available_qualities(url)

LOGGER.debug('Available in qualities: %s', ', '.join(available_qualities.keys()))

if available_qualities:
quality_prefs = {self.sanitize_quality(pref) for pref in self.quality_prefs}
quality_prefs = []
for pref in self.quality_prefs:
pref = self.sanitize_quality(pref)
if pref not in quality_prefs:
quality_prefs.append(pref)

preferred_qualities = [quality for quality in quality_prefs if quality in available_qualities]
if not preferred_qualities:
LOGGER.info('Torrent is not available in preferred qualities: %s', ', '.join(quality_prefs))
Expand All @@ -61,6 +53,29 @@ def get_download_link(self, url):

return None

def find_available_qualities(self, url):
"""
Tries to find .torrent download links at forum thread page.
:param url: url to forum thread page
:return: dict where key is quality and value is .torrent download link
"""
page_soup = self.get_response(url, as_soup=True)

available_qualities = {}
rows = page_soup.select('#publicTorrentTable tr')
for row in rows:
quality_td = row.select('td.torrentcol1')
quality_str = quality_td[0].text.strip()
match = REGEX_QUALITY.search(quality_str)
if match:
quality = self.sanitize_quality(match.group(1))
link = self.expand_link(url, row.select('td.torrentcol4 a.torrent-download-link')[0]['href'])
available_qualities[quality] = link
else:
LOGGER.warning('Cannot extract quality from `%s`', quality_str)

return available_qualities

@staticmethod
def sanitize_quality(quality_str):
"""
Expand Down

0 comments on commit 4835572

Please sign in to comment.