Пример #1
0
def course_add_window(request):
    try:

        def course_update_count(course, course_count):
            course_count[
                course] = 1 if course.course and course.course.visible else 0
            for child in course.children:
                if not child.visible:
                    continue
                course_count[course] += course_update_count(
                    child, course_count)
            return course_count[course]

        frame = int(
            request.params['frame']) if 'frame' in request.params else 0

        course_raw = db_session.query(CourseRaw).filter(
            CourseRaw.id == request.matchdict['course_id']).one()

        course = db_session.query(Course).filter(Course.id == 1).one()
        course_count = {}
        course_update_count(course, course_count)

        return {
            'course': course,
            'course_raw': course_raw,
            'course_count': course_count,
            'frame': frame,
        }
    except Exception as e:
        return Response("Error: " + e.__str__())
def course_add_window(request):
    try:
        def course_update_count(course, course_count):
            course_count[course] = 1 if course.course and course.course.visible else 0
            for child in course.children:
                if not child.visible:
                    continue
                course_count[course] += course_update_count(child, course_count)
            return course_count[course]

        frame = int(request.params['frame']) if 'frame' in request.params else 0

        course_raw = db_session.query(CourseRaw).filter(
            CourseRaw.id == request.matchdict['course_id']
        ).one()
                
        course = db_session.query(Course).filter(Course.id == 1).one()
        course_count = {}
        course_update_count(course, course_count)

        return {
            'course': course,
            'course_raw': course_raw,
            'course_count': course_count,
            'frame': frame,
        }
    except Exception as e:
        return Response("Error: " + e.__str__())
def course_my_categories(request):
    try:
        frame = int(request.params.get('frame', 1))
        course_root = db_session.query(Course).filter(Course.id == 1).one() 
        course_list = []
        make_course_list(course_root, course_list, 0)
        my_nodes = db_session.query(Course).filter(
            Course.id != 1,
            Course.course_id == 0,
            Course.author == RequestGetUserId(request),
        ).order_by(Course.verified).all()
        my_verified_nodes = [node for node in my_nodes if node.verified]
        my_unverified_nodes = [node for node in my_nodes if not node.verified]
        root_nodes = course_tree_get_root_nodes(RequestGetUserId(request))
        '''
        my_nodes = [node for node in my_nodes if node in root_nodes] + \
                    [node for node in my_nodes if node not in root_nodes]
        '''
        return {
            'frame': frame,
            'course_list': course_list,
            'my_nodes': my_nodes,
            'my_unverified_nodes': my_unverified_nodes,
            'root_nodes': root_nodes,
            'default_storage': json.dumps({}),
            'GetNodeUsers': GetNodeUsers,
        }
    except Exception as e:
        return Response("Error: " + e.__str__())
Пример #4
0
def course_my_categories(request):
    try:
        frame = int(request.params.get('frame', 1))
        course_root = db_session.query(Course).filter(Course.id == 1).one()
        course_list = []
        make_course_list(course_root, course_list, 0)
        my_nodes = db_session.query(Course).filter(
            Course.id != 1,
            Course.course_id == 0,
            Course.author == RequestGetUserId(request),
        ).order_by(Course.verified).all()
        my_verified_nodes = [node for node in my_nodes if node.verified]
        my_unverified_nodes = [node for node in my_nodes if not node.verified]
        root_nodes = course_tree_get_root_nodes(RequestGetUserId(request))
        '''
        my_nodes = [node for node in my_nodes if node in root_nodes] + \
                    [node for node in my_nodes if node not in root_nodes]
        '''
        return {
            'frame': frame,
            'course_list': course_list,
            'my_nodes': my_nodes,
            'my_unverified_nodes': my_unverified_nodes,
            'root_nodes': root_nodes,
            'default_storage': json.dumps({}),
            'GetNodeUsers': GetNodeUsers,
        }
    except Exception as e:
        return Response("Error: " + e.__str__())
Пример #5
0
def course_tree_get_root_nodes(user_id):
    user_id = int(user_id)
    caps = db_session.query(CourseTreeCap).filter(
        CourseTreeCap.user_id == user_id, ).all()
    root_nodes = db_session.query(Course).filter(
        Course.id.in_([cap.node_id for cap in caps]), )
    return root_nodes
