示例#1
0
def api_export_team(request, para):
    try:
        subjudge = SubJudge.objects.filter(id=int(para.subjudge_id)).first()
        if not subjudge:
            raise BusinessException(ERR_SUBJUDGE_NOT_EXIST)
        user, role = get_user(subjudge.activity, request.user)
        if not user:
            raise BusinessException(ERR_USER_AUTH)
        # 仅子级评审的维护者可使用
        if not subjudge_services.is_subjudge_manager(subjudge, request.user):
            raise BusinessException(ERR_USER_AUTH)
        subjudge_team_id_list = [
            int(each)
            for each in para.subjudge_team_list.strip().strip(',').split(',')
            if each
        ]
        # team_list = list(Team.objects.filter(id__in=team_id_list))
        wb = subjudge_services.export_team(request.user, subjudge, user, role,
                                           subjudge_team_id_list)

        fname = u'%s.xlsx' % suuid()
        response = HttpResponse(content_type='application/vnd.ms-excel')
        response[
            'Content-Disposition'] = 'attachment; filename=' + fname.encode(
                'utf-8')
        wb.save(response)
        return response

        # path = os.path.join(settings.BASE_DIR, 'media/%s.xlsx' % suuid())
        # wb.save(path)
        # return response200({'c': SUCCESS[0], 'm': SUCCESS[1], 'd': path})
    except Exception as ex:
        logger.exception(ex)
        return response_exception(ex)
示例#2
0
def api_persondisk_movfile(user, src_file_id_list, desc_file_id,
                           file_id_move_all):
    if src_file_id_list:
        src_file_id_list = json.loads(src_file_id_list)
    elif file_id_move_all:
        src_file_id_list = NetdiskPersonalFile.objects.filter(
            is_del=FALSE_INT,
            parent_id=file_id_move_all).values_list('id', flat=True)
    else:
        src_file_id_list = NetdiskPersonalFile.objects.filter(
            is_del=FALSE_INT, parent_id=None).values_list('id', flat=True)

    # 检查来源文件是否是我的文件
    if not is_myfile(user.id, src_file_id_list):
        raise BusinessException(NETDISK_ERR_NOPERMISSION)
    # 检查目标文件是否是我的文件
    if desc_file_id and not is_myfile(user.id, [desc_file_id]):
        raise BusinessException(NETDISK_ERR_NOPERMISSION)

    # 没传目标文件夹就放到根目录去。
    if not desc_file_id:
        desc_file_id = None

    NetdiskPersonalFile.objects.filter(
        id__in=list(src_file_id_list),
        is_del=FALSE_INT).update(parent_id=desc_file_id)

    return 'ok'
示例#3
0
def api_export_activity_expert(request, para):
    try:
        activity = Activity.objects.filter(id=int(para.activity_id)).first()
        if not activity:
            raise BusinessException(ERR_ACTIVITY_NOT_EXIST)
        user, role = get_user(activity, request.user)
        if not user:
            raise BusinessException(ERR_USER_AUTH)
        expert_id_list = [
            int(r) for r in para.expert_id_list.strip().strip(',').split(',')
        ]
        expert_list = Expert.objects.filter(del_flag=FALSE_INT,
                                            id__in=expert_id_list)
        wb = activity_s.export_activity_expert(request.user, activity, user,
                                               role, expert_list)

        fname = u'%s.xlsx' % suuid()
        response = HttpResponse(content_type='application/vnd.ms-excel')
        response[
            'Content-Disposition'] = 'attachment; filename=' + fname.encode(
                'utf-8')
        wb.save(response)
        return response

        # path = os.path.join(settings.BASE_DIR, 'media/%s.xlsx' % suuid())
        # wb.save(path)
        # return response200({'c': SUCCESS[0], 'm': SUCCESS[1], 'd': path})
    except Exception as ex:
        logger.exception(ex)
        return response_exception(ex, ex.message)
