diff options
Diffstat (limited to 'uploader')
-rw-r--r-- | uploader/population/models.py | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/uploader/population/models.py b/uploader/population/models.py index c6c77ae..6dcd85e 100644 --- a/uploader/population/models.py +++ b/uploader/population/models.py @@ -46,29 +46,41 @@ def population_genetic_types(conn) -> tuple: def save_population(cursor: mdb.cursors.Cursor, population_details: dict) -> dict: """Save the population details to the db.""" - #TODO: Handle FamilyOrder here + cursor.execute("SELECT DISTINCT(Family), FamilyOrder FROM InbredSet " + "WHERE Family IS NOT NULL AND Family != '' " + "AND FamilyOrder IS NOT NULL " + "ORDER BY FamilyOrder ASC") + _families = { + row["Family"]: int(row["FamilyOrder"]) + for row in cursor.fetchall() + } + params = { + "MenuOrderId": 0, + "InbredSetId": 0, + "public": 2, + **population_details, + "FamilyOrder": _families.get( + population_details["Family"], + max(_families.values())+1) + } cursor.execute( "INSERT INTO InbredSet(" "InbredSetId, InbredSetName, Name, SpeciesId, FullName, " - "public, MappingMethodId, GeneticType, Family, MenuOrderId, " - "InbredSetCode, Description" + "public, MappingMethodId, GeneticType, Family, FamilyOrder," + " MenuOrderId, InbredSetCode, Description" ") " "VALUES (" "%(InbredSetId)s, %(InbredSetName)s, %(Name)s, %(SpeciesId)s, " "%(FullName)s, %(public)s, %(MappingMethodId)s, %(GeneticType)s, " - "%(Family)s, %(MenuOrderId)s, %(InbredSetCode)s, %(Description)s" + "%(Family)s, %(FamilyOrder)s, %(MenuOrderId)s, %(InbredSetCode)s, " + "%(Description)s" ")", - { - "MenuOrderId": 0, - "InbredSetId": 0, - "public": 2, - **population_details - }) + params) new_id = cursor.lastrowid cursor.execute("UPDATE InbredSet SET InbredSetId=%s WHERE Id=%s", (new_id, new_id)) return { - **population_details, + **params, "Id": new_id, "InbredSetId": new_id, "population_id": new_id |