docs: def update(self, title=None, unset_title=False, summary=None, description=None,
                 output_folder=None, unset_output_folder=False,
                 workflow_inputs=None, unset_workflow_inputs=False,
                 workflow_outputs=None, unset_workflow_outputs=False,
                 stages=None, edit_version=None, **kwargs):
          '''
          :param title: workflow title to set; cannot be provided with *unset_title* set to True
          :type title: string
          :param unset_title: whether to unset the title; cannot be provided with string value for *title*
          :type unset_title: boolean
          :param summary: workflow summary to set
          :type summary: string
          :param description: workflow description to set
          :type description: string
          :param output_folder: new default output folder for the workflow
          :type output_folder: string
          :param unset_folder: whether to unset the default output folder; cannot be True with string value for *output_folder*
          :type unset_folder: boolean
          :param stages: updates to the stages to make; see API documentation for /workflow-xxxx/update for syntax of this field; use :meth:`update_stage()` to update a single stage
          :type stages: dict
          :param workflow_inputs: updates to the workflow input to make; see API documentation for /workflow-xxxx/update for syntax of this field
          :type workflow_inputs: dict
          :param workflow_outputs: updates to the workflow output to make; see API documentation for /workflow-xxxx/update for syntax of this field
          :type workflow_outputs: dict
          :param edit_version: if provided, the edit version of the workflow that should be modified; if not provided, the current edit version will be used (optional)
          :type edit_version: int
  
          Make general metadata updates to the workflow
          '''
          update_input = {}
          if title is not None and unset_title:
              raise DXError('dxpy.DXWorkflow.update: cannot provide both "title" and set "unset_title"')
          if output_folder is not None and unset_output_folder:
              raise DXError('dxpy.DXWorkflow.update: cannot provide both "output_folder" and set "unset_output_folder"')
          if workflow_inputs is not None and unset_workflow_inputs:
              raise DXError('dxpy.DXWorkflow.update: cannot provide both "workflow_inputs" and set "unset_workflow_inputs"')
          if workflow_outputs is not None and unset_workflow_outputs:
              raise DXError('dxpy.DXWorkflow.update: cannot provide both "workflow_outputs" and set "unset_workflow_outputs"')
  
          if title is not None:
              update_input["title"] = title
          elif unset_title:
              update_input["title"] = None
          if summary is not None:
              update_input["summary"] = summary
          if description is not None:
              update_input["description"] = description
          if output_folder is not None:
              update_input["outputFolder"] = output_folder
          elif unset_output_folder:
              update_input["outputFolder"] = None
          if stages is not None:
              update_input["stages"] = stages
          if workflow_inputs is not None:
              update_input["inputs"] = workflow_inputs
          elif unset_workflow_inputs:
              update_input["inputs"] = None
          if workflow_outputs is not None:
              update_input["outputs"] = workflow_outputs
          elif unset_workflow_outputs:
              update_input["outputs"] = None
  
          # only perform update if there are changes to make
          if update_input:
              self._add_edit_version_to_request(update_input, edit_version)
              try:
                  dxpy.api.workflow_update(self._dxid, update_input, **kwargs)
              finally:
                  self.describe()