def create_status(self, state, target_url=github.GithubObject.NotSet, description=github.GithubObject.NotSet, context=github.GithubObject.NotSet):
        """
        :calls: `POST /repos/:owner/:repo/statuses/:sha <http://developer.github.com/v3/repos/statuses>`_
        :param state: string
        :param target_url: string
        :param description: string
        :param context: string
        :rtype: :class:`github.CommitStatus.CommitStatus`
        """
        assert isinstance(state, (str, unicode)), state
        assert target_url is github.GithubObject.NotSet or isinstance(target_url, (str, unicode)), target_url
        assert description is github.GithubObject.NotSet or isinstance(description, (str, unicode)), description
        assert context is github.GithubObject.NotSet or isinstance(context, (str, unicode)), context
        post_parameters = {
            "state": state,
        }
        if target_url is not github.GithubObject.NotSet:
            post_parameters["target_url"] = target_url
        if description is not github.GithubObject.NotSet:
            post_parameters["description"] = description
        if context is not github.GithubObject.NotSet:
            post_parameters["context"] = context
        headers, data = self._requester.requestJsonAndCheck(
            "POST",
            self._parentUrl(self._parentUrl(self.url)) + "/statuses/" + self.sha,
            input=post_parameters
        )
        return github.CommitStatus.CommitStatus(self._requester, headers, data, completed=True)