示例#4
0
def list_team_by_super(account,
                       activity,
                       keyword,
                       judger,
                       page,
                       rows,
                       id_list=None):
    rule = Rule.objects.filter(activity=activity).first()
    if not rule:
        raise BusinessException(ERR_RULE_NOT_EXIST)
    if not is_activity_owner(activity, account):
        raise BusinessException(ERR_USER_AUTH)
    raw = list_team(activity, keyword=keyword, judger=judger, id_list=id_list)

    paged_data, result = paging_by_page(raw, rows, page)
    rule = Rule.objects.filter(activity=activity).first()
    if not rule:
        raise BusinessException(ERR_RULE_NOT_EXIST)
    max = str(rule.parse_rule().expert_count())
    for each in paged_data:
        d = detail_team(each, max)
        result['items'].append(d)
    result['id_all'] = ','.join([str(each.id) for each in raw])
    result['judger_max'] = str(max)
    return result
示例#5
0
def wx_page_scan_reg_sure(request, confirm_code):
    # 用户扫码注册
    # 检查确认码是否注册生成的
    weixinscanconfirm = WeixinScanConfirm.objects.filter(
        code=confirm_code, del_flag=FALSE_INT,
        busitype=WEIXIN_SCAN_TYPE_REG).first()
    if not weixinscanconfirm:
        raise BusinessException(ERR_QRCODE_TIMEOUT)

    # 检查微信是否已经注册过
    old_weixinaccount = WeixinAccount.objects.filter(
        openid=weixinscanconfirm.openid, del_flag=FALSE_INT)
    if old_weixinaccount:
        # 更新确认状态
        weixinscanconfirm.status = WEIXIN_CONFIRM_STATUS_ERROR
        weixinscanconfirm.desc = ERR_WEIXIN_IS_BIND[1]
        weixinscanconfirm.save()
        raise BusinessException(ERR_WEIXIN_IS_BIND)

    # 手机直接跳转成功页面
    cur_domain = get_cur_domain(request)
    # mobile_sure_url = 'http://%s/wx/mobile/scan/sure' % cur_domain
    mobile_sure_url = 'http://%s/weixin/wxResult?isSuccess=true&type=%s' % (
        cur_domain, weixinscanconfirm.busitype)
    return HttpResponseRedirect(mobile_sure_url)
示例#6
0
def api_subjudge_export_work_for_leader(request, para):
    try:
        subjudge = SubJudge.objects.filter(id=int(para.subjudge_id)).first()
        if not subjudge:
            raise BusinessException(ERR_SUBJUDGE_NOT_EXIST)
        subj_expert = SubJudgeExpert.objects.filter(
            subjudge=subjudge,
            expert__del_flag=FALSE_INT,
            expert__account=request.user).first()
        if not subj_expert:
            raise BusinessException(ERR_USER_AUTH)
        # TODO 验证必须是组长
        #

        work_id_list = [
            int(each)
            for each in para.work_id_list.strip().strip(',').split(',') if each
        ]
        work_list = list(Work.objects.filter(id__in=work_id_list))

        # TODO check auth for these work
        #

        resp = WorkExcelExport(subjudge.activity, work_list,
                (EXCEL.BASIC, EXCEL.AUTHOR, EXCEL.TUTOR, EXCEL.SUBJG_MY_SCORE, EXCEL.SUBJG_SCORE), expert=subj_expert.expert, subjudge=subjudge)\
                .write().dump_stream()
        return resp
    except Exception as ex:
        logger.exception(ex)
        return response_exception(ex, ex.message)
