From 499b9551f10dff15559f1f578d19960415b2621f Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Thu, 2 Aug 2018 17:20:46 -0700 Subject: [PATCH 1/7] moved scanpy parser to scanpy class --- server/app/app.py | 9 ++++++--- server/app/scanpy_engine/scanpy_engine.py | 7 +++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/server/app/app.py b/server/app/app.py index c5eee4d8..30a7accc 100644 --- a/server/app/app.py +++ b/server/app/app.py @@ -63,8 +63,11 @@ def main(): "of the directory from the data_directory arg") parser.add_argument("--port", help="Port to run server on.", type=int, default=5005) subparsers = parser.add_subparsers(dest="cellxgene_command") - scanpy_subparser = subparsers.add_parser("scanpy", help="run cellxgene using the scanpy engine") - scanpy_subparser.add_argument("data_directory", metavar="dir", help="Directory containing data and schema file") - scanpy_subparser.set_defaults(func=run_scanpy) + try: + from .scanpy_engine.scanpy_engine import ScanpyEngine + ScanpyEngine.add_to_parser(subparsers, run_scanpy) + except ImportError: + print("Scanpy engine not available") + args = parser.parse_args() args.func(args) diff --git a/server/app/scanpy_engine/scanpy_engine.py b/server/app/scanpy_engine/scanpy_engine.py index 9ede3b45..c9240989 100644 --- a/server/app/scanpy_engine/scanpy_engine.py +++ b/server/app/scanpy_engine/scanpy_engine.py @@ -23,6 +23,13 @@ class ScanpyEngine(CXGDriver): def _set_cell_names(self): self.data.obs["cell_name"] = list(self.data.obs.index) + @classmethod + def add_to_parser(cls, subparsers, invocation_function): + scanpy_group = subparsers.add_parser("scanpy", help="run cellxgene using the scanpy engine") + scanpy_group.add_argument("data_directory", metavar="dir", help="Directory containing data and schema file") + scanpy_group.set_defaults(func=invocation_function) + return scanpy_group + @staticmethod def _load_data(data): return sc.read(os.path.join(data, "data.h5ad")) From c2b3f331cfc2349cf85f4f9a861eccfc8ff760db Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Fri, 3 Aug 2018 10:12:55 -0700 Subject: [PATCH 2/7] Add layout and diffexp calculations to cli options --- server/app/app.py | 2 +- server/app/scanpy_engine/scanpy_engine.py | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/server/app/app.py b/server/app/app.py index 30a7accc..a7191acf 100644 --- a/server/app/app.py +++ b/server/app/app.py @@ -53,7 +53,7 @@ def run_scanpy(args): ) from .scanpy_engine.scanpy_engine import ScanpyEngine - app.data = ScanpyEngine(args.data_directory, schema="data_schema.json") + data = ScanpyEngine(args.data_directory, schema="data_schema.json", graph_method=args.layout, diffexp_method=args.diffexp) app.run(host="127.0.0.1", debug=True, port=args.port) diff --git a/server/app/scanpy_engine/scanpy_engine.py b/server/app/scanpy_engine/scanpy_engine.py index c9240989..e28e1733 100644 --- a/server/app/scanpy_engine/scanpy_engine.py +++ b/server/app/scanpy_engine/scanpy_engine.py @@ -26,6 +26,11 @@ class ScanpyEngine(CXGDriver): @classmethod def add_to_parser(cls, subparsers, invocation_function): scanpy_group = subparsers.add_parser("scanpy", help="run cellxgene using the scanpy engine") + # TODO these choices should be generated from the actual available methods + scanpy_group.add_argument("-l", "--layout", choices=["umap", "tsne"], default="umap", + help="Algorithm to use for graph layout") + scanpy_group.add_argument("-d", "--diffexp", choices=["ttest"], default="ttest", + help="Algorithm to use to calculate differential expression") scanpy_group.add_argument("data_directory", metavar="dir", help="Directory containing data and schema file") scanpy_group.set_defaults(func=invocation_function) return scanpy_group From bf19bb7dcecfe817f52c8744cc6d0301dbf449c0 Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Fri, 3 Aug 2018 11:08:44 -0700 Subject: [PATCH 3/7] Formatting --- server/app/app.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/app/app.py b/server/app/app.py index a7191acf..d0f42cd1 100644 --- a/server/app/app.py +++ b/server/app/app.py @@ -53,7 +53,8 @@ def run_scanpy(args): ) from .scanpy_engine.scanpy_engine import ScanpyEngine - data = ScanpyEngine(args.data_directory, schema="data_schema.json", graph_method=args.layout, diffexp_method=args.diffexp) + data = ScanpyEngine(args.data_directory, schema="data_schema.json", + graph_method=args.layout, diffexp_method=args.diffexp) app.run(host="127.0.0.1", debug=True, port=args.port) From 11f88a9eb2b8408bf28613668a8b8affaa4b3a34 Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Tue, 7 Aug 2018 16:49:40 -0700 Subject: [PATCH 4/7] Warn instead if print when scanpy isn't available --- server/app/app.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/app/app.py b/server/app/app.py index d0f42cd1..bc1e969c 100644 --- a/server/app/app.py +++ b/server/app/app.py @@ -1,5 +1,6 @@ import argparse import os +import warnings from flask import Flask from flask_caching import Cache @@ -68,7 +69,7 @@ def main(): from .scanpy_engine.scanpy_engine import ScanpyEngine ScanpyEngine.add_to_parser(subparsers, run_scanpy) except ImportError: - print("Scanpy engine not available") + warnings.warn("Scanpy engine not available", ImportWarning) args = parser.parse_args() args.func(args) From e5c7c0c44aebe5fed9125e10549fde3889b164de Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Tue, 7 Aug 2018 16:49:40 -0700 Subject: [PATCH 5/7] Warn instead if print when scanpy isn't available --- server/app/app.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/server/app/app.py b/server/app/app.py index d0f42cd1..7b524d93 100644 --- a/server/app/app.py +++ b/server/app/app.py @@ -1,5 +1,6 @@ import argparse import os +import warnings from flask import Flask from flask_caching import Cache @@ -53,7 +54,7 @@ def run_scanpy(args): ) from .scanpy_engine.scanpy_engine import ScanpyEngine - data = ScanpyEngine(args.data_directory, schema="data_schema.json", + app.data = ScanpyEngine(args.data_directory, schema="data_schema.json", graph_method=args.layout, diffexp_method=args.diffexp) app.run(host="127.0.0.1", debug=True, port=args.port) @@ -68,7 +69,7 @@ def main(): from .scanpy_engine.scanpy_engine import ScanpyEngine ScanpyEngine.add_to_parser(subparsers, run_scanpy) except ImportError: - print("Scanpy engine not available") + warnings.warn("Scanpy engine not available", ImportWarning) args = parser.parse_args() args.func(args) From 2a11af25503e68588f6878869196f8de6cae6b44 Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Tue, 7 Aug 2018 17:01:19 -0700 Subject: [PATCH 6/7] Formatting --- server/app/app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/app/app.py b/server/app/app.py index 7b524d93..2cb80af9 100644 --- a/server/app/app.py +++ b/server/app/app.py @@ -55,7 +55,7 @@ def run_scanpy(args): from .scanpy_engine.scanpy_engine import ScanpyEngine app.data = ScanpyEngine(args.data_directory, schema="data_schema.json", - graph_method=args.layout, diffexp_method=args.diffexp) + graph_method=args.layout, diffexp_method=args.diffexp) app.run(host="127.0.0.1", debug=True, port=args.port) From f4780a9806163dbafa4924f3a99c5b9f783b097d Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Wed, 8 Aug 2018 11:18:06 -0700 Subject: [PATCH 7/7] Moved add to parser out of try block. --- server/app/app.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/app/app.py b/server/app/app.py index 2cb80af9..b1fd1570 100644 --- a/server/app/app.py +++ b/server/app/app.py @@ -67,9 +67,9 @@ def main(): subparsers = parser.add_subparsers(dest="cellxgene_command") try: from .scanpy_engine.scanpy_engine import ScanpyEngine - ScanpyEngine.add_to_parser(subparsers, run_scanpy) except ImportError: warnings.warn("Scanpy engine not available", ImportWarning) - + else: + ScanpyEngine.add_to_parser(subparsers, run_scanpy) args = parser.parse_args() args.func(args)