code: def getResource(self, pid, destination=None, unzip=False, wait_for_bag_creation=True):
          
          stream = self._getBagStream(pid, wait_for_bag_creation)
          if destination:
              self._storeBagOnFilesystem(stream, pid, destination, unzip)
              return None
          else:
              return stream
docs: Get a resource in BagIt format
  
          :param pid: The HydroShare ID of the resource
          :param destination: String representing the directory to save bag to. Bag will be saved to file named
              $(PID).zip in destination; existing file of the same name will be overwritten. If None, a stream to the
              zipped bag will be returned instead.
          :param unzip: True if the bag should be unzipped when saved to destination. Bag contents to be saved to
              directory named $(PID) residing in destination. Only applies when destination is not None.
  
          :param wait_for_bag_creation: True if to wait to download the bag in case the bag is not ready
              (bag needs to be recreated before it can be downloaded).
          :raises: HydroShareArgumentException if any arguments are invalid.
          :raises: HydroShareNotAuthorized if the user is not authorized to access the
              resource.
          :raises: HydroShareNotFound if the resource was not found.
          :raises: HydroShareHTTPException to signal an HTTP error
          :raise: HydroShareBagNotReady if the bag is not ready to be downloaded and wait_for_bag_creation is False
  
          :return: None if the bag was saved directly to disk.  Or a generator representing a buffered stream of the
              bytes comprising the bag returned by the REST end point.