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"))