コード例 #1
0
ファイル: teamUtils.py プロジェクト: AllenZYoung/Uranus
def setContribution(user, contribution):
    def validateContribution(c):
        # Method 1:
        return c >= 0.4 and c <= 1.6
        # Method 2:
        # C = [0.4, 0.6, 0.8, 1.0, 1.2]
        # return c in C

    if not isinstance(user, User):
        return None
    if not validateContribution(contribution):
        log('设定的个人贡献比例不在值范围', 'teamutils', LOG_LEVEL.ERROR)
        return False

    # enroll = Enroll.objects.filter(user=user).first()
    my_member = Member.objects.filter(user=user).first()
    team = my_member.team
    print(team)
    members = Member.objects.filter(team=team)

    # print("curC")
    # print(curContrib)
    # if curContrib > maxContrib:
    #     log('团队总贡献度超额', 'teamutils', LOG_LEVEL.ERROR)
    #     return False
    Member.objects.filter(user=user).update(contribution=contribution)
    log('setContribution OK', 'teamutils', LOG_LEVEL.INFO)
コード例 #2
0
def writeAttendanceReport(file, course_id, attendance=None):
    if attendance is None:
        attendance = showToday()

    users_att = [att.user for att in attendance]
    log(users_att, 'writeAttendanceReport')
    work_book = Workbook()
    ws = work_book.get_active_sheet()
    ws.cell(row=1, column=1).value = '学号'
    ws.cell(row=1, column=2).value = '姓名'
    ws.cell(row=1, column=3).value = '签到'

    num = 2
    enrolls = Enroll.objects.filter(course_id=course_id)
    users = [enr.user for enr in enrolls]
    for user in users:
        if isStudent(user):
            ws.cell(row=num, column=1).value = str(user.username)
            ws.cell(row=num, column=2).value = str(user.name)
            if user in users_att:
                ws.cell(row=num, column=3).value = '1'
            else:
                ws.cell(row=num, column=3).value = '0'
            num += 1
    work_book.save(filename=file)
コード例 #3
0
ファイル: authUtils.py プロジェクト: JellyWong/Uranus
def isEnrolledIn(user, course):
    if not isinstance(user, User) or not isinstance(course, Course):
        return None
    if user.role != 'student' and user.role != 'teacher':
        log('不是学生/老师', 'authUtils', LOG_LEVEL.ERROR)
        return False

    return Enroll.objects.filter(user=user, course=course).count() > 0
コード例 #4
0
ファイル: authUtils.py プロジェクト: JellyWong/Uranus
def isMemberOf(user, team):
    if not isinstance(user, User) or not isinstance(team, Team):
        return None
    if user.role != 'student':
        log('不是学生', 'authUtils', LOG_LEVEL.ERROR)
        return False

    return Member.objects.filter(user=user, team=team).count() > 0
コード例 #5
0
ファイル: teamUtils.py プロジェクト: AllenZYoung/Uranus
def transferLeadership(team, user):
    if not isinstance(team, Team) or not isinstance(user, User):
        return None
    if user.role != 'student':
        log('不是学生', 'teamutils', LOG_LEVEL.ERROR)
        return False

    Member.objects.filter(team=team, role='leader').update(role='member')
    Member.objects.filter(team=team, user=user).update(role='leader')
    return True
コード例 #6
0
ファイル: teamUtils.py プロジェクト: AllenZYoung/Uranus
def auditTeamRejected(team):
    if not isinstance(team, Team):
        return None
    if team.status != 'auditing':
        log('未提交申请', 'teamutils', LOG_LEVEL.ERROR)
        return False

    team.status = 'rejected'
    team.save()
    return team
コード例 #7
0
ファイル: fileUtils.py プロジェクト: JellyWong/Uranus
def test():
    log('='*50)
    log('File Utils Unit Test')

    fs = File.objects.filter()
    for f in fs:
        log(docPreviewUrl(f.file.url[1:]), 'docPreviewUrl')
        log(fileDownloadUrl(f.file.url[1:]), 'fileDownloadUrl')

    log('='*50)
