Пример #1
0
def members_sorted(members, sortCondition=LanguageResources().const.ID[1]):
    # MEMBER ID, ORGANIZATION NAME, MEMBER NAME, LAST_ACCESS_DATE, END DATE 정렬
    if sortCondition == LanguageResources().const.ID[1]:
        memberRecords = dao.query(members).\
                            order_by(members.c.memberId.asc(),
                                     members.c.memberName.asc(),
                                     members.c.lastAccessDate.asc(),
                                     members.c.limitedUseDate.asc())
    # MEMBER NAME, ORGANIZATION NAME, MEMBER ID, LAST_ACCESS_DATE, END DATE 정렬
    elif sortCondition == LanguageResources().const.Name[1]:
        memberRecords = dao.query(members).\
                            order_by(members.c.memberName.asc(),
                                     members.c.memberId.asc(),
                                     members.c.lastAccessDate.asc(),
                                     members.c.limitedUseDate.asc())
    # LAST_ACCESS_DATE, ORGANIZATION NAME, MEMBER ID, MEMBER NAME, END DATE 정렬
    elif sortCondition == LanguageResources().const.LastAccess[1]:
        memberRecords = dao.query(members).\
                            order_by(members.c.lastAccessDate.asc(),
                                     members.c.memberName.asc(),
                                     members.c.memberId.asc(),
                                     members.c.limitedUseDate.asc())
    # END DATE, ORGANIZATION NAME, MEMBER ID, MEMBER NAME, LAST_ACCESS_DATE 정렬
    elif sortCondition == LanguageResources().const.FinishDate[1]:
        memberRecords = dao.query(members).\
                            order_by(members.c.limitedUseDate.asc(),
                                     members.c.memberId.asc(),
                                     members.c.memberName.asc(),
                                     members.c.lastAccessDate.asc())

    return memberRecords
Пример #2
0
def article_notice(filterCondition, keyWord, pageNum):
    try:
        # get Notice Articles
        articlesOnBoard = select_articles().subquery()

        # Get MemberId
        articlesOnBoard = join_member_id(articlesOnBoard,
                                         subMemberIdIndex = articlesOnBoard.c.\
                                                                            writerIdIndex).subquery()

        # Get Problem Name
        articlesOnBoard = join_problems_name(
            subquery=articlesOnBoard,
            subProblemIndex=articlesOnBoard.c.problemIndex).subquery()
        # 과목 공지글
        try:
            if request.method == 'POST':
                for form in request.form:
                    # FilterCondition
                    if 'keyWord' != form:
                        filterCondition = form
                        keyWord = get_request_value(form=request.form,
                                                    name='keyWord')
                        pageNum = 1

                if not keyWord:
                    keyWord = ' '
            # Notices Sorted
            articleNoticeRecords = select_sorted_articles(
                articlesOnBoard,
                FilterFindParameter(filterCondition,
                                    (keyWord if keyWord != ' ' else '')),
                isAll=True)
            # Get Notices count
            count = select_count(articleNoticeRecords.subquery().\
                                                      c.\
                                                      articleIndex).first().\
                                                                    count
            # Get Notices in Page
            articleNoticeRecords = get_page_record(articleNoticeRecords,
                                                   pageNum=pageNum).all()
        except Exception:
            count = 0
            articleNoticeRecords = []

        return render_template(
            HTMLResources().const.ARTICLE_NOTICE_HTML,
            articleNoticeRecords=articleNoticeRecords,
            pages=get_page_pointed(pageNum, count),
            # 검색시 FilterCondition List
            Filters=[
                LanguageResources().const.All,
                LanguageResources().const.Writer,
                LanguageResources().const.Title
            ],
            filterCondition=filterCondition,
            keyWord=keyWord)
    except Exception as e:
        return unknown_error(e)
def problems_sorted(problems, sortCondition=LanguageResources().const.Name[1]):
    if sortCondition == LanguageResources().const.Name[1]:
        problemRecords = dao.query(problems).\
                             order_by(problems.c.problemName.asc(),
                                      problems.c.problemDifficulty.asc())
    # Difficulty ProblemName 정렬
    elif sortCondition == LanguageResources().const.Difficulty[1]:
        problemRecords = dao.query(problems).\
                             order_by(problems.c.problemDifficulty.asc(),
                                      problems.c.problemName.asc())

    return problemRecords
Пример #4
0
def id_check(select, error=None):
    if request.method == 'POST':
        password = get_request_value(form=request.form, name='password')
        if password:
            check = select_member(memberIdIndex=session[
                SessionResources().const.MEMBER_ID_INDEX]).first()

            # 암호가 일치 할 때
            #Checking Success
            if len(password) <= 20\
               and check_password_hash (check.password,
                                        TripleDES.encrypt(str(password))):
                # for all user
                if select == 'account':
                    return redirect(
                        url_for(RouteResources().const.EDIT_PERSONAL))
                # server manager
                elif SETResources().const.ADMINISTRATOR in session[
                        SessionResources().const.AUTHORITY]:
                    if select == 'user_submit':
                        return redirect(url_for('.user_submit',
                                                pageNum=int(1)))
                    elif select == 'manage_problem':
                        return redirect(
                            url_for(
                                '.manage_problem',
                                problemLevel=LanguageResources().const.All[1],
                                pageNum=int(1)))
                    elif select == 'manage_problem_set':
                        return redirect(
                            url_for('.manage_problem_set',
                                    activeTabIndex=LanguageResources().const.
                                    All[1],
                                    pageNum=int(1)))
                    elif select == 'manage_user':
                        return redirect(
                            url_for(
                                '.manage_user',
                                sortCondition=LanguageResources().const.ID[1],
                                filterCondition=' ',
                                keyWord=' ',
                                pageNum=int(1)))
                    elif select == 'manage_service':
                        return redirect(url_for('.manage_service'))
                        # 암호가 일치 하지 않을 때
            else:
                error = LanguageResources().const.WrongPassword
        else:
            error = LanguageResources().const.WrongPassword

    return render_template(HTMLResources().const.ID_CHECK_HTML, error=error)
Пример #5
0
def check_user_info(request_form, error = None):
    checker = True
    language = {'kr':0, # default
                'en':1}
        
    for form in request_form:
            if "language" in form:
                checker = False
                lang = get_request_value(form = request.form,
                                         name = 'language')
                session['language'] = language[lang]
                
    if checker: 
        try:
            """ DB Password check """
            memberId = get_request_value(form = request.form,
                                         name = 'memberId')
            password = get_request_value(form = request.form,
                                         name = 'password')
            
            check = select_match_member_id(memberId = memberId).first()
            
            #Checking Success
            if memberId == memberId\
               and check_password_hash(check.password,
                                       TripleDES.encrypt(str(password))):
                #push Session Cache 
                session[SessionResources().const.MEMBER_ID_INDEX] = check.memberIdIndex
                session[SessionResources().const.MEMBER_ID] = memberId
                session[SessionResources().const.MEMBER_NAME] = check.memberName
                session[SessionResources().const.AUTHORITY] = list(check.authority)
                session[SessionResources().const.LAST_ACCESS_DATE] = datetime.now()
                
                # set default language
                session['language'] = language['kr']
                                            
                # Commit Exception
                try:
                    update_recent_access_date(session[SessionResources().const.MEMBER_ID_INDEX],
                                              datetime.now())
                    dao.commit()
                except Exception:
                    dao.rollback()
                    error = LanguageResources().const.DBFailed
            else:
                error = LanguageResources().const.WrongPassword
        # Not Exist MemberId
        except Exception:
            error = LanguageResources().const.WrongPassword
        # Return Login Page
        return error
