code: def process_image(path, bands=None, verbose=False, pansharpen=False, ndvi=False, force_unzip=None,
                    ndvigrey=False, bounds=None):
      
      try:
          bands = convert_to_integer_list(bands)
          if pansharpen:
              p = PanSharpen(path, bands=bands, dst_path=settings.PROCESSED_IMAGE,
                             verbose=verbose, force_unzip=force_unzip, bounds=bounds)
          elif ndvigrey:
              p = NDVI(path, verbose=verbose, dst_path=settings.PROCESSED_IMAGE, force_unzip=force_unzip, bounds=bounds)
          elif ndvi:
              p = NDVIWithManualColorMap(path, dst_path=settings.PROCESSED_IMAGE,
                                         verbose=verbose, force_unzip=force_unzip, bounds=bounds)
          else:
              p = Simple(path, bands=bands, dst_path=settings.PROCESSED_IMAGE, verbose=verbose, force_unzip=force_unzip,
                         bounds=bounds)
  
      except IOError as err:
          exit(str(err), 1)
      except FileDoesNotExist as err:
          exit(str(err), 1)
  
      return p.run()
docs: Handles constructing and image process.
  
      :param path:
          The path to the image that has to be processed
      :type path:
          String
      :param bands:
          List of bands that has to be processed. (optional)
      :type bands:
          List
      :param verbose:
          Sets the level of verbosity. Default is False.
      :type verbose:
          boolean
      :param pansharpen:
          Whether to pansharpen the image. Default is False.
      :type pansharpen:
          boolean
  
      :returns:
          (String) path to the processed image