about summary refs log tree commit diff
path: root/wqflask/wqflask/collect.py
diff options
context:
space:
mode:
Diffstat (limited to 'wqflask/wqflask/collect.py')
-rw-r--r--wqflask/wqflask/collect.py126
1 files changed, 26 insertions, 100 deletions
diff --git a/wqflask/wqflask/collect.py b/wqflask/wqflask/collect.py
index ffc698de..ecc02c06 100644
--- a/wqflask/wqflask/collect.py
+++ b/wqflask/wqflask/collect.py
@@ -40,13 +40,6 @@ import logging
 from utility.logger import getLogger
 logger = getLogger(__name__)
 
-def get_collection():
-    if g.user_session.logged_in:
-        return UserCollection()
-    else:
-        return AnonCollection()
-    #else:
-    #    CauseError
 
 class AnonCollection(object):
     """User is not logged in"""
@@ -95,7 +88,6 @@ class AnonCollection(object):
     def add_traits(self, params):
         #assert collection_name == "Default", "Unexpected collection name for anonymous user"
         self.traits = list(process_traits(params['traits']))
-        #len_before = len(Redis.smembers(self.key))
         existing_collections = Redis.get(self.key)
         logger.debug("existing_collections:", existing_collections)
         if existing_collections != None and existing_collections != "None":
@@ -130,10 +122,6 @@ class AnonCollection(object):
             collections_list.append(collection_dict)
 
         Redis.set(self.key, json.dumps(collections_list))
-        #Redis.sadd(self.key, *list(traits))
-        #Redis.expire(self.key, 60 * 60 * 24 * 5)
-        #len_now = len(Redis.smembers(self.key))
-        #report_change(len_before, len_now)
 
     def remove_traits(self, params):
         traits_to_remove = [(":").join(trait.split(":")[:2]) for trait in params.getlist('traits[]')]
@@ -149,54 +137,12 @@ class AnonCollection(object):
         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
         return str(len_now)
 
