From f3f05970ea4dfaf84fea52d8f4212e72ff21b3d0 Mon Sep 17 00:00:00 2001 From: BonfaceKilz Date: Wed, 24 Feb 2021 10:32:57 +0300 Subject: Check if phenotype exists before creating one --- gn3/computations/gemma.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'gn3') diff --git a/gn3/computations/gemma.py b/gn3/computations/gemma.py index ea0f86a..42b4b36 100644 --- a/gn3/computations/gemma.py +++ b/gn3/computations/gemma.py @@ -1,9 +1,11 @@ """Procedures related gemma computations""" +import os import random import string from base64 import b64encode from hashlib import md5 +from typing import List def generate_random_n_string(n_length: int) -> str: """Generate a random string that is N chars long""" @@ -16,11 +18,22 @@ def generate_hash_of_string(unhashed_str: str) -> str: the end""" hashed_str = md5(unhashed_str.encode("utf-8")).digest() return b64encode(hashed_str).decode("utf-8").replace("==", "") + + def generate_pheno_txt_file(trait_filename: str, - values: str, + values: List, tmpdir: str = "/tmp") -> str: - """Given VALUES, and TMPDIR, generate a valide traits file""" - trait_filename += f"_{generate_random_n_string(6)}" + """Given VALUES, and TMPDIR, generate a valid traits file""" + if not os.path.isdir(f"{tmpdir}/gn2/"): + os.mkdir(f"{tmpdir}/gn2/") + ext = trait_filename.partition(".")[-1] + if ext: + trait_filename = trait_filename.replace(f".{ext}", "") + ext = f".{ext}" + trait_filename += f"_{generate_hash_of_string(''.join(values))}{ext}" + # Early return if this already exists! + if os.path.isfile(f"{tmpdir}/gn2/{trait_filename}"): + return f"{tmpdir}/gn2/{trait_filename}" with open(f"{tmpdir}/gn2/{trait_filename}", "w") as _file: for value in values: if value == "x": -- cgit v1.2.3