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
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
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)
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)
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")
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")