示例#7
0
def api_persondisk_delfile(user, file_id_list, file_id_del_all):
    if file_id_list:
        file_id_list = json.loads(file_id_list)
    elif file_id_del_all:
        file_id_list = NetdiskPersonalFile.objects.filter(
            is_del=FALSE_INT, parent_id=file_id_del_all).values_list('id',
                                                                     flat=True)
    else:
        file_id_list = NetdiskPersonalFile.objects.filter(
            is_del=FALSE_INT, parent_id=None).values_list('id', flat=True)

    if len(file_id_list) == 0:
        raise BusinessException(NETDISK_ERR_NO_DEL_FILE)

    # 检查是否是我的文件
    if not is_myfile(user.id, file_id_list):
        raise BusinessException(NETDISK_ERR_NOPERMISSION)

    del_fileid_list = list()
    for each_file_id in file_id_list:
        del_fileid_list.append(each_file_id)
        del_fileid_list.extend(
            get_childid_flat(user,
                             file_id=each_file_id,
                             qry_child=1,
                             file_type=None,
                             file_name_like=None,
                             file_name_exact=None))

    NetdiskPersonalFile.objects.filter(id__in=list(del_fileid_list)).update(
        is_del=TRUE_INT)

    refresh_user_space(user)

    return 'ok'
示例#8
0
def api_subjudge_work_in_team(request, para):
    try:
        subjudge = SubJudge.objects.filter(id=int(para.subjudge_id)).first()
        if not subjudge:
            raise BusinessException(ERR_SUBJUDGE_NOT_EXIST)
        area = Area.objects.filter(
            id=int(para.area_id)).first() if para.area_id else None
        direct_area = Area.objects.filter(id=int(
            para.direct_area_id)).first() if para.direct_area_id else None
        subjudge_team = SubJudgeTeam.objects.filter(
            id=int(para.subjudge_team)).first()
        if not subjudge_team:
            raise BusinessException(ERR_TEAM_EMPTY)
        result = subjudge_services.work_in_team(
            request.user,
            subjudge,
            subjudge_team,
            para.sub_activity,
            para.phase,
            para.project,
            area,
            direct_area,
            para.subject,
            para.keyword,
            para.page,
            para.rows,
        )
    except Exception as ex:
        logger.exception(ex)
        return response_exception(ex, ex.message)
    return response200({'c': SUCCESS[0], 'm': SUCCESS[1], 'd': result})
示例#9
0
def api_subjudge_list_work_for_expert(request, para):
    try:
        subjudge = SubJudge.objects.filter(id=int(para.subjudge_id)).first()
        if not subjudge:
            raise BusinessException(ERR_SUBJUDGE_NOT_EXIST)
        subjg_team = SubJudgeTeam.objects.filter(
            id=int(para.subjudge_team)).first() if para.subjudge_team else None
        subjg_expert = SubJudgeExpert.objects.filter(
            subjudge=subjudge, expert__account=request.user).first()
        if not subjg_expert:
            raise BusinessException(ERR_USER_AUTH)
        result = subjudge_services.list_work_for_expert(
            request.user,
            subjudge,
            subjg_expert,
            para.sub_activity,
            para.phase,
            para.project,
            para.subject,
            para.keyword,
            subjg_team,
            para.is_unfinish,
            para.page,
            para.rows,
        )
    except Exception as ex:
        logger.exception(ex)
        return response_exception(ex, ex.message)
    return response200({'c': SUCCESS[0], 'm': SUCCESS[1], 'd': result})
示例#10
0
def check_get_parent(parent_id):
    if not parent_id:
        raise BusinessException(PARENT_NOT_EXIST)
    parent = Parent.objects.filter(id=int(parent_id), del_flag=FALSE_INT).first()
    if not parent:
        raise BusinessException(PARENT_NOT_EXIST)
    return parent
示例#11
0
def check_get_student(student_id):
    if not student_id:
        raise BusinessException(STUDENT_NOT_EXIST)
    student = Student.objects.filter(id=int(student_id), del_flag=FALSE_INT).first()
    if not student:
        raise BusinessException(STUDENT_NOT_EXIST)
    return student
