Пример #1
0
def new_card(request):
    if request.content_type != "application/json":
        return utils.create_415_json_response()

    if len(request.body) == 0:
        message = "Missing request body"
        return utils.create_400_json_response(message)

    if not request.user.is_authenticated:
        return utils.create_401_json_response()

    response = None
    card_data = json.loads(request.body)

    if isinstance(card_data, dict):
        result = utils.import_card(card_data, request.user)

        if result[0] == 201:
            card_obj = utils.create_card_object(result[1])
            response = JsonResponse(card_obj, status=201)

        elif result[0] == 409:
            response = utils.create_409_json_response(result[1])

        else:
            response = utils.create_400_json_response(result[1])

    else:
        message = "Invalid json format. Root must be an object"
        response = utils.create_400_json_response(message)

    return response
Пример #2
0
def new_card_tag(request, card):
    if request.content_type != "application/json":
        return utils.create_415_json_response()

    if len(request.body) == 0:
        message = "Missing request body"
        return utils.create_400_json_response(message)

    response = None
    tag_data = json.loads(request.body)

    if isinstance(tag_data, dict):
        tag = utils.import_tag(tag_data, request.user)

        if tag:
            card.tags.add(tag)
            tag_obj = utils.create_tag_obj(tag, card=card)
            response = JsonResponse(tag_obj, status=200)

        else:
            message = "Could not import tag"
            response = utils.create_400_json_response(message)

    else:
        message = "Invalid json format. Root must be an object and contain a label field"
        response = utils.create_400_json_response(message)

    return response
Пример #3
0
def update_card(request, card):
    if request.content_type != "application/json-patch+json":
        return utils.create_415_json_response()

    patch_data = json.loads(request.body)

    if not isinstance(patch_data, list):
        message = "Invalid patch format. Root must be a list"
        return utils.create_400_json_response(message)

    for op in patch_data:
        if (('op' in op) and ('path' in op) and ('value' in op)
                and (op['op'] == 'replace')):

            if op['path'] == '/title':
                card.title = op['value']

            elif op['path'] == '/query':
                card.query = op['value']

            elif op['path'] == '/answer':
                card.answer = op['value']

            elif op['path'] == '/active':
                card.active = op['value']

    card.last_modified_date = timezone.now()
    card.sha_512 = utils.compute_card_sha_512(card)
    card.save()

    card_obj = utils.create_card_object(card)
    return JsonResponse(card_obj, status=200)
Пример #4
0
def advance_review_date(request):
    if request.content_type != "application/json":
        return utils.create_415_json_response()

    if not request.user.is_authenticated:
        return utils.create_401_json_response()

    ard_data = json.loads(request.body)

    if not 'num_days' in ard_data:
        message = "num_days not specified"
        return utils.create_400_json_response(message)

    num_days = int(ard_data['num_days'])

    if num_days < 0:
        message = "num_days must be a positive integer"
        return utils.create_400_json_response(message)

    filter_params = {}
    if 'filter' in ard_data and isinstance(ard_data['filter'], dict):
        filter_params = utils.parse_card_filter(ard_data['filter'])

    # Get all the cards corresponding to the filters
    # Not just the cards for the current page
    filter_params['page'] = 1
    filter_params['cards_per_page'] = 0

    cards = utils.get_filtered_cards(filter_params, request.user)

    with transaction.atomic():
        for card in cards:
            card.next_retrieval_date = card.next_retrieval_date + timedelta(
                days=int(num_days))
            card.save()

    return JsonResponse({}, status=200)
Пример #5
0
def process_request(request):
    if request.method == 'POST':
        if not request.user.is_authenticated:
            return utils.create_401_json_response()

        if (len(request.FILES) > 0) and ('archive_file' in request.FILES):
            num_cards_imported = utils.import_card_archive(request.FILES['archive_file'],
                                                           request.user)
            return JsonResponse({'num_cards_imported': num_cards_imported}, status=200)

        else:
            return utils.create_400_json_response('No archive file found')

    else:
        return utils.create_405_json_response(allow="POST")
Пример #6
0
def process_request(request, card_uuid, retrieval_attempt_id):
    if not request.user.is_authenticated:
        return utils.create_401_json_response()

    card = Card.from_uuid(card_uuid, request.user)
    if not card:
        return utils.create_404_json_response("Card")

    retrieval_attempt = RetrievalAttempt.from_id(retrieval_attempt_id)
    if not retrieval_attempt:
        return utils.create_404_json_response("RetrievalAttempt")

    if retrieval_attempt.card != card:
        message = "RetrievalAttempt exists but does not belong to specified card"
        return utils.create_400_json_response(message)

    if request.method == 'GET':
        return get_card_retrieval_attempt(request, retrieval_attempt)

    else:
        return utils.create_405_json_response(allow="GET")