Example #1
0
def get_card_route(request, card_id):
    """
  Get a specific card given an ID. Show all relevant data, but
  not used for the learning interface.
  """

    db_conn = request['db_conn']
    card = get_latest_accepted_card(db_conn, card_id)
    if not card:
        return abort(404, 'fPebfwqfRNmOiSWqWISeaA')
    unit = get_latest_accepted_unit(db_conn, card['unit_id'])
    if not unit:
        return abort(404, 'IKSqfvHvRK6hbSAIOkQuLg')
    # TODO-2 SPLITUP create new endpoints for these instead
    requires = list_required_cards(db_conn, card_id)
    required_by = list_required_by_cards(db_conn, card_id)
    params = get_card_parameters(db_conn, {'entity_id': card_id})
    return 200, {
        'card': deliver_card(card, access='view'),
        'card_parameters':
        (get_card_parameters_values(params) if params else None),
        'unit': deliver_unit(unit),
        'requires': [deliver_card(require) for require in requires],
        'required_by': [deliver_card(require) for require in required_by],
    }
def test_deliver_card(db_conn):
    create_card_test_data(db_conn)
    card = get_latest_accepted_card(db_conn, entity_id=card_a_uuid)
    # a bad kind
    card['kind'] = 'eraser'
    assert deliver_card(card, access=None)
    card['kind'] = 'video'
    # for real
    assert deliver_card(card, access=None)
    # access = learn, kind = choice, order = random
    # ... and max_options_to_show < total options
    card = get_latest_accepted_card(db_conn, entity_id=card_b_uuid)
    card['data']['order'] = 'random'
    card['data']['max_options_to_show'] = 1
    result = deliver_card(card, access='learn')
    assert result
    assert result['kind'] == 'choice'
    assert result['data']['options'][0].get('feedback') is None
    assert result['data']['options'][0].get('correct') is None
    assert len(result['data']['options']) == 1
Example #3
0
def get_card_versions_route(request, card_id):
    """
  Get versions card given an ID. Paginates.
  """

    db_conn = request['db_conn']
    versions = list_one_card_versions(db_conn, card_id)
    return 200, {
        'versions':
        [deliver_card(version, access='view') for version in versions]
    }
Example #4
0
def list_cards_route(request):
    """
  Return a collection of cards by `entity_id`.
  """

    db_conn = request['db_conn']
    entity_ids = request['params'].get('entity_ids')
    if not entity_ids:
        return abort(404, 'ESKDY5E7QA6tIpAv9i6WMw')
    entity_ids = entity_ids.split(',')
    cards = list_latest_accepted_cards(db_conn, entity_ids)
    if not cards:
        return abort(404, 's0uGKuNDSJK00pJs-x1AAQ')
    return 200, {'cards': [deliver_card(card, 'view') for card in cards]}
Example #5
0
def create_new_card_version_route(request):
    """
  Create a new card version for a brand new card.
  """

    current_user = get_current_user(request)
    if not current_user:
        return abort(401, '_YQNk1foSXyDwrnuxnThNw')
    db_conn = request['db_conn']
    data = deepcopy(request['params'])
    if 'entity_id' in data:
        return abort(403, 'sdXoDQ-tRweCUg35MUcUEA')
    data['user_id'] = current_user['id']
    card, errors = insert_card(db_conn, data)
    if errors:
        return 400, {
            'errors': errors,
            'ref': '8X-cJFZPQIyyAJJWmfiS7A',
        }
    return 200, {'version': deliver_card(card, 'view')}
Example #6
0
def learn_card_route(request, card_id):
    """
  Render the card's data, ready for learning.

  NEXT STATE
  GET Learn Card
    -> POST Respond Card
  """

    db_conn = request['db_conn']
    current_user = get_current_user(request)
    if not current_user:
        return abort(401, 'WBv3UeikTLu5AAwG9A0QZg')
    card = get_latest_accepted_card(db_conn, card_id)
    if not card:
        return abort(404, 'UgQHXzx4SSaHgJzHpRaL9g')
    # Make sure the current unit id matches the card
    context = get_learning_context(current_user)
    context_unit_id = context.get('unit', {}).get('entity_id')
    if context_unit_id != convert_uuid_to_slug(card['unit_id']):
        return 400, {
            'errors': [{
                'name': 'unit_id',
                'message': 'card not in current unit.',
                'ref': 'd6rhaoCuRdW0f9j8AlMXBQ',
            }],
        }
    next_ = {
        'method':
        'POST',
        'path':
        '/s/cards/{card_id}/responses'.format(
            card_id=convert_uuid_to_slug(card['entity_id']))
    }
    set_learning_context(current_user, card=card, next=next_)
    return 200, {
        'card': deliver_card(card, access='learn'),
        'subject': context.get('subject'),
        'unit': context.get('unit'),
        'next': next_,
    }
Example #7
0
def create_existing_card_version_route(request, card_id):
    """
  Create a new card version for an existing card.
  """

    current_user = get_current_user(request)
    if not current_user:
        return abort(401, 'a3vXGVFCRpWwf8WEkqtBgQ')
    db_conn = request['db_conn']
    next_data = deepcopy(request['params'])
    next_data['entity_id'] = card_id
    next_data['user_id'] = current_user['id']
    current_data = get_latest_accepted_card(db_conn, card_id)
    if not current_data:
        return abort(404, 'dQvoI_OjQY2U-GeyP8fsTA')
    card, errors = insert_card_version(db_conn, current_data, next_data)
    if errors:
        return 400, {
            'errors': errors,
            'ref': 'DyKLB28gT6CYGdyQ9smOKQ',
        }
    return 200, {'version': deliver_card(card, 'view')}