Update the editable details (just the title and description) of a
        SharedFile.

        Args:
            sharekey (str): Sharekey of the SharedFile to update.
            title (Optional[str]): Title of the SharedFile.
            description (Optional[str]): Description of the SharedFile

        Returns:
            SharedFile on success, 404 on Sharekey not found, 403 on
            unauthorized.

def update_shared_file(self,
                           sharekey=None,
                           title=None,
                           description=None):
        """
        Update the editable details (just the title and description) of a
        SharedFile.

        Args:
            sharekey (str): Sharekey of the SharedFile to update.
            title (Optional[str]): Title of the SharedFile.
            description (Optional[str]): Description of the SharedFile

        Returns:
            SharedFile on success, 404 on Sharekey not found, 403 on
            unauthorized.
        """
        if not sharekey:
            raise Exception(
                "You must specify a sharekey for the sharedfile"
                "you wish to update.")

        if not (title or description):
            raise Exception("You must specify a title or description.")

        post_data = {}

        if title:
            post_data['title'] = title
        if description:
            post_data['description'] = description

        endpoint = '/api/sharedfile/{0}'.format(sharekey)

        data = self._make_request('POST', endpoint=endpoint, data=post_data)

        return SharedFile.NewFromJSON(data)