diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml new file mode 100644 index 00000000..815dc66b --- /dev/null +++ b/.github/workflows/unittest.yml @@ -0,0 +1,33 @@ +# This workflow will install Python dependencies, run tests and lint with a single version of Python +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions + +name: unittest + +on: + push: + pull_request: + +permissions: + contents: read + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: Set up Python 3.10 + uses: actions/setup-python@v3 + with: + python-version: "3.10" + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + + - name: Test + run: | + cd auto_bangumi + python -m unittest discover tests \ No newline at end of file diff --git a/auto_bangumi/parser/analyser/raw_parser.py b/auto_bangumi/parser/analyser/raw_parser.py index e8ae015a..39547356 100644 --- a/auto_bangumi/parser/analyser/raw_parser.py +++ b/auto_bangumi/parser/analyser/raw_parser.py @@ -4,9 +4,9 @@ from parser.episode import Episode logger = logging.getLogger(__name__) -EPISODE_RE = re.compile(r"\d{1,3}") +EPISODE_RE = re.compile(r"\d+") TITLE_RE = re.compile( - r"(.*|\[.*])( -? \d{1,3} |\[\d{1,3}]|\[\d{1,3}.?[vV]\d{1}]|[第]\d{1,3}[话話集]|\[\d{1,3}.?END])(.*)" + r"(.*|\[.*])( -? \d+ |\[\d+]|\[\d+.?[vV]\d{1}]|[第]\d+[话話集]|\[\d+.?END])(.*)" ) RESOLUTION_RE = re.compile(r"1080|720|2160|4K") SOURCE_RE = re.compile(r"B-Global|[Bb]aha|[Bb]ilibili|AT-X|Web") diff --git a/auto_bangumi/test.sh b/auto_bangumi/test.sh deleted file mode 100755 index e12d8809..00000000 --- a/auto_bangumi/test.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -exec python -m unittest discover tests \ No newline at end of file diff --git a/auto_bangumi/tests/test_raw_parser.py b/auto_bangumi/tests/test_raw_parser.py index 00f18cc9..f134e862 100644 --- a/auto_bangumi/tests/test_raw_parser.py +++ b/auto_bangumi/tests/test_raw_parser.py @@ -1,4 +1,5 @@ import unittest +from random import randrange from parser.analyser import RawParser @@ -15,14 +16,27 @@ class TestRawParser(unittest.TestCase): self.assertEqual(info.ep_info.number, 22) self.assertEqual(info.season_info.number, 2) - content = "【幻樱字幕组】【4月新番】【古见同学有交流障碍症 第一季 Komi-san wa, Komyushou Desu. S01】【23】【GB_MP4】【4K】" + content = "[百冬练习组&LoliHouse] BanG Dream! 少女乐团派对!☆PICO FEVER! / Garupa Pico: Fever! - 26 [WebRip 1080p HEVC-10bit AAC][简繁内封字幕][END] [101.69 MB]" info = parser.analyse(content) - self.assertEqual(info.title, "Komi-san wa, Komyushou Desu.") - self.assertEqual(info.dpi, "4K") - self.assertEqual(info.ep_info.number, 23) + self.assertEqual(info.group, "百冬练习组&LoliHouse") + self.assertEqual(info.title, "BanG Dream! 少女乐团派对!☆PICO FEVER!") + self.assertEqual(info.dpi, "1080p") + self.assertEqual(info.ep_info.number, 26) self.assertEqual(info.season_info.number, 1) + content = "【喵萌奶茶屋】★04月新番★[夏日重现/Summer Time Rendering][11][1080p][繁日双语][招募翻译] [539.4 MB]" + info = parser.analyse(content) + self.assertEqual(info.group, "喵萌奶茶屋") + self.assertEqual(info.title, "Summer Time Rendering") + self.assertEqual(info.dpi, "1080p") + self.assertEqual(info.ep_info.number, 11) + self.assertEqual(info.season_info.number, 1) + + content = "【喵萌奶茶屋】★04月新番★夏日重现/Summer Time Rendering[11][1080p][繁日双语][招募翻译] [539.4 MB]" + info = parser.analyse(content) + self.assertEqual(info.title, "Summer Time Rendering") + def test_pre_process(self): content = "【幻樱字幕组】【4月新番】" expected_content = "[幻樱字幕组][4月新番]" @@ -51,3 +65,25 @@ class TestRawParser(unittest.TestCase): self.assertEqual(len(ret), 3) for i in range(3): self.assertEqual(ret[i], expected[i]) + + def test_episode(self): + parser = RawParser() + for epi in range(1, 100000, 100): + content = f"【幻樱字幕组】【4月新番】【古见同学有交流障碍症 第一季 Komi-san wa, Komyushou Desu. S01】【{epi}】【GB_MP4】【4K】" + info = parser.analyse(content) + self.assertEqual(info.ep_info.number, epi) + + for epi in range(1, 100000, 100): + content = f"[Nekomoe kissaten][Summer Time Rendering - {epi} [1080p][JPTC].mp4" + info = parser.analyse(content) + self.assertEqual(info.ep_info.number, epi) + + def test_season(self): + chinese_number_arr = ["一", "二", "三", "四", + "五", "六", "七", "八", "九", "十", "十一", "十二"] + parser = RawParser() + for i in range(1, 13): + season = str(i).zfill(2) + content = f"【幻樱字幕组】【古见同学有交流障碍症 第{chinese_number_arr[i - 1]}季 Komi-san wa, Komyushou Desu. S{season}】[1]" + info = parser.analyse(content) + self.assertEqual(info.season_info.number, i) diff --git a/requirements.txt b/requirements.txt index cc2d907a..6abe3490 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,11 +1,20 @@ -qbittorrent-api -bs4 -requests==2.28.0 -pysocks -lxml - -setuptools~=62.1.0 -fastapi -uvicorn~=0.17.6 -jinja2 -pydantic~=1.9.1 \ No newline at end of file +anyio==3.6.1 +beautifulsoup4==4.11.1 +certifi==2022.6.15 +charset-normalizer==2.1.0 +click==8.1.3 +fastapi==0.78.0 +h11==0.13.0 +idna==3.3 +pydantic==1.9.1 +PySocks==1.7.1 +qbittorrent-api==2022.5.32 +requests==2.28.1 +six==1.16.0 +sniffio==1.2.0 +soupsieve==2.3.2.post1 +starlette==0.19.1 +thefuzz==0.19.0 +typing_extensions==4.3.0 +urllib3==1.26.9 +uvicorn==0.18.2