2015-11-12 02:29:59 +01:00
|
|
|
# -*- coding: utf-8 -*-
|
2014-10-12 21:56:44 +02:00
|
|
|
|
2018-09-04 22:49:57 +02:00
|
|
|
# Copyright 2015-2018 Mike Fährmann
|
2015-11-12 02:29:59 +01:00
|
|
|
#
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
|
|
# it under the terms of the GNU General Public License version 2 as
|
|
|
|
# published by the Free Software Foundation.
|
|
|
|
|
2018-09-04 22:49:57 +02:00
|
|
|
"""Downloader modules"""
|
|
|
|
|
2015-11-12 02:29:59 +01:00
|
|
|
import importlib
|
|
|
|
|
2017-01-30 19:40:15 +01:00
|
|
|
|
2015-11-12 02:29:59 +01:00
|
|
|
def find(scheme):
|
|
|
|
"""Return downloader class suitable for handling the given scheme"""
|
|
|
|
try:
|
|
|
|
return _cache[scheme]
|
|
|
|
except KeyError:
|
2018-09-04 22:49:57 +02:00
|
|
|
klass = None
|
2015-11-12 02:29:59 +01:00
|
|
|
try:
|
2018-09-04 22:49:57 +02:00
|
|
|
if "." not in scheme: # prevent relative imports
|
|
|
|
module = importlib.import_module("." + scheme, __package__)
|
2018-11-16 14:40:05 +01:00
|
|
|
klass = module.__downloader__
|
2018-09-04 22:49:57 +02:00
|
|
|
except (ImportError, AttributeError, TypeError):
|
|
|
|
pass
|
|
|
|
_cache[scheme] = klass
|
|
|
|
return klass
|
2015-11-12 02:29:59 +01:00
|
|
|
|
2017-01-30 19:40:15 +01:00
|
|
|
|
2015-11-12 02:29:59 +01:00
|
|
|
# --------------------------------------------------------------------
|
|
|
|
# internals
|
|
|
|
|
|
|
|
_cache = {}
|