Ejemplo n.º 1
0
def get_or_create_cart_by_user(context, request):
    userid = get_userid(request)
    user = _get_user(request, userid)
    carts = get_cart_objects_by_user(request,
                                     userid,
                                     blocked_statuses=['disabled', 'deleted'])
    carts = [cart['@id'] for cart in carts]
    if not carts:
        cart = _create_cart(request, user)
    request.response.status = 200
    return {
        'status': 'success',
        '@type': ['result'],
        '@graph': carts or [cart]
    }
Ejemplo n.º 2
0
def create_cart_by_user(context, request):
    userid = get_userid(request)
    user = _get_user(request, userid)
    is_admin = 'group.admin' in request.effective_principals
    blocked_statuses = ['deleted'] if not is_admin else []
    cart_max_count = CART_ADMIN_MAX if is_admin else CART_USER_MAX
    carts = get_cart_objects_by_user(request, userid, blocked_statuses=blocked_statuses)
    cart_status = request.json.get('status')
    cart_name = request.json.get('name', '').strip()
    # User writing a new cart; check for cart overflow and naming conflicts
    if cart_status != 'disabled':
        countable_carts = [
            cart
            for cart in carts
            if cart['status'] not in ['disabled', 'deleted']
        ]
        if len(countable_carts) >= CART_USER_MAX:
            msg = 'Users cannot have more than {} cohorts'.format(CART_USER_MAX)
            raise HTTPBadRequest(explanation=msg)
        conflicting_names = [
            cart
            for cart in carts
            if (cart['status'] not in ['deleted', 'disabled'] and
                cart['name'].strip().upper() == cart_name.upper())
        ]
        if conflicting_names:
            msg = 'A cohort with the name "{}" already exists'.format(cart_name)
            raise HTTPBadRequest(explanation=msg)
    cart_identifier = request.json.get('identifier')
    cart = _create_cart(
        request,
        user,
        name=cart_name,
        identifier=cart_identifier,
        status=cart_status
    )
    request.response.status = 200
    return {
        'status': 'success',
        '@type': ['result'],
        '@graph': [cart],
    }
Ejemplo n.º 3
0
def test_get_carts_by_user(cart, submitter, dummy_request, threadlocals):
    from encoded.cart_view import get_cart_objects_by_user
    userid = submitter['uuid']
    carts = get_cart_objects_by_user(dummy_request, userid)
    assert carts
    assert carts[0]['@id'] == cart['@id']
Ejemplo n.º 4
0
def test_get_carts_by_user(cart, submitter, dummy_request, threadlocals):
    from encoded.cart_view import get_cart_objects_by_user
    userid = submitter['uuid']
    carts = get_cart_objects_by_user(dummy_request, userid)
    assert carts
    assert carts[0]['@id'] == cart['@id']