docs: def edit(self, name=None, description=None, **kwargs):
          # type: (AnyStr, AnyStr, **Any) -> None
          """
          Edit the details of a part (model or instance).
  
          For an instance you can edit the Part instance name and the part instance description. To alter the values
          of properties use :func:`Part.update()`.
  
          In order to prevent the backend from updating the frontend you may add `suppress_kevents=True` as
          additional keyword=value argument to this method. This will improve performance of the backend
          against a trade-off that someone looking at the frontend won't notice any changes unless the page
          is refreshed.
  
          :param name: optional name of the part to edit
          :param description: (optional) description of the part
          :type description: basestring or None
          :param kwargs: (optional) additional kwargs that will be passed in the during the edit/update request
          :type kwargs: dict or None
          :return: the updated object if successful
          :raises IllegalArgumentError: when the type or value of an argument provided is incorrect
          :raises APIError: in case an Error occurs
  
          Example
          -------
  
          For changing a part:
  
          >>> front_fork = project.part('Front Fork')
          >>> front_fork.edit(name='Front Fork - updated')
          >>> front_fork.edit(name='Front Fork cruizer', description='With my ragtop down so my hair can blow' )
  
          for changing a model:
  
          >>> front_fork = project.model('Front Fork')
          >>> front_fork.edit(name='Front Fork basemodel', description='Some description here')
  
          """
          update_dict = {'id': self.id}
          if name:
              if not isinstance(name, str):
                  raise IllegalArgumentError("name should be provided as a string")
              update_dict.update({'name': name})
          if description:
              if not isinstance(description, str):
                  raise IllegalArgumentError("description should be provided as a string")
              update_dict.update({'description': description})
  
          if kwargs:  # pragma: no cover
              update_dict.update(**kwargs)
          r = self._client._request('PUT', self._client._build_url('part', part_id=self.id), json=update_dict)
  
          if r.status_code != requests.codes.ok:  # pragma: no cover
              raise APIError("Could not update Part ({})".format(r))
  
          if name:
              self.name = name