diff --git a/server/app/app.py b/server/app/app.py index c5eee4d8..b1fd1570 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,8 @@ def run_scanpy(args): ) from .scanpy_engine.scanpy_engine import ScanpyEngine - app.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) @@ -63,8 +65,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 + except ImportError: + warnings.warn("Scanpy engine not available", ImportWarning) + else: + ScanpyEngine.add_to_parser(subparsers, run_scanpy) 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..e28e1733 100644 --- a/server/app/scanpy_engine/scanpy_engine.py +++ b/server/app/scanpy_engine/scanpy_engine.py @@ -23,6 +23,18 @@ 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") + # 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 + @staticmethod def _load_data(data): return sc.read(os.path.join(data, "data.h5ad"))