From e493ab048aeb02e45d83520e137e6dece6c78b11 Mon Sep 17 00:00:00 2001 From: Serene-Arc Date: Fri, 5 Nov 2021 12:47:46 +1000 Subject: [PATCH] Fix bug with period not separating file extension --- bdfr/file_name_formatter.py | 5 ++++- tests/test_file_name_formatter.py | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/bdfr/file_name_formatter.py b/bdfr/file_name_formatter.py index 2fbf95f..e81fe7f 100644 --- a/bdfr/file_name_formatter.py +++ b/bdfr/file_name_formatter.py @@ -110,8 +110,11 @@ class FileNameFormatter: index = f'_{str(index)}' if index else '' if not resource.extension: raise BulkDownloaderException(f'Resource from {resource.url} has no extension') - ending = index + resource.extension file_name = str(self._format_name(resource.source_submission, self.file_format_string)) + if not re.match(r'.*\.$',file_name) and not re.match(r'^\..*',resource.extension): + ending = index + '.' + resource.extension + else: + ending = index + resource.extension try: file_path = self._limit_file_name_length(file_name, ending, subfolder) diff --git a/tests/test_file_name_formatter.py b/tests/test_file_name_formatter.py index f596d89..f9bb2ad 100644 --- a/tests/test_file_name_formatter.py +++ b/tests/test_file_name_formatter.py @@ -13,6 +13,9 @@ import pytest from bdfr.file_name_formatter import FileNameFormatter from bdfr.resource import Resource +from bdfr.site_downloaders.base_downloader import BaseDownloader +from bdfr.site_downloaders.fallback_downloaders.youtubedl_fallback import YoutubeDlFallback +from bdfr.site_downloaders.youtube import Youtube @pytest.fixture() @@ -380,3 +383,23 @@ def test_windows_max_path(tmp_path: Path): result = FileNameFormatter._limit_file_name_length('test' * 100, '_1.png', tmp_path) assert len(str(result)) <= 260 assert len(result.name) <= (260 - len(str(tmp_path))) + + +@pytest.mark.online +@pytest.mark.reddit +@pytest.mark.parametrize(('test_reddit_id', 'test_downloader', 'expected_names'), ( + ('gphmnr', YoutubeDlFallback, {'He has a lot to say today.mp4'}), + ('d0oir2', YoutubeDlFallback, {"Crunk's finest moment. Welcome to the new subreddit!.mp4"}), +)) +def test_name_submission( + test_reddit_id: str, + test_downloader: type(BaseDownloader), + expected_names: set[str], + reddit_instance: praw.reddit.Reddit, +): + test_submission = reddit_instance.submission(id=test_reddit_id) + test_resources = test_downloader(test_submission).find_resources() + test_formatter = FileNameFormatter('{TITLE}', '', '') + results = test_formatter.format_resource_paths(test_resources, Path('.')) + results = set([r[0].name for r in results]) + assert expected_names == results