class_docstr: Class to bring together url_res, credential, and authenticator
      
class_docstr_tok: ["Class","to","bring","together","url_res",",","credential",",","and","authenticator"]
docstr: Assigns proper downloader given the URL
  
  If one is known -- verifies its appropriateness for the given url.
  ATM we do not support multiple types of downloaders per single provider
code: def get_downloader(self, url, **kwargs):
      """Assigns proper downloader given the URL
  
      If one is known -- verifies its appropriateness for the given url.
      ATM we do not support multiple types of downloaders per single provider
      """
      if self._downloader is None:
          # we need to create a new one
          Downloader = self._get_downloader_class(url)
          # we might need to provide it with credentials and authenticator
          # Let's do via kwargs so we could accommodate cases when downloader does not necessarily
          # cares about those... duck typing or what it is in action
          kwargs = kwargs.copy()
          if self.credential:
              kwargs["credential"] = self.credential
          if self.authenticator:
              kwargs["authenticator"] = self.authenticator
          self._downloader = Downloader(**kwargs)
      return self._downloader
  
imports: from glob import glob
  from logging import getLogger
  import re
  from os.path import dirname, abspath, join
  from urllib.parse import urlparse
  from .base import NoneAuthenticator, NotImplementedAuthenticator
  from .http import HTMLFormAuthenticator, HTTPAnonBearerTokenAuthenticator, HTTPAuthAuthenticator, HTTPBasicAuthAuthenticator, HTTPDigestAuthAuthenticator, HTTPBearerTokenAuthenticator, HTTPDownloader
  from .s3 import S3Authenticator, S3Downloader
  from .shub import SHubDownloader
  from configparser import ConfigParser
  from datalad.support.external_versions import external_versions
  from datalad.support.network import RI
  from datalad.support import path
  from datalad.utils import auto_repr, ensure_list_from_str, get_dataset_root, Path
  from ..interface.common_cfg import dirs
  from datalad.downloaders import CREDENTIAL_TYPES
label_desc: Use image node_id 5 for calling the Provider obj's underlying member method code with example usage: obj.get_downloader(url) and returns: self