Пример #6
0
def send_to_celery(memberIdIndex, problemIndex, submissionIndex,
                   usedLanguageName, usedLanguageVersion,
                   sumOfSubmittedFileSize, problemName, filePath, tempPath):
    if usedLanguageName == OtherResources().const.PYTHON:
        usedLanguageIndex = get_used_language_index(usedLanguageName,
                                                    usedLanguageVersion)
    else:
        usedLanguageIndex = get_used_language_index(usedLanguageName)
    submissionCount, solutionCheckCount = get_submission_info(
        memberIdIndex, problemIndex)
    insert_to_submissions(submissionIndex, submissionCount, solutionCheckCount,
                          usedLanguageIndex, sumOfSubmittedFileSize)
    problemPath, limitedTime, limitedMemory, solutionCheckType, numberOfTestCase = get_problem_info(
        problemIndex, problemName)

    if numberOfTestCase >= 2:
        numberOfTestCase -= 1

    Grade.delay(submissionIndex, submissionCount, int(problemIndex),
                str(filePath), str(problemPath), str(solutionCheckType),
                numberOfTestCase, limitedTime, limitedMemory,
                str(usedLanguageName), str(usedLanguageVersion),
                str(problemName))

    dao.commit()

    flash(LanguageResources().const.SubmissionSuccess[session[
        OtherResources().const.LANGUAGE]])
    os.system(OtherResources().const.DELETE_COMMAND % filePath)
    os.rename(tempPath, filePath)
Пример #7
0
def search_submissions(submissions, filterFindParameter):
    # condition은 All, courseName, problemName, memberId로 나누어서 검새
    if filterFindParameter.filterCondition == LanguageResources(
    ).const.All[1]:  # Filters[0] is '모두'
        submissions = dao.query(submissions).\
                          filter(or_(submissions.c.problemName.like('%' + filterFindParameter.keyWord + '%'),
                                     submissions.c.memberId == filterFindParameter.keyWord))
    elif filterFindParameter.filterCondition == LanguageResources(
    ).const.Problem[1]:  # Filters[2] is 'ProblemName'
        submissions = dao.query(submissions).\
                          filter(submissions.c.problemName.like('%' + filterFindParameter.keyWord + '%'))
    else:  # Filters[3] is 'MembmerId'
        submissions = dao.query(submissions).\
                          filter(submissions.c.memberId == filterFindParameter.keyWord)

    return submissions
Пример #8
0
def remove_carriage_return(path):
    error = change_directory_to(path)
    if not error:
        try:
            subprocess.call('cp %s/static/shell/remove_crlf.sh ./' % pyPath,
                            shell=True)
        except:
            return LanguageResources().const.MoveShellError

        try:
            subprocess.call('sh remove_crlf.sh', shell=True)
            subprocess.call('rm *.sh *.sh+tmp', shell=True)
        except:
            return LanguageResources().const.RemoveShellError

    return error
Пример #9
0
def get_current_path():
    error = None

    try:
        currentPath = os.getcwd()
    except OSError:
        error = LanguageResources().const.GetCurrentDirError

    return currentPath, error
Пример #10
0
def rename_file(fromA, toB):
    error = None

    try:
        subprocess.call('mv %s %s' % (fromA, toB), shell=True)
    except OSError:
        error = LanguageResources().const.RenameFileError

    return error
Пример #11
0
def change_directory_to(path):
    error = None

    try:
        os.chdir(path)
    except OSError:
        error = LanguageResources().const.ChangeDirError

    return error
Пример #12
0
def remove_space_from_names_in(path):
    error = change_directory_to(path)

    if not error:
        try:
            subprocess.call('for f in *;do mv "$f" `echo $f|sed "s/ //g"`;done',\
                            shell=True)
        except OSError:
            error = LanguageResources().const.RemoveSpaceError

    return error
    def decorated_function(*args, **kwargs):
        try:
            from GradeServer.utils.utils import access_authority_check,\
                                                get_request_value
            from GradeServer import page_not_found
            
            # Get URL Parameters
            problemLevel = get_request_value(kwargs,
                                             'problemLevel')
            memberIdIndex = get_request_value(kwargs,
                                              'memberIdIndex')
            submissionIndex = get_request_value(kwargs,
                                                'submissionIndex')
            problemIndex = get_request_value(kwargs,
                                             'problemIndex')
            submissionReplyIndex = get_request_value(kwargs,
                                                     'submissionReplyIndex')
            articleIndex = get_request_value(kwargs,
                                             'articleIndex')
            boardReplyIndex = get_request_value(kwargs,
                                                'boardReplyIndex')
            # unusual URL Access Check
            if not access_authority_check(problemLevel = (None if problemLevel == LanguageResources().const.All[1]
                                                          else problemLevel),
                                          memberIdIndex = (None if memberIdIndex == None
                                                           else int(memberIdIndex)),
                                          submissionIndex = (None if submissionIndex == None
                                                             else int(submissionIndex)),
                                          problemIndex = (None if problemIndex == None
                                                          else int(problemIndex)),
                                          submissionReplyIndex = (None if submissionReplyIndex == None
                                                                  else int(submissionReplyIndex)),
                                          articleIndex = (None if articleIndex == None
                                                          else int(articleIndex)),
                                          boardReplyIndex = (None if boardReplyIndex == None
                                                             else int(boardReplyIndex)),
                                          isAdministrator = 'manage' in request.endpoint,
                                          isWrite = (True if 'write' in request.endpoint
                                                     else None),
                                          isCode = (True if 'submission_code' in request.endpoint
                                                    else None)):
                
                return page_not_found()
    
            # URL direct access and manager case
            if not request.referrer and 'manage' in request.endpoint:
                return redirect(url_for(RouteResources().const.ID_CHECK,
                                        select = request.endpoint.split('.')[-1]))
            
            return f(*args, **kwargs)

        except Exception as e: 
            return unknown_error (e)
def search_articles(articlesOnBoard, filterFindParameter):
    # condition은 All, Id, Title&Content로 나누어서 검새
    if filterFindParameter.filterCondition == LanguageResources(
    ).const.All[1]:  # Filters[0] is '모두'
        articlesOnBoard = dao.query(articlesOnBoard).\
                             filter(or_(articlesOnBoard.c.memberId == filterFindParameter.keyWord,
                                        articlesOnBoard.c.title.like('%' + filterFindParameter.keyWord + '%'),
                                        articlesOnBoard.c.content.like('%' + filterFindParameter.keyWord + '%'),
                                        articlesOnBoard.c.problemName.like('%' +filterFindParameter.keyWord + '%')))
    elif filterFindParameter.filterCondition == LanguageResources(
    ).const.Writer[1]:  # Filters[1] is '작성자'
        articlesOnBoard = dao.query(articlesOnBoard).\
                              filter(articlesOnBoard.c.memberId == filterFindParameter.keyWord)
    elif filterFindParameter.filterCondition == LanguageResources(
    ).const.Title[1]:  # Filters[2] is '제목&내용'
        articlesOnBoard = dao.query(articlesOnBoard).\
                              filter(or_(articlesOnBoard.c.title.like('% '+ filterFindParameter.keyWord + '%'),
                                         articlesOnBoard.c.content.like('%' + filterFindParameter.keyWord + '%'),
                                         articlesOnBoard.c.problemName.like('%' +filterFindParameter.keyWord + '%')))

    return articlesOnBoard
Пример #15
0
def search_members(members,
                   filterFindParameter,
                   isDeleted=ENUMResources().const.FALSE):
    # condition은 All, ID, Name로 나누어서 검새
    if filterFindParameter.filterCondition == LanguageResources(
    ).const.All[1]:  # Filters[0] is '모두'
        members = dao.query(members).\
                      filter(or_(members.c.memberId == filterFindParameter.keyWord,
                                 members.c.memberName.like('%' + filterFindParameter.keyWord + '%')),
                             members.c.isDeleted == isDeleted)
    elif filterFindParameter.filterCondition == LanguageResources(
    ).const.ID[1]:  # Filters[1] is ID
        members = dao.query(members).\
                      filter(members.c.memberId == filterFindParameter.keyWord,
                             members.c.isDeleted == isDeleted)
    else:  # Filters[2] is 'NAme'
        members = dao.query(members).\
                      filter(members.c.memberName.like('%'+ filterFindParameter.keyWord + '%'),
                             members.c.isDeleted == isDeleted)

    return members