-
-class UserCollection(object):
-    """User is logged in"""
-
-    def add_traits(self, params, collection_name):
-        logger.debug("---> params are:", params.keys())
-        logger.debug("     type(params):", type(params))
-        if collection_name=="Default":
-            uc = g.user_session.user_ob.get_collection_by_name("Default")
-            # Doesn't exist so we'll create it
-            if not uc:
-                return create_new("Default")
-        else:
-            uc = model.UserCollection.query.get(params['existing_collection'].split(":")[0])
-        members =  list(uc.members_as_set()) #set(json.loads(uc.members))
-        len_before = len(members)
-
-        traits = process_traits(params['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)
-
-        uc.changed_timestamp = datetime.datetime.utcnow()
-
-        db_session.commit()
-
-        logger.debug("added to existing, now set is:" + str(uc.members))
-        report_change(len_before, len_now)
-
-        # Probably have to change that
-        return redirect(url_for('view_collection', uc_id=uc.id))
-
 def process_traits(unprocessed_traits):
     #print("unprocessed_traits are:", unprocessed_traits)
     if isinstance(unprocessed_traits, basestring):
@@ -227,9 +173,8 @@ def collections_add():
     traits=request.args['traits']
 
     if g.user_session.logged_in:
-        logger.debug("user_session",g.user_session)
-        user_collections = g.user_session.user_ob.user_collections
-        logger.debug("user_collections are:", user_collections)
+        user_collections = g.user_session.user_collections
+        #logger.debug("user_collections are:", user_collections)
         return render_template("collections/add.html",
                                traits = traits,
                                collections = user_collections,
@@ -256,9 +201,12 @@ def collections_new():
         return create_new(collection_name)
     elif "add_to_existing" in params:
         logger.debug("in add to existing")
+        collection_id = params['existing_collection'].split(":")[0]
         collection_name = params['existing_collection'].split(":")[1]
         if g.user_session.logged_in:
-            return UserCollection().add_traits(params, collection_name)
+            traits = list(process_traits(params['traits']))
+            g.user_session.add_traits_to_collection(collection_id, traits)
+            return redirect(url_for('view_collection', uc_id=collection_id))
         else:
             ac = AnonCollection(collection_name)
             ac.add_traits(params)
@@ -273,16 +221,10 @@ def create_new(collection_name):
     traits = process_traits(unprocessed_traits)
 
     if g.user_session.logged_in:
-        uc = model.UserCollection()
-        uc.name = collection_name
-        logger.debug("user_session:", g.user_session.__dict__)
-        uc.user = g.user_session.user_id
-        uc.members = json.dumps(list(traits))
-        db_session.add(uc)
-        db_session.commit()
-        return redirect(url_for('view_collection', uc_id=uc.id))
+        uc_id = g.user_session.add_collection(collection_name, traits)
+
+        return redirect(url_for('view_collection', uc_id=uc_id))
     else:
-        current_collections = user_manager.AnonUser().get_collections()
         ac = AnonCollection(collection_name)
         ac.changed_timestamp = datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p')
         ac.add_traits(params)
@@ -291,17 +233,17 @@ def create_new(collection_name):
 @app.route("/collections/list")
 def list_collections():
     params = request.args
-    logger.debug("PARAMS:", params)
+    #logger.debug("PARAMS:", params)
     if g.user_session.logged_in:
-        user_collections = list(g.user_session.user_ob.user_collections)
-        logger.debug("user_collections are:", user_collections)
+        user_collections = list(g.user_session.user_collections)
+        #logger.debug("user_collections are:", user_collections)
         return render_template("collections/list.html",
                                params = params,
                                collections = user_collections,
                                )
     else:
         anon_collections = user_manager.AnonUser().get_collections()
-        logger.debug("anon_collections are:", anon_collections)
+        #logger.debug("anon_collections are:", anon_collections)
         return render_template("collections/list.html",
                                params = params,
                                collections = anon_collections)
@@ -310,20 +252,14 @@ def list_collections():
 @app.route("/collections/remove", methods=('POST',))
 def remove_traits():
     params = request.form
-    logger.debug("params are:", params)
 
     if "uc_id" in params:
         uc_id = params['uc_id']
-        uc = model.UserCollection.query.get(uc_id)
         traits_to_remove = params.getlist('traits[]')
         traits_to_remove = process_traits(traits_to_remove)
         logger.debug("\n\n  after processing, traits_to_remove:", traits_to_remove)
-        all_traits = uc.members_as_set()
-        members_now = all_traits - traits_to_remove
-        logger.debug("  members_now:", members_now)
-        uc.members = json.dumps(list(members_now))
-        uc.changed_timestamp = datetime.datetime.utcnow()
-        db_session.commit()
+
+        members_now = g.user_session.remove_traits_from_collection(uc_id, traits_to_remove)
     else:
         collection_name = params['collection_name']
         members_now = AnonCollection(collection_name).remove_traits(params)
@@ -337,22 +273,13 @@ def remove_traits():
 @app.route("/collections/delete", methods=('POST',))
 def delete_collection():
     params = request.form
-    logger.debug("params:", params)
     if g.user_session.logged_in:
         uc_id = params['uc_id']
         if len(uc_id.split(":")) > 1:
             for this_uc_id in uc_id.split(":"):
-                uc = model.UserCollection.query.get(this_uc_id)
-                collection_name = uc.name
-                db_session.delete(uc)
-                db_session.commit()
+                collection_name = g.user_session.delete_collection(this_uc_id)
         else:
-            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)
-            db_session.commit()
+            collection_name = g.user_session.delete_collection(uc_id)
     else:
         if "collection_name" in params:
             collection_name = params['collection_name']
@@ -360,7 +287,10 @@ def delete_collection():
             for this_collection in params['uc_id'].split(":"):
                 user_manager.AnonUser().delete_collection(this_collection)
 
-    flash("We've deleted the collection: {}.".format(collection_name), "alert-info")
+    if len(uc_id.split(":")) > 1:
+        flash("We've deleted the selected collections.", "alert-info")
+    else:
+        flash("We've deleted the collection: {}.".format(collection_name), "alert-info")
 
     return redirect(url_for('list_collections'))
 
@@ -368,12 +298,11 @@ def delete_collection():
 @app.route("/collections/view")
 def view_collection():
     params = request.args
-    logger.debug("PARAMS in view collection:", params)
 
-    if "uc_id" in params:
+    if g.user_session.logged_in and "uc_id" in params:
         uc_id = params['uc_id']
-        uc = model.UserCollection.query.get(uc_id)
-        traits = json.loads(uc.members)
+        uc = (collection for collection in g.user_session.user_collections if collection["id"] == uc_id).next()
+        traits = uc["members"]
     else:
         user_collections = json.loads(Redis.get(user_manager.AnonUser().key))
         this_collection = {}
@@ -381,10 +310,8 @@ def view_collection():
             if collection['id'] == params['collection_id']:
                 this_collection = collection
                 break
-        #this_collection = user_collections[params['collection_id']]
-        traits = this_collection['members']
 
-    logger.debug("in view_collection traits are:", traits)
+        traits = this_collection['members']
 
     trait_obs = []
     json_version = []
@@ -410,9 +337,8 @@ def view_collection():
         collection_info = dict(trait_obs=trait_obs,
                                collection_name=this_collection['name'])
     if "json" in params:
-        logger.debug("json_version:", json_version)
         return json.dumps(json_version)
     else:
         return render_template("collections/view.html",
                            **collection_info
-                           )
+                           )
\ No newline at end of file