diff --git a/backend/common/errors.py b/backend/common/errors.py index 80f4a08a..56075016 100644 --- a/backend/common/errors.py +++ b/backend/common/errors.py @@ -51,7 +51,6 @@ define_request_exception( default_status_code=HTTPStatus.UNPROCESSABLE_ENTITY, ) -define_exception("OntologyLoadFailure", "Raised when reading the ontology file fails") define_exception("ConfigurationError", "Raised when checking configuration errors") define_exception("PrepareError", "Raised when data is misprepared") define_exception("SecretKeyRetrievalError", "Raised when get_secret_key from AWS fails") diff --git a/backend/czi_hosted/cli/launch.py b/backend/czi_hosted/cli/launch.py index 59cdf257..0e457010 100644 --- a/backend/czi_hosted/cli/launch.py +++ b/backend/czi_hosted/cli/launch.py @@ -44,20 +44,6 @@ def annotation_args(func): help="Directory of where to save output annotations; filename will be specified in the application. " "Incompatible with --annotations-file.", ) - @click.option( - "--experimental-annotations-ontology", - is_flag=True, - default=DEFAULT_CONFIG.default_dataset_config.user_annotations__ontology__enable, - show_default=True, - help="When creating annotations, optionally autocomplete names from ontology terms.", - ) - @click.option( - "--experimental-annotations-ontology-obo", - default=DEFAULT_CONFIG.default_dataset_config.user_annotations__ontology__obo_location, - show_default=True, - metavar="", - help="Location of OBO file defining cell annotation autosuggest terms.", - ) @functools.wraps(func) def wrapper(*args, **kwargs): return func(*args, **kwargs) @@ -328,8 +314,6 @@ def launch( annotations_dir, backed, disable_diffexp, - experimental_annotations_ontology, - experimental_annotations_ontology_obo, experimental_enable_reembedding, config_file, dump_default_config, @@ -389,8 +373,6 @@ def launch( user_annotations__enable=not disable_annotations, user_annotations__local_file_csv__file=annotations_file, user_annotations__local_file_csv__directory=annotations_dir, - user_annotations__ontology__enable=experimental_annotations_ontology, - user_annotations__ontology__obo_location=experimental_annotations_ontology_obo, presentation__max_categories=max_category_items, presentation__custom_colors=not disable_custom_colors, embeddings__names=embedding, diff --git a/backend/czi_hosted/common/annotations/annotations.py b/backend/czi_hosted/common/annotations/annotations.py index 530d9964..87851f03 100644 --- a/backend/czi_hosted/common/annotations/annotations.py +++ b/backend/czi_hosted/common/annotations/annotations.py @@ -1,10 +1,8 @@ -import fastobo -import fsspec import os from flask import current_app, has_request_context -from backend.common.errors import OntologyLoadFailure, DisabledFeatureError +from backend.common.errors import DisabledFeatureError from backend.common.utils.type_conversion_utils import get_schema_type_hint_of_array from backend.common.genesets import write_gene_sets_tidycsv, read_gene_sets_tidycsv, validate_gene_sets from backend.common.utils.data_locator import DataLocator @@ -12,14 +10,9 @@ from backend.common.utils.utils import path_join class Annotations: - """ baseclass for annotations, including ontologies and genesets """ - - """ our default ontology is the PURL for the Cell Ontology. - See http://www.obofoundry.org/ontology/cl.html """ - DefaultOnotology = "http://purl.obolibrary.org/obo/cl.obo" + """baseclass for annotations and genesets""" def __init__(self, config={}): - self.ontology_data = None self.config = config def user_annotations_enabled(self): @@ -29,27 +22,6 @@ class Annotations: if not self.user_annotations_enabled(): raise DisabledFeatureError("User annotations are disabled.") - def load_ontology(self, path): - """Load and parse ontologies - currently support OBO files only.""" - if path is None: - path = self.DefaultOnotology - - try: - with fsspec.open(path) as f: - obo = fastobo.iter(f) - terms = filter(lambda stanza: type(stanza) is fastobo.term.TermFrame, obo) - names = [tag.name for term in terms for tag in term if type(tag) is fastobo.term.NameClause] - self.ontology_data = names - - except FileNotFoundError as e: - raise OntologyLoadFailure("Unable to find OBO ontology path") from e - - except SyntaxError as e: - raise OntologyLoadFailure(f"{path}:{e.lineno}:{e.offset} OBO syntax error, unable to read ontology") from e - - except Exception as e: - raise OntologyLoadFailure(f"{path}:Error loading OBO file") from e - def get_schema(self, data_adaptor): schema = [] labels = self.read_labels(data_adaptor) @@ -126,7 +98,7 @@ class Annotations: def dataset_uri_to_geneset_uri(data_uri_or_path): - """ given a dataset URI, return the associated gene set URI """ + """given a dataset URI, return the associated gene set URI""" data_basename = os.path.basename(data_uri_or_path) base, ext = os.path.splitext(data_basename) if ext is not None: # strip extension, if any diff --git a/backend/czi_hosted/common/annotations/hosted_tiledb.py b/backend/czi_hosted/common/annotations/hosted_tiledb.py index ba957720..f86fec5a 100644 --- a/backend/czi_hosted/common/annotations/hosted_tiledb.py +++ b/backend/czi_hosted/common/annotations/hosted_tiledb.py @@ -164,10 +164,4 @@ class AnnotationsHostedTileDB(Annotations): params["annotations"] = True params["user_annotation_collection_name_enabled"] = False - if self.ontology_data: - params["annotations_cell_ontology_enabled"] = True - params["annotations_cell_ontology_terms"] = self.ontology_data - else: - params["annotations_cell_ontology_enabled"] = False - parameters.update(params) diff --git a/backend/czi_hosted/common/annotations/local_file_csv.py b/backend/czi_hosted/common/annotations/local_file_csv.py index 468d8cd0..6a5d3a16 100644 --- a/backend/czi_hosted/common/annotations/local_file_csv.py +++ b/backend/czi_hosted/common/annotations/local_file_csv.py @@ -115,7 +115,7 @@ class AnnotationsLocalFile(Annotations): return os.getcwd() def _get_filename(self, data_adaptor): - """ return the current annotation file name """ + """return the current annotation file name""" if self.output_file: return self.output_file @@ -175,12 +175,6 @@ class AnnotationsLocalFile(Annotations): params["annotations"] = True params["user_annotation_collection_name_enabled"] = True - if self.ontology_data: - params["annotations_cell_ontology_enabled"] = True - params["annotations_cell_ontology_terms"] = self.ontology_data - else: - params["annotations_cell_ontology_enabled"] = False - if self.output_file is not None: # user has hard-wired the name of the annotation data collection fname = os.path.basename(self.output_file) diff --git a/backend/czi_hosted/common/config/client_config.py b/backend/czi_hosted/common/config/client_config.py index dbb727c5..181d864e 100644 --- a/backend/czi_hosted/common/config/client_config.py +++ b/backend/czi_hosted/common/config/client_config.py @@ -47,9 +47,6 @@ def get_client_config(app_config, data_adaptor): "annotations_genesets": True, # feature flag "annotations_genesets_readonly": True, "annotations_genesets_summary_methods": ["mean"], - "annotations_cell_ontology_enabled": False, - "annotations_cell_ontology_obopath": None, - "annotations_cell_ontology_terms": None, "custom_colors": dataset_config.presentation__custom_colors, "diffexp-may-be-slow": False, "about_legal_tos": dataset_config.app__about_legal_tos, diff --git a/backend/czi_hosted/common/config/dataset_config.py b/backend/czi_hosted/common/config/dataset_config.py index 161341a5..362e5cce 100644 --- a/backend/czi_hosted/common/config/dataset_config.py +++ b/backend/czi_hosted/common/config/dataset_config.py @@ -5,7 +5,7 @@ from backend.czi_hosted.common.annotations.annotations import Annotations from backend.czi_hosted.common.annotations.hosted_tiledb import AnnotationsHostedTileDB from backend.czi_hosted.common.annotations.local_file_csv import AnnotationsLocalFile from backend.czi_hosted.common.config.base_config import BaseConfig -from backend.common.errors import ConfigurationError, OntologyLoadFailure +from backend.common.errors import ConfigurationError from backend.czi_hosted.compute.scanpy import get_scanpy_module from backend.czi_hosted.data_common.matrix_loader import MatrixDataLoader, MatrixDataType from backend.czi_hosted.db.db_utils import DbUtils @@ -33,10 +33,6 @@ class DatasetConfig(BaseConfig): "directory" ] self.user_annotations__local_file_csv__file = default_config["user_annotations"]["local_file_csv"]["file"] - self.user_annotations__ontology__enable = default_config["user_annotations"]["ontology"]["enable"] - self.user_annotations__ontology__obo_location = default_config["user_annotations"]["ontology"][ - "obo_location" - ] self.user_annotations__hosted_tiledb_array__db_uri = default_config["user_annotations"][ "hosted_tiledb_array" ]["db_uri"] @@ -55,7 +51,7 @@ class DatasetConfig(BaseConfig): raise ConfigurationError(f"Unexpected config: {str(e)}") # Create the default annotation, which supports gene set reading without - # further configuration. Depending on configuration options, `complete_config` + # further configuration. Depending on configuration options, `complete_config` # may create a more specialized annotation object and replace this default. self.user_annotations = Annotations() @@ -101,10 +97,6 @@ class DatasetConfig(BaseConfig): self.validate_correct_type_of_configuration_attribute( "user_annotations__local_file_csv__file", (type(None), str) ) - self.validate_correct_type_of_configuration_attribute("user_annotations__ontology__enable", bool) - self.validate_correct_type_of_configuration_attribute( - "user_annotations__ontology__obo_location", (type(None), str) - ) self.validate_correct_type_of_configuration_attribute( "user_annotations__hosted_tiledb_array__db_uri", (type(None), str) ) @@ -125,11 +117,6 @@ class DatasetConfig(BaseConfig): self.handle_hosted_tiledb_annotations() else: raise ConfigurationError('The only annotation type support is "local_file_csv" or "hosted_tiledb_array') - if self.user_annotations__ontology__enable or self.user_annotations__ontology__obo_location: - try: - self.user_annotations.load_ontology(self.user_annotations__ontology__obo_location) - except OntologyLoadFailure as e: - raise ConfigurationError("Unable to load ontology terms\n" + str(e)) else: self.check_annotation_config_vars_not_set(context) @@ -197,13 +184,6 @@ class DatasetConfig(BaseConfig): "Warning: hosted_file_directory for hosted_tiledb_array ignored as annotations are disabled." ) - if self.user_annotations__ontology__enable: - context["messagefn"]("Warning: --experimental-annotations-ontology ignored as annotations are disabled.") - if self.user_annotations__ontology__obo_location is not None: - context["messagefn"]( - "Warning: --experimental-annotations-ontology-obo ignored as annotations are disabled." - ) - def handle_embeddings(self): self.validate_correct_type_of_configuration_attribute("embeddings__names", list) self.validate_correct_type_of_configuration_attribute("embeddings__enable_reembedding", bool) diff --git a/backend/czi_hosted/default_config.py b/backend/czi_hosted/default_config.py index d42154a0..6729bf18 100644 --- a/backend/czi_hosted/default_config.py +++ b/backend/czi_hosted/default_config.py @@ -194,9 +194,6 @@ dataset: local_file_csv: directory: null file: null - ontology: - enable: false - obo_location: null embeddings: names : [] diff --git a/backend/czi_hosted/requirements.txt b/backend/czi_hosted/requirements.txt index e85ea302..3e0f5bf9 100644 --- a/backend/czi_hosted/requirements.txt +++ b/backend/czi_hosted/requirements.txt @@ -1,7 +1,6 @@ anndata>=0.7.0 boto3>=1.12.18 click>=7.1.2 -fastobo>=0.6.1 Flask>=1.0.2,<2.0.0 # Flask 2.0 is not compatible with the latest version of Flask-RESTful (0.3.8) Flask-Compress>=1.4.0 Flask-Cors>=3.0.6 diff --git a/backend/server/cli/launch.py b/backend/server/cli/launch.py index 2448da5d..e136b2e5 100644 --- a/backend/server/cli/launch.py +++ b/backend/server/cli/launch.py @@ -44,20 +44,6 @@ def annotation_args(func): help="Directory of where to save output annotations; filename will be specified in the application. " "Incompatible with --annotations-file and --gene-sets-file.", ) - @click.option( - "--experimental-annotations-ontology", - is_flag=True, - default=DEFAULT_CONFIG.dataset_config.user_annotations__ontology__enable, - show_default=True, - help="When creating annotations, optionally autocomplete names from ontology terms.", - ) - @click.option( - "--experimental-annotations-ontology-obo", - default=DEFAULT_CONFIG.dataset_config.user_annotations__ontology__obo_location, - show_default=True, - metavar="", - help="Location of OBO file defining cell annotation autosuggest terms.", - ) @click.option( "--disable-gene-sets-save", is_flag=True, @@ -338,8 +324,6 @@ def launch( disable_gene_sets_save, backed, disable_diffexp, - experimental_annotations_ontology, - experimental_annotations_ontology_obo, experimental_enable_reembedding, config_file, dump_default_config, @@ -396,8 +380,6 @@ def launch( user_annotations__local_file_csv__directory=user_generated_data_dir, user_annotations__local_file_csv__gene_sets_file=gene_sets_file, user_annotations__gene_sets__readonly=disable_gene_sets_save, - user_annotations__ontology__enable=experimental_annotations_ontology, - user_annotations__ontology__obo_location=experimental_annotations_ontology_obo, presentation__max_categories=max_category_items, presentation__custom_colors=not disable_custom_colors, embeddings__names=embedding, diff --git a/backend/server/common/annotations/annotations.py b/backend/server/common/annotations/annotations.py index 1f75b9db..ead9f80d 100644 --- a/backend/server/common/annotations/annotations.py +++ b/backend/server/common/annotations/annotations.py @@ -1,22 +1,14 @@ from abc import ABCMeta, abstractmethod -import fastobo -import fsspec - -from backend.common.errors import OntologyLoadFailure, DisabledFeatureError +from backend.common.errors import DisabledFeatureError from backend.common.utils.type_conversion_utils import get_schema_type_hint_of_array from backend.common.genesets import write_gene_sets_tidycsv class Annotations(metaclass=ABCMeta): - """ baseclass for annotations, including ontologies and gene sets""" - - """ our default ontology is the PURL for the Cell Ontology. - See http://www.obofoundry.org/ontology/cl.html """ - DefaultOnotology = "http://purl.obolibrary.org/obo/cl.obo" + """baseclass for annotations and gene sets""" def __init__(self, config={}): - self.ontology_data = None self.config = config def user_annotations_enabled(self): @@ -33,27 +25,6 @@ class Annotations(metaclass=ABCMeta): if not self.gene_sets_save_enabled(): raise DisabledFeatureError("User gene sets save is disabled.") - def load_ontology(self, path): - """Load and parse ontologies - currently support OBO files only.""" - if path is None: - path = self.DefaultOnotology - - try: - with fsspec.open(path) as f: - obo = fastobo.iter(f) - terms = filter(lambda stanza: type(stanza) is fastobo.term.TermFrame, obo) - names = [tag.name for term in terms for tag in term if type(tag) is fastobo.term.NameClause] - self.ontology_data = names - - except FileNotFoundError as e: - raise OntologyLoadFailure("Unable to find OBO ontology path") from e - - except SyntaxError as e: - raise OntologyLoadFailure("Syntax error loading OBO ontology") from e - - except Exception as e: - raise OntologyLoadFailure("Error loading OBO file") from e - def get_schema(self, data_adaptor): schema = [] labels = self.read_labels(data_adaptor) @@ -82,7 +53,7 @@ class Annotations(metaclass=ABCMeta): @abstractmethod def read_gene_sets(self, data_adaptor): - """Return the gene sets from persistent storage """ + """Return the gene sets from persistent storage""" pass @abstractmethod diff --git a/backend/server/common/annotations/local_file_csv.py b/backend/server/common/annotations/local_file_csv.py index f26987a7..3856dafc 100644 --- a/backend/server/common/annotations/local_file_csv.py +++ b/backend/server/common/annotations/local_file_csv.py @@ -193,14 +193,14 @@ class AnnotationsLocalFile(Annotations): return os.getcwd() def _get_celllabels_filename(self, data_adaptor): - """ return the current annotation file name """ + """return the current annotation file name""" if self.label_output_file: return self.label_output_file return self._get_filename(data_adaptor, "cell-labels") def _get_genesets_filename(self, data_adaptor): - """ return the current gene sets file name """ + """return the current gene sets file name""" if self.gene_sets_output_file: return self.gene_sets_output_file @@ -263,12 +263,6 @@ class AnnotationsLocalFile(Annotations): params["annotations_genesets_name_is_read_only"] = self.gene_sets_output_file is not None params["user_annotation_collection_name_enabled"] = True - if self.ontology_data: - params["annotations_cell_ontology_enabled"] = True - params["annotations_cell_ontology_terms"] = self.ontology_data - else: - params["annotations_cell_ontology_enabled"] = False - if self.label_output_file is not None: # user has hard-wired the name of the annotation cell label data collection fname = os.path.basename(self.label_output_file) diff --git a/backend/server/common/config/client_config.py b/backend/server/common/config/client_config.py index 0992ccdb..d15d33c9 100644 --- a/backend/server/common/config/client_config.py +++ b/backend/server/common/config/client_config.py @@ -47,9 +47,6 @@ def get_client_config(app_config, data_adaptor): "annotations_genesets": True, # feature flag "annotations_genesets_readonly": dataset_config.user_annotations__gene_sets__readonly, "annotations_genesets_summary_methods": ["mean"], - "annotations_cell_ontology_enabled": False, - "annotations_cell_ontology_obopath": None, - "annotations_cell_ontology_terms": None, "custom_colors": dataset_config.presentation__custom_colors, "diffexp-may-be-slow": False, } diff --git a/backend/server/common/config/dataset_config.py b/backend/server/common/config/dataset_config.py index 9f805b75..3e960773 100644 --- a/backend/server/common/config/dataset_config.py +++ b/backend/server/common/config/dataset_config.py @@ -3,7 +3,7 @@ from os.path import splitext, isdir from backend.server.common.annotations.local_file_csv import AnnotationsLocalFile from backend.server.common.config.base_config import BaseConfig -from backend.common.errors import ConfigurationError, OntologyLoadFailure, AnnotationsError +from backend.common.errors import ConfigurationError, AnnotationsError from backend.server.compute.scanpy import get_scanpy_module from backend.server.data_common.matrix_loader import MatrixDataLoader @@ -28,10 +28,6 @@ class DatasetConfig(BaseConfig): "directory" ] self.user_annotations__local_file_csv__file = default_config["user_annotations"]["local_file_csv"]["file"] - self.user_annotations__ontology__enable = default_config["user_annotations"]["ontology"]["enable"] - self.user_annotations__ontology__obo_location = default_config["user_annotations"]["ontology"][ - "obo_location" - ] self.user_annotations__gene_sets__readonly = default_config["user_annotations"]["gene_sets"]["readonly"] self.user_annotations__local_file_csv__gene_sets_file = default_config["user_annotations"][ "local_file_csv" @@ -101,10 +97,6 @@ class DatasetConfig(BaseConfig): self.validate_correct_type_of_configuration_attribute( "user_annotations__local_file_csv__gene_sets_file", (type(None), str) ) - self.validate_correct_type_of_configuration_attribute("user_annotations__ontology__enable", bool) - self.validate_correct_type_of_configuration_attribute( - "user_annotations__ontology__obo_location", (type(None), str) - ) self.validate_correct_type_of_configuration_attribute("user_annotations__gene_sets__readonly", bool) if self.user_annotations__enable or not self.user_annotations__gene_sets__readonly: @@ -122,13 +114,6 @@ class DatasetConfig(BaseConfig): else: raise ConfigurationError('The only annotation type support is "local_file_csv"') - if self.user_annotations__enable: - if self.user_annotations__ontology__enable or self.user_annotations__ontology__obo_location: - try: - self.user_annotations.load_ontology(self.user_annotations__ontology__obo_location) - except OntologyLoadFailure as e: - raise ConfigurationError("Unable to load ontology terms\n" + str(e)) - self.check_annotation_config_vars_not_set(context) def handle_local_file_csv_annotations(self, context): @@ -183,14 +168,6 @@ class DatasetConfig(BaseConfig): if not self.user_annotations__enable: if filename is not None: context["messagefn"]("Warning: --annotations-file ignored as annotations are disabled.") - if self.user_annotations__ontology__enable: - context["messagefn"]( - "Warning: --experimental-annotations-ontology ignored as annotations are disabled." - ) - if self.user_annotations__ontology__obo_location is not None: - context["messagefn"]( - "Warning: --experimental-annotations-ontology-obo ignored as annotations are disabled." - ) if dirname is not None: context["messagefn"]("Warning: --user-generated-data-dir ignored as annotations are disabled.") diff --git a/backend/server/default_config.py b/backend/server/default_config.py index aa3c4475..d37f14b6 100644 --- a/backend/server/default_config.py +++ b/backend/server/default_config.py @@ -66,9 +66,6 @@ dataset: directory: null file: null # annotations file name gene_sets_file: null # gene sets file name - ontology: - enable: false - obo_location: null gene_sets: readonly: false # gene sets CRUD enabled/disabled diff --git a/backend/server/requirements.txt b/backend/server/requirements.txt index 9ef71330..2acd1f1e 100644 --- a/backend/server/requirements.txt +++ b/backend/server/requirements.txt @@ -1,7 +1,6 @@ anndata>=0.7.0 boto3>=1.12.18 click>=7.1.2 -fastobo>=0.6.1 Flask>=1.0.2,<2.0.0 # Flask 2.0 is not compatible with the latest version of Flask-RESTful (0.3.8) Flask-Compress>=1.4.0 Flask-Cors>=3.0.9 # CVE-2020-25032 diff --git a/backend/test/fixtures/czi_hosted_dataset_config_outline.py b/backend/test/fixtures/czi_hosted_dataset_config_outline.py index a3d99d78..bc3f408f 100644 --- a/backend/test/fixtures/czi_hosted_dataset_config_outline.py +++ b/backend/test/fixtures/czi_hosted_dataset_config_outline.py @@ -22,9 +22,6 @@ dataset: local_file_csv: directory: {local_file_csv_directory} file: {local_file_csv_file} - ontology: - enable: {ontology_enabled} - obo_location: {obo_location} embeddings: names: {embedding_names} diff --git a/backend/test/fixtures/dataset_config_outline.py b/backend/test/fixtures/dataset_config_outline.py index 7555b747..ca45cea9 100644 --- a/backend/test/fixtures/dataset_config_outline.py +++ b/backend/test/fixtures/dataset_config_outline.py @@ -17,9 +17,6 @@ dataset: directory: {local_file_csv_directory} file: {local_file_csv_file} gene_sets_file: {local_file_csv_gene_sets_file} - ontology: - enable: {ontology_enabled} - obo_location: {obo_location} gene_sets: readonly: {gene_sets_readonly} diff --git a/backend/test/test_czi_hosted/unit/common/config/__init__.py b/backend/test/test_czi_hosted/unit/common/config/__init__.py index 0de8a908..426572a4 100644 --- a/backend/test/test_czi_hosted/unit/common/config/__init__.py +++ b/backend/test/test_czi_hosted/unit/common/config/__init__.py @@ -124,8 +124,6 @@ class ConfigTests(BaseTest): hosted_file_directory="null", local_file_csv_directory="null", local_file_csv_file="null", - ontology_enabled="false", - obo_location="null", embedding_names=[], enable_reembedding="false", enable_difexp="true", @@ -193,8 +191,6 @@ class ConfigTests(BaseTest): hosted_file_directory=hosted_file_directory, local_file_csv_directory=local_file_csv_directory, local_file_csv_file=local_file_csv_file, - ontology_enabled=ontology_enabled, - obo_location=obo_location, embedding_names=embedding_names, enable_reembedding=enable_reembedding, enable_difexp=enable_difexp, @@ -231,8 +227,6 @@ class ConfigTests(BaseTest): hosted_file_directory="null", local_file_csv_directory="null", local_file_csv_file="null", - ontology_enabled="false", - obo_location="null", embedding_names=[], enable_reembedding="false", enable_difexp="true", diff --git a/backend/test/test_czi_hosted/unit/common/config/test_base_config.py b/backend/test/test_czi_hosted/unit/common/config/test_base_config.py index 38997cea..959fbfd4 100644 --- a/backend/test/test_czi_hosted/unit/common/config/test_base_config.py +++ b/backend/test/test_czi_hosted/unit/common/config/test_base_config.py @@ -36,7 +36,6 @@ class BaseConfigTest(ConfigTests): mapping = config.default_dataset_config.create_mapping(config.default_config) self.assertIsNotNone(mapping["server__app__verbose"]) self.assertIsNotNone(mapping["dataset__presentation__max_categories"]) - self.assertIsNotNone(mapping["dataset__user_annotations__ontology__obo_location"]) self.assertIsNotNone(mapping["server__multi_dataset__allowed_matrix_types"]) def test_changes_from_default_returns_list_of_nondefault_config_values(self): diff --git a/backend/test/test_czi_hosted/unit/common/config/test_dataset_config.py b/backend/test/test_czi_hosted/unit/common/config/test_dataset_config.py index b1c95b78..25414783 100644 --- a/backend/test/test_czi_hosted/unit/common/config/test_dataset_config.py +++ b/backend/test/test_czi_hosted/unit/common/config/test_dataset_config.py @@ -44,13 +44,12 @@ class TestDatasetConfig(ConfigTests): self.assertEqual(config.default_dataset_config.presentation__max_categories, 1000) self.assertEqual(config.default_dataset_config.user_annotations__type, "local_file_csv") self.assertEqual(config.default_dataset_config.diffexp__lfc_cutoff, 0.01) - self.assertIsNone(config.default_dataset_config.user_annotations__ontology__obo_location) @patch("backend.czi_hosted.common.config.dataset_config.BaseConfig.validate_correct_type_of_configuration_attribute") def test_complete_config_checks_all_attr(self, mock_check_attrs): mock_check_attrs.side_effect = BaseConfig.validate_correct_type_of_configuration_attribute() self.dataset_config.complete_config(self.context) - self.assertEqual(mock_check_attrs.call_count, 21) + self.assertEqual(mock_check_attrs.call_count, 19) def test_app_sets_script_vars(self): config = self.get_config(scripts=["path/to/script"]) diff --git a/backend/test/test_server/unit/common/config/__init__.py b/backend/test/test_server/unit/common/config/__init__.py index 677c3e35..c2775be3 100644 --- a/backend/test/test_server/unit/common/config/__init__.py +++ b/backend/test/test_server/unit/common/config/__init__.py @@ -95,8 +95,6 @@ class ConfigTests(unittest.TestCase): local_file_csv_directory="null", local_file_csv_file="null", local_file_csv_gene_sets_file="null", - ontology_enabled="false", - obo_location="null", gene_sets_readonly="false", embedding_names=[], enable_reembedding="false", @@ -148,8 +146,6 @@ class ConfigTests(unittest.TestCase): local_file_csv_directory=local_file_csv_directory, local_file_csv_file=local_file_csv_file, local_file_csv_gene_sets_file=local_file_csv_gene_sets_file, - ontology_enabled=ontology_enabled, - obo_location=obo_location, gene_sets_readonly=gene_sets_readonly, embedding_names=embedding_names, enable_reembedding=enable_reembedding, @@ -186,8 +182,6 @@ class ConfigTests(unittest.TestCase): local_file_csv_directory="null", local_file_csv_file="null", local_file_csv_gene_sets_file="null", - ontology_enabled="false", - obo_location="null", gene_sets_readonly="false", embedding_names=[], enable_reembedding="false", diff --git a/backend/test/test_server/unit/common/config/test_app_config.py b/backend/test/test_server/unit/common/config/test_app_config.py index 99656df3..ba054b92 100644 --- a/backend/test/test_server/unit/common/config/test_app_config.py +++ b/backend/test/test_server/unit/common/config/test_app_config.py @@ -131,9 +131,8 @@ class AppConfigTest(ConfigTests): # test simple value in default dataset config.update_single_config_from_path_and_value( - ["dataset", "user_annotations", "ontology", "obo_location"], "dummy_location", + ["dataset", "user_annotations"], "dummy_location", ) - self.assertEqual(config.dataset_config.user_annotations__ontology__obo_location, "dummy_location") # error checking bad_paths = [ diff --git a/backend/test/test_server/unit/common/config/test_base_config.py b/backend/test/test_server/unit/common/config/test_base_config.py index 3212ec9b..9701e0ad 100644 --- a/backend/test/test_server/unit/common/config/test_base_config.py +++ b/backend/test/test_server/unit/common/config/test_base_config.py @@ -36,7 +36,6 @@ class BaseConfigTest(ConfigTests): mapping = config.dataset_config.create_mapping(config.default_config) self.assertIsNotNone(mapping["server__app__verbose"]) self.assertIsNotNone(mapping["dataset__presentation__max_categories"]) - self.assertIsNotNone(mapping["dataset__user_annotations__ontology__obo_location"]) def test_changes_from_default_returns_list_of_nondefault_config_values(self): config = self.get_config(verbose="true", lfc_cutoff=0.05) diff --git a/backend/test/test_server/unit/common/config/test_dataset_config.py b/backend/test/test_server/unit/common/config/test_dataset_config.py index 1c9f5126..b4cfea60 100644 --- a/backend/test/test_server/unit/common/config/test_dataset_config.py +++ b/backend/test/test_server/unit/common/config/test_dataset_config.py @@ -40,14 +40,13 @@ class TestDatasetConfig(ConfigTests): self.assertEqual(config.dataset_config.presentation__max_categories, 1000) self.assertEqual(config.dataset_config.user_annotations__type, "local_file_csv") self.assertEqual(config.dataset_config.diffexp__lfc_cutoff, 0.01) - self.assertIsNone(config.dataset_config.user_annotations__ontology__obo_location) @patch("backend.server.common.config.dataset_config.BaseConfig.validate_correct_type_of_configuration_attribute") def test_complete_config_checks_all_attr(self, mock_check_attrs): mock_check_attrs.side_effect = BaseConfig.validate_correct_type_of_configuration_attribute() self.dataset_config.complete_config(self.context) self.assertIsNotNone(self.config.server_config.data_adaptor) - self.assertEqual(mock_check_attrs.call_count, 19) + self.assertEqual(mock_check_attrs.call_count, 17) def test_app_sets_script_vars(self): config = self.get_config(scripts=["path/to/script"]) diff --git a/client/__tests__/e2e/test_config.yaml b/client/__tests__/e2e/test_config.yaml index 0c37dafb..2d14bfe9 100644 --- a/client/__tests__/e2e/test_config.yaml +++ b/client/__tests__/e2e/test_config.yaml @@ -22,9 +22,6 @@ dataset: local_file_csv: directory: null file: null - ontology: - enable: false - obo_location: null embeddings: names: [] diff --git a/client/src/components/categorical/category/annoDialogAddLabel.js b/client/src/components/categorical/category/annoDialogAddLabel.js index 80047f21..0347653f 100644 --- a/client/src/components/categorical/category/annoDialogAddLabel.js +++ b/client/src/components/categorical/category/annoDialogAddLabel.js @@ -8,7 +8,6 @@ import actions from "../../../actions"; @connect((state) => ({ annotations: state.annotations, schema: state.annoMatrix?.schema, - ontology: state.ontology, obsCrossfilter: state.obsCrossfilter, })) class Category extends React.PureComponent { @@ -57,8 +56,8 @@ class Category extends React.PureComponent { }; labelNameError = (name) => { - const { metadataField, ontology, schema } = this.props; - return isLabelErroneous(name, metadataField, ontology, schema); + const { metadataField, schema } = this.props; + return isLabelErroneous(name, metadataField, schema); }; instruction = (label) => { @@ -71,8 +70,7 @@ class Category extends React.PureComponent { render() { const { newLabelText } = this.state; - const { metadataField, annotations, ontology, obsCrossfilter } = this.props; - const ontologyEnabled = ontology?.enabled ?? false; + const { metadataField, annotations, obsCrossfilter } = this.props; return ( <> @@ -97,7 +95,7 @@ class Category extends React.PureComponent { handleCancel={this.disableAddNewLabelMode} annoInput={ ({ annotations: state.annotations, schema: state.annoMatrix?.schema, - ontology: state.ontology, })) class AnnoDialogEditCategoryName extends React.PureComponent { constructor(props) { @@ -105,8 +104,7 @@ class AnnoDialogEditCategoryName extends React.PureComponent { render() { const { newCategoryText } = this.state; - const { metadataField, annotations, ontology } = this.props; - const ontologyEnabled = ontology?.enabled ?? false; + const { metadataField, annotations } = this.props; return ( <> @@ -132,7 +130,7 @@ class AnnoDialogEditCategoryName extends React.PureComponent { annoInput={ ({ writableCategoriesEnabled: state.config?.parameters?.annotations ?? false, schema: state.annoMatrix?.schema, - ontology: state.ontology, userInfo: state.userInfo, })) class Categories extends React.Component { @@ -130,10 +129,8 @@ class Categories extends React.Component { const { writableCategoriesEnabled, schema, - ontology, userInfo, } = this.props; - const ontologyEnabled = ontology?.enabled ?? false; /* all names, sorted in display order. Will be rendered in this order */ const allCategoryNames = ControlsHelpers.selectableCategoryNames( schema @@ -158,7 +155,7 @@ class Categories extends React.Component { handleCancel={this.handleDisableAnnoMode} annoInput={ { - const { metadataField, ontology, schema } = this.props; + const { metadataField, schema } = this.props; if (name === this.currentLabelAsString()) return false; - return isLabelErroneous(name, metadataField, ontology, schema); + return isLabelErroneous(name, metadataField, schema); }; instruction = (label) => { @@ -490,14 +489,12 @@ class CategoryValue extends React.Component { colorTable, isUserAnno, annotations, - ontology, isDilated, isSelected, categorySummary, label, } = this.props; const colorScale = colorTable?.scale; - const ontologyEnabled = ontology?.enabled ?? false; const { editedLabelText } = this.state; @@ -634,7 +631,7 @@ class CategoryValue extends React.Component { annoInput={ ({ annotations: state.annotations, schema: state.annoMatrix?.schema, - ontology: state.ontology, obsCrossfilter: state.obsCrossfilter, genesets: state.genesets.genesets, genesetsUI: state.genesetsUI, diff --git a/client/src/components/geneExpression/menus/editGenesetNameDialogue.js b/client/src/components/geneExpression/menus/editGenesetNameDialogue.js index 429ed612..fc2204eb 100644 --- a/client/src/components/geneExpression/menus/editGenesetNameDialogue.js +++ b/client/src/components/geneExpression/menus/editGenesetNameDialogue.js @@ -6,7 +6,6 @@ import LabelInput from "../../labelInput"; @connect((state) => ({ annotations: state.annotations, schema: state.annoMatrix?.schema, - ontology: state.ontology, obsCrossfilter: state.obsCrossfilter, genesetsUI: state.genesetsUI, genesets: state.genesets.genesets, diff --git a/client/src/reducers/index.js b/client/src/reducers/index.js index 074072a0..8b2f5912 100644 --- a/client/src/reducers/index.js +++ b/client/src/reducers/index.js @@ -18,7 +18,6 @@ import annotations from "./annotations"; import genesets from "./genesets"; import genesetsUI from "./genesetsUI"; import autosave from "./autosave"; -import ontology from "./ontology"; import centroidLabels from "./centroidLabels"; import pointDialation from "./pointDilation"; import { reembedController } from "./reembed"; @@ -31,7 +30,6 @@ const Reducer = undoable( ["config", config], ["annoMatrix", annoMatrix], ["obsCrossfilter", obsCrossfilter], - ["ontology", ontology], ["annotations", annotations], ["genesets", genesets], ["genesetsUI", genesetsUI], diff --git a/client/src/reducers/ontology.js b/client/src/reducers/ontology.js deleted file mode 100644 index 6802687a..00000000 --- a/client/src/reducers/ontology.js +++ /dev/null @@ -1,31 +0,0 @@ -const Ontology = ( - state = { - enabled: false, // are ontology terms enabled? - terms: null, // an array of term names, eg, ['cell', 'lung cell', ...] - termSet: null, // a Set object containing all terms, for fast lookup - loading: true, - }, - action -) => { - switch (action.type) { - case "configuration load complete": { - const enabled = - action.config?.parameters?.annotations_cell_ontology_enabled ?? false; - const terms = action.config?.parameters?.annotations_cell_ontology_terms; - - const termSet = new Set(terms); - return { - ...state, - loading: false, - enabled, - terms, - termSet, - }; - } - default: { - return state; - } - } -}; - -export default Ontology;