Example #1
0
def new_or_save_question(repos_sn: int, quest_sn: int, json_arg):
    """创建或保存试题"""

    now = datetime.utcnow();
    user_sn = webreq.principal_id

    orig_quest = None
    if not quest_sn:
        # 新建的
        quest = ts_quest(quest_sn=ts_quest_seqno(), repos_sn=repos_sn)
        quest.created_ts = now
    else:
        # 保存的
        quest = drecall(ts_quest(quest_sn=quest_sn))
        if not quest:
            busilogic.fail('找不到试题%d' % quest_sn)

        orig_quest = ts_quest(quest)

    purpose = json_arg['purpose']
    if purpose:
        quest.purpose_testing = purpose['testing']
        quest.purpose_exercising = purpose['exercising']

    quest.editing_text    = json_arg['editing_text']
    quest.testing_text    = json_arg['testing_text']

    quest.blank_signature = json.dumps(json_arg['blank_signature'])

    if 'question_style' in json_arg:
        question_style = json_arg['question_style']

        # 将题型转换成题型的标签号
        found_labels = find_labels(repos_sn, [question_style], 'S')
        if question_style in found_labels:
            quest.question_style = found_labels[question_style]

    quest.updated_ts = now

    dmerge(quest, orig_quest)

    if not quest_sn:
        # 如果是新建的还需要,一并处理已经打的分类和标签

        if 'saveforlater' in json_arg and json_arg['saveforlater']:
            put_saveforlater(quest.quest_sn, {'status': True})

        if 'tags' in json_arg:
            _put_labels(repos_sn, quest.quest_sn, json_arg['tags'], 'T')

        if 'categories' in json_arg:
            _put_labels(repos_sn, quest.quest_sn, json_arg['categories'], 'C')

    # After it is created, a value should be returned  with a new seqno
    return quest
Example #2
0
def get_quest(quest_sn: int):
    """ """
    quest = drecall(ts_quest(quest_sn=quest_sn))

    data = {}
    data['quest_sn']   = quest.quest_sn
    data['repos_sn']   = quest.repos_sn
    data['created_ts'] = quest.created_ts
    data['updated_ts'] = quest.updated_ts

    data['editing_text'] = quest.editing_text
    data['testing_text'] = quest.testing_text

    data['purpose'] = {
        'testing': bool(quest.purpose_testing),
        'exercising': bool(quest.purpose_exercising)
    }

    # question_style     = datt(int,  doc='题型')
    # #
    if quest.question_style is not None:
        label = drecall(ts_label(label_sn=quest.question_style))
        if not label:
            busilogic.fail('找不到题型标签:%d' % quest.question_style)

        data['question_style'] = label.label

    data['saveforlater'] = get_saveforlater(quest_sn)
    data['tags']         = get_labels(quest_sn, 'tags')
    data['categories']   = get_labels(quest_sn, 'categories')

    return data
Example #3
0
def purge_quest_(quest_sn: int):
    """  """

    quest = drecall(ts_quest(quest_sn = quest_sn))
    if not quest:
        busilogic.fail('所删除的试题(%s)不存在' % quest_sn)

    dbc << "DELETE FROM ts_quest WHERE quest_sn=%(quest_sn)s"
    dbc << (quest_sn,)
Example #4
0
def recycle_quest_(quest_sn: int):
    """  """

    trash = drecall(ts_quest_trashed(quest_sn = quest_sn))
    if not trash:
        busilogic.fail('所删除的试题(%s)不存在' % quest_sn)

    quest = ts_quest(trash)
    dmerge(quest)

    dbc << "DELETE FROM ts_quest_trashed WHERE quest_sn=%(quest_sn)s"
    dbc << (quest_sn,)
Example #5
0
def trash_quest(quest_sn: int):
    """  """

    quest = drecall(ts_quest(quest_sn = quest_sn))
    if not quest:
        busilogic.fail('所删除的试题(%s)不存在' % quest_sn)


    trash = ts_quest_trashed(quest)
    dmerge(trash)

    dbc << "DELETE FROM ts_quest WHERE quest_sn=%(quest_sn)s"
    dbc << dict(quest_sn=quest_sn)
Example #6
0
def put_labels(quest_sn: int, target, json_arg):
    """"""

    quest = drecall(ts_quest(quest_sn=quest_sn))
    if not quest:
        busilogic.fail('没找到试题: %d', quest_sn)

    if target == 'tags':
        label_type = 'T'

    elif target == 'categories':
        label_type = 'C'
    else:
        busilogic.fail('!');

    _put_labels(quest.repos_sn, quest_sn, json_arg, label_type)

    return _get_labels(quest.quest_sn, label_type)