Example #1
0
  def post(self):
    # Collect inputs.
    readsetId = self.request.get("readsetId")
    sequenceName = self.request.get('sequenceName')
    sequenceStart = int(self.request.get('sequenceStart'))
    sequenceEnd = int(self.request.get('sequenceEnd'))

    # Start a mapreduce pipeline to generate coverage
    # Then redirect to the status page
    pipeline = PipelineGenerateCoverage(readsetId, sequenceName,
                                        sequenceStart, sequenceEnd)
    pipeline.start()
    self.redirect(pipeline.base_path + "/status?root=" + pipeline.pipeline_id)
Example #2
0
  def post(self):
    # Collect inputs.
    readsetId = self.request.get('readsetId')
    sequenceName = self.request.get('sequenceName')
    sequenceStart = int(self.request.get('sequenceStart'))
    sequenceEnd = int(self.request.get('sequenceEnd'))

    # Start a mapreduce pipeline to generate coverage
    # Then redirect to the status page
    pipeline = PipelineGenerateCoverage(readsetId, sequenceName,
                                        sequenceStart, sequenceEnd)
    pipeline.start()
    self.redirect('%s/status?root=%s' %
                  (pipeline.base_path, pipeline.pipeline_id))
Example #3
0
    def post(self):
        # Collect inputs.
        readsetId = self.request.get("readsetId")
        sequenceName = self.request.get('sequenceName')
        sequenceStart = int(self.request.get('sequenceStart'))
        sequenceEnd = int(self.request.get('sequenceEnd'))
        useMockData = self.request.get('useMockData')

        # TODO: Validate inputs such as sequence start and end to make
        # sure they are in bounds based on TARGETS.

        reads = []
        coverage = None
        errorMessage = None

        if self.request.get("submitRead"):
            # Use the API to get the requested data.
            # If you are running the real pipeline map reduce then hit it.
            if self.request.get('runPipeline'):
                logging.debug("Running pipeline")
                pipeline = PipelineGenerateCoverage(readsetId, sequenceName,
                                                    sequenceStart, sequenceEnd,
                                                    useMockData)
                pipeline.start()
                self.redirect(pipeline.base_path + "/status?root=" +
                              pipeline.pipeline_id)
                return

            # Make the API calls directly from the web ui.
            api = GenomicsAPI()
            # Use the Mock API if requested.
            if useMockData:
                api = MockGenomicsAPI()

            # Make the call.
            try:
                pageToken = None
                firstTime = True
                while firstTime or pageToken is not None:
                    content = api.read_search(readsetId, sequenceName,
                                              sequenceStart, sequenceEnd,
                                              pageToken)
                    firstTime = False
                    if 'reads' in content:
                        reads += content['reads']
                    pageToken = content['nextPageToken'] if 'nextPageToken' in content\
                      else None
            except ApiException as exception:
                errorMessage = exception.message

        elif self.request.get("submitReadSample"):
            # Read in local sample data which is based off of default settings.
            readsetId = MainHandler.DEFAULT_SETTINGS['readsetId']
            sequenceName = MainHandler.DEFAULT_SETTINGS['sequenceName']
            sequenceStart = MainHandler.DEFAULT_SETTINGS['sequenceStart']
            sequenceEnd = MainHandler.DEFAULT_SETTINGS['sequenceEnd']
            path = os.path.join(
                os.path.split(__file__)[0], 'static/listRead_SampleData.json')
            file = open(path, 'r')
            content = file.read()
            file.close()
            content = json.loads(content)
            reads = content['reads']

        # If you have content then compute and store the results.
        if reads is not None and len(reads) > 0:
            # Calculate results
            coverage = GenomicsAPI.compute_coverage(reads, sequenceStart,
                                                    sequenceEnd)
            # TODO make a setting to turn this on/off?
            #GenomicsCoverageStatistics.store_coverage(readsetId, sequenceName,
            #                                          coverage)
        else:
            errorMessage = "There API did not return any reads to process."

        # Render template with results or error.
        username = users.User().nickname()
        version = os.environ['CURRENT_VERSION_ID']
        template = JINJA_ENVIRONMENT.get_template('index.html')
        self.response.out.write(
            template.render({
                "username": username,
                "version": version,
                "targets": GenomicsAPI.TARGETS,
                "settings": {
                    'readsetId': readsetId,
                    'sequenceName': sequenceName,
                    'sequenceStart': sequenceStart,
                    'sequenceEnd': sequenceEnd,
                    'useMockData': useMockData,
                },
                "errorMessage": errorMessage,
                "results": coverage,
            }))
Example #4
0
  def post(self):
    # Collect inputs.
    readsetId = self.request.get("readsetId")
    sequenceName = self.request.get('sequenceName')
    sequenceStart = int(self.request.get('sequenceStart'))
    sequenceEnd = int(self.request.get('sequenceEnd'))
    useMockData = self.request.get('useMockData')

    # TODO: Validate inputs such as sequence start and end to make
    # sure they are in bounds based on TARGETS.

    reads = []
    coverage = None
    errorMessage = None

    if self.request.get("submitRead"):
      # Use the API to get the requested data.
      # If you are running the real pipeline map reduce then hit it.
      if self.request.get('runPipeline'):
        pipeline = PipelineGenerateCoverage(readsetId, sequenceName,
                                            sequenceStart, sequenceEnd,
                                            useMockData)
        pipeline.start()
        self.redirect(pipeline.base_path + "/status?root="
                      + pipeline.pipeline_id)
        return

      # Make the API calls directly from the web ui.
      api = GenomicsAPI()
      # Use the Mock API if requested.
      if useMockData:
        api = MockGenomicsAPI()

      # Make the call.
      try:
        pageToken = None
        firstTime = True
        while firstTime or pageToken is not None:
          content = api.read_search(readsetId, sequenceName, sequenceStart,
                                    sequenceEnd, pageToken)
          firstTime = False
          if 'reads' in content:
            reads += content['reads']
          pageToken = content['nextPageToken'] if 'nextPageToken' in content\
            else None
      except ApiException as exception:
        errorMessage = exception.message

    elif self.request.get("submitReadSample"):
      # Read in local sample data which is based off of default settings.
      readsetId = MainHandler.DEFAULT_SETTINGS['readsetId']
      sequenceName = MainHandler.DEFAULT_SETTINGS['sequenceName']
      sequenceStart = MainHandler.DEFAULT_SETTINGS['sequenceStart']
      sequenceEnd = MainHandler.DEFAULT_SETTINGS['sequenceEnd']
      path = os.path.join(os.path.split(__file__)[0],
                          'static/reads-search_sample_data.json')
      file = open(path, 'r')
      content = file.read()
      file.close()
      content = json.loads(content)
      reads = content['reads']

    # Calculate results
    coverage = GenomicsAPI.compute_coverage(reads, sequenceStart, sequenceEnd)
    # TODO make a setting to turn this on/off?
    #GenomicsCoverageStatistics.store_coverage(readsetId, sequenceName,
    #                                          coverage)

    # Render template with results or error.
    username = users.User().nickname()
    template = JINJA_ENVIRONMENT.get_template('index.html')
    self.response.out.write(template.render({
      "username": username,
      "version": self._get_version(),
      "targets": GenomicsAPI.TARGETS,
      "settings": {
        'readsetId': readsetId,
        'sequenceName': sequenceName,
        'sequenceStart': sequenceStart,
        'sequenceEnd': sequenceEnd,
        'useMockData': useMockData,
      },
      "errorMessage": errorMessage,
      "results": coverage,
    }))