From 9e905e596f2b1b17ad78a86fff01aafe1cc8b108 Mon Sep 17 00:00:00 2001 From: BonfaceKilz Date: Tue, 5 Apr 2022 15:12:07 +0300 Subject: Add method for fetching the case_attributes * gn3/db/sample_data.py (get_case_attributes): New function. * tests/unit/db/test_sample_data.py (test_get_case_attributes): Test case for the above. --- gn3/db/sample_data.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'gn3/db') diff --git a/gn3/db/sample_data.py b/gn3/db/sample_data.py index 73fbd95..d7ea9d3 100644 --- a/gn3/db/sample_data.py +++ b/gn3/db/sample_data.py @@ -1,6 +1,7 @@ """Module containing functions that work with sample data""" from typing import Any, Tuple, Dict, Callable +import collections import MySQLdb from gn3.csvcmp import extract_strain_name @@ -394,3 +395,29 @@ def insert_sample_data( except Exception as _e: conn.rollback() raise MySQLdb.Error(_e) from _e + + +def get_case_attributes(conn) -> dict: + """Get all the case attributes as a dictionary from the database. Should there + exist more than one case attribute with the same name, put the id in + brackets.""" + results = {} + with conn.cursor() as cursor: + cursor.execute("SELECT Id, Name, Description FROM CaseAttribute") + _r = cursor.fetchall() + _dups = [ + item + for item, count in collections.Counter( + [name for _, name, _ in _r] + ).items() + if count > 1 + ] + for _id, _name, _desc in _r: + _name = _name.strip() + _desc = _desc if _desc else "" + if _name in _dups: + results[f"{_name} ({_id})"] = _desc + else: + results[f"{_name}"] = _desc + + return results -- cgit v1.2.3