Пример #16
0
def ranks_sorted(ranks, sortCondition=LanguageResources().const.Rate[1]):
    # rate, Solved Problem, submissionCount 정렬
    if sortCondition == LanguageResources().const.Rate[1]:
        rankMemberRecords = dao.query(ranks,
                                      Members.comment).\
                                join(Members,
                                     and_(Members.memberIdIndex == ranks.c.memberIdIndex)).\
                                order_by(ranks.c.solvedRate.desc(),
                                         ranks.c.sumOfSolvedProblemCount.desc(),
                                         ranks.c.solutionCheckCount.asc())
    # Solved Problem, rate, submissionCount  Sorted
    elif sortCondition == LanguageResources().const.SolvedProblems[1]:
        rankMemberRecords = dao.query(ranks,
                                      Members.comment).\
                                join(Members,
                                     and_(Members.memberIdIndex == ranks.c.memberIdIndex)).\
                                order_by(ranks.c.sumOfSolvedProblemCount.desc(),
                                         ranks.c.solvedRate.desc(),
                                         ranks.c.solutionCheckCount.asc())

    return rankMemberRecords
Пример #17
0
def submissions_sorted(
        submissions,
        sortCondition=LanguageResources().const.SubmissionDate[1],
        DESC=None):

    # 제출날짜, 실행 시간, 사용 메모리, 코드 길이 순 정렬
    if sortCondition == LanguageResources().const.SubmissionDate[1]:
        submissionRecords = dao.query(submissions).\
                                order_by((submissions.c.codeSubmissionDate.desc() if DESC
                                          else submissions.c.codeSubmissionDate.asc()),
                                         submissions.c.runTime.asc(),
                                         submissions.c.usedMemory.asc(),
                                         submissions.c.sumOfSubmittedFileSize.asc())
        # 실행 시간, 사용 메모리, 코드 길이, 제출날짜 순 정렬
    elif sortCondition == LanguageResources().const.Runtime[1]:
        submissionRecords = dao.query(submissions).\
                                order_by(submissions.c.runTime.asc(),
                                         submissions.c.usedMemory.asc(),
                                         submissions.c.sumOfSubmittedFileSize.asc(),
                                         (submissions.c.codeSubmissionDate.desc() if DESC
                                          else submissions.c.codeSubmissionDate.asc()))
        # 사용 메모리, 실행 시간, 코드 길이, 제출날짜 별 정렬
    elif sortCondition == LanguageResources().const.Memory[1]:
        submissionRecords = dao.query(submissions).\
                                order_by(submissions.c.usedMemory.asc(),
                                         submissions.c.runTime.asc(),
                                         submissions.c.sumOfSubmittedFileSize.asc(),
                                         (submissions.c.codeSubmissionDate.desc() if DESC
                                          else submissions.c.codeSubmissionDate.asc()))
        # 코드 길이, 사용 메모리, 실행 시간, 제출날짜 별 정렬
    elif sortCondition == LanguageResources().const.FileSize[1]:
        submissionRecords = dao.query(submissions).\
                                order_by(submissions.c.sumOfSubmittedFileSize.asc(),
                                         submissions.c.runTime.asc(),
                                         submissions.c.usedMemory.asc(),
                                         (submissions.c.codeSubmissionDate.desc() if DESC
                                          else submissions.c.codeSubmissionDate.asc()))

    return submissionRecords
Пример #18
0
def manage_problem(problemLevel, pageNum, error=None):
    try:
        # Upload Problems Files
        if request.method == 'POST':
            if is_authority(session[SessionResources().const.AUTHORITY])[0]:
                error = post_problem(request)
            else:
                error = LanguageResources().const.GetOutHere

        # GET, POST 공통 사항
        problems = select_problems(None if problemLevel == LanguageResources().
                                   const.All[1] else problemLevel)

        try:
            count = select_count(problems.subquery().c.problemIndex).first().\
                                                          count

            problemRecords = get_page_record(problems, pageNum=pageNum).all()

        except Exception:
            count = 0
            problemRecords = []

        return render_template('/manage_problem.html',
                               types=[
                                   ENUMResources().const.SOLUTION,
                                   ENUMResources().const.CHECKER
                               ],
                               levels=[
                                   LanguageResources().const.GoldLevel,
                                   LanguageResources().const.SilverLevel,
                                   LanguageResources().const.BronzeLevel
                               ],
                               problemLevel=problemLevel,
                               problemRecords=problemRecords,
                               pages=get_page_pointed(pageNum, count),
                               error=error)
    except Exception as e:
        return unknown_error(e)
Пример #19
0
def insert_member_registration(memberIdIndex,
                               memberId,
                               memberName,
                               password,
                               detailInformation,
                               error=None):
    if memberIdIndex:
        # Duplication Registrations
        error = LanguageResources().const.Exist
    else:
        dao.add(
            insert_members(memberId=memberId,
                           memberName=memberName,
                           password=password,
                           signedInDate=datetime.now(),
                           detailInformation=detailInformation))

    return error