示例#12
0
def check_get_teacher(teacher_id):
    if not teacher_id:
        raise BusinessException(TEACHER_NOT_EXIST)
    teacher = Teacher.objects.filter(id=int(teacher_id), del_flag=FALSE_INT).first()
    if not teacher:
        raise BusinessException(TEACHER_NOT_EXIST)
    return teacher
示例#13
0
def api_new_expert(request, para):
    try:
        subjudge = SubJudge.objects.filter(id=int(para.subjudge_id)).first()
        if not subjudge:
            raise BusinessException(ERR_SUBJUDGE_NOT_EXIST)
        user, role = get_user(subjudge.activity, request.user)
        if not user:
            raise BusinessException(ERR_USER_AUTH)

        # 仅子级评审的维护者可使用
        if not subjudge_services.is_subjudge_manager(subjudge, request.user):
            raise BusinessException(ERR_USER_AUTH)

        area = Area.objects.filter(del_flag=FLAG_NO, id=int(
            para.area_id)).first() if para.area_id else None
        direct_area = Area.objects.filter(
            del_flag=FLAG_NO, id=int(
                para.direct_area_id)).first() if para.direct_area_id else None
        result = subjudge_services.new_expert(request.user, subjudge, user,
                                              para.mobile, para.name, para.sex,
                                              area, direct_area,
                                              para.institution, para.position)
    except Exception as ex:
        logger.exception(ex)
        return response_exception(ex)
    return response200(dict(c=SUCCESS[0], m=SUCCESS[1], d=result))
示例#14
0
def check_get_class(class_id):
    if not class_id:
        raise BusinessException(CLASS_NOT_EXIST)
    clazz = Class.objects.filter(id=int(class_id), del_flag=FALSE_INT).first()
    if not clazz:
        raise BusinessException(CLASS_NOT_EXIST)
    return clazz
示例#15
0
def check_get_school(school_id):
    if not school_id:
        raise BusinessException(SCHOOl_NOT_EXIST)
    school = School.objects.filter(id=int(school_id), del_flag=FALSE_INT).first()
    if not school:
        raise BusinessException(SCHOOl_NOT_EXIST)
    return school
示例#16
0
def check_get_account(account_id):
    if not account_id:
        raise BusinessException(USER_NOT_EXIST)
    account = Account.objects.filter(id=int(account_id), del_flag=FALSE_INT).first()
    if not account:
        raise BusinessException(USER_NOT_EXIST)
    return account
示例#17
0
def api_download_activity_role_template(request, para):
    try:
        activity = Activity.objects.filter(id=int(para.activity_id)).first()
        if not activity:
            raise BusinessException(ERR_ACTIVITY_NOT_EXIST)
        user, role = get_user(activity, request.user)
        if not user:
            raise BusinessException(ERR_USER_AUTH)
        wb = activity_s.download_activity_role_template(
            request.user, activity, user, role)

        fname = u'%s.xlsx' % suuid()
        response = HttpResponse(content_type='application/vnd.ms-excel')
        response[
            'Content-Disposition'] = 'attachment; filename=' + fname.encode(
                'utf-8')
        wb.save(response)
        return response

        # path = os.path.join(settings.BASE_DIR, 'media/%s.xlsx' % suuid())
        # wb.save(path)
        # return response200({'c': SUCCESS[0], 'm': SUCCESS[1], 'd': path})
    except Exception as ex:
        logger.exception(ex)
        return response_exception(ex, ex.message)
