From bb5931389adb026bd44a7d552912fbf1f1ca130c Mon Sep 17 00:00:00 2001 From: vvzvlad Date: Fri, 18 Apr 2025 03:52:43 +0300 Subject: [PATCH] add fwd title prefix --- post_parser.py | 22 ++++++++++++++-------- tests/test_postparser_gen_title.py | 27 +++++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/post_parser.py b/post_parser.py index 0e87ae9..8a51c38 100644 --- a/post_parser.py +++ b/post_parser.py @@ -214,11 +214,22 @@ class PostParser: def _generate_title(self, message: Message) -> str: #Tests: tests/postparser_gen_title.py """Generate a title for a message, based on its content.""" + title = None - # Check for service messages first - service_message_title = self._service_message_title(message) - if service_message_title: return service_message_title + title = self._service_message_title(message) + if title is None: title = self._generate_base_title(message) + + if title is None: title = self._media_message_title(message) + + if title is None: title = "❓ Unknown Post" + + if message.forward_origin: title = f"FWD: {title}" + + return title + + def _generate_base_title(self, message: Message) -> str: + """Generates the base title without the FWD prefix.""" # --- Text Processing --- (Phase 1: Process text if available) text = message.text or message.caption or '' text_stripped = text.strip() @@ -271,12 +282,7 @@ class PostParser: if text_has_urls: # If original text had any URL (and wasn't YouTube/Webpage with title) return "🔗 Web link" - # Process media content (if no suitable text title) - media_title = self._media_message_title(message) - if media_title: return media_title - # If nothing matches - return "❓ Unknown Post" def _format_forward_info(self, message: Message) -> Union[str, None]: if forward_origin := getattr(message, "forward_origin", None): diff --git a/tests/test_postparser_gen_title.py b/tests/test_postparser_gen_title.py index cc20042..fb0cc63 100644 --- a/tests/test_postparser_gen_title.py +++ b/tests/test_postparser_gen_title.py @@ -434,9 +434,32 @@ class TestPostParserGenerateTitle(unittest.TestCase): def test_generate_title_forwarded_post(self): """Forwarded post should have title 'FWD: ...'""" forward_origin_mock = MagicMock() - message = self._create_mock_message(text="Forwarded post", forward_origin=forward_origin_mock) + message = self._create_mock_message(text="Forwarded post text line 1.\nLine 2", forward_origin=forward_origin_mock) title = self.parser._generate_title(message) - self.assertTrue(title.startswith("FWD:"), f"Title for forwarded post should start with 'FWD:', got: {title}") + self.assertEqual(title, "FWD: Forwarded post text line 1") + + def test_generate_title_forwarded_photo(self): + """Forwarded photo should have title 'FWD: ...'""" + forward_origin_mock = MagicMock() + message = self._create_mock_message(media=MessageMediaType.PHOTO, caption="Short cap", forward_origin=forward_origin_mock) + title = self.parser._generate_title(message) + # Media title is used because caption is short + self.assertEqual(title, "FWD: 📷 Photo") + + def test_generate_title_forwarded_photo_long_caption(self): + """Forwarded photo with long caption should use caption for title 'FWD: ...'""" + forward_origin_mock = MagicMock() + message = self._create_mock_message(media=MessageMediaType.PHOTO, caption="This is a long enough caption for photo", forward_origin=forward_origin_mock) + title = self.parser._generate_title(message) + self.assertEqual(title, "FWD: This is a long enough caption for photo") + + def test_generate_title_forwarded_long_text(self): + """Forwarded long text should use text for title 'FWD: ...'""" + forward_origin_mock = MagicMock() + message = self._create_mock_message(text="This is a long enough text to be forwarded, very long", forward_origin=forward_origin_mock) + title = self.parser._generate_title(message) + self.assertEqual(title, "FWD: This is a long enough text to be forwarded, very...") + if __name__ == '__main__':