示例#1
0
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
示例#2
0
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_,
    }
示例#3
0
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']}
示例#4
0
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_,
    }
示例#5
0
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']}
示例#6
0
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']}
示例#7
0
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']}
示例#8
0
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
示例#9
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
示例#10
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
示例#11
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
示例#12
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')
示例#13
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(user_id='abcd1234')
    sets = uset.list_sets()
    assert sets[0]['body'] in ('Apple', 'Coconut')
    assert sets[0]['body'] in ('Apple', 'Coconut')
示例#14
0
文件: user.py 项目: Folashade/sagefy
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
示例#15
0
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