mirror of https://github.com/Nezreka/SoulSync.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.8 KiB
74 lines
2.8 KiB
"""Release-title parser — the Sonarr-style seam that pulls quality + season/episode
|
|
scope out of a raw release name. Isolated from music."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from core.video.release_parse import parse_release
|
|
|
|
|
|
def test_movie_release():
|
|
p = parse_release("The Matrix 1999 2160p UHD BluRay x265 TrueHD Atmos-FraMeSToR")
|
|
assert p["resolution"] == "2160p" and p["source"] == "bluray"
|
|
assert p["codec"] == "hevc" and p["audio"] == "atmos"
|
|
assert p["group"] == "FraMeSToR"
|
|
assert p["season"] is None and p["episode"] is None
|
|
assert not p["is_season_pack"] and not p["is_series_pack"]
|
|
|
|
|
|
def test_single_episode():
|
|
p = parse_release("The.Wire.S02E03.1080p.WEB-DL.x264-GROUP")
|
|
assert p["season"] == 2 and p["episode"] == 3
|
|
assert p["source"] == "web-dl" and p["codec"] == "x264"
|
|
assert not p["is_season_pack"] and not p["is_series_pack"]
|
|
|
|
|
|
def test_season_pack_no_episode():
|
|
p = parse_release("The Wire S02 1080p BluRay x265 DDP5.1-GROUP")
|
|
assert p["season"] == 2 and p["episode"] is None
|
|
assert p["is_season_pack"] is True and p["is_series_pack"] is False
|
|
|
|
|
|
def test_season_word_pack():
|
|
p = parse_release("The.Wire.Season.2.COMPLETE.720p.HDTV.x264")
|
|
assert p["season"] == 2
|
|
# "COMPLETE" + a single season word → treated as a series/complete pack
|
|
assert p["is_series_pack"] is True
|
|
|
|
|
|
def test_series_range_pack():
|
|
p = parse_release("The Wire S01-S05 COMPLETE 1080p BluRay x265-GROUP")
|
|
assert p["season"] == 1 and p["season_end"] == 5
|
|
assert p["is_series_pack"] is True
|
|
|
|
|
|
def test_hdr_and_dv():
|
|
assert parse_release("Dune 2021 2160p BluRay HDR10 x265")["hdr"] == "hdr10"
|
|
assert parse_release("Dune 2021 2160p WEB-DL DV HEVC")["hdr"] == "dv"
|
|
assert parse_release("Dune 2021 1080p BluRay x264")["hdr"] is None
|
|
|
|
|
|
def test_junk_sources_detected_for_rejection():
|
|
assert parse_release("Some Movie 2024 HDCAM x264")["source"] == "cam"
|
|
assert parse_release("Some Movie 2024 DVDScr XviD")["source"] == "screener"
|
|
assert parse_release("Some.Movie.2024.1080p.WEB-DL.x264.3D")["three_d"] is True
|
|
|
|
|
|
def test_repack_proper():
|
|
p = parse_release("Show.S01E01.REPACK.1080p.WEB-DL.x265-GRP")
|
|
assert p["repack"] is True
|
|
assert parse_release("Show.S01E01.PROPER.1080p.HDTV.x264")["proper"] is True
|
|
|
|
|
|
def test_garbage_never_raises():
|
|
p = parse_release(None)
|
|
assert p["resolution"] is None and p["title"] == ""
|
|
assert parse_release(12345)["title"] == "12345"
|
|
|
|
|
|
def test_plain_web_is_recognised_as_a_source():
|
|
# 'WEB' (not just 'WEB-DL') is extremely common — must parse as web-dl
|
|
assert parse_release("Show S01E01 1080p WEB h264-GRP")["source"] == "web-dl"
|
|
assert parse_release("Movie.2020.WEB.x265")["source"] == "web-dl"
|
|
# but it must NOT mis-grab the WEB inside WEBRip
|
|
assert parse_release("Movie 1080p WEBRip x264")["source"] == "webrip"
|