def get_user_route(request, user_id): """ Get the user by their ID. """ db_conn = request["db_conn"] user = get_user({"id": user_id}, db_conn) current_user = get_current_user(request) # Posts if in request params # Sets if in request params and allowed # Follows if in request params and allowed if not user: return abort(404) data = {} data["user"] = deliver_user(user, access="private" if current_user and user["id"] == current_user["id"] else None) # TODO-2 SPLITUP create new endpoints for these instead if "posts" in request["params"]: data["posts"] = [post.deliver() for post in get_posts_facade(db_conn, user_id=user["id"])] if "sets" in request["params"] and user["settings"]["view_sets"] == "public": u_sets = UserSets.get(db_conn, user_id=user["id"]) data["sets"] = [set_.deliver() for set_ in u_sets.list_sets(db_conn)] if "follows" in request["params"] and user["settings"]["view_follows"] == "public": data["follows"] = [follow.deliver() for follow in Follow.list(db_conn, user_id=user["id"])] if "avatar" in request["params"]: size = int(request["params"]["avatar"]) data["avatar"] = get_avatar(user["email"], size if size else None) return 200, data
def get_user_sets_route(request, user_id): """ Get the list of sets the user has added. NEXT STATE GET Choose Set -> POST Choose Set """ current_user = get_current_user(request) if not current_user: return abort(401) if user_id != current_user['id']: return abort(403) next_ = { 'method': 'POST', 'path': '/s/users/{user_id}/sets/{set_id}'.format(user_id=current_user['id'], set_id='{set_id}'), } current_user.set_learning_context(next=next_) uset = UserSets.get(user_id=user_id) if not uset: return 200, {'sets': [], 'next': next_} return 200, { 'sets': [s.deliver() for s in uset.list_sets(**request['params'])], 'next': next_, }
def remove_set_route(request, user_id, set_id): """ Remove a set from the learner's list of sets. """ current_user = get_current_user(request) if not current_user: return abort(401) if user_id != current_user['id']: return abort(403) uset = UserSets.get(user_id=user_id) if not uset: return 404, { 'errors': [{ 'message': 'User does not have sets.' }], 'ref': '8huZbvEAYOP8LcZb2sXbqNOC' } if set_id not in uset['set_ids']: return abort(404) uset['set_ids'].remove(set_id) usets, errors = uset.save() if errors: return 400, {'errors': errors, 'ref': 'qIfll1e7dbP9V9jmC8FkCwsa'} return 200, {'sets': uset['set_ids']}
def get_user_sets_route(request, user_id): """ Get the list of sets the user has added. NEXT STATE GET Choose Set -> POST Choose Set """ current_user = get_current_user(request) if not current_user: return abort(401) if user_id != current_user['id']: return abort(403) next_ = { 'method': 'POST', 'path': '/s/users/{user_id}/sets/{set_id}' .format(user_id=current_user['id'], set_id='{set_id}'), } current_user.set_learning_context(next=next_) uset = UserSets.get(user_id=user_id) if not uset: return 200, {'sets': [], 'next': next_} return 200, { 'sets': [s.deliver() for s in uset.list_sets(**request['params'])], 'next': next_, }
def remove_set_route(request, user_id, set_id): """ Remove a set from the learner's list of sets. """ current_user = get_current_user(request) if not current_user: return abort(401) if user_id != current_user['id']: return abort(403) uset = UserSets.get(user_id=user_id) if not uset: return 404, { 'errors': [{'message': 'User does not have sets.'}], 'ref': '8huZbvEAYOP8LcZb2sXbqNOC' } if set_id not in uset['set_ids']: return abort(404) uset['set_ids'].remove(set_id) usets, errors = uset.save() if errors: return 400, { 'errors': errors, 'ref': 'qIfll1e7dbP9V9jmC8FkCwsa' } return 200, {'sets': uset['set_ids']}
def add_set_route(request, user_id, set_id): """ Add a set to the learner's list of sets. """ db_conn = request['db_conn'] current_user = get_current_user(request) if not current_user: return abort(401) if user_id != current_user['id']: return abort(403) set_ = Set.get(db_conn, entity_id=set_id) if not set_: return abort(404) uset = UserSets.get(db_conn, user_id=user_id) if uset and set_id in uset['set_ids']: return 400, { 'errors': [{ 'name': 'set_id', 'message': 'Set is already added.', }], 'ref': 'kPZ95zM3oxFDGGl8vBdR3J3o', } if uset: uset['set_ids'].append(set_id) uset, errors = uset.save(db_conn) else: uset, errors = UserSets.insert(db_conn, { 'user_id': user_id, 'set_ids': [set_id], }) if errors: return 400, { 'errors': errors, 'ref': 'zCFUbLBTg9n2DnTkQYbqO4X9' } return 200, {'sets': uset['set_ids']}
def add_set_route(request, user_id, set_id): """ Add a set to the learner's list of sets. """ current_user = get_current_user(request) if not current_user: return abort(401) if user_id != current_user['id']: return abort(403) set_ = Set.get(entity_id=set_id) if not set_: return abort(404) uset = UserSets.get(user_id=user_id) if uset and set_id in uset['set_ids']: return 400, { 'errors': [{ 'name': 'set_id', 'message': 'Set is already added.', }], 'ref': 'kPZ95zM3oxFDGGl8vBdR3J3o', } if uset: uset['set_ids'].append(set_id) uset, errors = uset.save() else: uset, errors = UserSets.insert({ 'user_id': user_id, 'set_ids': [set_id], }) if errors: return 400, {'errors': errors, 'ref': 'zCFUbLBTg9n2DnTkQYbqO4X9'} return 200, {'sets': uset['set_ids']}
def test_sets(db_conn, users_sets_table): """ Expect to require a list of set IDs. """ user_sets, errors = UserSets.insert({'user_id': 'A'}) assert len(errors) == 1 user_sets['set_ids'] = [ 'A', 'B', ] user_sets, errors = user_sets.save() assert len(errors) == 0
def test_user(db_conn, users_sets_table): """ Expect to require a user ID. """ user_sets, errors = UserSets.insert(db_conn, { 'set_ids': [ 'A', 'B', ], }) assert len(errors) == 1 user_sets['user_id'] = 'A' user_sets, errors = user_sets.save(db_conn) assert len(errors) == 0
def test_sets(db_conn, users_sets_table): """ Expect to require a list of set IDs. """ user_sets, errors = UserSets.insert(db_conn, { 'user_id': 'A' }) assert len(errors) == 1 user_sets['set_ids'] = [ 'A', 'B', ] user_sets, errors = user_sets.save(db_conn) assert len(errors) == 0
def test_user(db_conn, users_sets_table): """ Expect to require a user ID. """ user_sets, errors = UserSets.insert({ 'set_ids': [ 'A', 'B', ], }) assert len(errors) == 1 user_sets['user_id'] = 'A' user_sets, errors = user_sets.save() assert len(errors) == 0
def test_list_sets(db_conn, users_sets_table, sets_table): """ Expect to list sets a user subscribes to. """ sets_table.insert([{ 'entity_id': 'A1', 'name': 'A', 'body': 'Apple', 'created': r.now(), 'modified': r.now(), 'status': 'accepted', }, { 'entity_id': 'B2', 'name': 'B', 'body': 'Banana', 'created': r.now(), 'modified': r.now(), 'status': 'accepted', }, { 'entity_id': 'C3', 'name': 'C', 'body': 'Coconut', 'created': r.now(), 'modified': r.now(), 'status': 'accepted', }, { 'entity_id': 'D4', 'name': 'D', 'body': 'Date', 'created': r.now(), 'modified': r.now(), 'status': 'accepted', }]).run(db_conn) users_sets_table.insert({ 'user_id': 'abcd1234', 'set_ids': [ 'A1', 'C3', ], 'created': r.now(), 'modified': r.now(), }).run(db_conn) uset = UserSets.get(db_conn, user_id='abcd1234') sets = uset.list_sets(db_conn) assert sets[0]['body'] in ('Apple', 'Coconut') assert sets[0]['body'] in ('Apple', 'Coconut')
def test_list_sets(db_conn, users_sets_table, sets_table): """ Expect to list sets a user subscribes to. """ sets_table.insert([{ 'entity_id': 'A1', 'name': 'A', 'body': 'Apple', 'created': r.now(), 'modified': r.now(), 'status': 'accepted', }, { 'entity_id': 'B2', 'name': 'B', 'body': 'Banana', 'created': r.now(), 'modified': r.now(), 'status': 'accepted', }, { 'entity_id': 'C3', 'name': 'C', 'body': 'Coconut', 'created': r.now(), 'modified': r.now(), 'status': 'accepted', }, { 'entity_id': 'D4', 'name': 'D', 'body': 'Date', 'created': r.now(), 'modified': r.now(), 'status': 'accepted', }]).run(db_conn) users_sets_table.insert({ 'user_id': 'abcd1234', 'set_ids': [ 'A1', 'C3', ], 'created': r.now(), 'modified': r.now(), }).run(db_conn) uset = UserSets.get(user_id='abcd1234') sets = uset.list_sets() assert sets[0]['body'] in ('Apple', 'Coconut') assert sets[0]['body'] in ('Apple', 'Coconut')
def get_user_route(request, user_id): """ Get the user by their ID. """ user = User.get(id=user_id) current_user = get_current_user(request) # Posts if in request params # Sets if in request params and allowed # Follows if in request params and allowed if not user: return abort(404) data = {} data['user'] = user.deliver(access='private' if current_user and user['id'] == current_user['id'] else None) # TODO-2 SPLITUP create new endpoints for these instead if 'posts' in request['params']: data['posts'] = [post.deliver() for post in get_posts_facade(user_id=user['id'])] if ('sets' in request['params'] and user['settings']['view_sets'] == 'public'): u_sets = UserSets.get(user_id=user['id']) data['sets'] = [set_.deliver() for set_ in u_sets.list_sets()] if ('follows' in request['params'] and user['settings']['view_follows'] == 'public'): data['follows'] = [follow.deliver() for follow in Follow.list(user_id=user['id'])] if 'avatar' in request['params']: size = int(request['params']['avatar']) data['avatar'] = user.get_avatar(size if size else None) return 200, data
def get_user_route(request, user_id): """ Get the user by their ID. """ user = User.get(id=user_id) current_user = get_current_user(request) # Posts if in request params # Sets if in request params and allowed # Follows if in request params and allowed if not user: return abort(404) data = {} data['user'] = user.deliver(access='private' if current_user and user['id'] == current_user['id'] else None) # TODO-2 SPLITUP create new endpoints for these instead if 'posts' in request['params']: data['posts'] = [ post.deliver() for post in get_posts_facade(user_id=user['id']) ] if ('sets' in request['params'] and user['settings']['view_sets'] == 'public'): u_sets = UserSets.get(user_id=user['id']) data['sets'] = [set_.deliver() for set_ in u_sets.list_sets()] if ('follows' in request['params'] and user['settings']['view_follows'] == 'public'): data['follows'] = [ follow.deliver() for follow in Follow.list(user_id=user['id']) ] if 'avatar' in request['params']: size = int(request['params']['avatar']) data['avatar'] = user.get_avatar(size if size else None) return 200, data