class_docstr: Special custom remote allowing to obtain files from archives
  
  Archives must be under annex'ed themselves.
docstr: Given archive (file or a key) and a file -- compose URL for access
  
  Examples
  --------
  
  dl+archive:SHA256E-s176--69...3e.tar.gz#path=1/d2/2d&size=123
      when size of file within archive was known to be 123
  dl+archive:SHA256E-s176--69...3e.tar.gz#path=1/d2/2d
      when size of file within archive was not provided
  
  Parameters
  ----------
  size: int, optional
    Size of the file.  If not provided, will simply be empty
code: def get_file_url(
      self, archive_file=None, archive_key=None, file=None, size=None
  ):
      """Given archive (file or a key) and a file -- compose URL for access
  
      Examples
      --------
  
      dl+archive:SHA256E-s176--69...3e.tar.gz#path=1/d2/2d&size=123
          when size of file within archive was known to be 123
      dl+archive:SHA256E-s176--69...3e.tar.gz#path=1/d2/2d
          when size of file within archive was not provided
  
      Parameters
      ----------
      size: int, optional
        Size of the file.  If not provided, will simply be empty
      """
      assert file is not None
      if archive_file is not None:
          if archive_key is not None:
              raise ValueError(
                  "Provide archive_file or archive_key - not both"
              )
          archive_key = self.repo.get_file_annexinfo(archive_file)[
              "key"
          ]
      assert archive_key is not None
      attrs = dict()  # looking forward for more
      if file:
          attrs["path"] = file.lstrip("/")
      if size is not None:
          attrs["size"] = size
      return str(
          URL(scheme=self.URL_SCHEME, path=archive_key, fragment=attrs)
      )
  
imports: import logging
  import os
  import os.path
  import shutil
  from operator import itemgetter
  from pathlib import Path
  from urllib.parse import urlparse
  from annexremote import UnsupportedRequest
  from datalad.consts import ARCHIVES_SPECIAL_REMOTE
  from datalad.customremotes import RemoteError
  from datalad.customremotes.main import main
  from datalad.distribution.dataset import Dataset
  from datalad.support.annexrepo import AnnexRepo
  from datalad.support.archives import ArchivesCache
  from datalad.support.cache import DictCache
  from datalad.support.exceptions import CapturedException
  from datalad.support.locking import lock_if_check_fails
  from datalad.support.network import URL
  from datalad.utils import ensure_bytes, get_dataset_root, getpwd, unique, unlink
  from .base import AnnexCustomRemote
label_desc: Use image node_id 3 for calling the ArchiveAnnexCustomRemote obj's underlying member method code with example usage: obj.get_file_url(archive_file, archive_key, file, size) and returns: str