aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--uploader/species/models.py42
-rw-r--r--uploader/species/views.py2
2 files changed, 43 insertions, 1 deletions
diff --git a/uploader/species/models.py b/uploader/species/models.py
index 98337a3..bde38ce 100644
--- a/uploader/species/models.py
+++ b/uploader/species/models.py
@@ -1,4 +1,6 @@
"""Database functions for species."""
+from typing import Optional
+
import MySQLdb as mdb
from MySQLdb.cursors import DictCursor
@@ -20,3 +22,43 @@ def species_by_id(conn: mdb.Connection, speciesid) -> dict:
"FullName FROM Species WHERE SpeciesId=%s",
(speciesid,))
return cursor.fetchone()
+
+
+def save_species(conn: mdb.Connection,
+ common_name: str,
+ scientific_name: str,
+ taxon_id: Optional[str] = None) -> int:
+ """
+ Save a new species to the database.
+
+ Parameters
+ ----------
+ conn: A connection to the MariaDB database.
+ taxon_id: The taxonomy identifier for the new species.
+ common_name: The species' common name.
+ scientific_name; The species' scientific name.
+ """
+ genus, species = scientific_name.split(" ")
+ species = {
+ "common_name": common_name,
+ "common_name_lower": common_name.lower(),
+ "menu_name": f"{common_name} ({genus[0]}. {species.lower()})",
+ "scientific_name": scientific_name,
+ "taxon_id": taxon_id
+ }
+ with conn.cursor() as cursor:
+ cursor.execute(
+ "INSERT INTO Species("
+ "SpeciesName, Name, MenuName, FullName, TaxonomyId"
+ ") VALUES ("
+ "%(common_name)s, %(common_name_lower)s, %(menu_name)s, "
+ "%(scientific_name)s, %(taxon_id)s"
+ ")",
+ species)
+ species_id = cursor.lastrowid
+ cursor.execute("UPDATE Species SET SpeciesId=%s WHERE Id=%s",
+ (species_id, species_id))
+ return {
+ **species,
+ "species_id": species_id
+ }
diff --git a/uploader/species/views.py b/uploader/species/views.py
index 3a76494..4372504 100644
--- a/uploader/species/views.py
+++ b/uploader/species/views.py
@@ -48,7 +48,7 @@ def create_species():
with (database_connection(app.config["SQL_URI"]) as conn,
conn.cursor() as cursor):
error = False
- taxon_id = request.form.get("taxon_id", "").strip() or None
+ taxon_id = request.form.get("species_taxonomy_id", "").strip() or None
common_name = request.form.get("common_name", "").strip()
if not bool(common_name):