Пример #20
0
def submission_code(memberIdIndex, status, problemIndex, error=None):
    try:
        # Get endDateOfSubmission of Problem
        # are Not Access. conditions is an Administrator and endOfSubmission ago
        if SETResources().const.ADMINISTRATOR in session[SessionResources().const.AUTHORITY]\
           or memberIdIndex == session[SessionResources().const.MEMBER_ID_INDEX]:

            # Get SubmissionIndex
            dataOfSubmissionBoard = select_data_of_submission_board(
                None, memberIdIndex, problemIndex)
            if dataOfSubmissionBoard.first():
                submissionIndex = dataOfSubmissionBoard.first().submissionIndex
                # 내가 Code에 누른 좋아요 정보
                try:
                    isLikeCancelled = select_code_is_like(submissionIndex,
                                                          memberIdIndex = session[SessionResources().const.MEMBER_ID_INDEX]).first().\
                                                          isLikeCancelled
                except Exception:
                    # Non-Exist Case
                    isLikeCancelled = None

                if request.method == 'POST':
                    authorityCheck = is_authority(
                        session[SessionResources().const.AUTHORITY])

                    for form in request.form:
                        # 댓글 달기
                        if form == 'writeCodeReply':
                            # 새로운 댓글 정보articleParameter
                            codeReplyContent = get_request_value(
                                form=request.form, name='writeCodeReply')

                            if codeReplyContent:
                                dao.add(
                                    insert_replies_on_code(
                                        submissionIndex,
                                        memberIdIndex=session[SessionResources(
                                        ).const.MEMBER_ID_INDEX],
                                        articleParameter=ArticleParameter(
                                            title=None,
                                            content=codeReplyContent,
                                            updateIp=socket.gethostbyname(
                                                socket.gethostname()),
                                            updateDate=datetime.now())))
                                # remove duplicated read count
                                update_code_view_reply_counting(
                                    submissionIndex,
                                    VIEW_INCREASE=-1,
                                    REPLY_INCREASE=1)

                            break
                            # 댓글 삭제
                        elif 'deleteCodeReply' in form:
                            # Get Reply Index
                            replyIndex = len('deleteCodeReply')
                            submissionReplyIndex = int(form[replyIndex:])

                            try:
                                writerIndex = select_replies_on_code(
                                    submissionIndex=None,
                                    submissionReplyIndex=submissionReplyIndex
                                ).first()
                            except Exception:
                                writerIndex = None
                            if (authorityCheck[0] or authorityCheck[1])\
                               or writerIndex.codeReplierIdIndex == session['memberIdIndex']:

                                update_replies_on_code_delete(
                                    submissionReplyIndex,
                                    isDeleted=ENUMResources().const.TRUE)
                                # remove duplicated read count
                                update_code_view_reply_counting(
                                    submissionIndex,
                                    VIEW_INCREASE=-1,
                                    REPLY_INCREASE=-1)
                            else:
                                error = LanguageResources().const.GetOutHere

                            break
                        # Commit Modify
                        elif 'modifyCodeReplyContent' in form:
                            replyIndex = len('modifyCodeReplyContent')
                            submissionReplyIndex = int(form[replyIndex:])
                            try:
                                writerIndex = select_replies_on_code(
                                    submissionIndex=None,
                                    submissionReplyIndex=submissionReplyIndex
                                ).first()
                            except Exception:
                                writerIndex = None
                            if writerIndex.codeReplierIdIndex == session[
                                    'memberIdIndex']:
                                submissionReplyContent = get_request_value(
                                    form=request.form,
                                    name='modifyCodeReplyContent{0}'.format(
                                        form[replyIndex:]))

                                if submissionReplyContent:
                                    #update comment
                                    update_replies_on_code_modify(
                                        submissionReplyIndex,
                                        ArticleParameter(
                                            title=None,
                                            content=submissionReplyContent,
                                            updateIp=socket.gethostbyname(
                                                socket.gethostname()),
                                            updateDate=datetime.now()))
                                    # remove duplicated read count
                                    update_code_view_reply_counting(
                                        submissionIndex, VIEW_INCREASE=-1)
                            else:
                                error = LanguageResources().const.GetOutHere

                            break
                    # end Loop
                    # Commit Exception
                    try:
                        dao.commit()
                    except Exception:
                        dao.rollback()
                        error = LanguageResources().const.DBFailed

                try:
                    # replies 정보
                    repliesOnSubmissionRecords = select_replies_on_code(
                        submissionIndex).subquery()
                    repliesOnSubmissionRecords = join_member_id(
                        repliesOnSubmissionRecords,
                        repliesOnSubmissionRecords.c.codeReplierIdIndex)
                    # 내가 게시글 리플에 누른 좋아요 정보
                    repliesOnSubmissionIsLikeRecords = select_replies_on_code_like(
                        repliesOnSubmissionRecords.subquery(), session[
                            SessionResources().const.MEMBER_ID_INDEX]).all()
                    repliesOnSubmissionRecords = repliesOnSubmissionRecords.all(
                    )
                except Exception:
                    repliesOnSubmissionIsLikeRecords = []
                    repliesOnSubmissionRecords = []

                    # 읽은 횟수 카운팅
                update_code_view_reply_counting(submissionIndex,
                                                VIEW_INCREASE=1)

                # Commit Exception
                try:
                    dao.commit()
                except Exception:
                    dao.rollback()

                # Problem Information (LimitedTime, LimitedMemory
                try:
                    problemName = select_problem(problemIndex = problemIndex).first().\
                                                                              problemName
                except Exception:
                    problemName = None

                # Problem Solved Users
                try:
                    # last Submissions Info
                    lastSubmission = select_last_submissions(
                        memberIdIndex=memberIdIndex,
                        problemIndex=problemIndex).subquery()
                    problemSolvedMemberRecords = select_all_submissions(
                        memberIdIndex=memberIdIndex,
                        problemIndex=problemIndex,
                        lastSubmission=lastSubmission).first()
                except Exception:
                    problemSolvedMemberRecords = []

                # Submitted Files Information
                import codecs
                try:
                    submittedFileRecords = select_submitted_files(
                        dataOfSubmissionBoard.subquery()).all()
                    fileData = []

                    for raw in submittedFileRecords:
                        # Open
                        filePath = '{0}/{1}'.format(raw.filePath, raw.fileName)
                        # EUC_KR type
                        try:
                            with codecs.open(filePath, 'r',
                                             encoding='cp949') as f:
                                # Read
                                data = f.read()
                                fileData.append(data)
                        # UTF-8 Type
                        except Exception:
                            with codecs.open(filePath, 'r',
                                             encoding='utf8') as f:
                                # Read
                                data = f.read()
                                fileData.append(data)
                except Exception:
                    submittedFileRecords = []
                    fileData = []

                return render_template(HTMLResources().const.SUBMISSION_CODE_HTML,
                                       memberIdIndex = memberIdIndex,
                                       submissionIndex = submissionIndex,
                                       submittedFileRecords = submittedFileRecords,
                                       fileData = fileData,
                                       problemName = problemName,
                                       problemSolvedMemberRecords = problemSolvedMemberRecords,
                                       isLikeCancelled = isLikeCancelled,
                                       sumOfLikeCount = dataOfSubmissionBoard.first().\
                                                                              sumOfLikeCount,
                                       repliesOnSubmissionIsLikeRecords = repliesOnSubmissionIsLikeRecords,
                                       repliesOnSubmissionRecords = repliesOnSubmissionRecords,
                                       browserName = request.user_agent.browser,
                                       browserVersion = request.user_agent.version,
                                       error = error)
        #Access Rejection
        else:
            return redirect(
                url_for(
                    RouteResources().const.PROBLEM_RECORD,
                    status=status,
                    problemIndex=problemIndex,
                    sortCondition=LanguageResources().const.SubmissionDate[1]))
    except Exception as e:
        return unknown_error(e)
Пример #21
0
def problem_record(status, problemIndex, sortCondition, error=None):
    # Not Accept URL Check
    if sortCondition not in (LanguageResources().const.SubmissionDate[1],
                             LanguageResources().const.Memory[1],
                             LanguageResources().const.FileSize[1],
                             LanguageResources().const.Runtime[1]):
        return page_not_found()

    try:
        memberId = None
        # Request Post
        if request.method == 'POST':
            # Search Event
            if 'memberId' in request.form:
                memberId = get_request_value(form=request.form,
                                             name='memberId')

        # Chart View Value Text
        chartSubmissionDescriptions = [
            LanguageResources().const.TriedPeople,
            LanguageResources().const.SolvedPeople,
            LanguageResources().const.Count,
            LanguageResources().const.Solved,
            LanguageResources().const.WrongAnswer,
            LanguageResources().const.TimeOver,
            LanguageResources().const.MemoryOverflow,
            LanguageResources().const.CompileError,
            LanguageResources().const.RuntimeError
        ]

        # last Submissions of Problem Info
        lastSubmission = select_last_submissions(
            problemIndex=problemIndex).subquery()
        submissions = select_all_submissions(
            problemIndex=problemIndex,
            lastSubmission=lastSubmission).subquery()
        try:
            # Submitted Members Count
            sumOfSubmissionPeopleCount = select_submissions_peoples_counts(
                submissions).subquery()
            # Solved Members Count
            sumOfSolvedPeopleCount = select_solved_peoples_counts(
                submissions).subquery()
            # Problem Record
            problemSubmittedRecords = select_submitted_records_of_problem(
                problemIndex=problemIndex).subquery()
            # Chart SubmissionRecords
            chartSubmissionRecords = select_problem_chart_submissions(
                sumOfSubmissionPeopleCount, sumOfSolvedPeopleCount,
                problemSubmittedRecords).first()
        except Exception:
            chartSubmissionRecords = []

        # Problem Information (LimitedTime, LimitedMemory
        try:
            problemInformation = select_problem(
                problemIndex=problemIndex).first()
        except Exception:
            problemInformation = []

        # Problem Solved Users
        try:
            # Problem Solved Member
            problemSolvedMemberRecords = submissions_sorted(
                select_solved_submissions(submissions).subquery(),
                sortCondition=sortCondition).all()
        except Exception:
            problemSolvedMemberRecords = []

        # Search Failed Problem
        if status != ENUMResources().const.SOLVED\
           and status != ENUMResources().const.JUDGING\
           and status != ENUMResources().const.SERVER_ERROR:
            try:
                # last Submissions of Problem Info
                lastSubmission = select_last_submissions(
                    memberIdIndex=session[
                        SessionResources().const.MEMBER_ID_INDEX],
                    problemIndex=problemIndex).subquery()
                submissions = select_all_submissions(
                    memberIdIndex=session[
                        SessionResources().const.MEMBER_ID_INDEX],
                    problemIndex=problemIndex,
                    lastSubmission=lastSubmission).subquery()
                # Current Failed Problem
                failedProblem = select_failed_problems(submissions).first()
            except Exception:
                failedProblem = []
        else:
            failedProblem = []

        return render_template(
            HTMLResources().const.PROBLEM_RECORD_HTML,
            memberId=memberId,
            status=status,
            problemSolvedMemberRecords=problemSolvedMemberRecords,
            problemInformation=problemInformation,
            chartSubmissionDescriptions=chartSubmissionDescriptions,
            chartSubmissionRecords=chartSubmissionRecords,
            failedProblem=failedProblem,
            error=error)
    except Exception as e:
        return unknown_error(e)
