aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--uploader/species/models.py47
-rw-r--r--uploader/species/views.py17
-rw-r--r--uploader/templates/species/edit-species.html3
3 files changed, 62 insertions, 5 deletions
diff --git a/uploader/species/models.py b/uploader/species/models.py
index 4426b64..1abed6d 100644
--- a/uploader/species/models.py
+++ b/uploader/species/models.py
@@ -91,6 +91,53 @@ def save_species(conn: mdb.Connection,
}
+def update_species(conn: mdb.Connection,
+ species_id: int,
+ common_name: str,
+ scientific_name: str,
+ family: str,
+ family_order: int,
+ species_order: int):
+ """Update a species' details.
+
+ Parameters
+ ----------
+ conn: A connection to the MariaDB database.
+ species_id: The species identifier
+
+ Key-Word Arguments
+ ------------------
+ common_name: A layman's name for the species
+ scientific_name: A binomial nomenclature name for the species
+ family: The grouping under which the species falls
+ family_order: The ordering for the "family" above
+ species_order: The ordering of this species in relation to others
+ """
+ with conn.cursor(cursorclass=DictCursor) as cursor:
+ genus, species = scientific_name.split(" ")
+ species = {
+ "species_id": species_id,
+ "common_name": common_name,
+ "common_name_lower": common_name.lower(),
+ "menu_name": f"{common_name} ({genus[0]}. {species.lower()})",
+ "scientific_name": scientific_name,
+ "family": family,
+ "family_order": family_order,
+ "species_order": species_order
+ }
+ cursor.execute(
+ "UPDATE Species SET "
+ "SpeciesName=%(common_name)s, "
+ "Name=%(common_name_lower)s, "
+ "MenuName=%(menu_name)s, "
+ "FullName=%(scientific_name)s, "
+ "Family=%(family)s, "
+ "FamilyOrderId=%(family_order)s, "
+ "OrderId=%(species_order)s "
+ "WHERE Id=%(species_id)s",
+ species)
+
+
def species_families(conn: mdb.Connection) -> dict:
"""Retrieve the families under which species are grouped."""
with conn.cursor(cursorclass=DictCursor) as cursor:
diff --git a/uploader/species/views.py b/uploader/species/views.py
index f39ca98..55b0dd3 100644
--- a/uploader/species/views.py
+++ b/uploader/species/views.py
@@ -14,7 +14,11 @@ from uploader.db_utils import database_connection
from uploader.oauth2.client import oauth2_get, oauth2_post
from uploader.authorisation import require_login, require_token
-from .models import all_species, save_species, species_by_id, species_families
+from .models import (all_species,
+ save_species,
+ species_by_id,
+ update_species,
+ species_families)
speciesbp = Blueprint("species", __name__)
@@ -177,9 +181,14 @@ def edit_species_extra(token: dict, species_id: int):# pylint: disable=[unused-a
).either(__failure__, lambda res: res)
if bool(species) and request.method == "POST":
- flash("We would have edited the species, but the feature is not "
- "currently implemented …",
- "alert-danger")
+ update_species(conn,
+ species_id,
+ request.form["species_name"],
+ request.form["species_fullname"],
+ request.form["species_family"],
+ int(request.form["species_familyorderid"]),
+ int(request.form["species_orderid"]))
+ flash("Updated species successfully.", "alert-success")
return redirect(url_for("species.edit_species_extra",
species_id=species_id))
diff --git a/uploader/templates/species/edit-species.html b/uploader/templates/species/edit-species.html
index 6827751..5a26455 100644
--- a/uploader/templates/species/edit-species.html
+++ b/uploader/templates/species/edit-species.html
@@ -107,6 +107,7 @@
id="txt-species-familyorderid"
name="species_familyorderid"
value="{{species.FamilyOrderId}}"
+ required="required"
class="form-control" />
<small class="form-text text-muted">
This is a number that determines the order of the "Family" groupings
@@ -121,7 +122,7 @@
<input type="number"
id="txt-species-orderid"
name="species_orderid"
- value="{{species.OrderId or max_order_id}}"
+ value="{{species.OrderId or (max_order_id + 5)}}"
class="form-control" />
<small class="form-text text-muted">
This integer value determines the order of the species in relation to