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.py153
1 files changed, 153 insertions, 0 deletions
diff --git a/wqflask/wqflask/collect.py b/wqflask/wqflask/collect.py
new file mode 100644
index 00000000..ef7b37df
--- /dev/null
+++ b/wqflask/wqflask/collect.py
@@ -0,0 +1,153 @@
+from __future__ import print_function, division, absolute_import
+
+
+import os
+import hashlib
+import datetime
+import time
+
+import uuid
+import hashlib
+import hmac
+import base64
+
+import urlparse
+
+import simplejson as json
+
+from sqlalchemy import orm
+
+#from redis import StrictRedis
+import redis
+Redis = redis.StrictRedis()
+
+
+from flask import (Flask, g, render_template, url_for, request, make_response,
+                   redirect, flash)
+
+from wqflask import app
+
+
+from pprint import pformat as pf
+
+
+from wqflask.database import db_session
+
+from wqflask import model
+
+from utility import Bunch, Struct
+
+from wqflask import user_manager
+
+
+from base import trait
+
+
+
+
+@app.route("/collections/add")
+def collections_add():
+    user_collections = g.user_session.user_ob.user_collections
+    print("user_collections are:", user_collections)
+    return render_template("collections/add.html",
+                           traits=request.args['traits'],
+                           user_collections = user_collections,
+                           )
+
+
+@app.route("/collections/new")
+def collections_new():
+    print("request.args in collections_new are:", request.args)
+    if "create_new" in request.args:
+        return create_new()
+    elif "add_to_existing" in request.args:
+        return add_to_existing()
+    elif "continue" in request.args:
+        return unnamed()
+    else:
+        CauseAnError
+
+
+def unnamed():
+    return "unnamed"
+
+def add_to_existing():
+    params = request.args
+    print("---> params are:", params.keys())
+    print("     type(params):", type(params))
+    uc = model.UserCollection.query.get(params['existing_collection'])
+    members = set(json.loads(uc.members))
+
+    traits = process_traits(params['traits'])
+
+    uc.members = json.dumps(list(members | traits))
+
+    uc.changed_timestamp = datetime.datetime.utcnow()
+
+    db_session.commit()
+
+    return "added to existing, now set is:" + str(uc.members)
+
+def process_traits(unprocessed_traits):
+    print("unprocessed_traits are:", unprocessed_traits)
+    unprocessed_traits = unprocessed_traits.split(",")
+    traits = set()
+    for trait in unprocessed_traits:
+        data, _separator, hmac = trait.rpartition(':')
+        data = data.strip()
+        print("data is:", data)
+        print("hmac is:", hmac)
+        assert hmac==user_manager.actual_hmac_creation(data), "Data tampering?"
+        traits.add(str(data))
+    return traits
+
+def create_new():
+    params = request.args
+    uc = model.UserCollection()
+    uc.name = params['new_collection']
+    print("user_session:", g.user_session.__dict__)
+    uc.user = g.user_session.user_id
+    unprocessed_traits = params['traits']
+
+    traits = process_traits(unprocessed_traits)
+
+    uc.members = json.dumps(list(traits))
+    print("traits are:", traits)
+
+    db_session.add(uc)
+    db_session.commit()
+
+    print("Created: " + uc.name)
+    return redirect(url_for('view_collection', uc_id=uc.id))
+
+@app.route("/collections/list")
+def list_collections():
+    user_collections = g.user_session.user_ob.user_collections
+    return render_template("collections/list.html",
+                           user_collections = user_collections,
+                           )
+
+
+
+@app.route("/collections/view")
+def view_collection():
+    params = request.args
+    uc_id = params['uc_id']
+    uc = model.UserCollection.query.get(uc_id)
+    traits = json.loads(uc.members)
+
+    print("in view_collection traits are:", traits)
+
+    trait_obs = []
+
+    for atrait in traits:
+        name, dataset_name = atrait.split(':')
+
+        trait_ob = trait.GeneralTrait(name=name, dataset_name=dataset_name)
+        trait_ob.get_info()
+        trait_obs.append(trait_ob)
+
+    return render_template("collections/view.html",
+                           trait_obs=trait_obs,
+                           uc = uc,
+                           )