Esempio n. 1
0
    def _get_mq(self):
        """
        Return the current connection to the message queue
        :return: A ReactomeMQ object
        """
        if not self._mq:
            try:
                self._mq = reactome_mq.ReactomeMQ(queue_name=reactome_mq.DATASET_QUEUE)
            except Exception as e:
                LOGGER.error("Failed to connect to MQ service: " + str(e))
                raise Exception("Failed to connect to MQ service.", e)

        return self._mq
    def test_fetch_sc_expression_atlas(self):
        dataset_id = "E-MTAB-7078"
        k = "3"
        resource_id = "ebi_sc_gxa"
        loading_id = "loading_sc_gxa_1"

        # set the data directory
        os.environ["EXAMPLE_DIRECTORY"] = os.path.join(
            os.path.dirname(__file__), "testfiles")

        fetcher = reactome_analysis_dataset_fetcher.ReactomeAnalysisDatasetFetcher(
        )

        # post one analysis request
        mq = reactome_mq.ReactomeMQ(queue_name=reactome_mq.DATASET_QUEUE)
        storage = reactome_storage.ReactomeStorage()

        mq.post_analysis(models.dataset_request.DatasetRequest(
            loading_id=loading_id,
            resource_id=resource_id,
            parameters=[
                models.dataset_request.DatasetRequestParameter(
                    name="dataset_id", value=dataset_id),
                models.dataset_request.DatasetRequestParameter(name="k",
                                                               value=k)
            ]).to_json(),
                         method="test")

        # process the message
        fetcher.process_single_message()

        # make sure the status is complete
        status = storage.get_status(analysis_identifier=loading_id,
                                    data_type="dataset")

        self.assertIsNotNone(status)
        status_obj = json.loads(status)
        self.assertEqual("complete", status_obj["status"])
        dataset_id = status_obj["dataset_id"]

        # get the summary
        summary_string = storage.get_request_data_summary(dataset_id)
        self.assertIsNotNone(summary_string)

        # get the data
        data_string = storage.get_request_data(dataset_id)
        self.assertIsNotNone(data_string)
Esempio n. 3
0
    def test_fetch_proteomics(self):
        os.environ["EXAMPLE_DIRECTORY"] = os.path.join(
            os.path.dirname(__file__), "../example_datasets")
        fetcher = reactome_analysis_dataset_fetcher.ReactomeAnalysisDatasetFetcher(
        )

        # post one analysis request
        mq = reactome_mq.ReactomeMQ(queue_name=reactome_mq.DATASET_QUEUE)
        storage = reactome_storage.ReactomeStorage()

        mq.post_analysis(models.dataset_request.DatasetRequest(
            loading_id="loading_2",
            resource_id="example_datasets",
            parameters=[
                models.dataset_request.DatasetRequestParameter(
                    name="dataset_id", value="EXAMPLE_MEL_PROT")
            ]).to_json(),
                         method="test")

        # process the message
        fetcher.process_single_message()

        # make sure the status is complete
        status = storage.get_status(analysis_identifier="loading_2",
                                    data_type="dataset")

        self.assertIsNotNone(status)
        status_obj = json.loads(status)
        self.assertEqual("complete", status_obj["status"])

        # get the summary
        summary_string = storage.get_request_data_summary("EXAMPLE_MEL_PROT")
        self.assertIsNotNone(summary_string)

        # get the data
        data_string = storage.get_request_data("EXAMPLE_MEL_PROT")
        self.assertIsNotNone(data_string)
