From 8e155ff0f7cf0fd98c00fc9aa5d36a956ae2afa0 Mon Sep 17 00:00:00 2001 From: drew2a Date: Thu, 18 Aug 2022 17:17:45 +0200 Subject: [PATCH] Add null check for the `entry.tag_processor_version` --- .../restapi/metadata_endpoint_base.py | 3 +- .../restapi/tests/test_metadata_endpoint.py | 52 +++++++++++++------ 2 files changed, 37 insertions(+), 18 deletions(-) diff --git a/src/tribler/core/components/metadata_store/restapi/metadata_endpoint_base.py b/src/tribler/core/components/metadata_store/restapi/metadata_endpoint_base.py index 1e235198f46..e428432bb7f 100644 --- a/src/tribler/core/components/metadata_store/restapi/metadata_endpoint_base.py +++ b/src/tribler/core/components/metadata_store/restapi/metadata_endpoint_base.py @@ -76,7 +76,8 @@ def extract_tags(self, entry): if not is_torrent or not self.tag_rules_processor: return - is_auto_generated_tags_not_created = entry.tag_processor_version < self.tag_rules_processor.version + is_auto_generated_tags_not_created = entry.tag_processor_version is None or \ + entry.tag_processor_version < self.tag_rules_processor.version if is_auto_generated_tags_not_created: generated = self.tag_rules_processor.process_torrent_title(infohash=entry.infohash, title=entry.title) entry.tag_processor_version = self.tag_rules_processor.version diff --git a/src/tribler/core/components/metadata_store/restapi/tests/test_metadata_endpoint.py b/src/tribler/core/components/metadata_store/restapi/tests/test_metadata_endpoint.py index 636270b79bd..c0da6e7b886 100644 --- a/src/tribler/core/components/metadata_store/restapi/tests/test_metadata_endpoint.py +++ b/src/tribler/core/components/metadata_store/restapi/tests/test_metadata_endpoint.py @@ -1,16 +1,15 @@ import json -from unittest.mock import MagicMock +from unittest.mock import MagicMock, Mock +import pytest from aiohttp.web_app import Application - from ipv8.util import succeed - from pony.orm import db_session -import pytest - from tribler.core.components.metadata_store.db.orm_bindings.channel_node import COMMITTED, TODELETE, UPDATED +from tribler.core.components.metadata_store.db.serialization import REGULAR_TORRENT from tribler.core.components.metadata_store.restapi.metadata_endpoint import MetadataEndpoint, TORRENT_CHECK_TIMEOUT +from tribler.core.components.metadata_store.restapi.metadata_endpoint_base import MetadataEndpointBase from tribler.core.components.restapi.rest.base_api_test import do_request from tribler.core.components.restapi.rest.rest_manager import error_middleware from tribler.core.components.torrent_checker.torrent_checker.torrent_checker import TorrentChecker @@ -174,18 +173,19 @@ async def test_get_entry(rest_api, metadata_store): Test getting an entry with REST API GET request """ for md_type, kwargs in ( - ( - metadata_store.TorrentMetadata, - {"title": "bla", "infohash": random_infohash(), "tracker_info": "http://sometracker.local/announce"}, - ), - ( - metadata_store.ChannelDescription, - { - "text": json.dumps( - {"description_text": "*{{}bla <\\> [)]// /ee2323㋛㋛㋛ ", "channel_thumbnail": "ffffff.jpg"} - ) - }, - ), + ( + metadata_store.TorrentMetadata, + {"title": "bla", "infohash": random_infohash(), + "tracker_info": "http://sometracker.local/announce"}, + ), + ( + metadata_store.ChannelDescription, + { + "text": json.dumps( + {"description_text": "*{{}bla <\\> [)]// /ee2323㋛㋛㋛ ", "channel_thumbnail": "ffffff.jpg"} + ) + }, + ), ): with db_session: md = md_type(**kwargs) @@ -244,3 +244,21 @@ async def test_check_torrent_query(rest_api, udp_tracker, metadata_store): """ infohash = b'a' * 20 await do_request(rest_api, f"metadata/torrents/{infohash}/health?timeout=wrong_value&refresh=1", expected_code=400) + + +def test_extract_tags(): + # Test that in the case of empty `tag_processor_version` no NPE raise + # see: https://github.com/Tribler/tribler/issues/6986 + mds_endpoint = MetadataEndpointBase( + MagicMock(), + tags_db=MagicMock(), + tag_rules_processor=MagicMock( + version=1 + ) + ) + entry = MagicMock( + get_type=Mock(return_value=REGULAR_TORRENT), + tag_processor_version=None + ) + mds_endpoint.extract_tags(entry) + assert entry.tag_processor_version == 1