Пример #22
0
def access_authority_check(problemLevel=None,
                           memberIdIndex=None,
                           submissionIndex=None,
                           problemIndex=None,
                           submissionReplyIndex=None,
                           articleIndex=None,
                           boardReplyIndex=None,
                           isAdministrator=None,
                           isWrite=None,
                           isCode=None):

    try:
        # Zero Index Check
        if memberIdIndex == 0\
           or problemIndex == 0\
           or submissionReplyIndex == 0\
           or (articleIndex == 0 and not isWrite)\
           or boardReplyIndex == 0:
            return False

        # Get Authority type Turple
        authority = is_authority(session[SessionResources().const.AUTHORITY])

        # Get my Index
        thisMemberIdIndex = session[SessionResources().const.MEMBER_ID_INDEX]

        # Authority check authority is turple, size 3
        if isAdministrator and authority[0]:
            if problemLevel\
                 and problemLevel not in (LanguageResources().const.GoldLevel[1],
                                          LanguageResources().const.SilverLevel[1],
                                          LanguageResources().const.BronzeLevel[1]):
                return False

            return True
        elif isAdministrator and not authority[0]:
            return False
        else:
            # Division Index
            if submissionIndex:
                submissionIndex = select_data_of_submission_board(
                    submissionIndex).first()
                memberIdIndex = submissionIndex.memberIdIndex
                problemIndex = submissionIndex.problemIndex

            # MemberIdIndex Check
            if memberIdIndex\
               and not select_member(memberIdIndex).first():
                return False

            if problemIndex\
               and not course_problem_check(isAdministrator,
                                            authority,
                                            memberIdIndex,
                                            problemIndex,
                                            thisMemberIdIndex,
                                            isCode):
                return False

            # Submission Reply Index check
            if submissionReplyIndex:
                replySubmissionIndex = select_replies_on_code(
                    submissionIndex=None,
                    submissionReplyIndex=submissionReplyIndex).first()
                replySubmissionIndex = select_data_of_submission_board(
                    replySubmissionIndex.submissionIndex).first()
                if not course_problem_check(isAdministrator, authority,
                                            replySubmissionIndex.memberIdIndex,
                                            replySubmissionIndex.problemIndex,
                                            thisMemberIdIndex, isCode):
                    return False

            # Board Check
            if articleIndex:
                article = select_article(articleIndex).first()
                if isWrite\
                   and article.writerIdIndex != thisMemberIdIndex:
                    return False
        # All Pass Authority
        return True
    except Exception as e:
        Log.error(str(e))
        return False
Пример #23
0
def article_board(filterCondition, keyWord, pageNum):
    try:
        # get Articles
        articlesOnBoard = select_articles().subquery()
        # Get MemberId
        articlesOnBoard = join_member_id(articlesOnBoard,
                                         subMemberIdIndex = articlesOnBoard.c.\
                                                                            writerIdIndex).subquery()

        # Get Problem Name
        articlesOnBoard = join_problems_name(
            articlesOnBoard,
            subProblemIndex=articlesOnBoard.c.problemIndex).subquery()
        # 과목 공지글
        try:
            articleNoticeRecords = select_sorted_articles(
                articlesOnBoard).all()
        except Exception:
            articleNoticeRecords = []

            # 과목 게시글
        try:
            # Search Event
            if request.method == 'POST':
                for form in request.form:
                    # FilterCondition
                    if 'keyWord' != form:
                        filterCondition = form
                        keyWord = get_request_value(form=request.form,
                                                    name='keyWord')
                        pageNum = 1

                if not keyWord:
                    keyWord = ' '
            articlesOnBoardSub = select_sorted_articles(
                articlesOnBoard,
                FilterFindParameter(filterCondition,
                                    (keyWord if keyWord != ' ' else '')),
                articleType=ENUMResources().const.QUESTION)
            count = select_count(articlesOnBoardSub.subquery().\
                                                    c.articleIndex).first().\
                                                                    count
            articleRecords = get_page_record(articlesOnBoardSub,
                                             pageNum=pageNum,
                                             LIST=int(20)).all()
        except Exception:
            count = 0
            articleRecords = []

        return render_template(
            HTMLResources().const.BOARD_HTML,
            articleRecords=articleRecords,
            articleNoticeRecords=articleNoticeRecords,
            pages=get_page_pointed(pageNum, count, int(20)),
            # 검색시 FilterCondition List
            Filters=[
                LanguageResources().const.All,
                LanguageResources().const.Writer,
                LanguageResources().const.Title
            ],
            filterCondition=filterCondition,
            keyWord=keyWord)
    except Exception as e:
        return unknown_error(e)
Пример #24
0
def write(articleIndex, error=None):
    articleType, problemIndex, title, content, articlesOnBoard = None, None, None, None, None
    try:
        # Modify Case
        if articleIndex:
            try:
                articlesOnBoard = select_article(articleIndex).subquery()
                articlesOnBoard = join_problems_name(
                    subquery=articlesOnBoard,
                    subProblemIndex=articlesOnBoard.c.problemIndex).first()
            except Exception:
                articlesOnBoard = []

                # 작성시 빈칸 검사
        if request.method == 'POST':
            if not articleIndex\
               or articlesOnBoard.writerIdIndex == session[SessionResources().const.MEMBER_ID_INDEX]:
                # Get ProblemIndex
                problemIndex = get_request_value(form=request.form,
                                                 name='problemIndex')
                # Get ArticleType
                articleType = get_request_value(form=request.form,
                                                name='articleType')
                # 타이틀 가져오기
                title = get_request_value(form=request.form, name='title')
                # Get Exist Content
                content = get_request_value(form=request.form, name='content')

                # Success Post
                if title and len(title) <= 100\
                   and content:
                    updateDate = datetime.now()
                    updateIp = socket.gethostbyname(socket.gethostname())
                    # 새로 작성
                    if not articleIndex:
                        newPost = insert_articles_on_board(
                            problemIndex=problemIndex,
                            memberIdIndex=session[
                                SessionResources().const.MEMBER_ID_INDEX],
                            articleType=articleType,
                            articleParameter=ArticleParameter(
                                title=title,
                                content=content,
                                updateDate=updateDate,
                                updateIp=updateIp))
                        dao.add(newPost)
                        # Commit Exception
                        try:
                            dao.commit()
                        except exc.SQLAlchemyError:
                            dao.rollback()
                            error = LanguageResources().const.DBFailed

                        return redirect(
                            url_for(RouteResources().const.ARTICLE_BOARD,
                                    filterCondition=' ',
                                    keyWord=' ',
                                    pageNum=1))
                        # 게시물 수정
                    else:
                        # 수정 할 글 정보
                        update_article_modify(
                            articleIndex,
                            problemIndex=problemIndex,
                            articleType=articleType,
                            articleParameter=ArticleParameter(
                                title=title,
                                content=content,
                                updateIp=updateIp,
                                updateDate=updateDate))

                        # Commit Exception
                        try:
                            dao.commit()
                        except exc.SQLAlchemyError:
                            dao.rollback()
                            error = LanguageResources().const.DBFailed

                        return redirect(
                            url_for(RouteResources().const.ARTICLE_READ,
                                    articleIndex=articleIndex))
            else:
                error = LanguageResources().const.GetOutHere

        return render_template(HTMLResources().const.ARTICLE_WRITE_HTML,
                               articlesOnBoard=articlesOnBoard,
                               articleTypes=[
                                   ENUMResources().const.NOTICE,
                                   ENUMResources().const.QUESTION,
                                   ENUMResources().const.NORMAL
                               ],
                               articleType=articleType,
                               problemIndex=problemIndex,
                               title=title,
                               content=content,
                               error=error)
    except Exception as e:
        # Unknown Error
        return unknown_error(e)