示例#18
0
def api_persondisk_modname(user, file_name, file_id):
    # 文件名不能为空,目前只能修改目录。
    if not file_name:
        raise BusinessException(NETDISK_ERR_FILENAME)
    if not file_id:
        raise BusinessException(REQUEST_PARAM_ERROR)

    if not is_myfile(user.id, [file_id]):
        raise BusinessException(NETDISK_ERR_NOPERMISSION)

    # 检查文件是否存在,检查是否有新的同名文件夹
    cur_file = NetdiskPersonalFile.objects.filter(id=file_id,
                                                  account_id=user.id,
                                                  is_del=FALSE_INT).first()
    if not cur_file:
        raise BusinessException(NETDISK_ERR_NULL_DIR)
    file_same_names = NetdiskPersonalFile.objects.filter(
        account_id=user.id,
        is_del=FALSE_INT,
        name=file_name,
        is_dir=TRUE_INT,
        parent_id=cur_file.parent_id).exclude(id=file_id)
    if file_same_names:
        raise BusinessException(NETDISK_ERR_HAS_SAMEFILE)

    cur_file.name = file_name
    cur_file.save()

    result = {
        "file_id": cur_file.id,
        "file_name": cur_file.name,
    }
    return result
示例#19
0
文件: service.py 项目: zptime/netdisk
def api_schooldisk_movfile(user, src_file_id_list, desc_file_id,
                           file_id_move_all):
    if src_file_id_list:
        src_file_id_list = json.loads(src_file_id_list)
    elif file_id_move_all:
        src_file_id_list = NetdiskSchoolFile.objects.filter(
            school=user.school, is_del=FALSE_INT,
            parent_id=file_id_move_all).values_list('id', flat=True)
    else:
        src_file_id_list = NetdiskSchoolFile.objects.filter(
            school=user.school, is_del=FALSE_INT,
            parent_id=None).values_list('id', flat=True)

    src_file_id_list = list(src_file_id_list)
    # 检查文件是否在同一目录,暂不支持不同目录的文件同时移动(实际原因是不大可能出现此情况,所以懒得写这个代码去支持了^_^!!)。
    src_parent_file = NetdiskSchoolFile.objects.filter(
        school=user.school, id__in=list(src_file_id_list),
        is_del=FALSE_INT).values('parent_id').distinct()
    if src_parent_file.count() > 1:
        raise BusinessException(NETDISK_ERR_FILE_NOTIN_SAMEDIR)

    # 检查我是否是管理员,只有管理员和自己可以把文件移走即删除
    cur_user_src_dir_role = api_schooldisk_getuserdirrole(
        user,
        src_parent_file.first()['parent_id'])
    if len(set(ROLE_ADMIN) & set(cur_user_src_dir_role)) == 0:
        # 检查是否是我的文件
        if not is_myfile(user.id, src_file_id_list):
            raise BusinessException(NETDISK_ERR_NOPERMISSION)
        # raise BusinessException(NETDISK_ERR_NO_ROLE_MKDIR)

    # 检查目标文件夹我是否具有上传权限
    cur_user_desc_dir_role = api_schooldisk_getuserdirrole(user, desc_file_id)
    if len(set(ROLE_UPLOAD) & set(cur_user_desc_dir_role)) == 0:
        # 检查是否有上传文件权限(注意此处仍保留了文件原来的上传人信息)
        raise BusinessException(NETDISK_ERR_NOPERMISSION)
        # raise BusinessException(NETDISK_ERR_NO_ROLE_MKDIR)

    # 如果是根目录,还需要检查要移动的是否全部是文件夹,因为根目录不能存放文件。
    if not desc_file_id:
        src_is_not_dir = NetdiskSchoolFile.objects.filter(
            school=user.school,
            id__in=src_file_id_list,
            is_del=FALSE_INT,
            is_dir=FALSE_INT)
        if src_is_not_dir:
            raise BusinessException(NETDISK_ERR_ROOT_NOFILE)

    # 没传目标文件夹就放到根目录去。
    if not desc_file_id:
        desc_file_id = None

    NetdiskSchoolFile.objects.filter(
        school=user.school, id__in=list(src_file_id_list),
        is_del=FALSE_INT).update(parent_id=desc_file_id)

    return 'ok'
