Skip to content

Commit

Permalink
Ensure tracker object
Browse files Browse the repository at this point in the history
  • Loading branch information
drew2a committed Aug 22, 2022
1 parent cc814e1 commit 8534a82
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from pony.orm import db_session

from tribler.core import notifications
from tribler.core.components.metadata_store.category_filter.category import default_category_filter
from tribler.core.components.metadata_store.category_filter.category import Category, default_category_filter
from tribler.core.components.metadata_store.category_filter.family_filter import default_xxx_filter
from tribler.core.components.metadata_store.db.orm_bindings.channel_node import COMMITTED
from tribler.core.components.metadata_store.db.serialization import EPOCH, REGULAR_TORRENT, TorrentMetadataPayload
Expand All @@ -21,13 +21,14 @@ def infohash_to_id(infohash):
return abs(unpack(">q", infohash[:8])[0])


def tdef_to_metadata_dict(tdef):
def tdef_to_metadata_dict(tdef, category_filter: Category = None):
"""
Helper function to create a TorrentMetadata-compatible dict from TorrentDef
"""
# We only want to determine the type of the data. XXX filtering is done by the receiving side
category_filter = category_filter or default_category_filter
try:
tags = default_category_filter.calculateCategory(tdef.metainfo, tdef.get_name_as_unicode())
tags = category_filter.calculateCategory(tdef.metainfo, tdef.get_name_as_unicode())
except UnicodeDecodeError:
tags = "Unknown"

Expand All @@ -36,13 +37,18 @@ def tdef_to_metadata_dict(tdef):
except ValueError:
torrent_date = EPOCH

tracker = tdef.get_tracker()
if not isinstance(tracker, bytes):
tracker = b''
tracker_url = ensure_unicode(tracker, 'utf-8')
tracker_info = get_uniformed_tracker_url(tracker_url) or ''
return {
"infohash": tdef.get_infohash(),
"title": tdef.get_name_as_unicode()[:300],
"tags": tags[:200],
"size": tdef.get_length(),
"torrent_date": torrent_date if torrent_date >= EPOCH else EPOCH,
"tracker_info": get_uniformed_tracker_url(ensure_unicode(tdef.get_tracker() or '', 'utf-8')) or '',
"tracker_info": tracker_info,
}


Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
from datetime import datetime
from time import time
from unittest.mock import MagicMock, Mock

import pytest
from ipv8.keyvault.crypto import default_eccrypto

from pony import orm
from pony.orm import db_session

import pytest

from tribler.core.components.libtorrent.torrentdef import TorrentDef
from tribler.core.components.metadata_store.db.orm_bindings.channel_node import TODELETE
from tribler.core.components.metadata_store.db.orm_bindings.discrete_clock import clock
Expand Down Expand Up @@ -393,3 +392,23 @@ def test_popular_torrens_with_metadata_type(metadata_store):

with pytest.raises(TypeError):
metadata_store.get_entries(popular=True, metadata_type=[REGULAR_TORRENT, CHANNEL_TORRENT])


WRONG_TRACKERS_OBJECTS = [
(["b'udp://tracker/announce'"]),
(None)
]


@pytest.mark.parametrize('tracker', WRONG_TRACKERS_OBJECTS)
def test_tdef_to_metadata_dict_wrong_tracker(tracker):
# Ensure that in the case of wrong returned `get_tracker` object, `tdef_to_metadata_dict` function produces a
# correct dictionary
# see: https://github.com/Tribler/tribler/issues/6987
metadata_dict = tdef_to_metadata_dict(
tdef=MagicMock(
get_tracker=Mock(return_value=tracker)
),
category_filter=MagicMock())

assert metadata_dict['tracker_info'] == ''

0 comments on commit 8534a82

Please sign in to comment.