Browse Source

Change simplify sceneQuality regexes to improve manageability.

Add some tests.
Pep8.
pull/1200/head
JackDandy 7 years ago
parent
commit
fb8d14e404
  1. 94
      sickbeard/common.py
  2. 12
      tests/common_tests.py

94
sickbeard/common.py

@ -205,70 +205,82 @@ class Quality:
from sickbeard import encodingKludge as ek
name = ek.ek(os.path.basename, name)
checkName = lambda quality_list, func: func([re.search(x, name, re.I) for x in quality_list])
check_name = (lambda quality_list, func=all: func([re.search(q, name, re.I) for q in quality_list]))
if anime:
dvdOptions = checkName(['dvd', 'dvdrip'], any)
blueRayOptions = checkName(['bluray', 'blu-ray', 'BD'], any)
sdOptions = checkName(['360p', '480p', '848x480', 'XviD'], any)
hdOptions = checkName(['720p', '1280x720', '960x720'], any)
fullHD = checkName(['1080p', '1920x1080'], any)
sd_options = check_name(['360p', '480p', '848x480', 'XviD'], any)
dvd_options = check_name(['dvd', 'dvdrip'], any)
blue_ray_options = check_name(['bluray', 'blu-ray', 'BD'], any)
if sdOptions and not blueRayOptions and not dvdOptions:
if sd_options and not dvd_options and not blue_ray_options:
return Quality.SDTV
elif dvdOptions:
if dvd_options:
return Quality.SDDVD
elif hdOptions and not blueRayOptions and not fullHD:
return Quality.HDTV
elif fullHD and not blueRayOptions and not hdOptions:
return Quality.FULLHDTV
elif hdOptions and not blueRayOptions and not fullHD:
return Quality.HDWEBDL
elif blueRayOptions and hdOptions and not fullHD:
return Quality.HDBLURAY
elif blueRayOptions and fullHD and not hdOptions:
return Quality.FULLHDBLURAY
elif sickbeard.ANIME_TREAT_AS_HDTV:
hd_options = check_name(['720p', '1280x720', '960x720'], any)
full_hd = check_name(['1080p', '1920x1080'], any)
if not blue_ray_options:
if hd_options and not full_hd:
return Quality.HDTV
if not hd_options and full_hd:
return Quality.FULLHDTV
# this cond already checked above, commented out for now
# if hd_options and not full_hd:
# return Quality.HDWEBDL
else:
if hd_options and not full_hd:
return Quality.HDBLURAY
if not hd_options and full_hd:
return Quality.FULLHDBLURAY
if sickbeard.ANIME_TREAT_AS_HDTV:
logger.log(u'Treating file: %s with "unknown" quality as HDTV per user settings' % name, logger.DEBUG)
return Quality.HDTV
else:
return Quality.UNKNOWN
return Quality.UNKNOWN
if checkName(['(pdtv|hdtv|dsr|tvrip)([-]|.((aac|ac3|dd).?\d\.?\d.)*(xvid|[hx]?.?26[45]|vp9|av1))'], all) and not checkName(['(720|1080|2160)[pi]'], all) \
and not checkName(['hr.ws.pdtv.(x264|h.?264)'], any):
fmt = '((h.?|x)26[45]|vp9|av1)'
webfmt = 'web.?(dl|rip|.%s)' % fmt
rips = 'b[r|d]rip'
hd_rips = 'blu.?ray|hddvd|%s' % rips
# for check in []:
if check_name(['(hdtv|pdtv|dsr|tvrip)([-]|.((aac|ac3|dd).?\d\.?\d.)*(xvid|%s))' % fmt]) \
and not (check_name(['(720|1080|2160)[pi]']) or check_name(['hr.ws.pdtv.(x264|h.?264)'])):
return Quality.SDTV
elif checkName(['web.?(dl|rip|.[hx]26[45])', 'xvid|[hx]?.?26[45]|vp9|av1'], all) and not checkName(['(720|1080|2160)[pi]'], all):
if check_name([webfmt, 'xvid|%s' % fmt]) \
and not check_name(['(720|1080|2160)[pi]']):
return Quality.SDTV
elif checkName(['(dvd.?rip|b[r|d]rip)(.ws)?(.(xvid|divx|[hx]?.?26[45]|vp9|av1))?'], any) and not checkName(['(720|1080|2160)[pi]'], all):
if check_name(['(dvd.?rip|%s)(.ws)?(.(xvid|divx|%s))?' % (rips, fmt)]) \
and not check_name(['(720|1080|2160)[pi]']):
return Quality.SDDVD
elif checkName(['(xvid|divx|480p)'], any) and not checkName(['(720|1080|2160)[pi]'], all) \
and not checkName(['hr.ws.pdtv.([hx]?.?26[45]|vp9|av1)'], any):
if check_name(['(xvid|divx|480p)']) \
and not (check_name(['(720|1080|2160)[pi]']) or check_name(['hr.ws.pdtv.%s' % fmt])):
return Quality.SDTV
elif checkName(['720p', 'hdtv', '[hx]?.?26[45]|vp9|av1'], all) or checkName(['hr.ws.pdtv.([hx]?.?26[45]|vp9|av1)'], any) \
and not checkName(['(1080|2160)[pi]'], all):
if check_name(['720p', 'hdtv', fmt]) or check_name(['hr.ws.pdtv.%s' % fmt]) \
and not check_name(['(1080|2160)[pi]']):
return Quality.HDTV
elif checkName(['720p|1080i', 'hdtv', 'mpeg-?2'], all) or checkName(['1080[pi].hdtv', 'h.?264'], all):
if check_name(['720p|1080i', 'hdtv', 'mpeg-?2']) or check_name(['1080[pi].hdtv', 'h.?264']):
return Quality.RAWHDTV
elif checkName(['1080p', 'hdtv', '[hx]?.?26[45]|vp9|av1'], all):
if check_name(['1080p', 'hdtv', fmt]):
return Quality.FULLHDTV
elif checkName(['720p', 'web.?(dl|rip|.[hx]?.?26[45]|.vp9|.av1)'], all) or checkName(['720p', 'itunes', '[hx]?.?26[45]|vp9|av1'], all):
if check_name(['720p', webfmt]) or check_name(['720p', 'itunes', fmt]):
return Quality.HDWEBDL
elif checkName(['1080p', 'web.?(dl|rip|.[hx]?.?26[45]|.vp9|.av1)'], all) or checkName(['1080p', 'itunes', '[hx]?.?26[45]|vp9|av1'], all):
if check_name(['1080p', webfmt]) or check_name(['1080p', 'itunes', fmt]):
return Quality.FULLHDWEBDL
elif checkName(['720p', 'blu.?ray|hddvd|b[r|d]rip', '[hx]?.?26[45]|vp9|av1'], all):
if check_name(['720p', hd_rips, fmt]):
return Quality.HDBLURAY
elif checkName(['1080p', 'blu.?ray|hddvd|b[r|d]rip', '[hx]?.?26[45]|vp9|av1'], all) or \
(checkName(['1080[pi]', 'remux'], all) and not checkName(['hdtv'], all)):
if check_name(['1080p', hd_rips, fmt]) \
or (check_name(['1080[pi]', 'remux']) and not check_name(['hdtv'])):
return Quality.FULLHDBLURAY
elif checkName(['2160p', 'web.?(dl|rip|.[hx]?.?26[45]|.vp9|.av1)'], all):
if check_name(['2160p', webfmt]):
return Quality.UHD4KWEB
# p2p
elif checkName(['720HD'], all) and not checkName(['(1080|2160)[pi]'], all):
if check_name(['720HD']) \
and not check_name(['(1080|2160)[pi]']):
return Quality.HDTV
elif checkName(['1080p', 'blu.?ray|hddvd|b[r|d]rip', 'avc|vc[-\s.]?1'], all):
if check_name(['1080p', hd_rips, 'avc|vc[-\s.]?1']):
return Quality.FULLHDBLURAY
else:
return Quality.UNKNOWN
return Quality.UNKNOWN
@staticmethod
def fileQuality(filename):

