':calls: `PATCH /repos/:owner/:repo/hooks/:id <http://developer.github.com/v3/repos/hooks>`_
:param name: string
:param config: dict
:param events: list of string
:param add_events: list of string
:param remove_events: list of string
:param active: bool
:rtype: None'

def edit(self, name, config, events=github.GithubObject.NotSet, add_events=github.GithubObject.NotSet, remove_events=github.GithubObject.NotSet, active=github.GithubObject.NotSet):

    assert isinstance(name, (str, unicode)), name
    assert isinstance(config, dict), config
    assert ((events is github.GithubObject.NotSet) or all((isinstance(element, (str, unicode)) for element in events))), events
    assert ((add_events is github.GithubObject.NotSet) or all((isinstance(element, (str, unicode)) for element in add_events))), add_events
    assert ((remove_events is github.GithubObject.NotSet) or all((isinstance(element, (str, unicode)) for element in remove_events))), remove_events
    assert ((active is github.GithubObject.NotSet) or isinstance(active, bool)), active
    post_parameters = {'name': name, 'config': config}
    if (events is not github.GithubObject.NotSet):
        post_parameters['events'] = events
    if (add_events is not github.GithubObject.NotSet):
        post_parameters['add_events'] = add_events
    if (remove_events is not github.GithubObject.NotSet):
        post_parameters['remove_events'] = remove_events
    if (active is not github.GithubObject.NotSet):
        post_parameters['active'] = active
    (headers, data) = self._requester.requestJsonAndCheck('PATCH', self.url, input=post_parameters)
    self._useAttributes(data)
