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] }
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], }