12
tests/common_tests.py

@ -75,6 +75,8 @@ class QualityTests(unittest.TestCase):
'Test.Show.S01E02.WEB.x264-GROUP',
'Test.Show.S01E02.WEB.h265-GROUP',
'Test.Show.S01E02.WEB.x265-GROUP',
'Test.Show.S01E02.WEB.VP9-GROUP',
'Test.Show.S01E02.WEB.AV1-GROUP',
'Test.Show.S01E02.WEBRip.h264-GROUP',
'Test.Show.S01E02.WEBRip.x264-GROUP'])
@ -90,6 +92,7 @@ class QualityTests(unittest.TestCase):
'Test.Show.S01E02.BDRIP.XViD-GROUP',
'Test.Show.S01E02.BDRIP.DiVX-GROUP',
'Test.Show.S01E02.BDRIP.x264-GROUP',
'Test.Show.S01E02.BDRIP.VP9-GROUP',
'Test.Show.S01E02.BDRIP.WS.XViD-GROUP',
'Test.Show.S01E02.BDRIP.WS.DiVX-GROUP',
'Test.Show.S01E02.BDRIP.WS.x264-GROUP'])
@ -97,6 +100,7 @@ class QualityTests(unittest.TestCase):
def test_HDTV(self):
self.check_quality_names(common.Quality.HDTV, [
'Test.Show.S01E02.720p.HDTV.x264-GROUP',
'Test.Show.S01E02.720p.HDTV.VP9-GROUP',
'Test.Show.S01E02.HR.WS.PDTV.x264-GROUP',
'Test.Show.S01E02.720p.AHDTV.x264-GROUP'])
@ -111,6 +115,7 @@ class QualityTests(unittest.TestCase):
def test_FULLHDTV(self):
self.check_quality_names(common.Quality.FULLHDTV, [
'Test.Show.S01E02.1080p.HDTV.x264-GROUP',
'Test.Show.S01E02.1080p.HDTV.vp9-GROUP',
'Test.Show.S01E02.1080p.AHDTV.x264-GROUP'])
def test_HDWEBDL(self):
@ -131,6 +136,7 @@ class QualityTests(unittest.TestCase):
'Test.Show.S01E02.720p.WEB.x264-GROUP',
'Test.Show.S01E02.720p.WEB.h265-GROUP',
'Test.Show.S01E02.720p.WEB.x265-GROUP',
'Test.Show.S01E02.720p.WEB.vp9-GROUP',
'Test.Show.S01E02.720p.WEBRip.h264-GROUP',
'Test.Show.S01E02.720p.WEBRip.x264-GROUP'])
@ -151,12 +157,14 @@ class QualityTests(unittest.TestCase):
'Test.Show.S01E02.1080p.WEB.x264-GROUP',
'Test.Show.S01E02.1080p.WEB.h265-GROUP',
'Test.Show.S01E02.1080p.WEB.x265-GROUP',
'Test.Show.S01E02.1080p.WEB.VP9-GROUP',
'Test.Show.S01E02.1080p.WEBRip.h264-GROUP',
'Test.Show.S01E02.1080p.WEBRip.x264-GROUP'])
def test_HDBLURAY(self):
self.check_quality_names(common.Quality.HDBLURAY, [
'Test.Show.S01E02.720p.BluRay.x264-GROUP',
'Test.Show.S01E02.720p.BluRay.vp9-GROUP',
'Test.Show.S01E02.720p.HDDVD.x264-GROUP',
'Test.Show.S01E02.720p.Blu-ray.x264-GROUP'])
@ -165,13 +173,15 @@ class QualityTests(unittest.TestCase):
'Test.Show.S01E02.1080p.BluRay.x264-GROUP',
'Test.Show.S01E02.1080p.HDDVD.x264-GROUP',
'Test.Show.S01E02.1080p.Blu-ray.x264-GROUP',
'Test.Show.S01E02.1080p.Blu-ray.vp9-GROUP',
'Test Show S02 1080p Remux AVC FLAC 5.1'])
def test_UHD4KWEB(self):
self.check_quality_names(common.Quality.UHD4KWEB, [
'Test.Show.S01E02.2160p.WEBRip.h264-GROUP',
'Test.Show.S01E02.2160p.WEBRip.x264-GROUP',
'Test.Show.S01E02.2160p.WEBRip.x265-GROUP'])
'Test.Show.S01E02.2160p.WEBRip.x265-GROUP',
'Test.Show.S01E02.2160p.WEBRip.vp9-GROUP'])
def test_UNKNOWN(self):
self.check_quality_names(common.Quality.UNKNOWN, ['Test.Show.S01E02-SiCKGEAR'])

Loading…
Cancel
Save