rndusr / stig

TUI and CLI for the BitTorrent client Transmission
GNU General Public License v3.0
554 stars 24 forks source link

fix errors when trackerStats is incomplete #215

Closed dm9pZCAq closed 2 years ago

dm9pZCAq commented 2 years ago

server


this is dumped t from _count_seeds:

{'addedDate': 1640745365,
 'doneDate': 1640745545,
 'downloadDir': '...',
 'downloadedEver': 17381806,
 'error': 0,
 'errorString': '',
 'eta': 0,
 'id': 1,
 'isPrivate': False,
 'metadataPercentComplete': 1.0,
 'name': '...',
 'peers': [],
 'peersConnected': 0,
 'percentDone': 1.0,
 'rateDownload': 0,
 'rateUpload': 0,
 'recheckProgress': 1.0,
 'sizeWhenDone': 17381806,
 'status': 0,
 'totalSize': 17381806,
 'trackerStats': [{'announce': '...',
                   'id': 687183153,
                   'scrape': '',
                   'tier': 0}],
 'uploadRatio': 0.0028277844085936757,
 'uploadedEver': 49152}

and stig fails with KeyError

this PR fixes that

rndusr commented 2 years ago

What is the bug exactly (with traceback) and how can I reproduce it?

dm9pZCAq commented 2 years ago

how can I reproduce it?

i used this https://github.com/i2p/i2p.plugins.i2psnark-rpc

it is

Transmission- and Vuze- compatible RPC server

and here is lines about it's api https://github.com/i2p/i2p.plugins.i2psnark-rpc/blob/b472f63f17afdbc5f34839f22d932bcfaff1b163/src/java/org/klomp/snark/rpc/XMWebUIPlugin.java#L1925-L1929


traceback


Traceback (most recent call last):
File "/usr/lib/python-exec/python3.9/stig", line 33, in <module>
sys.exit(load_entry_point('stig==0.12.2a0', 'console_scripts', 'stig')())
File "/usr/lib/python3.9/site-packages/stig/__init__.py", line 25, in run
main.run()
File "/usr/lib/python3.9/site-packages/stig/main.py", line 102, in run
if not tui.run(run_commands):
File "/usr/lib/python3.9/site-packages/stig/tui/main.py", line 60, in run
tuiobjects.urwidloop.run()
File "/usr/lib/python3.9/site-packages/urwid/main_loop.py", line 287, in run
self._run()
File "/usr/lib/python3.9/site-packages/urwid/main_loop.py", line 385, in _run
self.event_loop.run()
File "/usr/lib/python3.9/site-packages/stig/tui/urwidpatches.py", line 193, in run
raise self._exc_info
File "/usr/lib/python3.9/asyncio/events.py", line 80, in _run
self._context.run(self._callback, *self._args)
File "/usr/lib/python3.9/site-packages/urwid/main_loop.py", line 1454, in faux_idle_callback
callback()
File "/usr/lib/python3.9/site-packages/urwid/main_loop.py", line 574, in entering_idle
self.draw_screen()
File "/usr/lib/python3.9/site-packages/urwid/main_loop.py", line 588, in draw_screen
canvas = self._topmost_widget.render(self.screen_size, focus=True)
File "/usr/lib/python3.9/site-packages/urwid/widget.py", line 145, in cached_render
canv = fn(self, size, focus=focus)
File "/usr/lib/python3.9/site-packages/urwid/widget.py", line 1761, in render
canv = get_delegate(self).render(size, focus=focus)
File "/usr/lib/python3.9/site-packages/urwid/widget.py", line 145, in cached_render
canv = fn(self, size, focus=focus)
File "/usr/lib/python3.9/site-packages/urwid/container.py", line 1565, in render
canv = w.render((maxcol, rows), focus=focus and item_focus)
File "/usr/lib/python3.9/site-packages/urwid/widget.py", line 145, in cached_render
canv = fn(self, size, focus=focus)
File "/usr/lib/python3.9/site-packages/stig/tui/tabs.py", line 138, in render
canvas = current_widget.render(size_content, focus)
File "/usr/lib/python3.9/site-packages/urwid/widget.py", line 145, in cached_render
canv = fn(self, size, focus=focus)
File "/usr/lib/python3.9/site-packages/stig/tui/views/base.py", line 232, in render
self._update_existing_widgets(self._data_dict)
File "/usr/lib/python3.9/site-packages/stig/tui/views/base.py", line 284, in _update_existing_widgets
existing_widgets.add(ListItemClass(data, row))
File "/usr/lib/python3.9/site-packages/stig/tui/views/base.py", line 136, in __init__
self.update(data)
File "/usr/lib/python3.9/site-packages/stig/tui/views/base.py", line 141, in update
widget.update(data)
File "/usr/lib/python3.9/site-packages/stig/tui/views/base.py", line 92, in update
new_value = self.get_value()
File "/usr/lib/python3.9/site-packages/stig/views/torrent.py", line 308, in get_value
return self.data['peers-seeding']
File "/usr/lib/python3.9/site-packages/stig/client/aiotransmission/torrent.py", line 517, in __getitem__
value = modifier(self._raw)
File "/usr/lib/python3.9/site-packages/stig/client/aiotransmission/torrent.py", line 75, in _count_seeds
return max(t['seederCount'] for t in trackerStats)
File "/usr/lib/python3.9/site-packages/stig/client/aiotransmission/torrent.py", line 75, in <genexpr>
return max(t['seederCount'] for t in trackerStats)
KeyError: 'seederCount'
rndusr commented 2 years ago

I assume this thing doesn't fully implement the Transmission RPC protocol?

I don't think I want to maintain support for third-party protocol implementations.

Besides, I'm not going to install Java to test this.

dm9pZCAq commented 2 years ago

I assume this thing doesn't fully implement the Transmission RPC protocol?

ok, looks like yes

https://github.com/transmission/transmission/blob/2.8x/extras/rpc-spec.txt#L281-L308