mirror of
https://github.com/chanzuckerberg/cellxgene.git
synced 2026-09-22 06:48:11 +08:00
* add sample ontologies file * add ontologies reducer * Move select category to own component * Dialog and Input factored out * refactoring categorical, partway * validationn * anno * suggest populates input * frontend for ontology working * initial implementation of back-end support for ontologies * edit is now dialog again * autosuggest working on edit * part way through create arbitrary label * handle choice in function * pass duplicate cat prop * editing works * update test to match new CLI params * fix occupancy alignment * edit category as dialogue * secondary button * remove stubbed out ontologies * add label setting upon new label creation * Update legal characters for labels (#1119) * Allow any term in the ontology (bypass legal name check) * Add hyphens and parens to legal characters in names * improve performance for large ontologies * correctly handle case where ontologies are disabled * fix logic error in CLI Co-authored-by: Bruce Martin <bruce@chanzuckerberg.com> * PR cleanup 1 * lint * validate user generated labels * finish hooking up connected suggest component * protect against undefined callbacks * Fix illegal characters error message * break out npm run commands * fix error detection on label edit Co-authored-by: Bruce Martin <bruce@chanzuckerberg.com> Co-authored-by: Sidney Bell <sidneymbell@users.noreply.github.com>
38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
"""
|
|
Load and parse ontologies - currently support OBO files only.
|
|
"""
|
|
import fsspec
|
|
import fastobo
|
|
import traceback # use built-in formatter for SyntaxError
|
|
|
|
|
|
""" 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"
|
|
|
|
|
|
class OntologyLoadFailure(Exception):
|
|
pass
|
|
|
|
|
|
def load_obo(path):
|
|
""" given a URI or path, return an array of term names """
|
|
if path is None:
|
|
path = 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]
|
|
return names
|
|
|
|
except FileNotFoundError as e:
|
|
raise OntologyLoadFailure(f"Unable to find OBO ontology path: {path}") from e
|
|
|
|
except SyntaxError as e:
|
|
msg = ''.join(traceback.format_exception_only(SyntaxError, e))
|
|
raise OntologyLoadFailure(msg) from e
|
|
|
|
except Exception as e:
|
|
raise OntologyLoadFailure(f"Error loading OBO file {path}") from e
|