Пример #25
0
def read(articleIndex, error=None):
    ''' when you push a title of board content '''
    try:
        # 내가 게시글에 누른 좋아요 정보
        try:
            isLikeCancelled = select_article_is_like(articleIndex,
                                                     memberIdIndex = session[SessionResources().const.MEMBER_ID_INDEX]).first().\
                                                                                                                        isLikeCancelled
        except Exception:
            # Non-Exist Case
            isLikeCancelled = None

        if request.method == 'POST':
            authorityCheck = is_authority(
                session[SessionResources().const.AUTHORITY])
            for form in request.form:

                # 댓글 달기
                if form == 'writeArticleReply':
                    # 새로운 댓글 정보articleParameter
                    boardReplyContent = get_request_value(
                        form=request.form, name='writeArticleReply')

                    if boardReplyContent:
                        dao.add(
                            insert_replies_on_board(
                                articleIndex, session[
                                    SessionResources().const.MEMBER_ID_INDEX],
                                ArticleParameter(title=None,
                                                 content=boardReplyContent,
                                                 updateIp=socket.gethostbyname(
                                                     socket.gethostname()),
                                                 updateDate=datetime.now())))
                        # remove duplicated read count
                        update_view_reply_counting(articleIndex,
                                                   VIEW_INCREASE=-1,
                                                   REPLY_INCREASE=1)

                    break
                    # 댓글 삭제
                elif 'deleteArticleReply' in form:
                    # Get Reply Index
                    replyIndex = len('deleteArticleReply')
                    boardReplyIndex = int(form[replyIndex:])

                    try:
                        writerIndex = select_replies_on_board(
                            articleIndex=None,
                            boardReplyIndex=boardReplyIndex).first()
                    except Exception:
                        writerIndex = None
                    if authorityCheck[0]\
                       or writerIndex.boardReplierIdIndex == session[SessionResources().const.MEMBER_ID_INDEX]:

                        update_replies_on_board_delete(
                            boardReplyIndex,
                            isDeleted=ENUMResources().const.TRUE)
                        # remove duplicated read count
                        update_view_reply_counting(articleIndex,
                                                   VIEW_INCREASE=-1,
                                                   REPLY_INCREASE=-1)
                    else:
                        error = LanguageResources().const.GetOutHere

                    break
                # Commit Modify
                elif 'modifyArticleReplyContent' in form:
                    replyIndex = len('modifyArticleReplyContent')
                    boardReplyIndex = int(form[replyIndex:])
                    try:
                        writerIndex = select_replies_on_board(
                            articleIndex=None,
                            boardReplyIndex=boardReplyIndex).first()
                    except Exception:
                        writerIndex = None
                    if writerIndex.boardReplierIdIndex == session[
                            SessionResources().const.MEMBER_ID_INDEX]:
                        boardReplyContent = get_request_value(
                            form=request.form,
                            name='modifyArticleReplyContent{0}'.format(
                                form[replyIndex:]))

                        if boardReplyContent:
                            #update comment
                            update_replies_on_board_modify(
                                boardReplyIndex,
                                ArticleParameter(title=None,
                                                 content=boardReplyContent,
                                                 updateIp=socket.gethostbyname(
                                                     socket.gethostname()),
                                                 updateDate=datetime.now()))
                            # remove duplicated read count
                            update_view_reply_counting(articleIndex,
                                                       VIEW_INCREASE=-1)
                    else:
                        error = LanguageResources().const.GetOutHere

                    break

                    # 게시물 삭제
                elif form == 'deleteArticle':
                    try:
                        writerIndex = select_article(
                            articleIndex=articleIndex).first()
                    except Exception:
                        writerIndex = None
                    if authorityCheck[0]\
                       or writerIndex.writerIdIndex == session[SessionResources().const.MEMBER_ID_INDEX]:
                        update_article_delete(
                            articleIndex, isDeleted=ENUMResources().const.TRUE)
                        # Commit Exception
                        try:
                            dao.commit()
                        except Exception:
                            dao.rollback()
                            error = LanguageResources().const.DBFailed

                        return redirect(
                            url_for(RouteResources().const.ARTICLE_BOARD,
                                    filterCondition=' ',
                                    keyWord=' ',
                                    pageNum=1))
                    else:
                        error = LanguageResources().const.GetOutHere
            # end Loop
            # Commit Exception
            try:
                dao.commit()
            except Exception:
                dao.rollback()
                error = LanguageResources().const.DBFailed

        # Get or Post
        # 게시글 정보
        try:
            articlesOnBoard = select_article(articleIndex).subquery()

            #Get ProblemName
            articlesOnBoard = join_problems_name(
                subquery=articlesOnBoard,
                subProblemIndex=articlesOnBoard.c.problemIndex).subquery()
            # Get MemberId
            articlesOnBoard = join_member_id(articlesOnBoard,
                                             subMemberIdIndex = articlesOnBoard.c.\
                                                                                 writerIdIndex).first()
        except Exception:
            articlesOnBoard = []

        try:
            # replies 정보
            repliesOnBoardRecords = select_replies_on_board(
                articleIndex).subquery()
            # Get MemberId
            repliesOnBoardRecords = join_member_id(repliesOnBoardRecords,
                                                   subMemberIdIndex = repliesOnBoardRecords.c.\
                                                                                            boardReplierIdIndex)
            # 내가 게시글 리플에 누른 좋아요 정보
            repliesOnBoardIsLikeRecords = select_replies_on_board_like(
                repliesOnBoardRecords.subquery(),
                memberIdIndex=session[
                    SessionResources().const.MEMBER_ID_INDEX]).all()
            repliesOnBoardRecords = repliesOnBoardRecords.all()
        except Exception:
            repliesOnBoardIsLikeRecords = []
            repliesOnBoardRecords = []

            # 읽은 횟수 카운팅
        update_view_reply_counting(articleIndex, VIEW_INCREASE=1)

        # Commit Exception
        try:
            dao.commit()
        except Exception:
            dao.rollback()

        return render_template(
            HTMLResources().const.ARTICLE_READ_HTML,
            articlesOnBoard=articlesOnBoard,
            repliesOnBoardRecords=repliesOnBoardRecords,
            repliesOnBoardIsLikeRecords=repliesOnBoardIsLikeRecords,
            isLikeCancelled=isLikeCancelled,
            error=error)
    except Exception:
        # Exception View
        return redirect(
            url_for(RouteResources().const.ARTICLE_BOARD, pageNum=1))
Пример #26
0
def rank(sortCondition, pageNum, error=None):

    # Not Accept URL Check
    if sortCondition not in (LanguageResources().const.Rate[1],
                             LanguageResources().const.SolvedProblems[1]):
        return page_not_found()

    try:
        #Searched MemberId
        memberId = None
        try:
            # Auto Complete MemberIds
            memberRecords = select_members().all()
        except Exception:
            memberRecords = []

        # Last Submission Max Count
        submissions = select_ranks(
            select_last_submissions().subquery()).subquery()
        submissions = join_member_id(
            submissions,
            subMemberIdIndex=submissions.c.memberIdIndex).subquery()
        # records count
        try:
            count = select_count(submissions.c.memberIdIndex).first().\
                                                              count
        except Exception:
            count = 0

        # Paging Pointed
        pages = get_page_pointed(pageNum=pageNum, count=count)
        submissions = ranks_sorted(submissions, sortCondition=sortCondition)
        # Find MemberId 뷰 호출
        if request.method == 'POST':
            # Finding MemberId
            memberId = get_request_value(form=request.form, name='memberId')
            try:
                memberIdIndex = select_match_member_id(
                    memberId).first().memberIdIndex
                # 순차 탐색으로 찾아야 함
                for i in range(1, pages['allPage'] + 1):
                    # memberId in Pages
                    ranks = get_page_record(submissions, pageNum=i).subquery()
                    # finding MemberId in Pages
                    if select_match_member_sub(
                            ranks,
                            memberIdIndex=memberIdIndex).first() != None:
                        # Finding move to page
                        pageNum = i
                        # searchLine Check
                        # RePaging Pointed
                        pages = get_page_pointed(pageNum=pageNum, count=count)

                        break
            except Exception:
                error = LanguageResources().const.NotExist
                # 랭크 정보
        try:
            rankMemberRecords = get_page_record(submissions,
                                                pageNum=pageNum).all()
        except Exception:
            rankMemberRecords = []

        return render_template(HTMLResources().const.RANK_HTML,
                               sortCondition=sortCondition,
                               memberRecords=memberRecords,
                               rankMemberRecords=rankMemberRecords,
                               pages=pages,
                               memberId=memberId,
                               error=error)  # 페이지 정보
    except Exception as e:
        return unknown_error(e)
