From 80714e2d60dae68001428d77c733cc5a1420f04c Mon Sep 17 00:00:00 2001 From: EstrellaXD Date: Thu, 7 Jul 2022 18:10:00 +0800 Subject: [PATCH] 2.5.7 fix rename module --- .gitignore | 1 + auto_bangumi/ab_decorator/__init__.py | 2 +- auto_bangumi/api.py | 8 ++- auto_bangumi/conf/const.py | 5 +- auto_bangumi/conf/log.py | 2 + auto_bangumi/core/renamer.py | 1 - auto_bangumi/core/rss_analyser.py | 2 - auto_bangumi/parser/analyser/raw_parser.py | 23 +++----- auto_bangumi/parser/analyser/rename_parser.py | 53 +++++++++++++------ auto_bangumi/parser/title_parser.py | 1 + .../All-in-one/docker-compose.yml | 2 + .../AutoBangumi/docker-compose.yml | 2 + .../docker-compose.yml | 3 +- requirements.txt | 11 ++-- 14 files changed, 71 insertions(+), 45 deletions(-) diff --git a/.gitignore b/.gitignore index ff641821..9af62208 100644 --- a/.gitignore +++ b/.gitignore @@ -171,3 +171,4 @@ cython_debug/ /auto_bangumi/parser/analyser/tmdb.py +/auto_bangumi/run_debug.sh diff --git a/auto_bangumi/ab_decorator/__init__.py b/auto_bangumi/ab_decorator/__init__.py index 379a6e4c..b2d8c691 100644 --- a/auto_bangumi/ab_decorator/__init__.py +++ b/auto_bangumi/ab_decorator/__init__.py @@ -18,6 +18,6 @@ def qb_connect_failed_wait(func): except Exception as e: logger.debug(f"URL: {args[0]}") logger.warning("Cannot connect to qBittorrent. Wait 5 min and retry...") - time.sleep(3) + time.sleep(300) times += 1 return wrapper diff --git a/auto_bangumi/api.py b/auto_bangumi/api.py index f8771fe0..57bf91ce 100644 --- a/auto_bangumi/api.py +++ b/auto_bangumi/api.py @@ -31,6 +31,12 @@ def get_data(): return data +@app.get("/api/v1/log") +def get_log(): + with open(settings.log_path, "r") as f: + return f.read() + + @app.get("/api/v1/resetRule") def reset_rule(): data = {} @@ -46,7 +52,7 @@ class RuleName(BaseModel): def remove_rule(name: RuleName): datas = json_config.load(settings.info_path)["bangumi_info"] for data in datas: - if re.search(name.name, data["raw_title"]) is not None: + if re.search(name.name.lower(), data["title_raw"].lower()) is not None: datas.remove(data) json_config.save(settings.info_path, datas) return "Success" diff --git a/auto_bangumi/conf/const.py b/auto_bangumi/conf/const.py index 3deec962..ab3ca114 100644 --- a/auto_bangumi/conf/const.py +++ b/auto_bangumi/conf/const.py @@ -1,7 +1,7 @@ # -*- encoding: utf-8 -*- DEFAULT_SETTINGS = { - "version": "2.5.5", + "version": "2.5.6", "data_version": 4.0, "host_ip": "localhost:8080", "sleep_time": 7200, @@ -26,7 +26,8 @@ DEFAULT_SETTINGS = { "socks": None, "enable_rss_collector": True, "enable_rename": True, - "reset_folder": False + "reset_folder": False, + "log_path": "/config/log.txt", } ENV_TO_ATTR = { diff --git a/auto_bangumi/conf/log.py b/auto_bangumi/conf/log.py index 1641d34a..fdee00f7 100644 --- a/auto_bangumi/conf/log.py +++ b/auto_bangumi/conf/log.py @@ -7,6 +7,8 @@ def setup_logger(): DATE_FORMAT = "%Y-%m-%d %X" LOGGING_FORMAT = "%(asctime)s %(levelname)s: %(message)s" logging.basicConfig( + filename=settings.log_path, + filemode="w", level=level, datefmt=DATE_FORMAT, format=LOGGING_FORMAT, diff --git a/auto_bangumi/core/renamer.py b/auto_bangumi/core/renamer.py index e64bc3e1..4feeb69c 100644 --- a/auto_bangumi/core/renamer.py +++ b/auto_bangumi/core/renamer.py @@ -63,7 +63,6 @@ class Renamer: continue except: logger.warning(f"{path_name} rename failed") - logger.debug(f"origin: {name}") if settings.remove_bad_torrent: self.client.delete_torrent(torrent_hash) self.print_result(torrent_count, rename_count) diff --git a/auto_bangumi/core/rss_analyser.py b/auto_bangumi/core/rss_analyser.py index a86caed6..11499aed 100644 --- a/auto_bangumi/core/rss_analyser.py +++ b/auto_bangumi/core/rss_analyser.py @@ -20,7 +20,6 @@ class RSSAnalyser: rss_titles = self._request.get_titles(settings.rss_link) self._request.close_session() for raw_title in rss_titles: - logger.debug(raw_title) extra_add = True if bangumi_info is not []: for d in bangumi_info: @@ -47,7 +46,6 @@ class RSSAnalyser: download_client.add_rules(bangumi_info, rss_link=settings.rss_link) except Exception as e: logger.debug(e) - logger.info("Connection error.") logger.info("Finished") diff --git a/auto_bangumi/parser/analyser/raw_parser.py b/auto_bangumi/parser/analyser/raw_parser.py index 39547356..e951b736 100644 --- a/auto_bangumi/parser/analyser/raw_parser.py +++ b/auto_bangumi/parser/analyser/raw_parser.py @@ -27,7 +27,6 @@ CHINESE_NUMBER_MAP = { class RawParser: - @staticmethod def get_group(name: str) -> str: return re.split(r"[\[\]]", name)[1] @@ -66,7 +65,7 @@ class RawParser: @staticmethod def name_process(name: str): name = name.strip() - split = re.split("/| |- ", name.replace("(仅限港澳台地区)", "")) + split = re.split("/|\s{2}|-\s{2}", name.replace("(仅限港澳台地区)", "")) while "" in split: split.remove("") if len(split) == 1: @@ -79,22 +78,19 @@ class RawParser: r"([^\x00-\xff]{1,})(\s)([\x00-\xff]{4,})", name) if match_obj is not None: return match_obj.group(3), split - compare = 0 - for name in split: + compare, compare_idx = 0, 0 + for idx, name in list(enumerate(split)): l = re.findall("[aA-zZ]{1}", name).__len__() if l > compare: compare = l - for name in split: - if re.findall("[aA-zZ]{1}", name).__len__() == compare: - return name.strip(), split - raise ValueError() + compare_idx = idx + return split[compare_idx], split @staticmethod def find_tags(other): elements = re.sub(r"[\[\]()()]", " ", other).split(" ") # find CHT sub, resolution, source = None, None, None - for element in filter(lambda x: x != "", elements): if SUB_RE.search(element): sub = element @@ -152,12 +148,9 @@ class RawParser: return None info = Episode() info.title = name - info.season_info.number = season - info.season_info.raw = sr + info.season_info.number, info.season_info.raw = season, sr info.ep_info.number = episode - info.subtitle = sub - info.dpi = dpi - info.source = source + info.subtitle, info.dpi, info.source = sub, dpi, source info.title_info.group = ng info.group = group return info @@ -165,5 +158,5 @@ class RawParser: if __name__ == "__main__": test = RawParser() - ep = test.analyse("[Lilith-Raws] 神渣☆偶像 / Kami Kuzu☆Idol - 01 [Baha][WEB-DL][1080p][AVC AAC][CHT][MP4]") + ep = test.analyse("[ANi] Classroom of the Elite S2 - 欢迎来到实力至上主义的教室 第二季 - 01 [1080P][Baha][WEB-DL][AAC AVC][CHT][MP4]") print(ep.title, ep.dpi) diff --git a/auto_bangumi/parser/analyser/rename_parser.py b/auto_bangumi/parser/analyser/rename_parser.py index 0ff89b92..231e8aa8 100644 --- a/auto_bangumi/parser/analyser/rename_parser.py +++ b/auto_bangumi/parser/analyser/rename_parser.py @@ -18,7 +18,9 @@ class DownloadParser: r"(.*)第(\d*\.*\d*)話(?:END)?(.*)", ] - def rename_normal(self, name, season): + def rename_normal(self, info_dict): + name = info_dict["name"] + season = info_dict["season"] for rule in self.rules: match_obj = re.match(rule, name, re.I) if match_obj is not None: @@ -26,7 +28,9 @@ class DownloadParser: new_name = f"{title} S{season}E{match_obj.group(2)}{match_obj.group(3)}" return new_name - def rename_pn(self, name, season): + def rename_pn(self, info_dict): + name = info_dict["name"] + season = info_dict["season"] n = re.split(r"[\[\]()【】()]", name) file_name = name.replace(f"[{n[1]}]", "") if season < 10: @@ -42,7 +46,10 @@ class DownloadParser: ) return new_name - def rename_advance(self, name, folder_name, season): + def rename_advance(self, info_dict): + name = info_dict["name"] + folder_name = info_dict["folder_name"] + season = info_dict["season"] n = re.split(r"[\[\]()【】()]", name) file_name = name.replace(f"[{n[1]}]", "") if season < 10: @@ -57,7 +64,8 @@ class DownloadParser: ) return new_name - def rename_no_season_pn(self, name): + def rename_no_season_pn(self, info_dict): + name = info_dict["name"] n = re.split(r"[\[\]()【】()]", name) file_name = name.replace(f"[{n[1]}]", "") for rule in self.rules: @@ -72,20 +80,33 @@ class DownloadParser: return new_name def download_rename(self, name, folder_name, season, method): - if method.lower() == "pn": - return self.rename_pn(name, season) - elif method.lower() == "normal": - return self.rename_normal(name, season) - elif method.lower() == "none": - return name - elif method.lower() == "advance": - return self.rename_advance(name, folder_name, season) - elif method.lower() == "no_season_pn": - return self.rename_no_season_pn(name) + info_dict = { + "name": name, + "folder_name": folder_name, + "season": season, + } + method_dict = { + "normal": self.rename_normal, + "pn": self.rename_pn, + "advance": self.rename_advance, + "no_season_pn": self.rename_no_season_pn, + } + logger.debug(f"Name: {folder_name}, File type: {path.splitext(name)[-1]}, Season {season}") + return method_dict[method](info_dict) + # if method.lower() == "pn": + # return self.rename_pn(name, season) + # elif method.lower() == "normal": + # return self.rename_normal(name, season) + # elif method.lower() == "none": + # return name + # elif method.lower() == "advance": + # return self.rename_advance(name, folder_name, season) + # elif method.lower() == "no_season_pn": + # return self.rename_no_season_pn(name) if __name__ == "__main__": - name = "[Nekomoe kissaten][Summer Time Rendering - 11 [1080p][JPTC][9900E95].mp4" + name = "[NC-Raws] 來自深淵 烈日的黃金鄉 - 01 (Baha 1920x1080 AVC AAC MP4) [89D4923F].mp4" rename = DownloadParser() - new_name = rename.rename_pn(name, 1) + new_name = rename.download_rename(name, "Made abyess", 1, "pn") print(new_name) \ No newline at end of file diff --git a/auto_bangumi/parser/title_parser.py b/auto_bangumi/parser/title_parser.py index 2a34729a..c3a0678a 100644 --- a/auto_bangumi/parser/title_parser.py +++ b/auto_bangumi/parser/title_parser.py @@ -46,6 +46,7 @@ class TitleParser: "added": False, "eps_collect": True if settings.eps_complete else False, } + logger.debug(f"RAW:{raw} >> {episode.title}") return data except Exception as e: logger.debug(e) diff --git a/docs/docker-compose/All-in-one/docker-compose.yml b/docs/docker-compose/All-in-one/docker-compose.yml index 85dc5c7d..0dd3c3db 100644 --- a/docs/docker-compose/All-in-one/docker-compose.yml +++ b/docs/docker-compose/All-in-one/docker-compose.yml @@ -41,6 +41,8 @@ services: - auto_bangumi volumes: - auto_bangumi:/config + ports: + - 7892:7892 dns: - 8.8.8.8 - 223.5.5.5 diff --git a/docs/docker-compose/AutoBangumi/docker-compose.yml b/docs/docker-compose/AutoBangumi/docker-compose.yml index 086cc2f1..43b53f18 100644 --- a/docs/docker-compose/AutoBangumi/docker-compose.yml +++ b/docs/docker-compose/AutoBangumi/docker-compose.yml @@ -18,6 +18,8 @@ services: - AB_SEASON_ONE=True networks: - auto_bangumi + ports: + - 7892:7892 volumes: - auto_bangumi:/config dns: diff --git a/docs/docker-compose/qBittorrent+AutoBangumi/docker-compose.yml b/docs/docker-compose/qBittorrent+AutoBangumi/docker-compose.yml index d851f401..65d71dba 100644 --- a/docs/docker-compose/qBittorrent+AutoBangumi/docker-compose.yml +++ b/docs/docker-compose/qBittorrent+AutoBangumi/docker-compose.yml @@ -36,11 +36,12 @@ services: - AB_RSS=${RSS} - AB_DEBUG_MODE=False - AB_EP_COMPLETE=False - - AB_SEASON_ONE=True volumes: - auto_bangumi:/config networks: - auto_bangumi + ports: + - 7892:7892 dns: - 8.8.8.8 - 223.5.5.5 diff --git a/requirements.txt b/requirements.txt index 6abe3490..3ff9f17b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,8 @@ anyio==3.6.1 beautifulsoup4==4.11.1 +lxml certifi==2022.6.15 -charset-normalizer==2.1.0 +charset-normalizer click==8.1.3 fastapi==0.78.0 h11==0.13.0 @@ -9,12 +10,10 @@ idna==3.3 pydantic==1.9.1 PySocks==1.7.1 qbittorrent-api==2022.5.32 -requests==2.28.1 +requests six==1.16.0 sniffio==1.2.0 -soupsieve==2.3.2.post1 -starlette==0.19.1 -thefuzz==0.19.0 +soupsieve typing_extensions==4.3.0 urllib3==1.26.9 -uvicorn==0.18.2 +uvicorn