Пример #6
0
def course_dump(request):
    try:
        def course_update_count(course, course_count, show_hidden, childrenMap):
            course_count[course] = 1 if course.course and (show_hidden or course.course.visible) else 0
            children = get_children_by_map(childrenMap, course.id)
            for child in children:
                if not show_hidden and not child.visible:
                    continue
                course_count[course] += course_update_count(child, course_count, show_hidden, childrenMap)
            return course_count[course]

        dump = request.params['dump'] if 'dump' in request.params else 0
        show_hidden = request.params['show_hidden'] if 'show_hidden' in request.params else 0
        course_root = db_session.query(Course).filter(Course.id == request.matchdict['course_id']).one()
        displayed_courses = db_session.query(Course).filter(Course.displayed == 1).all()
        course_count = {}
        courses = db_session.query(Course).order_by(
            Course.parent_id,
            Course.order,
        ).all()
        childrenMap = {}
        for course in courses:
            if not course.parent_id in childrenMap:
                childrenMap[course.parent_id] = []
            childrenMap[course.parent_id].append(course)
        course_update_count(course_root, course_count, show_hidden, childrenMap)
        default_storage = json.dumps({
            "#region{0}".format(course_root.id): int(course_root.displayed) \
                for course_root in displayed_courses 
        })
        
        if dump:
            filename = "course_dump" + ("_show_hidden" if show_hidden else "") + ".php"
            filepath = request.registry.settings['source_tree.course.dump_path'] + filename
            dump_file = open(filepath, "w", encoding="utf-8")
            dump_file.write(Template(filename=request.registry.settings["source_tree.project_path"] \
                    + "/source_tree/templates/course_dump.mak", input_encoding="utf-8").render_unicode(
                course_root=course_root,
                show_hidden=show_hidden,
                dump=dump,
                course_count=course_count,
                default_storage=default_storage,
                childrenMap=childrenMap,
                get_children_by_map=get_children_by_map,
            ))
            dump_file.close()

            return Response("ok. dumped to {0}".format(filepath))
        else:
            return {
                'course_root': course_root,
                'show_hidden': show_hidden,
                'dump': dump,
                'course_count': course_count,
                'default_storage': default_storage,
                'childrenMap': childrenMap,
                'get_children_by_map': get_children_by_map,
            }
    except Exception as e:
        return Response("Error: " + e.__str__())
def course_tree_get_root_nodes(user_id):
    user_id = int(user_id)
    caps = db_session.query(CourseTreeCap).filter(
        CourseTreeCap.user_id == user_id,
    ).all()
    root_nodes = db_session.query(Course).filter(
        Course.id.in_([cap.node_id for cap in caps]),
    )
    return root_nodes
Пример #8
0
def course_add(request):
    try:
        add_dict = dict(request.params)
        names = request.params['name'].split('\n')
        order = request.params['order']
        parent_id = int(request.params['parent_id'])
        user_id = int(RequestGetUserId(request))
        if order == 'end':
            parent = db_session.query(Course).filter(
                Course.id == request.params['parent_id']).one()
            max_order = max(course.order for course in parent.children) \
                if list(parent.children) else 0
            order = "{0}:{1}".format(max_order, max_order + 10**7)
        order, order_right = map(int, order.split(':'))
        order_shift = (order_right - order) / (len(names) + 1)
        ids = []
        for name in names:
            vals = name.split("+++")
            title, course_id = name, 0
            if len(vals) == 2:
                title, course_id = vals
            similar = db_session.query(Course).filter(
                Course.parent_id == request.params['parent_id'],
                Course.course_id == course_id,
            ).all()
            verified = check_capability_ex_course(request, 'admin') \
                    or bool(course_tree_check_owner(parent_id, user_id))
            if course_id:
                if similar:
                    continue
                if course_check_owner(int(course_id),
                                      int(RequestGetUserId(request))):
                    check_capability_course(request, 'teacher')
                else:
                    check_capability_course(request, 'admin')
            else:
                check_capability_course(request, 'teacher')

            order += order_shift
            add_dict['name'] = title
            add_dict['order'] = order
            add_dict['verified'] = verified
            add_dict['course_id'] = course_id
            add_dict['author'] = max(0, user_id)
            node_id = course_add_by_dict(add_dict)
            ids.append(node_id)
        db_session.commit()
        course_make_dump(request)
        return {
            "result": "ok",
            "content": {
                "new_id": ids,
            }
        }
    except Exception as e:
        return {"result": "error", "content": e.__str__()}
