code: def update(ctx, name, description, tags, private):
      
      user, project_name = get_project_or_local(ctx.obj.get('project'))
  
      update_dict = {}
      if name:
          update_dict['name'] = name
  
      if description:
          update_dict['description'] = description
  
      if private is not None:
          update_dict['is_public'] = not private
  
      tags = validate_tags(tags)
      if tags:
          update_dict['tags'] = tags
  
      if not update_dict:
          Printer.print_warning('No argument was provided to update the project.')
          sys.exit(1)
  
      try:
          response = PolyaxonClient().project.update_project(user, project_name, update_dict)
      except (PolyaxonHTTPError, PolyaxonShouldExitError, PolyaxonClientException) as e:
          Printer.print_error('Could not update project `{}`.'.format(project_name))
          Printer.print_error('Error message `{}`.'.format(e))
          sys.exit(1)
  
      Printer.print_success("Project updated.")
      get_project_details(response)
docs: Update project.
  
      Uses [Caching](/references/polyaxon-cli/#caching)
  
      Example:
  
      \b
      ```bash
      $ polyaxon update foobar --description="Image Classification with DL using TensorFlow"
      ```
  
      \b
      ```bash
      $ polyaxon update mike1/foobar --description="Image Classification with DL using TensorFlow"
      ```
  
      \b
      ```bash
      $ polyaxon update --tags="foo, bar"
      ```