From c8c091c8e2833ce022c316cf498122b2af720f49 Mon Sep 17 00:00:00 2001 From: Munyoki Kilyungi Date: Mon, 20 Mar 2023 12:18:14 +0300 Subject: Disable editing case-attributes ATM, editing case-attributes is very buggy. * wqflask/tests/integration/wqflask/test_metadata_edits.py: Delete. * wqflask/wqflask/decorators.py: Remove: gn3.authentication.get_groups_by_user_uid import. (case_attributes_edit_access): Delete. * wqflask/tests/integration/wqflask/test_metadata_edits.py: Remove wqflask.decorators.case_attributes_edit_access, gn3.db.case_attributes.get_case_attributes, gn3.db.case_attributes.get_unreviewed_diffs, gn3.db.case_attributes.insert_case_attribute_audit, gn3.db.case_attributes.reject_case_attribute and gn3.db.case_attributes.approve_case_attribute. (display_phenotype_metadata): Remove headers arg when rendering template. (update_phenotype): Remove case attribute headers list when updating a phenotype. (show_case_attribute_columns, update_case_attributes): Delete. (reject_case_attribute_data, approve_case_attribute_data): Ditto. * wqflask/wqflask/templates/edit_phenotype.html: Remove link that shows all the listed case-attributes. Signed-off-by: Munyoki Kilyungi --- .../integration/wqflask/test_metadata_edits.py | 43 -------- wqflask/wqflask/decorators.py | 23 ----- wqflask/wqflask/metadata_edits.py | 113 +-------------------- wqflask/wqflask/templates/edit_phenotype.html | 3 - 4 files changed, 1 insertion(+), 181 deletions(-) delete mode 100644 wqflask/tests/integration/wqflask/test_metadata_edits.py diff --git a/wqflask/tests/integration/wqflask/test_metadata_edits.py b/wqflask/tests/integration/wqflask/test_metadata_edits.py deleted file mode 100644 index ba7a18c9..00000000 --- a/wqflask/tests/integration/wqflask/test_metadata_edits.py +++ /dev/null @@ -1,43 +0,0 @@ -"""Tests for wqflask/wqflask/metadata_edits.py""" -import unittest -from unittest import mock - -from wqflask import app - - -class MetadataEditsTest(unittest.TestCase): - """Test Cases for MetadataEdits""" - - def setUp(self): - self.app = app.test_client() - self.app_context = app.app_context() - self.app_context.push() - - def tearDown(self): - self.app_context.pop() - - @unittest.skip("TO-FIX or Delete") - @mock.patch("wqflask.metadata_edits.database_connection") - @mock.patch("wqflask.metadata_edits.get_case_attributes") - def test_show_case_attributes(self, mock_case_attrs, mock_conn): - """Test that case attributes are displayed correctly""" - mock_case_attrs.return_value = { - "Condition (1)": "", - "Tissue": "", - "Age": "Cum sociis natoque penatibus et magnis dis", - "Condition (4)": "Description A", - "Condition (5)": "Description B", - } - response = self.app.get( - "/datasets/case-attributes", follow_redirects=True - ).data.decode() - self.assertIn( - "Condition (1)No description", response - ) - self.assertIn("TissueNo description", response) - self.assertIn( - "AgeCum sociis natoque penatibus et magnis dis", - response, - ) - self.assertIn("Condition (4)Description A", response) - self.assertIn("Condition (5)Description B", response) diff --git a/wqflask/wqflask/decorators.py b/wqflask/wqflask/decorators.py index a69ad868..41d23084 100644 --- a/wqflask/wqflask/decorators.py +++ b/wqflask/wqflask/decorators.py @@ -7,7 +7,6 @@ from urllib.parse import urljoin from functools import wraps from gn3.authentication import AdminRole from gn3.authentication import DataRole -from gn3.authentication import get_groups_by_user_uid import json import requests @@ -79,25 +78,3 @@ def edit_admins_access_required(f): return redirect(url_for("no_access_page")) return f(*args, **kwargs) return wrap - - -def case_attributes_edit_access(f): - """Use this for endpoints for editing case - attributes. Only members in the 'editors' - group are allowed here!""" - @wraps(f) - def wrap(*args, **kwargs): - groups = [] - for _, value in get_groups_by_user_uid( - user_uid=((g.user_session.record.get(b"user_id") or - b"").decode("utf-8") - or g.user_session.record.get("user_id") or ""), - conn=redis.from_url(current_app.config["REDIS_URL"], - decode_responses=True)).items(): - for items in value: - if (i_ := items.get("name")): - groups.append(i_) - if "groups" in groups: - return redirect(url_for("no_access_page")) - return f(*args, **kwargs) - return wrap diff --git a/wqflask/wqflask/metadata_edits.py b/wqflask/wqflask/metadata_edits.py index 383316e4..2827e617 100644 --- a/wqflask/wqflask/metadata_edits.py +++ b/wqflask/wqflask/metadata_edits.py @@ -23,7 +23,6 @@ from wqflask.database import database_connection from wqflask.decorators import edit_access_required from wqflask.decorators import edit_admins_access_required from wqflask.decorators import login_required -from wqflask.decorators import case_attributes_edit_access from gn3.authentication import AdminRole from gn3.authentication import get_highest_user_access_role @@ -47,11 +46,6 @@ from gn3.db.sample_data import delete_sample_data from gn3.db.sample_data import get_trait_csv_sample_data from gn3.db.sample_data import insert_sample_data from gn3.db.sample_data import update_sample_data -from gn3.db.case_attributes import get_case_attributes -from gn3.db.case_attributes import get_unreviewed_diffs -from gn3.db.case_attributes import insert_case_attribute_audit -from gn3.db.case_attributes import reject_case_attribute -from gn3.db.case_attributes import approve_case_attribute metadata_edit = Blueprint("metadata_edit", __name__) @@ -146,7 +140,6 @@ def display_phenotype_metadata(dataset_id: str, name: str): dataset_id=dataset_id, name=name, resource_id=request.args.get("resource-id"), - headers=get_case_attributes(conn), version=os.environ.get("GN_VERSION"), ) @@ -196,8 +189,7 @@ def update_phenotype(dataset_id: str, name: str): ) diff_data = {} with database_connection() as conn: - headers = ["Strain Name", "Value", "SE", "Count"] + list( - map(lambda x: x[1], get_case_attributes(conn))) + headers = ["Strain Name", "Value", "SE", "Count"] diff_data = remove_insignificant_edits( diff_data=csv_diff( base_csv=( @@ -706,106 +698,3 @@ def approve_data(resource_id: str, file_name: str): "warning", ) return redirect(url_for("metadata_edit.list_diffs")) - - -@metadata_edit.route("/case-attributes") -@case_attributes_edit_access -@login_required -def show_case_attribute_columns(): - diff_data = None - with database_connection() as conn: - diff_data = get_unreviewed_diffs(conn) - modifications, deletions, inserts = [], [], [] - if diff_data: - for id_, author, diff in diff_data: - diff = json.loads(diff) - author = get_user_info_by_key( - key="user_id", - value=author, - conn=redis.from_url( - current_app.config["REDIS_URL"], decode_responses=True - ), - ).get("full_name") - if m_ := diff.get("Modification"): - m_["author"] = author - m_["id"] = id_ - if m_.get("description"): - m_["description"]["Diff"] = "\n".join( - difflib.ndiff( - [m_.get("description")["Original"]], - [m_.get("description")["Current"]], - ) - ) - if m_.get("name"): - m_["name"]["Diff"] = "\n".join( - difflib.ndiff( - [m_.get("name")["Original"]], - [m_.get("name")["Current"]], - ) - ) - if any([m_.get("description"), m_.get("name")]): - modifications.append(m_) - if d_ := diff.get("Deletion"): - d_["author"] = author - d_["id"] = id_ - deletions.append(d_) - if i_ := diff.get("Insert"): - i_["author"] = author - i_["id"] = id_ - inserts.append(i_) - with database_connection() as cursor: - return render_template( - "case_attributes.html", - case_attributes=get_case_attributes(cursor), - modifications=modifications, - deletions=deletions, - inserts=inserts, - ) - - -@metadata_edit.route("/case-attributes", methods=("POST",)) -@case_attributes_edit_access -@login_required -def update_case_attributes(): - data_ = request.form.to_dict().get("data") - if data_: - author = ( - (g.user_session.record.get(b"user_id") or b"").decode("utf-8") - or g.user_session.record.get("user_id") - or "" - ) - with database_connection() as conn: - insert_case_attribute_audit( - conn=conn, status="review", author=author, data=data_ - ) - return redirect(url_for("metadata_edit.show_case_attribute_columns")) - - -@metadata_edit.route( - "/case-attributes/reject", - methods=[ - "POST", - ], -) -@case_attributes_edit_access -@login_required -def reject_case_attribute_data(): - case_attr_id = request.form.to_dict().get("id") - with database_connection() as conn: - reject_case_attribute(conn=conn, case_attr_audit_id=int(case_attr_id)) - return redirect(url_for("metadata_edit.show_case_attribute_columns")) - - -@metadata_edit.route( - "/case-attributes/approve", - methods=[ - "POST", - ], -) -@case_attributes_edit_access -@login_required -def approve_case_attribute_data(): - case_attr_id = request.form.to_dict().get("id") - with database_connection() as conn: - approve_case_attribute(conn=conn, case_attr_audit_id=case_attr_id) - return redirect(url_for("metadata_edit.show_case_attribute_columns")) diff --git a/wqflask/wqflask/templates/edit_phenotype.html b/wqflask/wqflask/templates/edit_phenotype.html index a7ecc027..ea480f4e 100644 --- a/wqflask/wqflask/templates/edit_phenotype.html +++ b/wqflask/wqflask/templates/edit_phenotype.html @@ -38,9 +38,6 @@
-
- (You can find sample metadata column descriptions here) -

-- cgit v1.2.3