From 603c15cc9b84036e0fc4dacc56269d98865eaf63 Mon Sep 17 00:00:00 2001 From: sentenzo Date: Thu, 22 Sep 2022 17:33:31 +0300 Subject: [PATCH 1/3] refactoring --- config.yml | 7 +++-- narrator/exceptions.py | 2 +- narrator/telegram/worker.py | 34 +++++++--------------- narrator/text.py | 35 +++++++++++++++++++++-- narrator/to_txt.py | 19 ------------ narrator/{url_parser.py => web_parser.py} | 10 ++++--- tests/test_url_parser.py | 18 ++++++------ 7 files changed, 64 insertions(+), 61 deletions(-) delete mode 100644 narrator/to_txt.py rename narrator/{url_parser.py => web_parser.py} (90%) diff --git a/config.yml b/config.yml index afaa438..9cab92f 100644 --- a/config.yml +++ b/config.yml @@ -12,13 +12,14 @@ utils: blb2txt: path: c:\bin\blb2txt.exe -to_txt: +text: max_input_size: 5242880 # 5 * 2 ^ 20 == 5 MiB + input_formats: [".epub", ".fb2", ".fb3", ".md", ".txt", ".doc", ".docx", ".rtf", ".html", ".htm"] -url_parser: +web_parser: sites: habr: - url_re: https\://habr\.com/..(/company/[-\w]+/blog|/post)/\d+ + url_re: https\://habr\.com/..(/company/[-\w]+/blog|/post|/news/t)/\d+ lang: ru re: title: main h1[data-test-id="articleTitle"] span diff --git a/narrator/exceptions.py b/narrator/exceptions.py index 2bf8f84..42d9bc5 100644 --- a/narrator/exceptions.py +++ b/narrator/exceptions.py @@ -16,5 +16,5 @@ class UrlUnreachable(UrlParserException): pass -class TxtTransformerException(NarratorException): +class TextException(NarratorException): pass diff --git a/narrator/telegram/worker.py b/narrator/telegram/worker.py index 9c161a1..3dcabe8 100644 --- a/narrator/telegram/worker.py +++ b/narrator/telegram/worker.py @@ -5,17 +5,9 @@ from aiogram.types import Message, Document from narrator.exceptions import UrlParserException -import narrator.url_parser as url_parser -import narrator.to_txt as to_txt +import narrator.web_parser as web_parser from narrator.text import Text -from narrator.sub_utils import ( - balcon, - blb2txt, - ffmpeg__to_mp3, - add_suffix, - crop_suffix, - make_filename, -) +from narrator.sub_utils import make_filename class ValidityCheckResult(NamedTuple): @@ -39,10 +31,10 @@ async def produce_audio_file(self, directory: str) -> str: class UrlWorker(BaseWorker): def __init__(self, bot: Bot, message: Message) -> None: super().__init__(bot, message) - self._url = url_parser.Url(self._message.text) + self._url = web_parser.Url(self._message.text) def check_validity(self) -> ValidityCheckResult: - url: url_parser.Url = self._url + url: web_parser.Url = self._url if not url.is_valid: description = "Not a valid url" return ValidityCheckResult(False, description, description) @@ -63,10 +55,7 @@ def check_validity(self) -> ValidityCheckResult: async def produce_audio_file(self, directory: str) -> str: text: Text = self._url.parse() - # balcon.exe only works with UTF-8-BOM (or "utf-8-sig") - txt_path = text.save_to_txt(directory, encoding="utf-8-sig") - wav_path = balcon(txt_path) - mp3_path = ffmpeg__to_mp3(wav_path) + mp3_path = text.save_to_mp3(directory) return mp3_path @@ -85,15 +74,15 @@ def __init__(self, bot: Bot, message: Message) -> None: def check_validity(self) -> ValidityCheckResult: doc = self._doc - if not to_txt.has_proper_extention(doc.file_name): + if not Text.has_proper_extention(doc.file_name): description = "The file extention is not supported" user_description = "The file extention is not supported\n" user_description += "List of supported extentions:\n" - user_description += " " + ", ".join(to_txt.INPUT_FORMATS) + user_description += " " + ", ".join(Text.INPUT_FORMATS) return ValidityCheckResult(False, description, user_description) - elif doc.file_size > to_txt.MAX_INPUT_SIZE: + elif doc.file_size > Text.MAX_INPUT_SIZE: s_cur_mib = DocWorker._bytes_to_mib_str(doc.file_size) - s_max_mib = DocWorker._bytes_to_mib_str(to_txt.MAX_INPUT_SIZE) + s_max_mib = DocWorker._bytes_to_mib_str(Text.MAX_INPUT_SIZE) description = f"The file is too big: the file size is {s_cur_mib} MiB, and the max size allowed is {s_max_mib} MiB)" return ValidityCheckResult(False, description, description) return ValidityCheckResult(True) @@ -102,7 +91,6 @@ async def produce_audio_file(self, directory: str) -> str: filename = make_filename(self._doc.file_name) file_path = os.path.join(directory, filename) await self._bot.download(self._doc, file_path) - txt_path = blb2txt(file_path) - wav_path = balcon(txt_path) - mp3_path = ffmpeg__to_mp3(wav_path) + text = Text.from_file(file_path) + mp3_path = text.save_to_mp3(directory) return mp3_path diff --git a/narrator/text.py b/narrator/text.py index d1bb4a0..7ce2d53 100644 --- a/narrator/text.py +++ b/narrator/text.py @@ -4,14 +4,22 @@ import string import datetime +from narrator.sub_utils import blb2txt, balcon, ffmpeg__to_mp3 +from narrator.exceptions import TextException +import narrator.config + +conf = narrator.config.text + class Text: class Language(Enum): - # def __init__(self, char_set, name) -> None: - RU: str = "ru" EN: str = "en" + INPUT_FORMATS = conf.input_formats + + MAX_INPUT_SIZE = conf.max_input_size + @staticmethod def guess_language(text: str | list[str]) -> Language: stop_at = 1000 @@ -81,3 +89,26 @@ def from_txt(file_path: str, encoding: str = "utf-8") -> Text: filename = os.path.basename(file_path) title, _ = os.path.splitext(filename) return Text(title, text) + + def has_proper_extention(filename): + ext = os.path.splitext(filename)[1] + return ext.lower() in Text.INPUT_FORMATS + + @staticmethod + def from_file(file_path: str) -> Text: + if not Text.has_proper_extention(file_path): + raise TextException() + ext = os.path.splitext(file_path)[1] + if not ext == ".txt": + try: + file_path = blb2txt(file_path) + except TextException: + raise + return Text.from_txt(file_path) + + def save_to_mp3(self, directory: str, filename: str | None = None) -> str: + # balcon.exe only works with UTF-8-BOM (or "utf-8-sig") + txt_path = self.save_to_txt(directory, filename, "utf-8-sig") + wav_path = balcon(txt_path) + mp3_path = ffmpeg__to_mp3(wav_path) + return mp3_path diff --git a/narrator/to_txt.py b/narrator/to_txt.py deleted file mode 100644 index 6711c19..0000000 --- a/narrator/to_txt.py +++ /dev/null @@ -1,19 +0,0 @@ -import os - -import narrator.config -from narrator.sub_utils import blb2txt - -conf = narrator.config.to_txt - -INPUT_FORMATS = [".epub", ".fb2", ".fb3", ".md", ".txt", ".doc", ".docx", ".rtf"] - -MAX_INPUT_SIZE = conf.max_input_size - - -def has_proper_extention(filename): - ext = os.path.splitext(filename)[1] - return ext.lower() in INPUT_FORMATS - - -def to_txt(source, dest_directory) -> str: - return blb2txt(source) diff --git a/narrator/url_parser.py b/narrator/web_parser.py similarity index 90% rename from narrator/url_parser.py rename to narrator/web_parser.py index 169e986..eb72010 100644 --- a/narrator/url_parser.py +++ b/narrator/web_parser.py @@ -8,7 +8,7 @@ from narrator.text import Text import narrator.config -conf = narrator.config.url_parser +conf = narrator.config.web_parser # https://stackoverflow.com/a/38020041/2493536 def is_uri_valid(maybe_url: str) -> bool: @@ -70,9 +70,11 @@ def parse(self) -> Text: parse_config = self._pick_parse_config() if not parse_config: raise UrlParserException() - title = soup.select_one(parse_config.re.title).text - author = soup.select_one(parse_config.re.author).text - publication_date = soup.select_one(parse_config.re.publication_date) + title = soup.select_one(parse_config.re.title).text.strip() + author = soup.select_one(parse_config.re.author).text.strip() + publication_date: str = soup.select_one( + parse_config.re.publication_date + ).text.strip() paragraphs = [] paragraphs.append(f"author: {author}") diff --git a/tests/test_url_parser.py b/tests/test_url_parser.py index 0ccfc31..3217ccc 100644 --- a/tests/test_url_parser.py +++ b/tests/test_url_parser.py @@ -1,6 +1,6 @@ import pytest -import narrator.url_parser as urlp +import narrator.web_parser as wp VALID_URLS = [ @@ -32,22 +32,22 @@ def test_is_uri_valid(): for url in VALID_URLS: - assert urlp.is_uri_valid(url) - url_obj = urlp.Url(url) + assert wp.is_uri_valid(url) + url_obj = wp.Url(url) assert url_obj.is_valid for url in INVALID_URLS: - assert not urlp.is_uri_valid(url) - url_obj = urlp.Url(url) + assert not wp.is_uri_valid(url) + url_obj = wp.Url(url) assert not url_obj.is_valid @pytest.mark.slow def test_is_url_reachable(): for url in REACHABLE_URLS: - assert urlp.is_url_reachable(url) - url_obj = urlp.Url(url) + assert wp.is_url_reachable(url) + url_obj = wp.Url(url) assert url_obj.is_reachable for url in UNREACHABLE_URLS: - assert not urlp.is_url_reachable(url) - url_obj = urlp.Url(url) + assert not wp.is_url_reachable(url) + url_obj = wp.Url(url) assert not url_obj.is_reachable From 3d697b67736630668892a9e192ea68f989ccf0e8 Mon Sep 17 00:00:00 2001 From: sentenzo Date: Thu, 22 Sep 2022 18:00:10 +0300 Subject: [PATCH 2/3] language switches if necessary --- config.yml | 11 +++++++++++ narrator.webp | Bin 95594 -> 40770 bytes narrator/sub_utils.py | 20 ++++++++++++-------- narrator/text.py | 2 +- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/config.yml b/config.yml index 9cab92f..75b9d40 100644 --- a/config.yml +++ b/config.yml @@ -7,6 +7,17 @@ bot: utils: balcon: path: c:\bin\balcon.exe + defaults: + ru: + voice: Microsoft Irina Desktop + speed: 8 + volume: 100 + pitch: 0 + en: + voice: Microsoft Zira Desktop + speed: 4 + volume: 100 + pitch: 0 ffmpeg: path: c:\bin\ffmpeg.exe blb2txt: diff --git a/narrator.webp b/narrator.webp index da4a3dd35d3068e3453ee77281a8441febdc2244..36732a7c8185ca08f8888817ed733c677638ba69 100644 GIT binary patch literal 40770 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 WxN8BKr{c+vR_+gN&fl}A0001GWzaVO literal 95594 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¨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 diff --git a/narrator/sub_utils.py b/narrator/sub_utils.py index 764b395..a2c605b 100644 --- a/narrator/sub_utils.py +++ b/narrator/sub_utils.py @@ -1,6 +1,8 @@ import subprocess -import narrator.config as conf +import narrator.config + +conf = narrator.config.utils RSTR_LEN = 8 RSTR_POPULATION = "0123456789ABCDEF" @@ -57,7 +59,7 @@ def ffmpeg__to_mp3( to_file = add_suffix(from_file, ".mp3") - ffmpeg_path = conf.utils.ffmpeg.path + ffmpeg_path = conf.ffmpeg.path ffmpeg_args = [ffmpeg_path] ffmpeg_args.extend(["-i", from_file]) ffmpeg_args.extend(["-b:a", f"{bitrate}k"]) @@ -67,16 +69,18 @@ def ffmpeg__to_mp3( return to_file -def balcon(from_txt_file: str): +def balcon(from_txt_file: str, language: str = "ru"): to_file = add_suffix(from_txt_file, ".wav") - balcon_path = conf.utils.balcon.path + lang_conf = conf.balcon.defaults[language] + + balcon_path = conf.balcon.path balcon_args = [balcon_path] balcon_args.extend(["-f", from_txt_file]) - balcon_args.extend(["-n", "Irina"]) - balcon_args.extend(["-s", "8"]) - balcon_args.extend(["-p", "0"]) - # balcon_args.extend(["-v", "100"]) + balcon_args.extend(["-n", lang_conf.voice]) + balcon_args.extend(["-s", str(lang_conf.speed)]) + balcon_args.extend(["-p", str(lang_conf.pitch)]) + balcon_args.extend(["-v", str(lang_conf.volume)]) balcon_args.extend(["-w", to_file]) subprocess.run(balcon_args) diff --git a/narrator/text.py b/narrator/text.py index 7ce2d53..57b77a4 100644 --- a/narrator/text.py +++ b/narrator/text.py @@ -109,6 +109,6 @@ def from_file(file_path: str) -> Text: def save_to_mp3(self, directory: str, filename: str | None = None) -> str: # balcon.exe only works with UTF-8-BOM (or "utf-8-sig") txt_path = self.save_to_txt(directory, filename, "utf-8-sig") - wav_path = balcon(txt_path) + wav_path = balcon(txt_path, self._lang.value) mp3_path = ffmpeg__to_mp3(wav_path) return mp3_path From 1c99cd5fe5957f9cde3dcc8218fb48dffa250790 Mon Sep 17 00:00:00 2001 From: sentenzo Date: Thu, 22 Sep 2022 21:39:41 +0300 Subject: [PATCH 3/3] massive refactoring --- config.yml | 2 +- narrator/exceptions.py | 10 +++ narrator/sub_utils.py | 103 ------------------------------ narrator/telegram/worker.py | 6 +- narrator/text/language.py | 25 ++++++++ narrator/{ => text}/text.py | 42 ++++++------ narrator/{ => text}/web_parser.py | 8 ++- narrator/thirdparty.py | 58 +++++++++++++++++ narrator/utils.py | 45 +++++++++++++ tests/test_sub_utils.py | 2 +- tests/test_url_parser.py | 2 +- 11 files changed, 167 insertions(+), 136 deletions(-) delete mode 100644 narrator/sub_utils.py create mode 100644 narrator/text/language.py rename narrator/{ => text}/text.py (75%) rename narrator/{ => text}/web_parser.py (89%) create mode 100644 narrator/thirdparty.py create mode 100644 narrator/utils.py diff --git a/config.yml b/config.yml index 75b9d40..c9d30de 100644 --- a/config.yml +++ b/config.yml @@ -4,7 +4,7 @@ bot: token: # 0123456789:will_be_taken_from_.env allowed_usernames: ["durov"] # will be enriched from .env -utils: +thirdparty: balcon: path: c:\bin\balcon.exe defaults: diff --git a/narrator/exceptions.py b/narrator/exceptions.py index 42d9bc5..7d51aa0 100644 --- a/narrator/exceptions.py +++ b/narrator/exceptions.py @@ -4,6 +4,9 @@ class NarratorException(Exception): """ +### + + class UrlParserException(NarratorException): pass @@ -16,5 +19,12 @@ class UrlUnreachable(UrlParserException): pass +class ParsingRulesNotFound(UrlParserException): + pass + + +### + + class TextException(NarratorException): pass diff --git a/narrator/sub_utils.py b/narrator/sub_utils.py deleted file mode 100644 index a2c605b..0000000 --- a/narrator/sub_utils.py +++ /dev/null @@ -1,103 +0,0 @@ -import subprocess - -import narrator.config - -conf = narrator.config.utils - -RSTR_LEN = 8 -RSTR_POPULATION = "0123456789ABCDEF" - - -def rand_str(k=RSTR_LEN): - import random - - return "".join(random.choices(RSTR_POPULATION, k=k)) - - -def crop_suffix(file_path): - from os.path import dirname, basename, join, splitext - - d, f = dirname(file_path), basename(file_path) - f, e = splitext(f) - if len(f) > (RSTR_LEN + 1) and f[-(RSTR_LEN + 1)] == "_": - rstr = f[-RSTR_LEN:] - if all(c in RSTR_POPULATION for c in rstr): - f = f[:~RSTR_LEN] - return join(d, f + e) - - -def add_suffix(file_path, ext=None): - file_path = crop_suffix(file_path) - - from os.path import dirname, basename, join, splitext - - new_filename = [dirname(file_path)] - old_filename, old_ext = splitext(basename(file_path)) - ext = ext or old_ext or "" - new_filename.append(f"{old_filename}_{rand_str()}{ext}") - return join(*new_filename) - - -def make_filename(file_name: str): - """ - Removes all the symbols from the given string which are not in allowed in filenames. - The name of the file is chosen based on the source content. It initially can have any symbols like ':' or '/'. - """ - from string import digits, ascii_letters - - cyrilic = "абвгдеёжзиклмнопрстуфхцчшщьыъэюя" - alphabet = digits + ascii_letters + cyrilic + cyrilic.upper() + " _-&%@#!()." - file_name = "".join([c for c in file_name if c in alphabet]) - return file_name - - -def ffmpeg__to_mp3( - from_file: str, - bitrate: int = 96, -): - # ffmpeg -i input.wav -vn -ar 44100 -ac 2 -b:a 192k output.mp3 - - to_file = add_suffix(from_file, ".mp3") - - ffmpeg_path = conf.ffmpeg.path - ffmpeg_args = [ffmpeg_path] - ffmpeg_args.extend(["-i", from_file]) - ffmpeg_args.extend(["-b:a", f"{bitrate}k"]) - ffmpeg_args.append(to_file) - subprocess.run(ffmpeg_args) - - return to_file - - -def balcon(from_txt_file: str, language: str = "ru"): - to_file = add_suffix(from_txt_file, ".wav") - - lang_conf = conf.balcon.defaults[language] - - balcon_path = conf.balcon.path - balcon_args = [balcon_path] - balcon_args.extend(["-f", from_txt_file]) - balcon_args.extend(["-n", lang_conf.voice]) - balcon_args.extend(["-s", str(lang_conf.speed)]) - balcon_args.extend(["-p", str(lang_conf.pitch)]) - balcon_args.extend(["-v", str(lang_conf.volume)]) - balcon_args.extend(["-w", to_file]) - - subprocess.run(balcon_args) - - return to_file - - -def blb2txt(from_file: str): - # .\blb2txt -f tst.docx -out txt.txt -e utf8 - to_file = add_suffix(from_file, ".txt") - - blb2txt_path = conf.utils.blb2txt.path - blb2txt_args = [blb2txt_path] - blb2txt_args.extend(["-f", from_file]) - blb2txt_args.extend(["-out", to_file]) - blb2txt_args.extend(["-e", "utf8"]) - - subprocess.run(blb2txt_args) - - return to_file diff --git a/narrator/telegram/worker.py b/narrator/telegram/worker.py index 3dcabe8..325f01e 100644 --- a/narrator/telegram/worker.py +++ b/narrator/telegram/worker.py @@ -5,9 +5,9 @@ from aiogram.types import Message, Document from narrator.exceptions import UrlParserException -import narrator.web_parser as web_parser -from narrator.text import Text -from narrator.sub_utils import make_filename +import narrator.text.web_parser as web_parser +from narrator.text.text import Text +from narrator.utils import make_filename class ValidityCheckResult(NamedTuple): diff --git a/narrator/text/language.py b/narrator/text/language.py new file mode 100644 index 0000000..28898ac --- /dev/null +++ b/narrator/text/language.py @@ -0,0 +1,25 @@ +import string +from enum import Enum + + +class Language(Enum): + RU: str = "ru" + EN: str = "en" + + @staticmethod + def get_val(ch: str) -> str | None: + for lang_val in ALPHABETS: + if ch in ALPHABETS[lang_val]: + return lang_val + return None + + +EN_ALPHABET = string.ascii_letters + +RU_ALPHABET = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя" +RU_ALPHABET += RU_ALPHABET.upper() + +ALPHABETS = { + Language.RU.value: RU_ALPHABET, + Language.EN.value: EN_ALPHABET, +} diff --git a/narrator/text.py b/narrator/text/text.py similarity index 75% rename from narrator/text.py rename to narrator/text/text.py index 57b77a4..d6c2aa8 100644 --- a/narrator/text.py +++ b/narrator/text/text.py @@ -1,20 +1,18 @@ from __future__ import annotations import os -from enum import Enum -import string import datetime -from narrator.sub_utils import blb2txt, balcon, ffmpeg__to_mp3 +from narrator.thirdparty import blb2txt, balcon, ffmpeg__to_mp3 +from narrator.utils import make_filename from narrator.exceptions import TextException +from narrator.text.language import Language + import narrator.config conf = narrator.config.text class Text: - class Language(Enum): - RU: str = "ru" - EN: str = "en" INPUT_FORMATS = conf.input_formats @@ -33,36 +31,32 @@ def guess_language(text: str | list[str]) -> Language: break text = "".join(to_join) - en_set = string.ascii_letters - ru_set = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя" - ru_set += ru_set.upper() - char_count = 0 - score = {"en": 0, "ru": 0} + score = {lang.value: 0 for lang in Language} for ch in text: - if ch in en_set: - score["en"] += 1 - char_count += 1 - elif ch in ru_set: - score["ru"] += 1 - char_count += 1 - if char_count >= stop_at: - break - return Text.Language.EN if score["en"] >= score["ru"] else Text.Language.RU + lang_val = Language.get_val(ch) + if lang_val: + score[lang_val] += 1 + if lang_val: + char_count += 1 + if char_count >= stop_at: + break + _, max_lang_val = max((cnt, lang_val) for lang_val, cnt in score.items()) + return Language(max_lang_val) def __init__( - self, title: str, paragraphs: list[str] | str, lang: Text.Language | None = None + self, title: str, paragraphs: list[str] | str, lang: Language | None = None ) -> None: self._title = title self._paragraphs = paragraphs - self._lang: Text.Language = lang or Text.guess_language(paragraphs) + self._lang: Language = lang or Text.guess_language(paragraphs) self._datetime = datetime.datetime.now() def _preamble(self) -> str: preamble = [] preamble.append(self._title) - if self._lang == Text.Language.RU: + if self._lang == Language.RU: preamble.append("Создано: " + self._datetime.strftime("%Y-%m-%d %H:%M:%S")) else: preamble.append("Created: " + self._datetime.strftime("%Y-%m-%d %H:%M:%S")) @@ -72,7 +66,7 @@ def save_to_txt( self, directory: str, filename: str | None = None, encoding: str = "utf-8" ) -> str: if not filename: - filename = self._title + ".txt" + filename = make_filename(self._title + ".txt") file_path = os.path.join(directory, filename) with open(file_path, mode="w", encoding=encoding) as txt: # utf-8-sig txt.write(self._preamble() + "\n") diff --git a/narrator/web_parser.py b/narrator/text/web_parser.py similarity index 89% rename from narrator/web_parser.py rename to narrator/text/web_parser.py index eb72010..09dd5ec 100644 --- a/narrator/web_parser.py +++ b/narrator/text/web_parser.py @@ -4,8 +4,8 @@ from bs4 import BeautifulSoup -from narrator.exceptions import UrlInvalid, UrlUnreachable, UrlParserException -from narrator.text import Text +from narrator.exceptions import UrlInvalid, UrlUnreachable, ParsingRulesNotFound +from narrator.text.text import Text import narrator.config conf = narrator.config.web_parser @@ -69,7 +69,9 @@ def parse(self) -> Text: soup = BeautifulSoup(html, "html.parser") parse_config = self._pick_parse_config() if not parse_config: - raise UrlParserException() + raise ParsingRulesNotFound( + f"The rules to parse {self._url} are not specified in the config file" + ) title = soup.select_one(parse_config.re.title).text.strip() author = soup.select_one(parse_config.re.author).text.strip() publication_date: str = soup.select_one( diff --git a/narrator/thirdparty.py b/narrator/thirdparty.py new file mode 100644 index 0000000..04523ec --- /dev/null +++ b/narrator/thirdparty.py @@ -0,0 +1,58 @@ +import subprocess + +from narrator.utils import add_suffix +import narrator.config + +conf = narrator.config.thirdparty + + +def ffmpeg__to_mp3( + from_file: str, + bitrate: int = 96, +): + # ffmpeg -i input.wav -vn -ar 44100 -ac 2 -b:a 192k output.mp3 + + to_file = add_suffix(from_file, ".mp3") + + ffmpeg_path = conf.ffmpeg.path + ffmpeg_args = [ffmpeg_path] + ffmpeg_args.extend(["-i", from_file]) + ffmpeg_args.extend(["-b:a", f"{bitrate}k"]) + ffmpeg_args.append(to_file) + subprocess.run(ffmpeg_args) + + return to_file + + +def balcon(from_txt_file: str, language: str = "ru"): + to_file = add_suffix(from_txt_file, ".wav") + + lang_conf = conf.balcon.defaults[language] + + balcon_path = conf.balcon.path + balcon_args = [balcon_path] + balcon_args.extend(["-f", from_txt_file]) + balcon_args.extend(["-n", lang_conf.voice]) + balcon_args.extend(["-s", str(lang_conf.speed)]) + balcon_args.extend(["-p", str(lang_conf.pitch)]) + balcon_args.extend(["-v", str(lang_conf.volume)]) + balcon_args.extend(["-w", to_file]) + + subprocess.run(balcon_args) + + return to_file + + +def blb2txt(from_file: str): + # .\blb2txt -f tst.docx -out txt.txt -e utf8 + to_file = add_suffix(from_file, ".txt") + + blb2txt_path = conf.blb2txt.path + blb2txt_args = [blb2txt_path] + blb2txt_args.extend(["-f", from_file]) + blb2txt_args.extend(["-out", to_file]) + blb2txt_args.extend(["-e", "utf8"]) + + subprocess.run(blb2txt_args) + + return to_file diff --git a/narrator/utils.py b/narrator/utils.py new file mode 100644 index 0000000..e7e9a61 --- /dev/null +++ b/narrator/utils.py @@ -0,0 +1,45 @@ +import random + +from narrator.text.language import ALPHABETS + +RAND_STR_LEN = 8 +RAND_STR_POPULATION = "0123456789ABCDEF" + + +def rand_str(k=RAND_STR_LEN): + return "".join(random.choices(RAND_STR_POPULATION, k=k)) + + +def crop_suffix(file_path): + from os.path import dirname, basename, join, splitext + + d, f = dirname(file_path), basename(file_path) + f, e = splitext(f) + if len(f) > (RAND_STR_LEN + 1) and f[-(RAND_STR_LEN + 1)] == "_": + rstr = f[-RAND_STR_LEN:] + if all(c in RAND_STR_POPULATION for c in rstr): + f = f[:~RAND_STR_LEN] + return join(d, f + e) + + +def add_suffix(file_path, ext=None): + file_path = crop_suffix(file_path) + + from os.path import dirname, basename, join, splitext + + new_filename = [dirname(file_path)] + old_filename, old_ext = splitext(basename(file_path)) + ext = ext or old_ext or "" + new_filename.append(f"{old_filename}_{rand_str()}{ext}") + return join(*new_filename) + + +def make_filename(file_name: str): + """ + Removes all the symbols from the given string which are not in allowed in filenames. + The name of the file is chosen based on the source content. It initially can have any symbols like ':' or '/'. + """ + all_lang_alphabets = "".join(ALPHABETS.values()) + alphabet = all_lang_alphabets + "0123456789 _-&%@#!()." + file_name = "".join([c for c in file_name if c in alphabet]) + return file_name diff --git a/tests/test_sub_utils.py b/tests/test_sub_utils.py index 4073aca..ed3a678 100644 --- a/tests/test_sub_utils.py +++ b/tests/test_sub_utils.py @@ -2,7 +2,7 @@ import pytest -from narrator.sub_utils import make_filename, rand_str, crop_suffix, add_suffix +from narrator.utils import make_filename, rand_str, crop_suffix, add_suffix def test_rand_str(): diff --git a/tests/test_url_parser.py b/tests/test_url_parser.py index 3217ccc..18c8653 100644 --- a/tests/test_url_parser.py +++ b/tests/test_url_parser.py @@ -1,6 +1,6 @@ import pytest -import narrator.web_parser as wp +import narrator.text.web_parser as wp VALID_URLS = [