Пример #9
0
def course_tree_check_owner(node_id, user_id):
    node_id = int(node_id)
    user_id = int(user_id)
    node = db_session.query(Course).filter(Course.id == node_id).one()
    cap = db_session.query(CourseTreeCap).filter(
        CourseTreeCap.node_id.in_(node.parents()),
        CourseTreeCap.user_id == user_id,
    ).all()
    acc_node = db_session.query(Course).filter(Course.id == cap[0].node_id).one() \
                if cap else None
    return acc_node
def course_tree_check_owner(node_id, user_id):
    node_id = int(node_id)
    user_id = int(user_id)
    node = db_session.query(Course).filter(Course.id == node_id).one()
    cap = db_session.query(CourseTreeCap).filter(
        CourseTreeCap.node_id.in_(node.parents()),
        CourseTreeCap.user_id == user_id,
    ).all()
    acc_node = db_session.query(Course).filter(Course.id == cap[0].node_id).one() \
                if cap else None
    return acc_node
Пример #11
0
def GetNodeUsers(nodeId):
    node = db_session.query(Course).filter(Course.id == nodeId).one()
    parents = node.parents()
    users = []
    for parentNodeId in parents:
        caps = db_session.query(CourseTreeCap).filter(
            CourseTreeCap.node_id == parentNodeId, ).all()
        currentUsers = db_session.query(User).filter(
            User.id.in_([cap.user_id for cap in caps]), ).all()
        users += currentUsers
    users = list(set(users))
    return users
def course_add(request):
    try:
        add_dict = dict(request.params)
        names = request.params['name'].split('\n')
        order = request.params['order']
        parent_id = int(request.params['parent_id'])
        user_id = int(RequestGetUserId(request))
        if order == 'end':
            parent = db_session.query(Course).filter(
                Course.id == request.params['parent_id']
            ).one()
            max_order = max(course.order for course in parent.children) \
                if list(parent.children) else 0
            order = "{0}:{1}".format(max_order, max_order + 10**7)
        order, order_right = map(int, order.split(':'))
        order_shift = (order_right - order) / (len(names) + 1)
        ids = []
        for name in names:
            vals = name.split("+++")
            title, course_id = name, 0
            if len(vals) == 2:
                title, course_id = vals
            similar = db_session.query(Course).filter(
                Course.parent_id == request.params['parent_id'],
                Course.course_id == course_id,
            ).all()
            verified = check_capability_ex_course(request, 'admin') \
                    or bool(course_tree_check_owner(parent_id, user_id))
            if course_id:
                if similar:
                    continue
                if course_check_owner(int(course_id), int(RequestGetUserId(request))):
                    check_capability_course(request, 'teacher')
                else:
                    check_capability_course(request, 'admin')
            else:
                check_capability_course(request, 'teacher')
            
            order += order_shift
            add_dict['name'] = title
            add_dict['order'] = order
            add_dict['verified'] = verified
            add_dict['course_id'] = course_id
            add_dict['author'] = max(0, user_id)
            node_id = course_add_by_dict(add_dict)
            ids.append(node_id)
        db_session.commit()
        course_make_dump(request)
        return {"result": "ok", "content": {
            "new_id": ids,
        }}
    except Exception as e:
        return {"result": "error", "content": e.__str__()}
Пример #13
0
def course_get_not_in_list(request):
    try:
        course_nodes = db_session.query(Course).all()
        used_courses = [course_node.course_id for course_node in course_nodes \
            if course_node.course_id]
        courses = db_session.query(CourseRaw).filter(
            CourseRaw.category.in_([24, 34]),
            not_(CourseRaw.id.in_(used_courses)),
        ).all()
        return {
            'courses': courses,
        }
    except Exception as e:
        return Response("Error: " + str(e))