コード例 #8
0
ファイル: teamUtils.py プロジェクト: AllenZYoung/Uranus
def leaveTeam(user):
    if not isinstance(user, User):
        return None
    member = Member.objects.filter(user=user)
    if not member:
        log('未加入任何团队', 'teamutils', LOG_LEVEL.ERROR)
        return False

    member.delete()
    return True
コード例 #9
0
def addAttendance(user):
    if not isinstance(user, User):
        return None
    if user.role != 'student':
        log('不是学生', 'attendanceUtils', LOG_LEVEL.ERROR)
        return False

    attendence = Attendance()
    attendence.user = user
    attendence.save()
    return attendence
コード例 #10
0
ファイル: fileUtils.py プロジェクト: JellyWong/Uranus
def docPreviewUrl(path):
    f = os.path.basename(path)
    if not isOfficeFile(f):
        log(f + '不是office文档文件', 'docPreviewUrl', LOG_LEVEL.ERROR)
        return '#'

    url = os.path.join(URL_BASE, path)
    url = urllib.parse.quote(url)
    url = URL_API + url
    log(url, 'docPreviewUrl')
    return url
コード例 #11
0
ファイル: authUtils.py プロジェクト: JellyWong/Uranus
def isTeamMember(user):
    if not isinstance(user, User):
        return None
    if user.role != 'student':
        log('不是学生', 'authUtils', LOG_LEVEL.ERROR)
        return False
    if not Member.objects.filter(user=user).count() > 0:
        log('未加入团队', 'authUtils', LOG_LEVEL.ERROR)
        return False

    memberships = Member.objects.filter(user=user).first()
    return memberships.role == 'member'
コード例 #12
0
ファイル: teamUtils.py プロジェクト: AllenZYoung/Uranus
def dismissTeam(team):
    if not isinstance(team, Team):
        return None
    if team.status == 'passed':
        log('团队已通过审核', 'teamutils', LOG_LEVEL.ERROR)
        return False

    members = Member.objects.filter(team=team)
    for member in members:
        member.delete()
    team.delete()
    return True
コード例 #13
0
def sumGradeStudent(user):
    if not isinstance(user, User):
        return None
    member = Member.objects.filter(user=user).first()
    if not member:
        log('未加入任何团队', 'statisticsUils', LOG_LEVEL.ERROR)
        return False
    contrib = member.contribution
    if not contrib:
        log('未设置个人贡献度', 'statisticsUils', LOG_LEVEL.INFO)
        return 0

    return contrib * (sumGradeTeam(member.team) or 0.0)
コード例 #14
0
ファイル: noticeUtils.py プロジェクト: JellyWong/Uranus
def addNotice(title, content, user):
    if not isinstance(user, User):
        return None
    if title == '' or title is None or content == '' or content is None:
        log('标题/内容不能为空', 'noticeUtils', LOG_LEVEL.ERROR)
        return False

    notice = Notice()
    notice.title = title
    notice.content = content
    notice.user = user
    notice.save()
    return notice
コード例 #15
0
ファイル: teamUtils.py プロジェクト: AllenZYoung/Uranus
def auditMemberPassed(user):
    if not isinstance(user, User):
        return None
    member = Member.objects.filter(user=user).first()
    if not member:
        log('未加入任何团队', 'teamutils', LOG_LEVEL.ERROR)
        return False
    if not member.role == 'newMoe':
        log('不是新人', 'teamutils', LOG_LEVEL.ERROR)
        return False

    member.role = 'member'
    member.save()
    return member
コード例 #16
0
ファイル: teamUtils.py プロジェクト: AllenZYoung/Uranus
def joinTeam(user, team):
    if not isinstance(team, Team) or not isinstance(user, User):
        return None
    if team.status != 'incomplete' or user.role != 'student':
        log('团队已冻结/不是学生', 'teamutils', LOG_LEVEL.ERROR)
        return False
    if Member.objects.filter(user=user).count() > 0:
        log('已经是队长或成员', 'teamutils', LOG_LEVEL.ERROR)
        return False

    member = Member()
    member.user = user
    member.team = team
    member.role = 'newMoe'
    member.save()
    return member
