docs: def add_stage(self, executable, stage_id=None, name=None, folder=None, stage_input=None, instance_type=None,
                    edit_version=None, **kwargs):
          '''
          :param executable: string or a handler for an app or applet
          :type executable: string, DXApplet, or DXApp
          :param stage_id: id for the stage (optional)
          :type stage_id: string
          :param name: name for the stage (optional)
          :type name: string
          :param folder: default output folder for the stage; either a relative or absolute path (optional)
          :type folder: string
          :param stage_input: input fields to bind as default inputs for the executable (optional)
          :type stage_input: dict
          :param instance_type: Default instance type on which all jobs will be run for this stage, or a dict mapping function names to instance type requests
          :type instance_type: string or 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
          :returns: ID of the added stage
          :rtype: string
          :raises: :class:`~dxpy.exceptions.DXError` if *executable* is not an expected type :class:`~dxpy.exceptions.DXAPIError` for errors thrown from the API call
  
          Adds the specified executable as a new stage in the workflow.
          '''
          if isinstance(executable, basestring):
              exec_id = executable
          elif isinstance(executable, DXExecutable):
              exec_id = executable.get_id()
          else:
              raise DXError("dxpy.DXWorkflow.add_stage: executable must be a string or an instance of DXApplet or DXApp")
          add_stage_input = {"executable": exec_id}
          if stage_id is not None:
              add_stage_input["id"] = stage_id
          if name is not None:
              add_stage_input["name"] = name
          if folder is not None:
              add_stage_input["folder"] = folder
          if stage_input is not None:
              add_stage_input["input"] = stage_input
          if instance_type is not None:
              add_stage_input["systemRequirements"] = SystemRequirementsDict.from_instance_type(instance_type).as_dict()
          self._add_edit_version_to_request(add_stage_input, edit_version)
          try:
              result = dxpy.api.workflow_add_stage(self._dxid, add_stage_input, **kwargs)
          finally:
              self.describe() # update cached describe
          return result['stage']