def GetNodeUsers(nodeId):
    node = db_session.query(Course).filter(Course.id == nodeId).one()
    parents = node.parents()
    users = []
    for parentNodeId in parents:
        caps = db_session.query(CourseTreeCap).filter(
            CourseTreeCap.node_id == parentNodeId,
        ).all()
        currentUsers = db_session.query(User).filter(
            User.id.in_([cap.user_id for cap in caps]),
        ).all()
        users += currentUsers
    users = list(set(users))
    return users
def course_get_by_user(user_id):
    user_id = int(user_id)
    if user_id < 0:
        return []
    contextlevel = 50
    role = db_session.query(Role).filter(Role.shortname == 'editingteacher').one() 
    role_assignments = db_session.query(RoleAssignment).filter(
        RoleAssignment.userid == user_id, 
        RoleAssignment.roleid == role.id,
    ).all()
    courses_id = [item.context.instanceid for item in role_assignments \
        if item.context.contextlevel == contextlevel]
    courses = db_session.query(CourseRaw).filter(CourseRaw.id.in_(courses_id)).all()
    return courses
def course_check_owner(course_id, user_id):
    if user_id < 0:
        return False
    contextlevel = 50
    role = db_session.query(Role).filter(Role.shortname == 'editingteacher').one() 
    role_assignments = db_session.query(RoleAssignment).filter(
        RoleAssignment.userid == user_id, 
        RoleAssignment.roleid == role.id,
    ).all()
    for role_assignment in role_assignments:
        if role_assignment.context.contextlevel == contextlevel\
                and role_assignment.context.instanceid == course_id:
            return True
    return False
def course_get_not_in_list(request):
    try:
        course_nodes = db_session.query(Course).all() 
        used_courses = [course_node.course_id for course_node in course_nodes \
            if course_node.course_id]
        courses = db_session.query(CourseRaw).filter(
            CourseRaw.category.in_([24, 34]),
            not_(CourseRaw.id.in_(used_courses)),
        ).all()
        return {
            'courses': courses,
        }
    except Exception as e:
        return Response("Error: " + str(e))
Пример #18
0
def course_check_owner(course_id, user_id):
    if user_id < 0:
        return False
    contextlevel = 50
    role = db_session.query(Role).filter(
        Role.shortname == 'editingteacher').one()
    role_assignments = db_session.query(RoleAssignment).filter(
        RoleAssignment.userid == user_id,
        RoleAssignment.roleid == role.id,
    ).all()
    for role_assignment in role_assignments:
        if role_assignment.context.contextlevel == contextlevel\
                and role_assignment.context.instanceid == course_id:
            return True
    return False
def course_get_all_to_verify(request):
    categories = int(request.params.get('categories', 0))
    nodes_filter = db_session.query(Course).filter(Course.verified == False)
    if categories:
        nodes_filter = nodes_filter.filter(Course.course_id == 0)
    else:
        nodes_filter = nodes_filter.filter(Course.course_id > 0)
    nodes = nodes_filter.order_by(Course.time).all()    
    result = []
    for node in nodes:
        res_item = {
            'node': node,
            'parent': node.parent,
        }
        if node.course:
            res_item.update({
                'course': {
                    'id': node.course.id,
                    'name': node.course.fullname
                },
            })
        if node.user:
            res_item.update({
                'user': {
                    'id': node.user.id,
                    'firstname': node.user.firstname,
                    'lastname': node.user.lastname
                }
            })

        result.append(res_item)
    return result
Пример #20
0
def course_get_by_user(user_id):
    user_id = int(user_id)
    if user_id < 0:
        return []
    contextlevel = 50
    role = db_session.query(Role).filter(
        Role.shortname == 'editingteacher').one()
    role_assignments = db_session.query(RoleAssignment).filter(
        RoleAssignment.userid == user_id,
        RoleAssignment.roleid == role.id,
    ).all()
    courses_id = [item.context.instanceid for item in role_assignments \
        if item.context.contextlevel == contextlevel]
    courses = db_session.query(CourseRaw).filter(
        CourseRaw.id.in_(courses_id)).all()
    return courses