コード例 #17
0
ファイル: teamUtils.py プロジェクト: AllenZYoung/Uranus
def createTeam(user, name):
    if not isinstance(user, User):
        return None
    if user.role != 'student':
        log('不是学生', 'teamutils', LOG_LEVEL.ERROR)
        return False
    if Member.objects.filter(user=user).count() > 0:
        log('已经是队长或成员', 'teamutils', LOG_LEVEL.ERROR)
        return False

    team = Team()
    team.course = Enroll.objects.get(user=user).course
    team.name = name
    team.status = 'incomplete'
    team.save()
    member = Member()
    member.user = user
    member.team = team
    member.role = 'leader'
    member.save()
    return team, member
コード例 #18
0
ファイル: teamUtils.py プロジェクト: JellyWong/Uranus
def setContribution(user, contribution):
    def validateContribution(c):
        # Method 1:
        return c >= 0.4 and c <= 1.6
        # Method 2:
        # C = [0.4, 0.6, 0.8, 1.0, 1.2]
        # return c in C

    if not isinstance(user, User):
        return None
    if not validateContribution(contribution):
        log('设定的个人贡献比例不在值范围', 'teamutils', LOG_LEVEL.ERROR)
        return False

    enroll = Enroll.objects.filter(user=user).first()
    team = Team.objects.filter(course=enroll.course).first()
    members = Member.objects.filter(team=team)
    maxContrib = members.count()
    curContrib = 0
    curContrib += contribution
    if curContrib > maxContrib:
        log('团队总贡献度超额', 'teamutils', LOG_LEVEL.ERROR)
        return False

    Member.objects.filter(user=user).update(contribution=contribution)
    log('setContribution OK', 'teamutils', LOG_LEVEL.INFO)
    return curContrib + contribution
コード例 #19
0
ファイル: teamUtils.py プロジェクト: AllenZYoung/Uranus
def auditTeamPassed(team):
    if not isinstance(team, Team):
        return None
    if team.status != 'auditing':
        log('未提交申请', 'teamutils', LOG_LEVEL.ERROR)
        return False
    teams = Team.objects.filter(course=team.course)
    idnum = 1
    if teams.count() > 0:
        idnum = teams[0].serialNum
        for team in Team.objects.filter(course=team.course):
            if team.serialNum > idnum:
                idnum = team.serialNum
    idnum += 1
    team.status = 'passed'
    print(idnum)
    team.serialNum = idnum

    team.save()
    print(team.name)
    print(team.status)
    print(team.serialNum)
    return team
コード例 #20
0
ファイル: teamUtils.py プロジェクト: AllenZYoung/Uranus
def submitTeam(team):
    if not isinstance(team, Team):
        return None
    if team.status != 'unsubmitted':
        log('未审核且已冻结的团队才能提交申请', 'teamutils', LOG_LEVEL.ERROR)
        return False
    num = Member.objects.filter(team=team).count()
    # print(num)
    # if num < team.course.teamMeta.minNum or num > team.course.teamMeta.maxNum:
    #     log('不在人数限制范围', 'teamutils', LOG_LEVEL.ERROR)
    #     return False
    users = reportTeam(team)
    users['member'].append(users['leader'])
    num = 0
    for person in users['member']:
        if person.user.gender == 'female':
            num += 1
    if num > 1:
        log('性别要求不合', 'teamutils', LOG_LEVEL.ERROR)
        return False

    team.status = 'auditing'
    team.save()
    return team
コード例 #21
0
ファイル: fileUtils.py プロジェクト: JellyWong/Uranus
def fileDownloadUrl(path):
    url = urllib.parse.quote(path)
    url = os.path.join(URL_BASE, url)
    log(url, 'fileDownloadUrl')
    return url