From e695e8d162ca04f41694a525e93ced1b9d23a85b Mon Sep 17 00:00:00 2001 From: zsloan Date: Tue, 16 Aug 2016 20:30:38 +0000 Subject: Users can now select specific traits from collection when using collection tools (correlation matrix, wgcna, etc) To do the above, changed the way form submission worked for those features; previously each feature had its own form, but that was dumb so instead I wrote a javascript function that just changed a single form's target url Duplicate traits can no longer by added to collections Fixed the digits for a few table columns in collection (additive effect, etc). --- wqflask/base/trait.py | 1 - wqflask/utility/helper_functions.py | 16 +- wqflask/wqflask/collect.py | 41 +--- wqflask/wqflask/model.py | 2 - wqflask/wqflask/templates/collections/add.html | 11 - wqflask/wqflask/templates/collections/view.html | 235 ++++++++++++---------- wqflask/wqflask/templates/search_result_page.html | 2 +- 7 files changed, 149 insertions(+), 159 deletions(-) (limited to 'wqflask') diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py index 9566c192..f18481a8 100644 --- a/wqflask/base/trait.py +++ b/wqflask/base/trait.py @@ -116,7 +116,6 @@ class GeneralTrait(object): return stringy - def display_name(self): stringy = "" if self.dataset and self.name: diff --git a/wqflask/utility/helper_functions.py b/wqflask/utility/helper_functions.py index 15f60765..149ee553 100644 --- a/wqflask/utility/helper_functions.py +++ b/wqflask/utility/helper_functions.py @@ -4,6 +4,8 @@ from base.trait import GeneralTrait from base import data_set from base.species import TheSpecies +from wqflask import user_manager + def get_species_dataset_trait(self, start_vars): #assert type(read_genotype) == type(bool()), "Expecting boolean value for read_genotype" @@ -23,13 +25,15 @@ def get_species_dataset_trait(self, start_vars): def get_trait_db_obs(self, trait_db_list): - + if isinstance(trait_db_list, basestring): + trait_db_list = trait_db_list.split(",") + self.trait_list = [] - for i, trait_db in enumerate(trait_db_list): - if i == (len(trait_db_list) - 1): - break - trait_name, dataset_name = trait_db.split(":") - #print("dataset_name:", dataset_name) + for trait in trait_db_list: + data, _separator, hmac = trait.rpartition(':') + data = data.strip() + assert hmac==user_manager.actual_hmac_creation(data), "Data tampering?" + trait_name, dataset_name = data.split(":") dataset_ob = data_set.create_dataset(dataset_name) trait_ob = GeneralTrait(dataset=dataset_ob, name=trait_name, diff --git a/wqflask/wqflask/collect.py b/wqflask/wqflask/collect.py index 5484633b..7e7aba89 100644 --- a/wqflask/wqflask/collect.py +++ b/wqflask/wqflask/collect.py @@ -165,12 +165,19 @@ class UserCollection(object): return create_new("Default") else: uc = model.UserCollection.query.get(params['existing_collection']) - members = uc.members_as_set() #set(json.loads(uc.members)) + members = list(uc.members_as_set()) #set(json.loads(uc.members)) len_before = len(members) traits = process_traits(params['traits']) - - members_now = list(members | traits) + + members_now = members + for trait in traits: + if trait in members: + continue + else: + members_now.append(trait) + + #members_now = list(members | traits) len_now = len(members_now) uc.members = json.dumps(members_now) @@ -184,28 +191,6 @@ class UserCollection(object): # Probably have to change that return redirect(url_for('view_collection', uc_id=uc.id)) - def remove_traits(self, params): - - #params = request.form - print("params are:", params) - uc_id = params['uc_id'] - uc = model.UserCollection.query.get(uc_id) - traits_to_remove = params.getlist('traits[]') - print("traits_to_remove are:", traits_to_remove) - traits_to_remove = process_traits(traits_to_remove) - print("\n\n after processing, traits_to_remove:", traits_to_remove) - all_traits = uc.members_as_set() - print(" all_traits:", all_traits) - members_now = all_traits - traits_to_remove - print(" members_now:", members_now) - print("Went from {} to {} members in set.".format(len(all_traits), len(members_now))) - uc.members = json.dumps(list(members_now)) - uc.changed_timestamp = datetime.datetime.utcnow() - db_session.commit() - - # We need to return something so we'll return this...maybe in the future - # we can use it to check the results - return str(len(members_now)) def report_change(len_before, len_now): new_length = len_now - len_before @@ -218,8 +203,6 @@ def report_change(len_before, len_now): print("No new traits were added.") - - @app.route("/collections/add") def collections_add(): traits=request.args['traits'] @@ -329,7 +312,6 @@ def list_collections(): @app.route("/collections/remove", methods=('POST',)) def remove_traits(): - params = request.form print("params are:", params) @@ -337,14 +319,11 @@ def remove_traits(): uc_id = params['uc_id'] uc = model.UserCollection.query.get(uc_id) traits_to_remove = params.getlist('traits[]') - print("traits_to_remove are:", traits_to_remove) traits_to_remove = process_traits(traits_to_remove) print("\n\n after processing, traits_to_remove:", traits_to_remove) all_traits = uc.members_as_set() - print(" all_traits:", all_traits) members_now = all_traits - traits_to_remove print(" members_now:", members_now) - print("Went from {} to {} members in set.".format(len(all_traits), len(members_now))) uc.members = json.dumps(list(members_now)) uc.changed_timestamp = datetime.datetime.utcnow() db_session.commit() diff --git a/wqflask/wqflask/model.py b/wqflask/wqflask/model.py index 17343186..5321e420 100644 --- a/wqflask/wqflask/model.py +++ b/wqflask/wqflask/model.py @@ -177,12 +177,10 @@ class UserCollection(Base): except: return 0 - #@property #def display_num_members(self): # return display_collapsible(self.num_members) - def members_as_set(self): return set(json.loads(self.members)) diff --git a/wqflask/wqflask/templates/collections/add.html b/wqflask/wqflask/templates/collections/add.html index c5598e84..47b87d73 100644 --- a/wqflask/wqflask/templates/collections/add.html +++ b/wqflask/wqflask/templates/collections/add.html @@ -6,16 +6,6 @@