Пример #21
0
def contest_add_source(request):
    try:
        check_capability(request, 'admin')
        statement_id = request.matchdict['contest_id']
        source_id = request.matchdict['source_id']
        statement_problems = db_session.query(StatementProblem).filter(
            StatementProblem.statement_id == statement_id).order_by(
                StatementProblem.rank).all()
        for i in range(len(statement_problems)):
            letter = ''
            cur = i + 1
            while cur:
                cur -= 1
                letter = chr(ord('A') + cur % 26) + letter
                cur //= 26

            source_add_by_dict({
                'name': 'Задача ' + letter,
                'parent_id': source_id,
                'order': (i + 1) * 10**7,
                'author': RequestGetUserId(request),
                'verified': True,
                'problem_id': statement_problems[i].problem_id
            })
        db_session.commit()
        return {"result": "ok"}
    except Exception as e:
        return {"result": "error", "content": e.__str__()}
Пример #22
0
def problem_add_source(request):
    try:
        check_capability(request, 'user')
        problem_id = request.matchdict['problem_id']
        subject_id = request.matchdict['subject_id']
        problem = problem_get_by_id(problem_id)
        subject = source_get_by_id(subject_id)
        if subject.get_type() != '_subject':
            check_capability(request, 'admin')
        cur_subject = db_session.query(Source).filter(
            Source.parent_id == subject_id,
            Source.problem_id == problem_id).all()
        if cur_subject:
            raise Exception('Already exists')
        verified = check_capability_ex(request, 'edit')
        add_dict = {
            'name': problem.name,
            'parent_id': subject_id,
            'order': 0,
            'problem_id': problem_id,
            'author': RequestGetUserId(request),
            'verified': verified
        }
        source_add_by_dict(add_dict)
        db_session.commit()
        return {'result': 'ok', 'verified': verified}
    except Exception as e:
        return {'result': 'error', 'content': e.__str__()}
def problem_add_source(request):
    try:
        check_capability(request, 'user')
        problem_id = request.matchdict['problem_id']
        subject_id = request.matchdict['subject_id']
        problem = problem_get_by_id(problem_id)
        subject = source_get_by_id(subject_id)
        if subject.get_type() != '_subject':
            check_capability(request, 'admin')
        cur_subject = db_session.query(Source).filter(Source.parent_id == subject_id, Source.problem_id == problem_id).all()
        if cur_subject:
            raise Exception('Already exists')
        verified = check_capability_ex(request, 'edit')
        add_dict = {
            'name': problem.name,
            'parent_id': subject_id,
            'order': 0,
            'problem_id': problem_id,
            'author': RequestGetUserId(request),
            'verified': verified
        }
        source_add_by_dict(add_dict)
        db_session.commit()
        return {'result': 'ok', 'verified': verified}
    except Exception as e:
        return {'result': 'error', 'content': e.__str__()}
def source_get_all(request):
    source_type = '_' + request.matchdict['source_type']
    root = db_session.query(Source).filter(
        Source.parent_id == 1, 
        Source.name == source_type
    ).one()
    return source_get_all_by_node(root)
def contest_add_source(request):
    try:
        check_capability(request, 'admin')
        statement_id = request.matchdict['contest_id']
        source_id = request.matchdict['source_id']
        statement_problems = db_session.query(StatementProblem).filter(
                StatementProblem.statement_id == statement_id).order_by(StatementProblem.rank).all()
        for i in range(len(statement_problems)):
            letter = ''
            cur = i + 1
            while cur:
                cur -= 1
                letter = chr(ord('A') + cur % 26) + letter
                cur //= 26

            source_add_by_dict({
                'name': 'Задача ' + letter,
                'parent_id': source_id,
                'order': (i + 1) * 10**7,
                'author': RequestGetUserId(request),
                'verified': True,
                'problem_id': statement_problems[i].problem_id
            })
        db_session.commit()
        return {"result": "ok"}
    except Exception as e:
        return {"result": "error", "content": e.__str__()}
Пример #26
0
def course_get_by_author(request):
    try:
        courses = course_get_by_user(request.matchdict['author_id'])
        result = []
        for course in courses:
            nodes = db_session.query(Course).filter(
                Course.course_id == course.id).all()
            paths = [node.parent.full_name() + ("" if node.verified \
                else " (не разобрано)") for node in nodes]
            result.append({
                'id': course.id,
                'name': course.fullname,
                'paths': paths,
                'visible': course.visible,
                'has_password': course.password != '',
            })
        return {
            'result': 'ok',
            'courses': result,
        }
    except Exception as e:
        return {
            'result': 'error',
            'content': e.__str__(),
        }
