class_docstr: This class represents an image file
  
  A file is considered as a single URL.
  
  A single file can contain multiple planes.
  
  This class assists in extracting information about the contents of
  a single file.
code: def __init__(self, url):
      self._url = url
      self._extracted = False
      self._index_mode = False
      self._reader = None
      self._metadata_dict = {
          COL_PATH: self.path,
          COL_SERIES: 0,
          COL_INDEX: 0,
          COL_URL: url,
          MD_SIZE_S: 0,
          MD_SIZE_C: [],
          MD_SIZE_Z: [],
          MD_SIZE_T: [],
          MD_SIZE_Y: [],
          MD_SIZE_X: [],
          MD_SERIES_NAME: [],
      }
      self._plane_details = []
      self._modpath = None
      # Records the name of the reader class selected for this file.
      self.preferred_reader = None
  
imports: import os
  import urllib.parse
  import urllib.request
  import logging
  from functools import cached_property
  import numpy
  from cellprofiler_core.constants.image import MD_SIZE_S, MD_SIZE_C, MD_SIZE_Z, MD_SIZE_T, MD_SIZE_Y, MD_SIZE_X, MD_SIZE_KEYS, MD_SERIES_NAME
  from cellprofiler_core.constants.modules.metadata import COL_PATH, COL_SERIES, COL_INDEX, COL_URL
  from cellprofiler_core.constants.measurement import RESERVED_METADATA_KEYS
  from cellprofiler_core.reader import get_image_reader, Reader
  from cellprofiler_core.utilities.image import url_to_modpath, is_file_url
label_desc: Use image node_id 1 to create a new ImageFile object  with example: obj = ImageFile(url)