<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def update_bookmark(self, bookmark_id, favorite=None, archive=None, read_percent=None):
 """ Updates given bookmark. The requested bookmark must belong to the current user. :param bookmark_id: ID of the bookmark to update. :param favorite (optional):
 Whether this article is favorited or not. :param archive (optional):
 Whether this article is archived or not. :param read_percent (optional):
 The read progress made in this article, where 1.0 means the bottom and 0.0 means the very top. """

        rdb_url = self._generate_url('bookmarks/{0}'.format(bookmark_id))
        params = {}
        if favorite is not None:
            params['favorite'] = 1 if favorite == True else 0
        if archive is not None:
            params['archive'] = 1 if archive == True else 0
        if read_percent is not None:
            try:
                params['read_percent'] = float(read_percent)
            except ValueError:
                pass
        return self.post(rdb_url, params)