示例#20
0
文件: service.py 项目: zptime/netdisk
def api_schooldisk_moddir(user, file_name, file_id, admin_teacherid_list,
                          upload_teacherid_list, list_teacherid_list,
                          download_teacherid_list):
    admin_teacherid_list = json.loads(
        admin_teacherid_list) if admin_teacherid_list else []
    upload_teacherid_list = json.loads(
        upload_teacherid_list) if upload_teacherid_list else []
    list_teacherid_list = json.loads(
        list_teacherid_list) if list_teacherid_list else []
    download_teacherid_list = json.loads(
        download_teacherid_list) if download_teacherid_list else []

    # 文件名不能为空
    if not file_name:
        raise BusinessException(NETDISK_ERR_FILENAME)
    if not file_id:
        raise BusinessException(REQUEST_PARAM_ERROR)

    # if not is_myfile(user.id, [file_id]):
    #     raise BusinessException(NETDISK_ERR_NOPERMISSION)

    # 检查文件是否存在,检查是否有新的同名文件夹
    cur_file = NetdiskSchoolFile.objects.filter(id=file_id,
                                                school=user.school,
                                                is_del=FALSE_INT).first()
    if not cur_file:
        raise BusinessException(NETDISK_ERR_NULL_DIR)
    file_same_names = NetdiskSchoolFile.objects.filter(
        school=user.school,
        is_del=FALSE_INT,
        name=file_name,
        is_dir=TRUE_INT,
        parent_id=cur_file.parent_id).exclude(id=file_id)
    if file_same_names:
        raise BusinessException(NETDISK_ERR_HAS_SAMEFILE)

    # 检查是否有上级目录修改权限,即上级目录的管理员权限。
    cur_user_dir_role = api_schooldisk_getuserdirrole(user, cur_file.parent_id)
    if len(set(ROLE_ADMIN) & set(cur_user_dir_role)) == 0:
        raise BusinessException(NETDISK_ERR_NOPERMISSION)

    cur_file.name = file_name
    cur_file.save()

    result = {
        "file_id": cur_file.id,
        "file_name": cur_file.name,
    }

    # 增加相应的权限信息
    dir_mod_teacher_role(cur_file.id, admin_teacherid_list, ROLE_TYPE_ADMIN)
    dir_mod_teacher_role(cur_file.id, upload_teacherid_list, ROLE_TYPE_UPLOAD)
    dir_mod_teacher_role(cur_file.id, list_teacherid_list, ROLE_TYPE_LIST)
    dir_mod_teacher_role(cur_file.id, download_teacherid_list,
                         ROLE_TYPE_DOWNLOAD)

    return result
示例#21
0
文件: service.py 项目: zptime/netdisk
def api_schooldisk_delfile(user, file_id_list, file_id_del_all):
    if file_id_list:
        file_id_list = json.loads(file_id_list)
    elif file_id_del_all:
        file_id_list = NetdiskSchoolFile.objects.filter(
            school=user.school, is_del=FALSE_INT,
            parent_id=file_id_del_all).values_list('id', flat=True)
    else:
        file_id_list = NetdiskSchoolFile.objects.filter(
            school=user.school, is_del=FALSE_INT,
            parent_id=None).values_list('id', flat=True)

    file_id_list = list(file_id_list)
    if len(file_id_list) == 0:
        raise BusinessException(NETDISK_ERR_NO_DEL_FILE)

    # 检查文件是否在同一目录,暂不支持不同目录的文件同时删除(实际原因是不大可能出现此情况,所以懒得写这个代码去支持了^_^!!)。
    parent_file = NetdiskSchoolFile.objects.filter(
        school=user.school, id__in=list(file_id_list),
        is_del=FALSE_INT).values('parent_id').distinct()
    if parent_file.count() > 1:
        raise BusinessException(NETDISK_ERR_FILE_NOTIN_SAMEDIR)
    if parent_file.count() == 0:
        raise BusinessException(NETDISK_ERR_NO_FILEOBJ)

    # 检查我是否是管理员,只有管理员和自己可以删除文件
    cur_user_dir_role = api_schooldisk_getuserdirrole(
        user,
        parent_file.first()['parent_id'])
    if len(set(ROLE_ADMIN) & set(cur_user_dir_role)) == 0:
        # 检查是否是我的文件
        if not is_myfile(user.id, file_id_list):
            raise BusinessException(NETDISK_ERR_NOPERMISSION)
        # raise BusinessException(NETDISK_ERR_NO_ROLE_MKDIR)

    del_fileid_list = list()
    for each_file_id in file_id_list:
        del_fileid_list.append(each_file_id)
        del_fileid_list.extend(
            get_childid_flat(user,
                             file_id=each_file_id,
                             qry_child=1,
                             file_type=None,
                             file_name_like=None,
                             file_name_exact=None))

    # 删除文件/文件夹,同时删除文件夹权限
    NetdiskSchoolFile.objects.filter(
        school=user.school,
        id__in=list(del_fileid_list)).update(is_del=TRUE_INT)
    NetdiskSchoolRole.objects.filter(
        netdiskschoolfile__in=list(del_fileid_list)).update(is_del=TRUE_INT)

    refresh_school_space(user.school)

    return 'ok'
