Skip to content

Commit 6bcf68e

Browse files
committed
fix filtering for fields missing on torrents
1 parent 4122e7c commit 6bcf68e

File tree

3 files changed

+14
-8
lines changed

3 files changed

+14
-8
lines changed

lbry/file/file_manager.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -297,14 +297,17 @@ async def stream_partial_content(self, request: Request, identifier: str):
297297

298298
def get_filtered(self, *args, **kwargs) -> typing.List[ManagedDownloadSource]:
299299
"""
300-
Get a list of filtered and sorted ManagedStream objects
301-
302-
:param sort_by: field to sort by
303-
:param reverse: reverse sorting
304-
:param comparison: comparison operator used for filtering
305-
:param search_by: fields and values to filter by
300+
Get a list of filtered and sorted ManagedDownloadSource objects from all available source managers
306301
"""
307-
return sum((manager.get_filtered(*args, **kwargs) for manager in self.source_managers.values()), [])
302+
result = last_error = None
303+
for manager in self.source_managers.values():
304+
try:
305+
result = (result or []) + manager.get_filtered(*args, **kwargs)
306+
except ValueError as error:
307+
last_error = error
308+
if result is not None:
309+
return result
310+
raise last_error
308311

309312
async def delete(self, source: ManagedDownloadSource, delete_file=False):
310313
for manager in self.source_managers.values():

lbry/stream/stream_manager.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def path_or_none(encoded_path) -> Optional[str]:
3232
class StreamManager(SourceManager):
3333
_sources: typing.Dict[str, ManagedStream]
3434

35-
filter_fields = SourceManager.filter_fields
35+
filter_fields = set(SourceManager.filter_fields)
3636
filter_fields.update({
3737
'sd_hash',
3838
'stream_hash',

tests/integration/datanetwork/test_file_commands.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@ async def test_download_torrent(self):
100100
self.assertEqual(file['total_bytes'], file['written_bytes'])
101101
self.assertEqual('finished', file['status'])
102102

103+
# filter by a field which is missing on torrent
104+
self.assertItemCount(await self.daemon.jsonrpc_file_list(stream_hash="abc"), 0)
105+
103106
tx, new_btih = await self.initialize_torrent(tx)
104107
self.assertNotEqual(btih, new_btih)
105108
# claim now points to another torrent, update to it

0 commit comments

Comments
 (0)