Source code for flexget.components.bittorrent.magnet_info_hash

import base64
import re

from loguru import logger

from flexget import plugin
from flexget.event import event

logger = logger.bind(name='magnet_btih')


[docs] class MagnetBtih: """Sets torrent_info_hash from magnet url.""" schema = {'type': 'boolean'}
[docs] def on_task_metainfo(self, task, config): if config is False: return for entry in task.all_entries: if entry.get('torrent_info_hash'): continue for url in [entry['url'], *entry.get('urls', [])]: if url.startswith('magnet:'): # find base16 encoded info_hash_search = re.search('btih:([0-9a-f]{40})', url, re.IGNORECASE) if info_hash_search: entry['torrent_info_hash'] = info_hash_search.group(1).upper() break # find base32 encoded info_hash_search = re.search('btih:([2-7a-z]{32})', url, re.IGNORECASE) if info_hash_search: b32hash = info_hash_search.group(1).upper() b16hash = base64.b16encode(base64.b32decode(b32hash)) entry['torrent_info_hash'] = b16hash.decode('ascii').upper() break
[docs] @event('plugin.register') def register_plugin(): plugin.register(MagnetBtih, 'magnet_btih', builtin=True, api_ver=2)