code: 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)
docs: :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