Source code for feed2exec.plugins.transmission

import logging
import os
import re
import subprocess
from unidecode import unidecode


from feed2exec.plugins.html2text import filter as html2text_filter


[docs]def sanitize(text, repl='-'): """like utils.slug, but without lowercase and allow custom replacement >>> sanitize('test') 'test' >>> sanitize('../../../etc/password') 'etc-password' >>> sanitize('Foo./.bar', repl='.') 'Foo.bar' """ return re.sub(r'\W+', repl, unidecode(text).strip()).strip(repl)
[docs]def output(hostname='localhost', *args, feed=None, item=None, **kwargs): """the transmission plugin will send feed items to a `transmission <http://www.transmissionbt.com/>`_ instance it assumes the ``transmission-remote`` command is already installed and configured to talk with transmission. the hostname is passed in the ``args`` configuration and defaults to localhost. the ``folder`` parameter is also used to determine where to save the actual torrents files. note that this will also append a sanitized version of the item title, if a folder is provided. this is to allow saving series in the same folder. if the title is unique for each torrent, you may use a filter to set the title to the right location. """ command = ['transmission-remote', hostname, '-a', item['link']] if feed.get('folder', None): # sanitize title to avoid directory transversal subfolder = sanitize(item.get('title', ''), repl='.') path = os.path.join(feed['folder'], subfolder) command += ['-w', path] else: path = 'default path' logging.info('adding torrent "%s" to %s: %s%s', item.get('title'), path, html2text_filter.parse(item.get('summary')), feed.get('catchup', '') and ' (simulated)') logging.debug("calling command %s%s", command, feed.get('catchup', '') and ' (simulated)') if not feed.get('catchup'): subprocess.check_call(command) return True