'Update this file.
:param str message: (required), commit message to describe the update
:param str content: (required), content to update the file with
:param str branch: (optional), branch where the file exists.
Defaults to the default branch of the repository.
:param dict committer: (optional), if no information is given the
authenticated user\'s information will be used. You must specify
both a name and email.
:param dict author: (optional), if omitted this will be filled in with
committer information. If passed, you must specify both a name and
email.
:returns: dictionary containing the updated contents object and the
commit in which it was changed.
:rtype: dictionary of :class:`~github3.repos.contents.Contents` and
:class:`~github3.git.Commit`'

@requires_auth
def update(self, message, content, branch=None, committer=None, author=None):

    if (content and (not isinstance(content, bytes))):
        raise ValueError(u'content    must    be    a    bytes    object')
    json = None
    if (message and content):
        content = b64encode(content).decode(u'utf-8')
        data = {u'message': message, u'content': content, u'branch': branch, u'sha': self.sha, u'committer': validate_commmitter(committer), u'author': validate_commmitter(author)}
        self._remove_none(data)
        json = self._json(self._put(self._api, data=dumps(data)), 200)
        if (json and (u'content' in json)):
            self._update_attributes(json[u'content'])
            json[u'content'] = self
        if (json and (u'commit' in json)):
            json[u'commit'] = Commit(json[u'commit'], self)
    return json