Esempio n. 4
0
    def test_additional_parameter_analysis(self):
        """
        Tests an analysis request that contains multiple blocking factors
        """
        request_json = """
                {
          "analysisId": "test_01",
          "datasets": [
            {
              "data": "\\tSample 1\\tSample2\\tSample 3\\nCD19\\t10\\t2\\t20\\nCD20\\t10\\t20\\t2\\nMITF\\t40\\t20\\t10\\n",
              "design": {
                "analysisGroup": [
                  "Treatment",
                  "Control",
                  "Treatment"
                ],
                "comparison": {
                  "group1": "Control",
                  "group2": "Treatment"
                },
                "samples": [
                  "Sample 1",
                  "Sample 2",
                  "Sample 3"
                ]
              },
              "name": "First experiment",
              "type": "rnaseq_counts"
            }
          ],
          "methodName": "camera",
          "parametes": [
            {
              "name": "permutations",
              "value": "10"
            },
            {
              "name": "permutations",
              "value": "10"
            }
          ]
        }
        """

        # make sure the JSON is valid
        obj = json.loads(request_json)
        self.assertIsNotNone(obj)

        # submit the request
        mq = reactome_mq.ReactomeMQ()
        mq.post_analysis(request_json, "camera")

        # download the gene sets
        if not os.path.isfile("/tmp/reactome_homo_sapiens.pkl"):
            geneset = self._get_gene_set()
            geneset.save("/tmp/reactome_homo_sapiens.pkl")

        # enable debug mode
        os.environ["REACTOME_WORKER_DEBUG"] = "True"

        # start to listen to analyses
        worker = reactome_analysis_worker.ReactomeAnalysisWorker()
        worker.process_single_message()

        # fetch the result
        storage = reactome_storage.ReactomeStorage()
        result_text = storage.get_result("test_01")

        self.assertIsNotNone(result_text, "Result was not saved in redis")
        json_obj = json.loads(result_text)
        result = AnalysisResult.from_dict(json_obj)

        self.assertIsNotNone(result)
        self.assertIsNotNone(result.mappings)
        self.assertIsNotNone(result.results)
        self.assertEqual("68", result.release)

        self.assertEqual(1, len(result.results))
        self.assertIsNotNone(result.results[0].pathways)
        self.assertIsNotNone(result.results[0].fold_changes)

        pathway_lines = result.results[0].pathways.split("\n")
        self.assertEqual(23, len(pathway_lines))

        gene_lines = result.results[0].fold_changes.split("\n")
        self.assertEqual(4, len(gene_lines))
Esempio n. 5
0
    def test_incorrect_genes(self):
        json_request = """
        {
  "analysisId": "test_02",
  "datasets": [
    {
      "data": "\\tSample 1\\tSample2\\tSample3\\nCD19\\t10\\t20\\t5\\nCD20\\t10\\t49\\t2\\nMITF\\t56\\t14\\t24\\n",
      "design": {
        "analysisGroup": [
          "Treatment",
          "Control",
          "Treatment"
        ],
        "comparison": {
          "group1": "Control",
          "group2": "Treatment"
        },
        "samples": [
          "Sample 1",
          "Sample 2",
          "Sample 3"
        ]
      },
      "name": "First experiment",
      "type": "rnaseq_counts"
    },
    {
      "data": "\\tSample 1\\tSample2\\tGene 1\\t10\\t20\\n",
      "design": {
        "analysisGroup": [
          "Treatment",
          "Control",
          "Treatment"
        ],
        "comparison": {
          "group1": "Control",
          "group2": "Treatment"
        },
        "samples": [
          "Sample 1",
          "Sample 2",
          "Sample 3"
        ]
      },
      "name": "First experiment",
      "type": "rnaseq_counts"
    }
  ],
      "methodName": "Camera",
      "parameters": [
        {
          "name": "permutations",
          "value": "10"
        },
        {
          "name": "permutations",
          "value": "10"
        }
      ]
    }
    """

        # make sure the JSON is valid
        obj = json.loads(json_request)
        self.assertIsNotNone(obj)

        # submit the request
        mq = reactome_mq.ReactomeMQ()
        mq.post_analysis(json_request, "camera")

        # download the gene sets
        if not os.path.isfile("/tmp/reactome_homo_sapiens.pkl"):
            geneset = self._get_gene_set()
            geneset.save("/tmp/reactome_homo_sapiens.pkl")

        # enable debug mode
        os.environ["REACTOME_WORKER_DEBUG"] = "True"

        # start to listen to analyses
        worker = reactome_analysis_worker.ReactomeAnalysisWorker()
        worker.process_single_message()

        # fetch the result
        storage = reactome_storage.ReactomeStorage()

        status = storage.get_status("test_02")
        status_obj = json.loads(status)
        self.assertEqual("failed", status_obj["status"])

        result_text = storage.get_result("test_02")
        self.assertIsNone(result_text)