aboutsummaryrefslogtreecommitdiff
path: root/gn3/db
diff options
context:
space:
mode:
Diffstat (limited to 'gn3/db')
-rw-r--r--gn3/db/traits.py28
1 files changed, 26 insertions, 2 deletions
diff --git a/gn3/db/traits.py b/gn3/db/traits.py
index 5013844..3827c34 100644
--- a/gn3/db/traits.py
+++ b/gn3/db/traits.py
@@ -99,12 +99,36 @@ def get_trait_csv_sample_data(conn: Any,
"cxref.StrainId = st.Id) "
"LEFT JOIN CaseAttribute ca ON ca.Id = cxref.CaseAttributeId"
"WHERE px.Id = %s AND px.PhenotypeId = %s ORDER BY st.Name")
+ case_attr_columns = set()
+ csv_data = {}
with conn.cursor() as cursor:
cursor.execute(__query, (trait_name, phenotype_id))
- return ("Strain Name,Value,SE,Count\n" +
- "\n".join(map(lambda x:x[0], cursor.fetchall())))
+ for data in cursor.fetchall():
+ if data[1] == "x":
+ csv_data[data[0]] = None
+ else:
+ sample, case_attr, value = data[0], data[1], data[2]
+ if not csv_data.get(sample):
+ csv_data[sample] = {}
+ csv_data[sample][case_attr] = None if value == "x" else value
+ case_attr_columns.add(case_attr)
+ if not case_attr_columns:
+ return ("Strain Name,Value,SE,Count\n" +
+ "\n".join(csv_data.keys()))
+ else:
+ columns = sorted(case_attr_columns)
+ csv = ("Strain Name,Value,SE,Count," +
+ ",".join(columns) + "\n")
+ for key, value in csv_data.items():
+ if not value:
+ csv += (key + (len(case_attr_columns) * ",x") + "\n")
+ else:
+ vals = [str(value.get(column, "x")) for column in columns]
+ csv += (key + "," + ",".join(vals) + "\n")
+ return csv
return "No Sample Data Found"
+
def update_sample_data(conn: Any, #pylint: disable=[R0913]
trait_name: str,
strain_name: str,