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
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
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)
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
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)
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
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
def get_current_path(): error = None try: currentPath = os.getcwd() except OSError: error = LanguageResources().const.GetCurrentDirError return currentPath, error
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
def change_directory_to(path): error = None try: os.chdir(path) except OSError: error = LanguageResources().const.ChangeDirError return error
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
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
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
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
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)
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
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)
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)
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
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)
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)
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))
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)
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
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)
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)
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)