Пример #27
0
def post_problem(request, error=None):
    if 'upload' in request.form:
        files = request.files.getlist('files')
        # Get Fle Failed
        if not list(files)[0].filename:
            return LanguageResources().const.UploadingFileError

        # read each uploaded file(zip)
        for fileData in files:
            # create temporary path to store new problem before moving into 'Problems' folder
            tmpPath = '%s/tmp' % projectPath
            '''
            @@ Check and Delete temporary folder
            
            If temporary folder 'tmp' is exist, then it means it had an error at past request.
            So, remove the temporary folder 'tmp' first.
            '''
            if os.path.exists(tmpPath):
                try:
                    subprocess.call('rm -rf %s' % tmpPath, shell=True)
                except OSError:
                    return LanguageResources().const.DeleteFolderError

            # unzip file
            with zipfile.ZipFile(fileData, 'r') as z:
                z.extractall(tmpPath)

            try:
                rowProblemName = re.split('_|\.',
                                          os.listdir(tmpPath)[0])[0].\
                                             replace(' ', '\ ')
            except OSError:
                return LangaugeResources().const.ListingFilesError
            '''
            @@ Decode problem name
            
            If the problem zip's made on window environment, problem name's broken
            So it needs to be decoded by cp949
            '''
            problemName = str(rowProblemName.decode('cp949'))
            # if decoded name is the same with before decoding,
            # it means the file is not created on window environment
            isFromWindow = True if rowProblemName != problemName\
                           else False

            if isFromWindow:
                error = handle_file_came_from_window(rowProblemName,
                                                     problemName)
                if error: return error

            problemInformationPath = ('%s/%s.txt' %
                                      (tmpPath, problemName)).replace(
                                          '\ ', ' ')
            try:
                # 'open' command can handle space character without '\' mark,
                # Replace '\ ' to just space ' '
                problemInfoFile = open(problemInformationPath, 'r')
                problemInformation = problemInfoFile.read()

                try:
                    problemInfoFile.close()
                except IOError:
                    return LanguageResources().const.ClosingFileError

            except IOError:
                return LanguageResources().const.ReadingFileError
            '''
            @@ Decode problem meta information
            
            Problem meta information(.txt) file needs to be decoded as well as problem folder name
            '''
            if isFromWindow:
                problemInformation = problemInformation.decode('cp949')
            # slice and make key, value pairs from csv form
            problemInformation = problemInformation.replace(' ', '').split(',')
            if len(problemInformation) != 5:
                return LanguageResources().const.NotEnoughInfoError
            # re-slice and make information from 'key=value'
            for eachInformation in problemInformation:
                key, value = eachInformation.split('=')
                if key == 'Name':
                    # 'value' doesn't have a space character because of 'replace(' ', '')' command above
                    # Don't use 'value' for problem name
                    problemName = problemName.replace('\ ', ' ')
                elif key == 'Difficulty':
                    try:
                        problemDifficulty = int(value)
                    except ValueError:
                        return LanguageResources().const.DifficultyCharError
                elif key == 'SolutionCheckType':
                    solutionCheckType = ENUMResources().const.SOLUTION if value == 'Solution'\
                                        else ENUMResources().const.CHECKER
                elif key == 'LimitedTime':
                    limitedTime = int(value)
                elif key == 'LimitedMemory':
                    limitedMemory = int(value)
            # Insert new problem
            problemPath = '%s/%s' % (problemsPath, problemName.replace(
                ' ', ''))
            if not select_problem(
                    problemIndex=None,
                    problemName=problemName,
                    isDeleted=ENUMResources().const.TRUE).first():
                dao.add(
                    insert_problem(problemName, problemDifficulty,
                                   solutionCheckType, limitedTime,
                                   limitedMemory, problemPath))
            else:
                # Duplication Case
                update_problem_deleted(select_problem(problemIndex = None,
                                                      problemName = problemName,
                                                      isDeleted = ENUMResources().const.TRUE).first().\
                                                                                 problemIndex,
                                       isDeleted = ENUMResources().const.FALSE)

            newProblemPath='%s/%s_%s' %\
                           (tmpPath, problemName, solutionCheckType)
            if change_directory_to(newProblemPath): return

            try:
                # current path : ../tmp/problemName_solutionCheckType
                inOutCases=\
                    [filename for filename in os.listdir(os.getcwd())]
            except OSError:
                return LanguageResources().const.ListingFilesError

            for filename in inOutCases:
                rowFileName = filename
                fileName='%s_%s' %\
                         (problemName, rowFileName.split('_', 1)[1])

                if rename_file(rowFileName, str(fileName)): return
            '''
            @@ Changing directory/file name
            
            work flow
            1. Remove space on its name
                from> Hello World 
                to> HelloWorld
                
            2. Attach problem ID ahead of the name
                from> HelloWorld
                to> 12345_HelloWorld
                * 12345 is created problem id
            '''
            currentPath, error = get_current_path()
            if error: return error

            # inside of SOLUTION or CHECKER folder
            error = remove_space_from_names_in(currentPath)
            if error: return error

            # move to outside of the folder
            if change_directory_to(tmpPath): return error

            currentPath, error = get_current_path()
            if error: return error

            # inside of Problem folder
            error = remove_space_from_names_in(currentPath)
            if error: return error

            # create final goal path
            if not os.path.exists(problemPath):
                os.makedirs(problemPath)

            problemName = problemName.replace(' ', '')
            problemDescriptionPath = '%s/%s' % (problemDescriptionsPath,
                                                problemName)
            if not os.path.exists(problemDescriptionPath):
                os.makedirs(problemDescriptionPath)

            error = rename_file('%s/*' % tmpPath, '%s/' % problemPath)
            if error: return error

            try:
                subprocess.call('cp %s/%s.pdf %s/' %\
                                (problemPath, problemName,\
                                problemDescriptionPath), shell=True)
            except:
                return LanguageResources().const.NotExistPDF

            error = remove_carriage_return(problemPath + '/' + problemName +
                                           '_' + solutionCheckType)
            if error: return error

    # Modify or Deleted Case
    else:
        if 'problemModify' in request.form:
            # Seach ProblemIndex
            updateProblemCount, updateCount = len(request.form) / 5, 0

            for form in request.form:
                if updateProblemCount == updateCount:
                    break
                elif 'problem' not in form\
                      and 'limited' not in form:
                    updateCount = updateCount + 1
                    update_problem(
                        problemIndex=form,
                        problemDifficulty=request.form['problemDifficulty' +
                                                       form],
                        solutionCheckType=request.form['problemType' + form],
                        limitedTime=request.form['limitedTime' + form],
                        limitedMemory=request.form['limitedMemory' + form])
        elif 'problemDeleted' in request.form:
            # Get ProblemIndex
            for form in request.form:
                if 'problem' not in form:
                    update_problem_deleted(problemIndex=form)

    try:
        dao.commit()
        if 'upload' in request.form:
            # update numberOfTestCase
            problem = select_problem(problemIndex=None,
                                     problemName=problemName).first()
            testCasePath = '{0}/Problems/{1}/{2}_SOLUTION/'.format(
                projectPath, problem.problemName, problem.problemName)

            numberOfTestCase = len(
                fnmatch.filter(os.listdir(testCasePath), '*.txt')) / 2
            update_number_of_test_case(problem.problemIndex, numberOfTestCase)

            try:
                dao.add(
                    insert_submitted_records_of_problems(problem.problemIndex))

                dao.commit()
            except Exception:
                dao.rollback()
        elif 'problemDeleted' in request.form:
            # Get ProblemIndex
            for form in request.form:
                if 'problem' not in form:
                    # Delete Folder
                    problem = select_problem(
                        int(form),
                        isDeleted=ENUMResources().const.TRUE).first()
                    problemPath = '{0}/Problems/{1}/'.format(
                        projectPath, problem.problemName)
                    if os.path.exists(problemPath):
                        shutil.rmtree(problemPath)

    except exc.SQLAlchemyError:
        dao.rollback()
        error = LanguageResources().const.DBFailed

    return error
