class_docstr: This class implements copy from a single source.  In general, a
  transfer will have multiple sources, and a SourceCopier will be
  created for each source.
code: def __init__(
      self,
      router_fs: AsyncFS,
      xfer_sema: WeightedSemaphore,
      src: str,
      dest: str,
      treat_dest_as: str,
      dest_type_task,
  ):
      self.router_fs = router_fs
      self.xfer_sema = xfer_sema
      self.src = src
      self.dest = dest
      self.treat_dest_as = treat_dest_as
      self.dest_type_task = dest_type_task
  
      self.src_is_file: Optional[bool] = None
      self.src_is_dir: Optional[bool] = None
  
      self.pending = 2
      self.barrier = asyncio.Event()
  
imports: from typing import Any, AsyncIterator, Awaitable, Optional, List, Union, Dict, Callable, Tuple
  import os
  import os.path
  import asyncio
  import functools
  import humanize
  from ...utils import retry_transient_errors, url_basename, url_join, bounded_gather2, time_msecs, humanize_timedelta_msecs
  from ..weighted_semaphore import WeightedSemaphore
  from .exceptions import FileAndDirectoryError, UnexpectedEOFError
  from .fs import MultiPartCreate, FileStatus, AsyncFS, FileListEntry
label_desc: Use image node_id 1 to create a new SourceCopier object  with example: obj = SourceCopier(router_fs, xfer_sema, src, dest, treat_dest_as, dest_type_task)