Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix errors when trackerStats is incomplete #215

Closed
wants to merge 1 commit into from

Conversation

dm9pZCAq
Copy link

server

  • rpc-version: 15
  • version: 2.80

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
Copy link
Owner

rndusr commented Dec 29, 2021 via email

@dm9pZCAq
Copy link
Author

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
Copy link
Owner

rndusr commented Dec 29, 2021 via email

@dm9pZCAq
Copy link
Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants