From 8909bcb5ff311d8d2fd71cc6c7968a1716ceb389 Mon Sep 17 00:00:00 2001 From: Zachary Sloan Date: Fri, 28 Feb 2014 22:34:05 +0000 Subject: Committing after creating AnonCollection class and before adding remove trait function --- wqflask/base/trait_collection.py | 79 +++++++++++--------------- wqflask/wqflask/collect.py | 116 ++++++++++++++++++++------------------- 2 files changed, 93 insertions(+), 102 deletions(-) diff --git a/wqflask/base/trait_collection.py b/wqflask/base/trait_collection.py index 49b0eaea..d388a3af 100644 --- a/wqflask/base/trait_collection.py +++ b/wqflask/base/trait_collection.py @@ -1,40 +1,39 @@ -#The TraitCollection class with encompass the UserCollection (collections -#created by registered and logged in users) and AnonCollection (collections created by users who -#aren't logged in) class. The former will represent and act on a database table while the latter -#will store its trait information in Redis - - -from __future__ import print_function, division, absolute_import - -import uuid -import datetime - -import simplejson as json - -from flask import request -from flask.ext.sqlalchemy import SQLAlchemy - -from wqflask import app - -import sqlalchemy - -from sqlalchemy import (Column, Integer, String, Table, ForeignKey, Unicode, Boolean, DateTime, - Text, Index) -from sqlalchemy.orm import relationship, backref - -#from redis import StrictRedis -import redis -Redis = redis.StrictRedis() - -from wqflask.database import Base, init_db - class TraitCollection(object): - - -class AnonCollection(TraitCollection): + def __init__(self, is_anon=False): + self.is_anon = is_anon + + + @app.route("/collections/remove", methods=('POST',)) + def remove_traits(): + if is_anon: + AnonCollection.remove_traits() + else: + UserCollection.remove_traits() + + 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 __init__(self, anon_id) - self.anon_id = anon_id + self.anon_key = anon_key self.collection_members = Redis.smembers(self.anon_id) print("self.collection_members is:", self.collection_members) self.num_members = len(self.collection_members) @@ -52,15 +51,3 @@ class AnonCollection(TraitCollection): # 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)) - - @property - def num_members(self): - print("members are:", json.loads(self.members)) - return len(json.loads(self.members)) - - #@property - #def display_num_members(self): - # return display_collapsible(self.num_members) - - def members_as_set(self): - return set(json.loads(self.members)) \ No newline at end of file diff --git a/wqflask/wqflask/collect.py b/wqflask/wqflask/collect.py index daa3b2af..34def295 100644 --- a/wqflask/wqflask/collect.py +++ b/wqflask/wqflask/collect.py @@ -44,6 +44,65 @@ from wqflask import user_manager from base import trait +class AnonCollection(object): + """User is not logged in""" + def __init__(self): + self.anon_user = user_manager.AnonUser() + self.key = "anon_collection:v1:{}".format(self.anon_user.anon_id) + + + def add_traits(params, collection_name): + assert collection_name == "Default", "Unexpected collection name for anonymous user" + traits = process_traits(params['traits']) + len_before = len(Redis.smembers) + Redis.sadd(self.key, traits) + Redis.expire(self.key, 60 * 60 * 24 * 3) + len_now = len(Redis.smembers) + report_change(len_before, len_now) + + + +class UserCollection(object): + """User is logged in""" + + def add_traits(params, collection_name): + print("---> params are:", params.keys()) + print(" 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']) + members = uc.members_as_set() #set(json.loads(uc.members)) + len_before = len(members) + + traits = process_traits(params['traits']) + + 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() + + print("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 report_change(len_before, len_now): + new_length = len_now - len_before + if new_length: + flash("We've added {} to your collection.".format( + numify(new_length, 'new trait', 'new traits'))) + else: + flash("No new traits were added.") + + @app.route("/collections/add") @@ -84,62 +143,7 @@ def collections_new(): CauseAnError -def add_anon_traits(params): - # Todo: assert user isn't logged in - anon_id = user_manager.AnonUser().anon_id - print("anon_id is:", anon_id) - - key = "anon_collection:v1:" + anon_id - - len_before = len(Redis.smembers(key)) - traits = process_traits(params['traits']) - - print("redis key is:", key) - Redis.expire(key, 60*60*72) - for trait in traits: - Redis.sadd(key, trait) - #print("set members:", Redis.smembers(key)) - - len_now = len(Redis.smembers(key)) - new_length = len_now - len_before - print("new_length:", new_length) - #print("anon traits:", traits) - - return redirect(url_for('view_collection', key=key)) - -def add_traits(params, collection_name): - print("---> params are:", params.keys()) - print(" 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']) - members = uc.members_as_set() #set(json.loads(uc.members)) - len_before = len(members) - - traits = process_traits(params['traits']) - - 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() - print("added to existing, now set is:" + str(uc.members)) - - new_length = len_now - len_before - if new_length: - flash("We've added {} to your collection.".format( - numify(new_length, 'new trait', 'new traits'))) - else: - flash("No new traits were added.") - - return redirect(url_for('view_collection', uc_id=uc.id)) def process_traits(unprocessed_traits): print("unprocessed_traits are:", unprocessed_traits) @@ -188,6 +192,7 @@ def list_collections(): @app.route("/collections/remove", methods=('POST',)) def remove_traits(): + params = request.form print("params are:", params) uc_id = params['uc_id'] @@ -210,7 +215,6 @@ def remove_traits(): return str(len(members_now)) - @app.route("/collections/delete", methods=('POST',)) def delete_collection(): params = request.form -- cgit v1.2.3