about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMunyoki Kilyungi2023-03-20 12:18:14 +0300
committerBonfaceKilz2023-03-20 22:05:46 +0300
commitc8c091c8e2833ce022c316cf498122b2af720f49 (patch)
tree9472c5e678688b87081da90943bd2394d8d2a074
parent6e45510c3ee685a960db594aef70661220bebe60 (diff)
downloadgenenetwork2-c8c091c8e2833ce022c316cf498122b2af720f49.tar.gz
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 <me@bonfacemunyoki.com>
-rw-r--r--wqflask/tests/integration/wqflask/test_metadata_edits.py43
-rw-r--r--wqflask/wqflask/decorators.py23
-rw-r--r--wqflask/wqflask/metadata_edits.py113
-rw-r--r--wqflask/wqflask/templates/edit_phenotype.html3
4 files changed, 1 insertions, 181 deletions
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(
-            "<td>Condition (1)</td><td>No description</td>", response
-        )
-        self.assertIn("<td>Tissue</td><td>No description</td>", response)
-        self.assertIn(
-            "<td>Age</td><td>Cum sociis natoque penatibus et magnis dis</td>",
-            response,
-        )
-        self.assertIn("<td>Condition (4)</td><td>Description A</td>", response)
-        self.assertIn("<td>Condition (5)</td><td>Description B</td>", 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 @@
         <div class="form-group">
             <input type = "file" class="col-md-4 control-label text-left" name = "file" />
         </div>
-        <div class="form-group">
-            <a href="{{url_for('metadata_edit.show_case_attribute_columns')}}" target="_blank" style="margin-left: 25px;">(You can find sample metadata column descriptions here)</a>
-        </div>
         <input type="submit" style="width: 125px; margin-right: 25px;" class="btn btn-success form-control changed" value="Submit Change">
     </div>
     <hr>