Пример #27
0
def course_get_all_to_verify(request):
    categories = int(request.params.get('categories', 0))
    nodes_filter = db_session.query(Course).filter(Course.verified == False)
    if categories:
        nodes_filter = nodes_filter.filter(Course.course_id == 0)
    else:
        nodes_filter = nodes_filter.filter(Course.course_id > 0)
    nodes = nodes_filter.order_by(Course.time).all()
    result = []
    for node in nodes:
        res_item = {
            'node': node,
            'parent': node.parent,
        }
        if node.course:
            res_item.update({
                'course': {
                    'id': node.course.id,
                    'name': node.course.fullname
                },
            })
        if node.user:
            res_item.update({
                'user': {
                    'id': node.user.id,
                    'firstname': node.user.firstname,
                    'lastname': node.user.lastname
                }
            })

        result.append(res_item)
    return result
def course_get_users(course_id):
    course_id = int(course_id)
    contextlevel = 50
    role = db_session.query(Role).filter(Role.shortname == 'editingteacher').one() 
    contexts = db_session.query(Context).filter(
        Context.contextlevel == contextlevel,
        Context.instanceid == course_id,
    ).all()
    contexts_id = [item.id for item in contexts]
    role_assignments = db_session.query(RoleAssignment).filter(
        RoleAssignment.roleid == role.id,
        RoleAssignment.contextid.in_(contexts_id),
    ).all()
    users_id = [item.userid for item in role_assignments]
    users = db_session.query(User).filter(User.id.in_(users_id)).all()
    return users
Пример #29
0
def course_get_users(course_id):
    course_id = int(course_id)
    contextlevel = 50
    role = db_session.query(Role).filter(
        Role.shortname == 'editingteacher').one()
    contexts = db_session.query(Context).filter(
        Context.contextlevel == contextlevel,
        Context.instanceid == course_id,
    ).all()
    contexts_id = [item.id for item in contexts]
    role_assignments = db_session.query(RoleAssignment).filter(
        RoleAssignment.roleid == role.id,
        RoleAssignment.contextid.in_(contexts_id),
    ).all()
    users_id = [item.userid for item in role_assignments]
    users = db_session.query(User).filter(User.id.in_(users_id)).all()
    return users
Пример #30
0
def course_tree_get_user_nodes(user_id):
    user_id = int(user_id)
    caps = db_session.query(CourseTreeCap).filter(
        CourseTreeCap.user_id == user_id, ).all()
    nodes = set()
    for cap in caps:
        node = db_session.query(Course).filter(
            Course.id == cap.node_id, ).one()
        nodes |= set(item for item in node.get_subtree_nodes()
                     if not item.course_id)
    authored_nodes = db_session.query(Course).filter(
        Course.course_id == 0,
        Course.author == user_id,
    ).all()
    nodes |= set(authored_nodes)
    ordered_nodes = sorted(list(nodes), key=lambda course: course.id)
    return ordered_nodes
def course_tree_get_user_nodes(user_id):
    user_id = int(user_id)
    caps = db_session.query(CourseTreeCap).filter(
        CourseTreeCap.user_id == user_id,
    ).all()
    nodes = set()
    for cap in caps:
        node = db_session.query(Course).filter(
            Course.id == cap.node_id,
        ).one()
        nodes |= set(item for item in node.get_subtree_nodes() if not item.course_id)
    authored_nodes = db_session.query(Course).filter(
        Course.course_id == 0,
        Course.author == user_id,
    ).all()
    nodes |= set(authored_nodes)
    ordered_nodes = sorted(list(nodes), key=lambda course: course.id)
    return ordered_nodes
def problem_get_source_to_verify(request):
    problem_id = request.matchdict['problem_id']
    source_type = '_' + request.matchdict['source_type']
    subjects_problem = db_session.query(Source).filter(Source.problem_id == problem_id).all()
    subjects_problem = [{
        'parent': source.parent,
        'source': source
    } for source in subjects_problem if source.get_type() == source_type and not source.verified]
    return subjects_problem
