docs: def fetch(yts, needed_range, fh):
  
          """
          Download desired range of data and put it in `yts` object (e.g. ``YTStor``).
  
          Parameters
          ----------
          yts : YTStor
              Stor-like object to which we will write.
          needed_range : tuple
              Two element tuple that represents a data range - compliant with ``range_t`` subrange definition.
          fh : int
              Descriptor used by a process for filesystem operations.
          
          Returns
          -------
          None
              Method does not return; data is written directly to `yts` object.
          """
  
          if yts.preferences['audio'] and yts.preferences['video'] and isinstance(yts.url, tuple) and not yts.preferences['stream']:
              #condition for merging.
  
              with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as d, tempfile.NamedTemporaryFile(prefix='a') as a, tempfile.NamedTemporaryFile(prefix='v') as v:
                  # after with statement, files - save d - shall be removed
  
                  v.write(yts.r_session.get(yts.url[0]).content)
                  a.write(yts.r_session.get(yts.url[1]).content)
  
                  PP = youtube_dl.postprocessor.FFmpegMergerPP(yts.ytdl)
                  PP.run({'filepath': d.name, '__files_to_merge': (v.name, a.name)}) # merge
  
                  _d = d.name
  
              with open(_d, mode="rb") as d:
  
                  yts.data.write( d.read() )
                  yts.data.flush()
  
                  yts.filesize = os.path.getsize(_d)
  
                  yts.avail += (0, yts.filesize)
  
              os.remove(_d)
  
          else: # no merging
  
              if yts.preferences['stream'] is False: # preload
  
                  yts.data.write(yts.r_session.get(yts.url).content)
                  yts.data.flush()
  
                  yts.avail += (0, yts.filesize)
  
              else: # stream
  
                  hr = (needed_range[0], needed_range[1] - 1)
  
                  get = yts.r_session.get(yts.url, headers={'Range': 'bytes=' + '-'.join(str(i) for i in hr)})
  
                  yts.data.seek(hr[0])
                  yts.data.write(get.content)
                  yts.data.flush()
  
                  ret = list( int(s) for s in get.headers.get('content-range').split(' ')[1].split('/')[0].split('-') )
                  ret[1] += 1
  
                  yts.avail += tuple(ret)
                  yts.processing_range -= needed_range