示例#22
0
def check_get_grade(grade_id, user=None):
    if not grade_id:
        raise BusinessException(GRADE_NOT_EXIST)
    qs = Grade.objects.filter(id=int(grade_id), del_flag=FALSE_INT)
    if user:
        qs = qs.filter(school=user.school)
    grade = qs.first()
    if not grade:
        raise BusinessException(GRADE_NOT_EXIST)
    return grade
示例#23
0
def check_get_teacher_by_request(request):
    user_type = request.user.type   # int
    school_id = request.user.school.id   # int
    account_id = request.user.id   # int
    if user_type != USER_TYPE_TEACHER:
        raise BusinessException(TEACHER_NOT_EXIST)
    teacher = get_user(account_id, user_type, school_id)
    if not teacher:
        raise BusinessException(TEACHER_NOT_EXIST)
    return teacher
示例#24
0
def check_get_title(title_id, user=None):
    if not title_id:
        raise BusinessException(TITLE_NOT_EXIST)
    qs = Title.objects.filter(id=int(title_id), del_flag=FALSE_INT)
    if user:
        qs = qs.filter(school=user.school)
    title = qs.first()
    if not title:
        raise BusinessException(TITLE_NOT_EXIST)
    return title
示例#25
0
def check_get_clazz(clazz_id, user=None):
    if not clazz_id:
        raise BusinessException(CLASS_NOT_EXIST)
    qs = Class.objects.filter(id=int(clazz_id), del_flag=FALSE_INT)
    if user:
        qs = qs.filter(school=user.school)
    clazz = qs.first()
    if not clazz:
        raise BusinessException(CLASS_NOT_EXIST)
    return clazz