def course_get_for_select(request):
    try:
        course_root = db_session.query(Course).filter(Course.id == 1).one() 
        course_list = []
        make_course_list(course_root, course_list, 0)
        return {
            'course_list': course_list,
        }
    except Exception as e:
        return Response("Error: " + e.__str__())
def course_get_nodes(request):
    try:
        nodes = db_session.query(Course).\
            filter(Course.course_id == request.matchdict['course_id']).all()
        return {
            'result': 'ok',
            'nodes': nodes,
        }
    except Exception as e:
        return {'result': 'error', 'content': e.__str__()}
Пример #35
0
def problem_get_source_html(request):
    problem_id = request.matchdict['problem_id']
    source_type = request.matchdict['source_type']
    sources = db_session.query(Source).filter(Source.problem_id == problem_id,
                                              Source.verified).all()
    source_list = []
    for source in sources:
        if source.get_type() == '_' + source_type:
            source_list.append(source.get_path())
    return {'source_list': source_list, 'source_type': source_type}
Пример #36
0
def course_adm(request):
    try:   
        course_id = request.params['course_id'] if 'course_id' in request.params else None
        course = db_session.query(CourseRaw).filter(CourseRaw.id == course_id).one() \
            if course_id else None
        return {
            'course': course,
        }
    except Exception as e:
        return Response("Error: " + e.__str__())
Пример #37
0
def course_get_for_select(request):
    try:
        course_root = db_session.query(Course).filter(Course.id == 1).one()
        course_list = []
        make_course_list(course_root, course_list, 0)
        return {
            'course_list': course_list,
        }
    except Exception as e:
        return Response("Error: " + e.__str__())
Пример #38
0
def course_get_nodes(request):
    try:
        nodes = db_session.query(Course).\
            filter(Course.course_id == request.matchdict['course_id']).all()
        return {
            'result': 'ok',
            'nodes': nodes,
        }
    except Exception as e:
        return {'result': 'error', 'content': e.__str__()}
Пример #39
0
def source_get_all_by_node(source, sources=None):
    if not sources:
        sources = []
    children = db_session.query(Source).filter(
        Source.parent_id == source.id,
        Source.problem_id == 0).order_by(Source.order, Source.name).all()
    for child in children:
        sources.append(child)
        source_get_all_by_node(child, sources)
    return sources
def problem_get_source(request):
    problem_id = request.matchdict['problem_id']
    source_type = '_' + request.matchdict['source_type']
    subjects_problem = db_session.query(Source).filter(Source.problem_id == problem_id).all()
    subjects_problem = [{
        'parent': source.parent,
        'source': source,
        'path': ', '.join(source.get_source_path()[2:])
    } for source in subjects_problem if source.get_type() == source_type and source.verified]
    return subjects_problem
Пример #41
0
def course_all(request):
    try:
        check_capability_course(request, 'admin')
        courses_res = []
        courses = db_session.query(CourseRaw).\
            filter(CourseRaw.category.in_([24, 34])).all()
        for course in courses:
            nodes = db_session.query(Course).filter(Course.course_id == course.id).all()
            paths = [node.parent.full_name() + ("" if node.verified else " (не разобрано)") \
                for node in nodes]
            courses_res.append({
                'course': course,
                'paths': paths,
                'authors': course_get_users(course.id),
            })  
        return {
            'courses': courses_res,
        }
    except Exception as e:
        return Response("Error: " + e.__str__())
def source_get_all_by_node(source, sources = None):
    if not sources:
        sources = []
    children = db_session.query(Source).filter(
        Source.parent_id == source.id,
        Source.problem_id == 0
    ).order_by(Source.order, Source.name).all()
    for child in children:
        sources.append(child)
        source_get_all_by_node(child, sources)
    return sources
def problem_get_source_html(request):
    problem_id = request.matchdict['problem_id']
    source_type = request.matchdict['source_type']
    sources = db_session.query(Source).filter(Source.problem_id == problem_id, Source.verified).all()
    source_list = []
    for source in sources:
        if source.get_type() == '_' + source_type:
            source_list.append(source.get_path())
    return {
        'source_list': source_list,
        'source_type': source_type
    }
