docs: def upload_jterator_project(self, pipeline, handles):
          '''Uploads a *jterator* project.
  
          Parameters
          ----------
          pipeline: dict
              description of the jterator pipeline
          handles: dict, optional
              description of each module in the jterator pipeline
  
          See also
          --------
          :func:`tmserver.api.workflow.update_jterator_project`
          :class:`tmlib.workflow.jterator.description.PipelineDescription`
          :class:`tmlib.workflow.jterator.description.HandleDescriptions`
          '''
          logger.info(
              'upload jterator project for experiment "%s"', self.experiment_name
          )
          content = {
              'pipeline': pipeline,
              'handles': handles
          }
          url = self._build_api_url(
              '/experiments/{experiment_id}/workflow/jtproject'.format(
                  experiment_id=self._experiment_id
              )
          )
          res = self._session.put(url, json=content)
          res.raise_for_status()