diff options
author | zsloan | 2016-07-27 16:41:42 +0000 |
---|---|---|
committer | zsloan | 2016-07-27 16:41:42 +0000 |
commit | 44e302f3d84b10655b6900ceab6736d24e281f9e (patch) | |
tree | 325412f601e85e3342f6b00fcbb694e8e41533a0 | |
parent | 1a4a115c36370ece8bce0f3ab32a5bb4076d0ab7 (diff) | |
download | genenetwork2-44e302f3d84b10655b6900ceab6736d24e281f9e.tar.gz |
Fixed problem with phenotype traits causing error
Can now remove traits from collections and add to existing collections
Fixed a few other minor collection bugs
-rw-r--r-- | wqflask/base/data_set.py | 3 | ||||
-rw-r--r-- | wqflask/wqflask/collect.py | 71 | ||||
-rw-r--r-- | wqflask/wqflask/static/new/javascript/search_results.js | 35 | ||||
-rw-r--r-- | wqflask/wqflask/templates/collections/view.html | 4 | ||||
-rw-r--r-- | wqflask/wqflask/user_manager.py | 14 |
5 files changed, 92 insertions, 35 deletions
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py index d0ec3f3c..7aed2576 100644 --- a/wqflask/base/data_set.py +++ b/wqflask/base/data_set.py @@ -106,7 +106,8 @@ Publish or ProbeSet. E.g. new_type = "Geno" else: new_type = "ProbeSet" - self.datasets[short_dataset_name] = new_type + self.datasets[short_dataset_name] = new_type + print("DATASETS:", self.datasets) logger.info("datasets",self.datasets) def __call__(self, name): diff --git a/wqflask/wqflask/collect.py b/wqflask/wqflask/collect.py index 004240b4..f1c6ddd5 100644 --- a/wqflask/wqflask/collect.py +++ b/wqflask/wqflask/collect.py @@ -58,12 +58,26 @@ class AnonCollection(object): anon_user = user_manager.AnonUser() self.key = anon_user.key self.name = collection_name - self.id = str(uuid.uuid4()) + self.id = None self.created_timestamp = datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p') self.changed_timestamp = self.created_timestamp #ZS: will be updated when changes are made - if Redis.get(self.key) == "None": + #ZS: Find id and set it if the collection doesn't already exist + if Redis.get(self.key) == "None" or Redis.get(self.key) == None: Redis.set(self.key, None) #ZS: For some reason I get the error "Operation against a key holding the wrong kind of value" if I don't do this + else: + collections_list = json.loads(Redis.get(self.key)) + collection_position = 0 #ZS: Position of collection in collection_list, if it exists + collection_exists = False + for i, collection in enumerate(collections_list): + if collection['name'] == self.name: + collection_position = i + collection_exists = True + self.id = collection['id'] + break + if self.id == None: + self.id = str(uuid.uuid4()) + def get_members(self): traits = [] @@ -87,7 +101,8 @@ class AnonCollection(object): self.traits = list(process_traits(params['traits'])) #len_before = len(Redis.smembers(self.key)) existing_collections = Redis.get(self.key) - if existing_collections != None: + print("existing_collections:", existing_collections) + if existing_collections != None and existing_collections != "None": collections_list = json.loads(existing_collections) collection_position = 0 #ZS: Position of collection in collection_list, if it exists collection_exists = False @@ -99,7 +114,7 @@ class AnonCollection(object): if collection_exists: collections_list[collection_position]['members'].extend(self.traits) collections_list[collection_position]['num_members'] = len(collections_list[collection_position]['members']) - collections_list[collection_position]['changed_timestamp'] = self.last_changed_timestamp + collections_list[collection_position]['changed_timestamp'] = datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p') else: collection_dict = {"id" : self.id, "name" : self.name, @@ -125,12 +140,22 @@ class AnonCollection(object): #report_change(len_before, len_now) def remove_traits(self, params): - traits_to_remove = params.getlist('traits[]') - print("traits_to_remove:", process_txraits(traits_to_remove)) - len_before = len(Redis.smembers(self.key)) - Redis.srem(self.key, traits_to_remove) - print("currently in redis:", Redis.smembers(self.key)) - len_now = len(Redis.smembers(self.key)) + traits_to_remove = [(":").join(trait.split(":")[:2]) for trait in params.getlist('traits[]')] + existing_collections = Redis.get(self.key) + collection_position = 0 + collections_list = json.loads(existing_collections) + for i, collection in enumerate(collections_list): + if collection['id'] == self.id: + collection_position = i + collection_exists = True + break + collections_list[collection_position]['members'] = [trait for trait in collections_list[collection_position]['members'] if trait not in traits_to_remove] + collections_list[collection_position]['num_members'] = len(collections_list[collection_position]['members']) + collections_list[collection_position]['changed_timestamp'] = datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p') + len_now = collections_list[collection_position]['num_members'] + #print("before in redis:", json.loads(Redis.get(self.key))) + Redis.set(self.key, json.dumps(collections_list)) + #print("currently in redis:", json.loads(Redis.get(self.key))) # We need to return something so we'll return this...maybe in the future # we can use it to check the results @@ -249,8 +274,9 @@ def collections_new(): if g.user_session.logged_in: return UserCollection().add_traits(params, collection_name) else: - #print("PARAMS ADD TO COLLECTION:", params) - return AnonCollection().add_traits(params) + ac = AnonCollection(collection_name) + ac.add_traits(params) + return redirect(url_for('view_collection', collection_id=ac.id)) else: print("ELSE") CauseAnError @@ -289,6 +315,7 @@ def create_new(collection_name): ac = AnonCollection(collection_name) ac.changed_timestamp = datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p') ac.add_traits(params) + print("Collection ID:", ac.id) return redirect(url_for('view_collection', collection_id=ac.id)) @app.route("/collections/list") @@ -332,7 +359,8 @@ def remove_traits(): uc.changed_timestamp = datetime.datetime.utcnow() db_session.commit() else: - members_now = AnonCollection().remove_traits(params) + collection_name = params['collection_name'] + members_now = AnonCollection(collection_name).remove_traits(params) # We need to return something so we'll return this...maybe in the future @@ -344,12 +372,17 @@ def remove_traits(): def delete_collection(): params = request.form print("params:", params) - uc_id = params['uc_id'] - uc = model.UserCollection.query.get(uc_id) - # Todo: For now having the id is good enough since it's so unique - # But might want to check ownership in the future - collection_name = uc.name - db_session.delete(uc) + if "uc_id" in params: + uc_id = params['uc_id'] + uc = model.UserCollection.query.get(uc_id) + # Todo: For now having the id is good enough since it's so unique + # But might want to check ownership in the future + collection_name = uc.name + db_session.delete(uc) + else: + collection_name = params['collection_name'] + user_manager.AnonUser().delete_collection(collection_name) + flash("We've deletet the collection: {}.".format(collection_name), "alert-info") return redirect(url_for('list_collections')) diff --git a/wqflask/wqflask/static/new/javascript/search_results.js b/wqflask/wqflask/static/new/javascript/search_results.js index 4218fdbb..746564fd 100644 --- a/wqflask/wqflask/static/new/javascript/search_results.js +++ b/wqflask/wqflask/static/new/javascript/search_results.js @@ -130,17 +130,30 @@ $(function() { }).get(); console.log("checked length is:", traits.length); console.log("checked is:", traits); - uc_id = $("#uc_id").val(); - console.log("uc.id is:", uc_id); - return $.ajax({ - type: "POST", - url: "/collections/remove", - data: { - uc_id: uc_id, - traits: traits - }, - success: removed_traits - }); + if ( $("#uc_id").length ) { + uc_id = $("#uc_id").val(); + return $.ajax({ + type: "POST", + url: "/collections/remove", + data: { + uc_id: uc_id, + traits: traits + }, + success: removed_traits + }); + } + else { + collection_name = $("#collection_name").val(); + return $.ajax({ + type: "POST", + url: "/collections/remove", + data: { + collection_name: collection_name, + traits: traits + }, + success: removed_traits + }); + } }; $("#select_all").click(select_all); $("#deselect_all").click(deselect_all); diff --git a/wqflask/wqflask/templates/collections/view.html b/wqflask/wqflask/templates/collections/view.html index 4b1752cd..68d2886f 100644 --- a/wqflask/wqflask/templates/collections/view.html +++ b/wqflask/wqflask/templates/collections/view.html @@ -21,16 +21,16 @@ <div class="container"> <div> - {% if uc %} <form action="/collections/delete" method="post"> {% if uc %} <input type="hidden" name="uc_id" id="uc_id" value="{{ uc.id }}" /> + {% else %} + <input type="hidden" name="collection_name" id="collection_name" value="{{ collection_name }}" /> {% endif %} <div class="col-xs-3 controls"> <input type="submit" class="btn btn-danger" value="Delete this collection" /> </div> </form> - {% endif %} <form action="/corr_matrix" method="post"> {% if uc %} <input type="hidden" name="uc_id" id="uc_id" value="{{ uc.id }}" /> diff --git a/wqflask/wqflask/user_manager.py b/wqflask/wqflask/user_manager.py index 7cc0f415..f1a798d4 100644 --- a/wqflask/wqflask/user_manager.py +++ b/wqflask/wqflask/user_manager.py @@ -62,7 +62,7 @@ def timestamp(): class AnonUser(object): - cookie_name = 'anon_user_v3' + cookie_name = 'anon_user_v7' def __init__(self): self.cookie = request.cookies.get(self.cookie_name) @@ -92,9 +92,19 @@ class AnonUser(object): len_now = len(Redis.smembers(self.key)) print("LENGTH NOW:", len_now) + def delete_collection(self, collection_name): + existing_collections = self.get_collections() + for i, collection in enumerate(existing_collections): + collection['created_timestamp'] = collection['created_timestamp'].strftime('%b %d %Y %I:%M%p') + collection['changed_timestamp'] = collection['changed_timestamp'].strftime('%b %d %Y %I:%M%p') + if collection['name'] == collection_name: + existing_collections.pop(i) + Redis.set(self.key, json.dumps(existing_collections)) + def get_collections(self): json_collections = Redis.get(self.key) - if json_collections == None: + print("json_collections:", json_collections) + if json_collections == None or json_collections == "None": return [] else: collections = json.loads(json_collections) |