pyroscope / pyrocore

:wrench: A collection of tools for the BitTorrent protocol and especially the rTorrent client
https://pyrocore.readthedocs.org/
GNU General Public License v2.0
291 stars 43 forks source link

The field '"kind=" does not work when there are a lot of torrents #79

Closed ghost closed 5 years ago

ghost commented 5 years ago

In one instance of rtorrent I have ~10 000 music torrents and the field 'kind=' does not work. For instance, to the command rtcontrol kind=flac I get the following output:

INFO: Bad data packets written to '/tmp/xmlrpc2scgi-1001.xml'
INFO     Total time: 1.952 seconds.
Traceback (most recent call last):
  File "/home/rtorrent/bin/rtcontrol", line 11, in <module>
    load_entry_point('pyrocore', 'console_scripts', 'rtcontrol')()
  File "/home/rtorrent/.local/pyroscope/src/pyrocore/scripts/rtcontrol.py", line 803, in run
    RtorrentControl().run()
  File "/home/rtorrent/.local/pyroscope/src/pyrocore/scripts/base.py", line 267, in run
    self.mainloop()
  File "/home/rtorrent/.local/pyroscope/src/pyrocore/scripts/rtcontrol.py", line 614, in mainloop
    matches = list(view.items())
  File "/home/rtorrent/.local/pyroscope/src/pyrocore/torrent/engine.py", line 645, in items
    if self.matcher.match(item):
  File "/home/rtorrent/.local/pyroscope/src/pyrocore/util/matching.py", line 128, in match
    return all(i.match(item) for i in self)
  File "/home/rtorrent/.local/pyroscope/src/pyrocore/util/matching.py", line 128, in <genexpr>
    return all(i.match(item) for i in self)
  File "/home/rtorrent/.local/pyroscope/src/pyrocore/util/matching.py", line 399, in match
    tags = getattr(item, self._name) or []
  File "/home/rtorrent/.local/pyroscope/src/pyrocore/torrent/engine.py", line 251, in __get__
    return self.valtype(self._accessor(obj) if self._accessor else obj._fields[self.name])
  File "/home/rtorrent/.local/pyroscope/src/pyrocore/torrent/engine.py", line 568, in <lambda>
    matcher=matching.TaggedAsFilter, formatter=_fmt_tags, accessor=lambda o: o.fetch("kind_0"))
  File "/home/rtorrent/.local/pyroscope/src/pyrocore/torrent/rtorrent.py", line 184, in fetch
    val = self._get_kind(int(name[5:], 10))
  File "/home/rtorrent/.local/pyroscope/src/pyrocore/torrent/rtorrent.py", line 149, in _get_kind
    histo = traits.get_filetypes(self.fetch("files"),
  File "/home/rtorrent/.local/pyroscope/src/pyrocore/torrent/rtorrent.py", line 182, in fetch
    val = self._get_files()
  File "/home/rtorrent/.local/pyroscope/src/pyrocore/torrent/rtorrent.py", line 99, in _get_files
    rpc_result = f_multicall(*tuple(f_params))
  File "/home/rtorrent/.local/pyroscope/src/pyrocore/util/xmlrpc.py", line 154, in __call__
    result = xmlrpclib.loads(xmlresp)[0][0]
  File "/usr/lib/python2.7/xmlrpclib.py", line 1144, in loads
    p.feed(data)
  File "/usr/lib/python2.7/xmlrpclib.py", line 558, in feed
    self._parser.Parse(data, 0)
xml.parsers.expat.ExpatError: not well-formed (invalid token): line 6, column 25

In another instance, I have fewer music torrents ~3000 and the command works correctly.

pyroscope commented 5 years ago

https://rtorrent-docs.readthedocs.io/en/latest/cmd-ref.html#term-network-xmlrpc-size-limit

Please do not use the issue tracker for support.