docstr: Save a image for the given image id and return the newly saved image's id
  
  :param image_id: the image id for the image;  If None then base filename will be used
  :param image_filename: the path to the image file
  :param image_info: additional info for the image
  :return: the image id for the saved image filename
docstr_tok: ["Save","a","image","for","the","given","image","id","and","return","the","newly","saved","image","'s","id",":","param","image_id",":","the","image","id","for","the","image",";","If","None","then","base","filename","will","be","used",":","param","image_filename",":","the","path","to","the","image","file",":","param","image_info",":","additional","info","for","the","image",":","return",":","the","image","id","for","the","saved","image","filename"]
code: def add_image(
      self,
      image_id: str,
      image_filename: str,
      image_info: Dict[str, Any],
  ) -> str:
      """
      Save a image for the given image id and return the newly saved image's id
  
      :param image_id: the image id for the image;  If None then base filename will be used
      :param image_filename: the path to the image file
      :param image_info: additional info for the image
      :return: the image id for the saved image filename
      """
      pass
  
imports: from abc import ABCMeta, abstractmethod
  from enum import Enum
  from typing import Any, Dict, List, Optional
label_desc: Use image node_id 19 for calling the Datastore obj's underlying member method code with example usage: obj.add_image(image_id, image_filename, image_info) without return types