Пример #28
0
def manage_user(filterCondition, keyWord, sortCondition, pageNum, error=None):
    # Not Accept URL Check

    if sortCondition not in (LanguageResources().const.ID[1],
                             LanguageResources().const.Name[1]):
        return page_not_found()

    try:
        # Request Post
        if request.method == 'POST':
            # Search Event
            # FilterCondition
            if len(request.form) <= 2 and 'keyWord' in request.form:
                for form in request.form:
                    if 'keyWord' != form:
                        filterCondition = form
                        keyWord = get_request_value(form=request.form,
                                                    name='keyWord')
                        pageNum = 1

                        break
            elif is_authority(session[SessionResources().const.AUTHORITY])[0]:
                if 'memberDeleted' in request.form:
                    for form in request.form:
                        if 'member' not in form and 'keyWord' not in form:
                            memberIdIndex = form
                            # Get Folder Path
                            member = select_member(
                                memberIdIndex=memberIdIndex).first()

                            try:
                                update_member_deleted(memberIdIndex)
                                dao.commit()

                                userPath = '{0}/Current/{1}_{2}'.format(
                                    projectPath, member.memberId,
                                    member.memberName)
                                # Delete Folder
                                if os.path.exists(userPath):
                                    shutil.rmtree(userPath)
                            except Exception:
                                dao.rollback()
                                error = LanguageResources().const.DBFailed
                else:
                    for form in request.form:
                        # Insert Indivisual
                        if 'memberInsert' in form:
                            insertCount = int(form[len('memberInsert'):]) + 1

                            for i in range(1, insertCount):
                                # Get Input Data
                                detailInformation = get_request_value(
                                    form=request.form,
                                    name='detailInformation{0}'.format(i))
                                memberId = get_request_value(
                                    form=request.form,
                                    name='memberId{0}'.format(i))
                                memberName = get_request_value(
                                    form=request.form,
                                    name='memberName{0}'.format(i))

                                if memberId\
                                   and memberName:
                                    try:
                                        memberIdIndex = select_match_member_id(memberId).first().\
                                                                                         memberIdIndex
                                    except Exception:
                                        memberIdIndex = None
                                    try:
                                        error = insert_member_registration(
                                            memberIdIndex=memberIdIndex,
                                            memberId=memberId,
                                            memberName=memberName,
                                            password=generate_password_hash(
                                                TripleDES.encrypt(
                                                    str(memberId))),
                                            detailInformation=detailInformation
                                        )
                                        dao.commit()

                                        # Get Folder Path
                                        userPath = '{0}/Current/{1}_{2}'.format(
                                            projectPath, memberId, memberName)
                                        # make Folders
                                        if not os.path.exists(userPath):
                                            os.makedirs(userPath)
                                    except Exception:
                                        dao.rollback()
                                        error = LanguageResources(
                                        ).const.DBFailed
                                else:
                                    error = LanguageResources(
                                    ).const.FormValidation
            else:
                error = LanguageResources().const.GetOutHere

        # Get Users
        try:
            members = select_members().subquery()
            # Filter Case
            if filterCondition\
               and filterCondition != ' ':
                if not keyWord:
                    keyWord = ' '
                members = search_members(
                    members,
                    FilterFindParameter(filterCondition=filterCondition,
                                        keyWord=(keyWord if keyWord != ' ' else
                                                 ''))).subquery()
            count = select_count(members.c.memberIdIndex).first().\
                                                          count
            memberRecords = get_page_record(members_sorted(
                members, sortCondition),
                                            pageNum=pageNum)
        except Exception:
            count = 0
            memberRecords = []

        return render_template(
            '/manage_user.html',
            # 검색시 FilterCondition List
            Filters=[
                LanguageResources().const.All,
                LanguageResources().const.ID,
                LanguageResources().const.Name
            ],
            sortCondition=sortCondition,
            filterCondition=filterCondition,
            keyWord=keyWord,
            memberRecords=memberRecords,
            pages=get_page_pointed(pageNum, count),
            count=count,
            error=error)
    except Exception as e:
        return unknown_error(e)
Пример #29
0
def edit_personal(error=None):
    contactNumber, emailAddress, comment = None, None, None
    try:
        #Get User Information
        try:
            members = select_member(memberIdIndex=session[
                SessionResources().const.MEMBER_ID_INDEX]).subquery()
            memberInformation = select_member(
                memberIdIndex=members.c.memberIdIndex).first()
        except Exception:
            memberInformation = []

        #Get Post
        if request.method == 'POST':
            password = get_request_value(form=request.form, name='password')
            passwordConfirm = get_request_value(form=request.form,
                                                name='passwordConfirm')
            #Get Updating Data
            contactNumber = get_request_value(form=request.form,
                                              name='contactNumber')
            emailAddress = get_request_value(form=request.form,
                                             name='emailAddress')
            comment = get_request_value(form=request.form, name='comment')
            #Password Same
            if (password and passwordConfirm) and password == passwordConfirm:
                #Generate Password
                encryPassword = TripleDES.encrypt(str(password))
                passwordConfirm = None

                password = generate_password_hash(encryPassword)
                #Update DB
                update_members(
                    select_member(memberIdIndex=session[
                        SessionResources().const.MEMBER_ID_INDEX]), password,
                    contactNumber, emailAddress, comment)
            #Password Different
            elif not password and not passwordConfirm:
                #Update DB
                update_members(members=select_member(memberIdIndex=session[
                    SessionResources().const.MEMBER_ID_INDEX]),
                               password=None,
                               contactNumber=contactNumber,
                               emailAddress=emailAddress,
                               comment=comment)
            # Commit Exception
            try:
                dao.commit()

                return redirect(url_for(RouteResources().const.SIGN_IN))
            except Exception:
                dao.rollback()
                error = LanguageResources().const.DBFailed

        return render_template(HTMLResources().const.EDIT_PERSONAL_HTML,
                               memberInformation=memberInformation,
                               contactNumber=contactNumber,
                               emailAddress=emailAddress,
                               comment=comment,
                               error=error)
    except Exception as e:
        return unknown_error(e)
Пример #30
0
def submission_record(memberIdIndex, sortCondition, pageNum):

    # Not Accept URL Check
    if sortCondition not in (LanguageResources().const.SubmissionDate[1],
                             LanguageResources().const.Memory[1],
                             LanguageResources().const.FileSize[1],
                             LanguageResources().const.Runtime[1]):
        return page_not_found()
    try:
        # Get MemberId
        try:
            member = select_member(memberIdIndex).first()
        except Exception:
            member = []

            # 모든 제출 정보
        submissions = select_all_submissions(memberIdIndex).subquery()

        try:
            # 차트 정보
            chartSubmissionRecords = select_member_chart_submissions(
                submissions).first()
        except Exception:
            #None Type Exception
            chartSubmissionRecords = []

        # Viiew Value Text
        chartSubmissionDescriptions = [
            LanguageResources().const.SolvedProblems,
            LanguageResources().const.Count,
            LanguageResources().const.Solved,
            LanguageResources().const.WrongAnswer,
            LanguageResources().const.TimeOver,
            LanguageResources().const.MemoryOverflow,
            LanguageResources().const.CompileError,
            LanguageResources().const.RuntimeError
        ]

        try:
            # 모든 제출 정보
            count = select_count(submissions.c.memberId).first().\
                                                         count
            # Sorted
            submissionRecords = get_page_record(submissions_sorted(
                submissions, sortCondition=sortCondition, DESC=True),
                                                pageNum=pageNum).all()
        except Exception:
            count = 0
            submissionRecords = []

        return render_template(
            HTMLResources().const.SUBMISSION_RECORD_HTML,
            memberIdIndex=memberIdIndex,
            sortCondition=sortCondition,
            member=member,
            submissionRecords=submissionRecords,
            chartSubmissionDescriptions=chartSubmissionDescriptions,
            chartSubmissionRecords=chartSubmissionRecords,
            pages=get_page_pointed(pageNum=pageNum, count=count))
    except Exception as e:
        # Unknow Error
        return unknown_error(e)