示例#26
0
文件: service.py 项目: zptime/netdisk
def api_schooldisk_getdownloadurl(user, file_id_list, file_id_get_all):
    result = dict()
    if file_id_list:
        file_id_list = json.loads(file_id_list)
    elif file_id_get_all:
        file_id_list = NetdiskSchoolFile.objects.filter(
            school=user.school, is_del=FALSE_INT,
            parent_id=file_id_get_all).values_list('id', flat=True)
    else:
        file_id_list = NetdiskSchoolFile.objects.filter(
            school=user.school, is_del=FALSE_INT,
            parent_id=None).values_list('id', flat=True)

    if len(file_id_list) == 0:
        raise BusinessException(NETDISK_ERR_NO_DEL_FILE)

    # 检查文件是否在同一目录,暂不支持不同目录的文件同时下载(实际原因是不大可能出现此情况,所以懒得写这个代码去支持了^_^!!)。
    src_parent_file = NetdiskSchoolFile.objects.filter(
        school=user.school, id__in=list(file_id_list),
        is_del=FALSE_INT).values('parent_id').distinct()
    if src_parent_file.count() > 1:
        raise BusinessException(NETDISK_ERR_FILE_NOTIN_SAMEDIR)

    # 检查我是否有下载权限,只有有下载权限,或者自己的文件可以下载
    cur_user_src_dir_role = api_schooldisk_getuserdirrole(
        user,
        src_parent_file.first()['parent_id'])
    if len(set(ROLE_DOWNLOAD) & set(cur_user_src_dir_role)) == 0:
        # 检查是否是我的文件
        if not is_myfile(user.id, file_id_list):
            raise BusinessException(NETDISK_ERR_NOPERMISSION)

    files = NetdiskSchoolFile.objects.filter(school=user.school,
                                             is_del=FALSE_INT,
                                             id__in=list(file_id_list),
                                             is_dir=FALSE_INT)
    file_list = list()
    for each_file in files:
        file_dict = dict()
        file_dict['id'] = each_file.id
        url = each_file.fileobj.url if each_file.fileobj else ''

        # 避免数据问题导致程序异常
        if not url:
            continue

        download_url = "/%s/%s?tk=%s" % (
            settings.FILE_STORAGE_DIR_NAME, url,
            get_filedownload_token(url)) if url else url
        file_dict['download_url'] = download_url
        file_list.append(file_dict)

    result['file_list'] = file_list
    return result
示例#27
0
def edit_team(account, activity, team, new_name):
    if not is_activity_owner(activity, account):
        raise BusinessException(ERR_USER_AUTH)
    if team:  # MODIFY
        if Team.objects.filter(activity=activity,
                               name=new_name).exclude(id=team.id).exists():
            raise BusinessException(ERR_TEAM_NAME_CONFLICT)
        team.name = new_name
        team.save()
    else:  # CREATE
        Team.objects.create(activity=activity, name=new_name)
    return TRUE_INT
示例#28
0
def _perm_can_judge_work(work, expert):
    if not expert:
        raise BusinessException(ERR_USER_AUTH)
    if work.activity.stage != ACTIVITY_STAGE_REVIEW:
        raise BusinessException(ERR_INVALID_PHASE)
    work_team = work.team
    if not work_team:
        raise BusinessException(ERR_TEAM_WORK_NOT_EXIST)
    if not TeamExpert.objects.filter(team=work.team,
                                     expert=expert,
                                     expert__del_flag=FALSE_INT).exists():
        raise BusinessException(ERR_USER_AUTH)
示例#29
0
def api_import_activity_expert(request, para):
    try:
        activity = Activity.objects.filter(id=int(para.activity_id)).first()
        if not activity:
            raise BusinessException(ERR_ACTIVITY_NOT_EXIST)
        user, role = get_user(activity, request.user)
        if not user:
            raise BusinessException(ERR_USER_AUTH)
        result = activity_s.import_activity_expert(request.user, user, role,
                                                   activity, para.file)
    except Exception as ex:
        logger.exception(ex)
        return response_exception(ex, ex.message)
    return response200(dict(c=SUCCESS[0], m=SUCCESS[1], d=result))
示例#30
0
def api_list_team(request, para):
    try:
        subjudge = SubJudge.objects.filter(id=int(para.subjudge_id)).first()
        if not subjudge:
            raise BusinessException(ERR_SUBJUDGE_NOT_EXIST)
        # 仅子级评审的维护者可使用
        if not subjudge_services.is_subjudge_manager(subjudge, request.user):
            raise BusinessException(ERR_USER_AUTH)
        result = subjudge_services.list_team(subjudge, para.keyword,
                                             para.judger, para.rows, para.page)
    except Exception as e:
        logger.exception(e)
        return response_exception(e)
    return response200({'c': SUCCESS[0], 'm': SUCCESS[1], 'd': result})