docs: def watermark(self, image, options):
          """
          Wrapper for ``_watermark``
  
          Takes care of all the options handling.
          """
          watermark_img = options.get("watermark", settings.THUMBNAIL_WATERMARK)
          if not watermark_img:
              raise AttributeError("No THUMBNAIL_WATERMARK defined or set on tag.")
          watermark_path = find(watermark_img)
          if not watermark_path:
              raise RuntimeError("Could not find the configured watermark file.")
          if not os.path.isfile(watermark_path):
              raise RuntimeError("Set watermark does not point to a file.")
  
          if "cropbox" not in options:
              options["cropbox"] = None
          if "watermark_alpha" not in options:
              options["watermark_alpha"] = settings.THUMBNAIL_WATERMARK_OPACITY
  
          mark_sizes = options.get("watermark_size", settings.THUMBNAIL_WATERMARK_SIZE)
          if mark_sizes:
              try:
                  options["watermark_size"] = parse_geometry(
                      mark_sizes, self.get_image_ratio(image, options)
                  )
              except TypeError as e:
                  raise TypeError(
                      "Please, update sorl-thumbnail package version to  >= 11.12b. %s"
                      % e
                  )
          else:
              options["watermark_size"] = False
  
          if "watermark_pos" not in options:
              options["watermark_pos"] = settings.THUMBNAIL_WATERMARK_POSITION
  
          return self._watermark(
              image,
              watermark_path,
              options["watermark_alpha"],
              options["watermark_size"],
              options["watermark_pos"],
          )