def update(db_conn, user, card, response): """ Update the card's parameters (and its parents') when given a response. """ # TODO-3 split up into smaller methods if not card.has_assessment(): return { 'response': Response({}), 'feedback': '', } errors = card.validate_response(response) if errors: return {'errors': errors} score, feedback = card.score_response(response) response = Response({ 'user_id': user['id'], 'card_id': card['entity_id'], 'unit_id': card['unit_id'], 'response': response, 'score': score, }) card_parameters = CardParameters.get(db_conn, entity_id=card['entity_id']) if not card_parameters: card_parameters = CardParameters({ 'entity_id': card['entity_id'] }) previous_response = Response.get_latest(db_conn, user_id=user['id'], unit_id=card['unit_id']) now = time() time_delta = now - (int(previous_response['created'].strftime("%s")) if previous_response else now) learned = (previous_response['learned'] if previous_response else init_learned) guess_distribution = card_parameters.get_distribution('guess') slip_distribution = card_parameters.get_distribution('slip') updates = formula_update(score, time_delta, learned, guess_distribution, slip_distribution) response['learned'] = updates['learned'] response, errors = response.save(db_conn) if errors: return {'errors': errors, 'feedback': feedback} card_parameters.set_distribution('guess', updates['guess_distribution']) card_parameters.set_distribution('slip', updates['slip_distribution']) card_parameters, errors = card_parameters.save(db_conn) if errors: return {'errors': errors, 'feedback': feedback} return {'response': response, 'feedback': feedback}
def update(user, card, response): """ Update the card's parameters (and its parents') when given a response. """ # TODO-3 split up into smaller methods if not card.has_assessment(): return { 'response': Response({}), 'feedback': '', } errors = card.validate_response(response) if errors: return {'errors': errors} score, feedback = card.score_response(response) response = Response({ 'user_id': user['id'], 'card_id': card['entity_id'], 'unit_id': card['unit_id'], 'response': response, 'score': score, }) card_parameters = CardParameters.get(entity_id=card['entity_id']) previous_response = Response.get_latest(user_id=user['id'], unit_id=card['unit_id']) now = time() time_delta = now - (int(previous_response['created'].strftime("%s")) if previous_response else now) learned = (previous_response['learned'] if previous_response else init_learned) guess_distribution = card_parameters.get_distribution('guess') slip_distribution = card_parameters.get_distribution('slip') updates = formula_update(score, time_delta, learned, guess_distribution, slip_distribution) response['learned'] = updates['learned'] response, errors = response.save() if errors: return {'errors': errors, 'feedback': feedback} card_parameters.set_distribution('guess', updates['guess_distribution']) card_parameters.set_distribution('slip', updates['slip_distribution']) card_parameters, errors = card_parameters.save() if errors: return {'errors': errors, 'feedback': feedback} return {'response': response, 'feedback': feedback}
def test_created(db_conn, responses_table): """ Expect to have a created date. """ response = Response({ 'user_id': 'A', 'card_id': 'BC', 'unit_id': 'RM', 'response': 42, 'score': 0.9, 'learned': 0.9, }) del response['created'] # should be set to default anywho response, errors = response.save(db_conn) assert len(errors) == 0
def test_created(db_conn, responses_table): """ Expect to have a created date. """ response = Response({ 'user_id': 'A', 'card_id': 'BC', 'unit_id': 'RM', 'response': 42, 'score': 0.9, 'learned': 0.9, }) del response['created'] # should be set to default anywho response, errors = response.save() assert len(errors) == 0