def upload_photo(
    self,
    photo,
    caption=None,
    upload_id=None,
    from_video=False,
    options={},
    user_tags=None,
    is_sidecar=False,
):
    """Upload photo to Instagram

    @param photo       Path to photo file (String)
    @param caption     Media description (String)
    @param upload_id   Unique upload_id (String). When None, then
                       generate automatically
    @param from_video  A flag that signals whether the photo is loaded from
                       the video or by itself (Boolean, DEPRECATED: not used)
    @param options     Object with difference options, e.g.
                       configure_timeout, rename (Dict)
                       Designed to reduce the number of function arguments!
                       This is the simplest request object.
    @param user_tags   Tag other users (List)
                       usertags = [
                         {"user_id": user_id, "position": [x, y]}
                       ]
    @param is_sidecar  An album element (Boolean)

    @return            Object with state of uploading to Instagram (or False), Dict for is_sidecar
    """
    self.small_delay()
    result = self.api.upload_photo(
        photo,
        caption,
        upload_id,
        from_video,
        options=options,
        user_tags=user_tags,
        is_sidecar=is_sidecar,
    )
    if not result:
        self.logger.info("Photo '{}' is not uploaded.".format(photo))
        return False
    self.logger.info("Photo '{}' is uploaded.".format(photo))
    return result