diff options
| author | John Nduli | 2024-08-26 12:40:15 +0300 |
|---|---|---|
| committer | BonfaceKilz | 2024-08-26 13:06:47 +0300 |
| commit | 7b2a1794c1b7e7c589b1abe6d307b2a7e4cd2c42 (patch) | |
| tree | 5dcff41e762419771a4448955281f3f6cce60781 /gn3/db | |
| parent | 3156f84055502035620a0279e62eb383a5f7d665 (diff) | |
| download | genenetwork3-7b2a1794c1b7e7c589b1abe6d307b2a7e4cd2c42.tar.gz | |
refactor: split out utlities into their modules and change api to use metadata
Diffstat (limited to 'gn3/db')
| -rw-r--r-- | gn3/db/wiki.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/gn3/db/wiki.py b/gn3/db/wiki.py new file mode 100644 index 0000000..a56f26c --- /dev/null +++ b/gn3/db/wiki.py @@ -0,0 +1,38 @@ +from typing import List + + +class MissingDBDataException(Exception): + pass + + +def get_species_id(cursor, species_name: str) -> int: + cursor.execute("SELECT SpeciesID from Species WHERE Name = %s", (species_name,)) + species_ids = cursor.fetchall() + if len(species_ids) != 1: + raise MissingDBDataException( + f"expected 1 species with Name={species_name} but found {len(species_ids)}!" + ) + return species_ids[0][0] + + +def get_next_comment_version(cursor, comment_id: int) -> int: + cursor.execute( + "SELECT MAX(versionId) as version_id from GeneRIF WHERE Id = %s", (comment_id,) + ) + latest_version = cursor.fetchone()[0] + if latest_version is None: + raise MissingDBDataException(f"No comment found with comment_id={comment_id}") + return latest_version + 1 + + +def get_categories_ids(cursor, categories: List[str]) -> List[int]: + cursor.execute("SELECT Name, Id from GeneCategory") + raw_categories = cursor.fetchall() + dict_cats = dict(raw_categories) + category_ids = [] + for category in set(categories): + cat_id = dict_cats.get(category.strip()) + if cat_id is None: + raise MissingDBDataException(f"Category with Name={category} not found") + category_ids.append(cat_id) + return category_ids |
