class_docstr: DataSource(destpath='.')
  
  A generic data source file (file, http, ftp, ...).
  
  DataSources can be local files or remote files/URLs.  The files may
  also be compressed or uncompressed. DataSource hides some of the
  low-level details of downloading the file, allowing you to simply pass
  in a valid file path (or URL) and obtain a file object.
  
  Parameters
  ----------
  destpath : str or None, optional
      Path to the directory where the source file gets downloaded to for
      use.  If `destpath` is None, a temporary directory will be created.
      The default path is the current directory.
  
  Notes
  -----
  URLs require a scheme string (``http://``) to be used, without it they
  will fail::
  
      >>> repos = DataSource()
      >>> repos.exists('www.google.com/index.html')
      False
      >>> repos.exists('http://www.google.com/index.html')
      True
  
  Temporary directories are deleted when the DataSource is deleted.
  
  Examples
  --------
  ::
  
      >>> ds = DataSource('/home/guido')
      >>> urlname = 'http://www.google.com/index.html'
      >>> gfile = ds.open('http://www.google.com/index.html')  # remote file
      >>> ds.abspath(urlname)
      '/home/guido/www.google.com/site/index.html'
  
      >>> ds = DataSource(None)  # use with temporary file
      >>> ds.open('/home/guido/foobar.txt')
      <open file '/home/guido.foobar.txt', mode 'r' at 0x91d4430>
      >>> ds.abspath('/home/guido/foobar.txt')
      '/tmp/tmpy4pgsP/home/guido/foobar.txt'
docstr: Cache the file specified by path.
  
  Creates a copy of the file in the datasource cache.
docstr_tok: ["Cache","the","file","specified","by","path",".","Creates","a","copy","of","the","file","in","the","datasource","cache","."]
code: def _cache(self, path):
      """Cache the file specified by path.
  
      Creates a copy of the file in the datasource cache.
  
      """
      # We import these here because importing urllib2 is slow and
      # a significant fraction of numpy's total import time.
      if sys.version_info[0] >= 3:
          from urllib.request import urlopen
          from urllib.error import URLError
      else:
          from urllib2 import urlopen
          from urllib2 import URLError
  
      upath = self.abspath(path)
  
      # ensure directory exists
      if not os.path.exists(os.path.dirname(upath)):
          os.makedirs(os.path.dirname(upath))
  
      # TODO: Doesn't handle compressed files!
      if self._isurl(path):
          try:
              openedurl = urlopen(path)
              f = _open(upath, "wb")
              try:
                  shutil.copyfileobj(openedurl, f)
              finally:
                  f.close()
                  openedurl.close()
          except URLError:
              raise URLError("URL not found: %s" % path)
      else:
          shutil.copyfile(path, upath)
      return upath
  
imports: from __future__ import division, absolute_import, print_function
  import os
  import sys
  import warnings
  import shutil
  import io
  from numpy.core.overrides import set_module
label_desc: Use image node_id 8 for calling the DataSource obj's underlying member method code with example usage: obj._cache(path) and returns: upath