Пример #44
0
def problem_get_source(request):
    problem_id = request.matchdict['problem_id']
    source_type = '_' + request.matchdict['source_type']
    subjects_problem = db_session.query(Source).filter(
        Source.problem_id == problem_id).all()
    subjects_problem = [{
        'parent': source.parent,
        'source': source,
        'path': ', '.join(source.get_source_path()[2:])
    } for source in subjects_problem
                        if source.get_type() == source_type and source.verified
                        ]
    return subjects_problem
Пример #45
0
def problem_get_source_to_verify(request):
    problem_id = request.matchdict['problem_id']
    source_type = '_' + request.matchdict['source_type']
    subjects_problem = db_session.query(Source).filter(
        Source.problem_id == problem_id).all()
    subjects_problem = [
        {
            'parent': source.parent,
            'source': source
        } for source in subjects_problem
        if source.get_type() == source_type and not source.verified
    ]
    return subjects_problem
def source_dir_contest_get_problems(request):
    try:
        basket = request.session['basket']
        problems = [db_session.query(Problem).filter(Problem.id == id).one() 
            for id in basket.problems]
        return {
            "result": "ok", 
            "problems": [{
                "id": problem.id,
                "name": problem.name
            } for problem in problems]    
        }
    except Exception as e:
        return {"result": "error", "content": e.__str__()}
def source_get_all_to_verify(request):
    source_type = '_' + request.matchdict['source_type']
    sources = db_session.query(Source).filter(Source.verified == False).order_by(Source.time).all()    
    sources = [{
        'source': source,
        'parent': source.parent,
        'problem': {
            'id': source.problem.id,
            'name': source.problem.name
        },
        'user': {
            'id': source.user.id,
            'firstname': source.user.firstname,
            'lastname': source.user.lastname
        }
    } for source in sources if source.get_type() == source_type]
    return sources
Пример #48
0
def source_dir_contest_get_problems(request):
    try:
        basket = request.session['basket']
        problems = [
            db_session.query(Problem).filter(Problem.id == id).one()
            for id in basket.problems
        ]
        return {
            "result":
            "ok",
            "problems": [{
                "id": problem.id,
                "name": problem.name
            } for problem in problems]
        }
    except Exception as e:
        return {"result": "error", "content": e.__str__()}
Пример #49
0
def source_get_all_to_verify(request):
    source_type = '_' + request.matchdict['source_type']
    sources = db_session.query(Source).filter(
        Source.verified == False).order_by(Source.time).all()
    sources = [{
        'source': source,
        'parent': source.parent,
        'problem': {
            'id': source.problem.id,
            'name': source.problem.name
        },
        'user': {
            'id': source.user.id,
            'firstname': source.user.firstname,
            'lastname': source.user.lastname
        }
    } for source in sources if source.get_type() == source_type]
    return sources
def course_get_by_author(request):
    try:
        courses = course_get_by_user(request.matchdict['author_id'])
        result = []
        for course in courses:
            nodes = db_session.query(Course).filter(Course.course_id == course.id).all()
            paths = [node.parent.full_name() + ("" if node.verified \
                else " (не разобрано)") for node in nodes]
            result.append({
                'id': course.id,
                'name': course.fullname,
                'paths': paths,
                'visible': course.visible,
                'has_password': course.password != '',
            })
        return {
            'result': 'ok',
            'courses': result,
        }
    except Exception as e:
        return {
            'result': 'error',
            'content': e.__str__(),
        }
Пример #51
0
def source_get_root(source_type):
    return db_session.query(Source).filter(
        Source.parent_id == 1, Source.name == '_' + source_type).one()
Пример #52
0
def source_get_children_without_problems(source):
    return db_session.query(Source).filter(Source.parent_id == source.id,
                                           Source.problem_id == 0).order_by(
                                               Source.order,
                                               Source.name).all()
def source_get_root(source_type):
    return db_session.query(Source).filter(
        Source.parent_id == 1, 
        Source.name == '_' + source_type
    ).one()
Пример #54
0
def source_get_by_id(source_id):
    return db_session.query(Source).filter(Source.id == source_id).one()
Пример #55
0
def problem_get_by_id(problem_id):
    return db_session.query(Problem).filter(Problem.id == problem_id).one()
def course_get_by_id(course_id):
    return db_session.query(Course).filter(
        Course.id == course_id
    ).one()