def to_process_written_code(pageNum, problemIndex): memberId = session[SessionResources().const.MEMBER_ID] memberIdIndex = session[SessionResources().const.MEMBER_ID_INDEX] problemName = remove_space_in_problemName(problemIndex) filePath, tempPath = make_path(PATH, memberIdIndex, memberId, problemName) try: os.mkdir(tempPath) usedLanguageName, usedLanguageVersion, fileName = write_code_in_file(tempPath) fileSize = os.stat(os.path.join(tempPath, fileName)).st_size fileIndex = 1 submissionIndex = get_submission_index(memberIdIndex, problemIndex) delete_submitted_files_data(submissionIndex) insert_submitted_files(submissionIndex, fileIndex, fileName, filePath, fileSize) send_to_celery(memberIdIndex, problemIndex, submissionIndex, usedLanguageName, usedLanguageVersion, fileSize, problemName, filePath, tempPath) Log.info(OtherResources().const.WRITED_CODE_SUBMITTED) except OSError as e: Log.error(str(e)) submit_error(tempPath, pageNum, OtherResources().const.FILE_ERROR) except Exception as e: dao.rollback() Log.error(str(e)) print e submit_error(tempPath, pageNum, OtherResources().const.DB_ERROR) time.sleep(0.4) return page_move(pageNum)
def insert_invitee_id(teamName, inviteeId): # Update or Insert # if not exist then Insert if not dao.query(TeamInvitations).\ filter(TeamInvitations.teamName == teamName, TeamInvitations.inviteeId == inviteeId).\ first(): newInvitee = TeamInvitations(teamName = teamName, inviteeId = inviteeId) dao.add(newInvitee) # else then Update else : dao.query(TeamInvitations).\ filter(TeamInvitations.teamName == teamName, TeamInvitations.inviteeId == inviteeId).\ update(dict(isDeleted = ENUMResources().const.FaLSE)) # Commit Exception try: dao.commit() flash(inviteeId + get_message('inviteeSucceeded')) except Exception: dao.rollback() return get_message('updateFailed') return None
def to_process_uploaded_files(problemIndex, pageNum, browserName, browserVersion): memberId = session[SessionResources().const.MEMBER_ID] memberIdIndex = session[SessionResources().const.MEMBER_ID_INDEX] problemName = remove_space_in_problemName(problemIndex) filePath, tempPath = make_path(PATH, memberIdIndex, memberId, problemName) try: os.mkdir(tempPath) uploadFiles = request.files.getlist(OtherResources().const.GET_FILES) usedLanguageName = request.form[OtherResources().const.USED_LANGUAGE_NAME] usedLanguageVersion = request.form[OtherResources().const.USED_LANGUAGE_VERSION] submissionIndex = get_submission_index(memberIdIndex, problemIndex) sumOfSubmittedFileSize = file_save(submissionIndex, uploadFiles, tempPath, filePath) send_to_celery(memberIdIndex, problemIndex, submissionIndex, usedLanguageName, usedLanguageVersion, sumOfSubmittedFileSize, problemName, filePath, tempPath) Log.info(OtherResources().const.FILE_SUBMITTED) except OSError as e: Log.error(str(e)) submit_error(tempPath, pageNum, OtherResources().const.FILE_ERROR, browserName, browserVersion) except Exception as e: dao.rollback() Log.error(str(e)) print e submit_error(tempPath, pageNum, OtherResources().const.DB_ERROR, browserName, browserVersion) time.sleep(0.4) return page_move(pageNum, browserName, browserVersion)
def to_process_written_code(pageNum, problemIndex): memberId = session[SessionResources().const.MEMBER_ID] memberIdIndex = session[SessionResources().const.MEMBER_ID_INDEX] problemName = remove_space_in_problemName(problemIndex) filePath, tempPath = make_path(PATH, memberIdIndex, memberId, problemName) try: os.mkdir(tempPath) usedLanguageName, usedLanguageVersion, fileName = write_code_in_file( tempPath) fileSize = os.stat(os.path.join(tempPath, fileName)).st_size fileIndex = 1 submissionIndex = get_submission_index(memberIdIndex, problemIndex) delete_submitted_files_data(submissionIndex) insert_submitted_files(submissionIndex, fileIndex, fileName, filePath, fileSize) send_to_celery(memberIdIndex, problemIndex, submissionIndex, usedLanguageName, usedLanguageVersion, fileSize, problemName, filePath, tempPath) Log.info(OtherResources().const.WRITED_CODE_SUBMITTED) except OSError as e: Log.error(str(e)) submit_error(tempPath, pageNum, OtherResources().const.FILE_ERROR) except Exception as e: dao.rollback() Log.error(str(e)) print e submit_error(tempPath, pageNum, OtherResources().const.DB_ERROR) time.sleep(0.4) return page_move(pageNum)
def code_reply_like_click(submissionReplyIndex): # 댓글 좋아요 # 내가 Reply에 누른 좋아요 정보 try: isReplyLike = select_replies_on_code_is_like(submissionReplyIndex, memberIdIndex = session[SessionResources().const.MEMBER_ID_INDEX]).first().\ isLikeCancelled except Exception: # Non-Exist Case isReplyLike = None # 좋아요를 누른적 없을 때 if not isReplyLike: # Insert Like dao.add( insert_likes_on_reply_of_code( submissionReplyIndex, memberIdIndex=session[ SessionResources().const.MEMBER_ID_INDEX])) # Counting +1 LIKE_INCREASE = 1 else: # 다시 좋아요 누를 때 if isReplyLike == ENUMResources().const.TRUE: # Counting +1 LIKE_INCREASE = 1 isLikeCancelled = ENUMResources().const.FALSE # 좋아요 취소 할 때 else: # if it's already exist then change the value of 'pushedLike' # Counting -1 LIKE_INCREASE = -1 isLikeCancelled = ENUMResources().const.TRUE # Update Like update_replies_on_code_is_like( submissionReplyIndex, memberIdIndex=session[SessionResources().const.MEMBER_ID_INDEX], isLikeCancelled=isLikeCancelled) # Like or UnLIke update_replies_on_code_like_counting(submissionReplyIndex, LIKE_INCREASE=LIKE_INCREASE) try: dao.commit() # return like count try: count = select_replies_on_code(submissionIndex = None, submissionReplyIndex = submissionReplyIndex).first().\ sumOfLikeCount except Exception: count = 0 return Response(str(count)) except Exception: dao.rollback() return Response()
def article_like_click(articleIndex): # 게시글 좋아요 Push # 내가 게시글에 누른 좋아요 정보 try: isLikeCancelled = select_article_is_like(articleIndex, memberIdIndex = session[SessionResources().const.MEMBER_ID_INDEX]).first().\ isLikeCancelled except Exception: # Non-Exist Case isLikeCancelled = None # 좋아요를 누른적 없을 때 if not isLikeCancelled: # Insert Like dao.add( insert_likes_on_board( articleIndex, memberIdIndex=session[ SessionResources().const.MEMBER_ID_INDEX])) # Counting +1 LIKE_INCREASE = 1 else: # 다시 좋아요 누를 때 if isLikeCancelled == ENUMResources().const.TRUE: # Counting +1 LIKE_INCREASE = 1 isLikeCancelled = ENUMResources().const.FALSE # 좋아요 취소 할 때 else: # if it's already exist then change the value of 'pushedLike' # Counting -1 LIKE_INCREASE = -1 isLikeCancelled = ENUMResources().const.TRUE # Update Like update_article_is_like( articleIndex, memberIdIndex=session[SessionResources().const.MEMBER_ID_INDEX], isLikeCancelled=isLikeCancelled) # Article 좋아요 갯수 올리기 update_article_like_counting(articleIndex, LIKE_INCREASE=LIKE_INCREASE) try: dao.commit() # return like count try: count = select_article(articleIndex = articleIndex).first().\ sumOfLikeCount except Exception: count = 0 return Response(str(count)) except Exception: dao.rollback() return Response()
def code_reply_like_click(submissionReplyIndex): # 댓글 좋아요 # 내가 Reply에 누른 좋아요 정보 try: isReplyLike = select_replies_on_code_is_like(submissionReplyIndex, memberIdIndex = session[SessionResources().const.MEMBER_ID_INDEX]).first().\ isLikeCancelled except Exception: # Non-Exist Case isReplyLike = None # 좋아요를 누른적 없을 때 if not isReplyLike: # Insert Like dao.add(insert_likes_on_reply_of_code(submissionReplyIndex, memberIdIndex = session[SessionResources().const.MEMBER_ID_INDEX])) # Counting +1 LIKE_INCREASE = 1 else: # 다시 좋아요 누를 때 if isReplyLike == ENUMResources().const.TRUE: # Counting +1 LIKE_INCREASE = 1 isLikeCancelled = ENUMResources().const.FALSE # 좋아요 취소 할 때 else: # if it's already exist then change the value of 'pushedLike' # Counting -1 LIKE_INCREASE = -1 isLikeCancelled = ENUMResources().const.TRUE # Update Like update_replies_on_code_is_like(submissionReplyIndex, memberIdIndex = session[SessionResources().const.MEMBER_ID_INDEX], isLikeCancelled = isLikeCancelled) # Like or UnLIke update_replies_on_code_like_counting(submissionReplyIndex, LIKE_INCREASE = LIKE_INCREASE) try: dao.commit() # return like count try: count = select_replies_on_code(submissionIndex = None, submissionReplyIndex = submissionReplyIndex).first().\ sumOfLikeCount except Exception: count = 0 return Response(str(count)) except Exception: dao.rollback() return Response()
def article_like_click(articleIndex): # 게시글 좋아요 Push # 내가 게시글에 누른 좋아요 정보 try: isLikeCancelled = select_article_is_like(articleIndex, memberIdIndex = session[SessionResources().const.MEMBER_ID_INDEX]).first().\ isLikeCancelled except Exception: # Non-Exist Case isLikeCancelled = None # 좋아요를 누른적 없을 때 if not isLikeCancelled: # Insert Like dao.add(insert_likes_on_board(articleIndex, memberIdIndex = session[SessionResources().const.MEMBER_ID_INDEX])) # Counting +1 LIKE_INCREASE = 1 else: # 다시 좋아요 누를 때 if isLikeCancelled == ENUMResources().const.TRUE: # Counting +1 LIKE_INCREASE = 1 isLikeCancelled = ENUMResources().const.FALSE # 좋아요 취소 할 때 else: # if it's already exist then change the value of 'pushedLike' # Counting -1 LIKE_INCREASE = -1 isLikeCancelled = ENUMResources().const.TRUE # Update Like update_article_is_like(articleIndex, memberIdIndex = session[SessionResources().const.MEMBER_ID_INDEX], isLikeCancelled = isLikeCancelled) # Article 좋아요 갯수 올리기 update_article_like_counting(articleIndex, LIKE_INCREASE = LIKE_INCREASE) try: dao.commit() # return like count try: count = select_article(articleIndex = articleIndex).first().\ sumOfLikeCount except Exception: count = 0 return Response(str(count)) except Exception: dao.rollback() return Response()
def insert_into_departmentDetailsOfMembers(memberId, collegeIndex, departmentIndex): departmentInformation = DepartmentsDetailsOfMembers(memberId = memberId, collegeIndex = int(collegeIndex), departmentIndex = int(departmentIndex)) dao.add(departmentInformation) try: dao.commit() except: dao.rollback() return False return True
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 to_process_uploaded_files(courseId, problemId, problemName, pageNum, browserName, browserVersion): memberId = session[SessionResources.const.MEMBER_ID] filePath, tempPath = make_path(PATH, memberId, courseId, problemId, problemName) try: os.mkdir(tempPath) uploadFiles = request.files.getlist(OtherResources.const.GET_FILES) usedLanguageName = request.form[OtherResources.const.USED_LANGUAGE_NAME] sumOfSubmittedFileSize = file_save(memberId, courseId, problemId, uploadFiles, tempPath, filePath) send_to_celery(memberId, courseId, problemId, usedLanguageName, sumOfSubmittedFileSize, problemName, filePath, tempPath) except OSError as e: submit_error(tempPath, courseId, pageNum, 'fileError', browserName, browserVersion) except Exception as e: dao.rollback() submit_error(tempPath, courseId, pageNum, 'dbError', browserName, browserVersion) time.sleep(0.4) return page_move(courseId, pageNum, browserName, browserVersion)
def to_process_written_code(courseId, pageNum, problemId, problemName): memberId = session[SessionResources.const.MEMBER_ID] filePath, tempPath = make_path(PATH, memberId, courseId, problemId, problemName) try: os.mkdir(tempPath) usedLanguageName, fileName = write_code_in_file(tempPath) fileSize = os.stat(os.path.join(tempPath, fileName)).st_size fileIndex = 1 delete_submitted_files_data(memberId, problemId, courseId) insert_submitted_files(memberId, courseId, problemId, fileIndex, fileName, filePath, fileSize) send_to_celery(memberId, courseId, problemId, usedLanguageName, fileSize, problemName, filePath, tempPath) except OSError as e: submit_error(tempPath, courseId, pageNum, 'fileError') except Exception as e: dao.rollback() submit_error(tempPath, courseId, pageNum, 'dbError') time.sleep(0.4) return page_move(courseId, pageNum)
def insert_into_Members(memberId, password, memberName, authority, signedInDate, comment): ''' @@ TODO Default authority is USER. So if you want to make an account for server administrator, you change the authority in database terminal. ''' newMember = Members(memberId = memberId, password = password, memberName = memberName, authority = authority, signedInDate = signedInDate, comment = comment) dao.add(newMember) try: dao.commit() except: dao.rollback() return False return True
def team_invitation(teamName, accept, error = None): """ 팀 초대 수락 & 거절 """ try: # Delete Invitee dao.query(TeamInvitations).\ filter(TeamInvitations.teamName == teamName, TeamInvitations.inviteeId == session[SessionResources().const.MEMBER_ID]).\ update(dict(isDeleted = ENUMResources().const.TRUE)) # 초대 수락 if accept == OtherResources().const.ACCEPT: insert_team_member_id(teamName, session[SessionResources().const.MEMBER_ID]) # Commit Exception try: dao.commit() flash(teamName + get_message('acceptInvitee')) except Exception: dao.rollback() error = get_message('updateFailed') # 초대 걱절 else: # elif == REJECT: # Commit Exception try: dao.commit() flash(teamName + get_message('rejectInvitee')) except Exception: dao.rollback() error = get_message('updateFailed') return redirect(url_for(RouteResources().const.TEAM, pageNum = 1, error = error)) except Exception: # Unknown Error return unknown_error()
def to_process_uploaded_files(problemIndex, pageNum, browserName, browserVersion): memberId = session[SessionResources().const.MEMBER_ID] memberIdIndex = session[SessionResources().const.MEMBER_ID_INDEX] problemName = remove_space_in_problemName(problemIndex) filePath, tempPath = make_path(PATH, memberIdIndex, memberId, problemName) try: os.mkdir(tempPath) uploadFiles = request.files.getlist(OtherResources().const.GET_FILES) usedLanguageName = request.form[ OtherResources().const.USED_LANGUAGE_NAME] usedLanguageVersion = request.form[ OtherResources().const.USED_LANGUAGE_VERSION] submissionIndex = get_submission_index(memberIdIndex, problemIndex) sumOfSubmittedFileSize = file_save(submissionIndex, uploadFiles, tempPath, filePath) send_to_celery(memberIdIndex, problemIndex, submissionIndex, usedLanguageName, usedLanguageVersion, sumOfSubmittedFileSize, problemName, filePath, tempPath) Log.info(OtherResources().const.FILE_SUBMITTED) except OSError as e: Log.error(str(e)) submit_error(tempPath, pageNum, OtherResources().const.FILE_ERROR, browserName, browserVersion) except Exception as e: dao.rollback() Log.error(str(e)) print e submit_error(tempPath, pageNum, OtherResources().const.DB_ERROR, browserName, browserVersion) time.sleep(0.4) return page_move(pageNum, browserName, browserVersion)
def sign_in(): ''' @@ Success sign in flash When the page redirected from sign up page, It display flash message. ''' if '?' in request.url: flash('Signed up successfully') ''' main page before sign in''' from GradeServer.utils.utilMessages import get_message from GradeServer.utils.memberCourseProblemParameter import MemberCourseProblemParameter from GradeServer.utils.utilArticleQuery import select_notices from GradeServer.utils.utilQuery import select_accept_courses, select_past_courses, select_current_courses, select_match_member from GradeServer.utils.utilRankQuery import select_top_coder from GradeServer.resource.setResources import SETResources from GradeServer.resource.htmlResources import HTMLResources from GradeServer.resource.sessionResources import SessionResources from GradeServer.resource.languageResources import LanguageResources error = None if request.method == 'POST': checker = True language = {'kr':0, # default 'en':1} for form in request.form: if "language" in form: checker = False lang = request.form['language'] session['language'] = language[lang] if checker: if not request.form['memberId']: error = '아이디' + get_message('fillData') elif not request.form['password']: error = '암호' + get_message('fillData') else: try: """ DB Password check """ memberId = request.form['memberId'].split()[0] password = request.form['password'] check = select_match_member(memberCourseProblemParameter = MemberCourseProblemParameter(memberId = memberId)).first() from werkzeug.security import check_password_hash from GradeServer.resource.otherResources import OtherResources from GradeServer.py3Des.pyDes import * tripleDes = triple_des(OtherResources().const.TRIPLE_DES_KEY, mode = ECB, IV = "\0\0\0\0\0\0\0\0", pad = None, padmode = PAD_PKCS5) #Checking Success if check_password_hash (check.password, tripleDes.encrypt(str(password))): flash(get_message('login')) #push Session Cache session[SessionResources().const.MEMBER_ID] = memberId session[SessionResources().const.AUTHORITY] = list(check.authority) session[SessionResources().const.LAST_ACCESS_DATE] = datetime.now() # set default language session['language'] = language['kr'] ownCourses = select_accept_courses().subquery() # Get My Accept Courses try: session[SessionResources().const.OWN_CURRENT_COURSES] = select_current_courses(ownCourses).all() except Exception: session[SessionResources().const.OWN_CURRENT_COURSES] = [] try: session[SessionResources().const.OWN_PAST_COURSES] = select_past_courses(ownCourses).all() except Exception: session[SessionResources().const.OWN_PAST_COURSES] = [] update_recent_access_date(memberId) # Commit Exception try: dao.commit() except Exception: dao.rollback() error = get_message('updateFailed') else: error = get_message('tryAgain') # Not Exist MemberId except Exception: error = get_message('notExists') return render_template(HTMLResources().const.MAIN_HTML, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, noticeRecords = select_notices(), topCoderId = select_top_coder(), error = 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 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 class_add_user(): global newUsers error = None targetUserIdToDelete = [] authorities = ['Course Admin','User'] keys = {'memberId':0, 'memberName':1, 'authority':2, 'collegeIndex':3, 'collegeName':4, 'departmentIndex':5, 'departmentName':6, 'courseId':7} ownCourses = get_own_courses(session[SessionResources().const.MEMBER_ID]) if error: return render_template('/class_add_user.html', error = error, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, ownCourses = [], allUsers = [], allColleges = [], allDepartments = [], authorities = authorities, newUsers = newUsers) try: allUsers = (dao.query(Members, Colleges, Departments).\ join(DepartmentsDetailsOfMembers, Members.memberId == DepartmentsDetailsOfMembers.memberId).\ join(Colleges, DepartmentsDetailsOfMembers.collegeIndex == Colleges.collegeIndex).\ join(Departments, DepartmentsDetailsOfMembers.departmentIndex == Departments.departmentIndex).\ filter(or_(Members.authority == SETResources().const.USER, Members.authority == SETResources().const.COURSE_ADMINISTRATOR)).\ group_by(Members.memberId)).\ all() except: error = 'Error has been occurred while searching all users' return render_template('/class_add_user.html', error = error, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, ownCourses = ownCourses, allUsers = [], allColleges = [], allDepartments = [], authorities = authorities, newUsers = newUsers) allColleges = get_colleges() try: allDepartments = (dao.query(DepartmentsOfColleges, Colleges, Departments).\ join(Colleges, Colleges.collegeIndex == DepartmentsOfColleges.collegeIndex).\ join(Departments, Departments.departmentIndex == DepartmentsOfColleges.departmentIndex).\ filter(Colleges.isAbolished == SETResources().const.FALSE).\ filter(Departments.isAbolished == SETResources().const.FALSE)).\ all() except: error = 'Error has been occurred while searching all departments' return render_template('/class_add_user.html', error = error, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, ownCourses = ownCourses, allUsers = allUsers, allColleges = allColleges, allDepartments = allDepartments, authorities = authorities, newUsers = newUsers) if request.method == 'POST': if 'addIndivisualUser' in request.form: # ( number of all form data - 'addIndivisualUser' form ) / forms for each person(id,name,college,department,authority) numberOfUsers = (len(request.form) - 1) / 5 newUser = [['' for _ in range(len(keys.keys()))] for __ in range(numberOfUsers + 1)] error, newUser = set_form_value_into_array(keys, request.form, newUser) if error: return render_template('/class_add_user.html', error = error, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, ownCourses = ownCourses, allUsers = allUsers, allColleges = allColleges, allDepartments = allDepartments, authorities = authorities, newUsers = newUsers) for index in range(numberOfUsers): if check_validation(newUser[index]): newUsers.append(newUser[index]) elif 'addUserGroup' in request.form: files = request.files.getlist('files') courseId = request.form['courseId'].split()[0] error = set_array_from_file(files, keys, courseId) if error: return render_template('/class_add_user.html', error = error, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, ownCourses = ownCourses, allUsers = allUsers, allColleges = allColleges, allDepartments = allDepartments, authorities = authorities, newUsers = newUsers) elif 'addUser' in request.form: for newUser in newUsers: isExist = dao.query(Members).filter(Members.memberId == newUser[0]).first() if not isExist: if newUser[keys['authority']] == 'Course Admin': newUser[keys['authority']] = SETResources().const.COURSE_ADMINISTRATOR tripleDes = initialize_tripleDes_class() password = generate_password_hash(tripleDes.encrypt(str(newUser[keys['memberId']]))) # at first insert to 'Members'. Duplicated tuple will be ignored. freshman = Members(memberId = newUser[keys['memberId']], password = password, memberName = newUser[keys['memberName']], authority = newUser[keys['authority']], signedInDate = datetime.now()) dao.add(freshman) try: dao.commit() except exc.SQLAlchemyError: dao.rollback() error = 'Error has been occurred while adding new users' return render_template('/class_add_user.html', error = error, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, ownCourses = ownCourses, allUsers = allUsers, allColleges = allColleges, allDepartments = allDepartments, authorities = authorities, newUsers = newUsers) isExist = dao.query(Registrations).\ filter(and_(Registrations.memberId == newUser[keys['memberId']], Registrations.courseId == newUser[keys['courseId']].split()[0])).\ first() # new member if not isExist: # then insert to 'Registrations'. freshman = Registrations(memberId = newUser[keys['memberId']], courseId = newUser[keys['courseId']].split()[0]) dao.add(freshman) try: dao.commit() except exc.SQLAlchemyError: dao.rollback() error = 'Error has been occurred while registering new users' return render_template('/class_add_user.html', error = error, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, ownCourses = ownCourses, allUsers = allUsers, allColleges = allColleges, allDepartments = allDepartments, authorities = authorities, newUsers = newUsers) departmentInformation = DepartmentsDetailsOfMembers(memberId = newUser[keys['memberId']], collegeIndex = newUser[keys['collegeIndex']], departmentIndex = newUser[keys['departmentIndex']]) dao.add(departmentInformation) try: dao.commit() except exc.SQLAlchemyError: dao.rollback() # old member else: # suppose the user's department is different with his registered information departmentInformation = DepartmentsDetailsOfMembers(memberId = newUser[keys['memberId']], collegeIndex = newUser[keys['collegeIndex']], departmentIndex = newUser[keys['departmentIndex']]) dao.add(departmentInformation) try: dao.commit() except exc.SQLAlchemyError: dao.rollback() courseName = dao.query(RegisteredCourses).\ filter(RegisteredCourses.courseId == newUser[keys['courseId']].split()[0]).\ first().\ courseName memberPath = '%s/%s/%s_%s/%s_%s' % (projectPath, coursesPath, newUser[keys['courseId']].split()[0], courseName.replace(' ', ''), newUser[keys['memberId']], newUser[keys['memberName']].replace(' ', '')) if not os.path.exists(memberPath): os.makedirs(memberPath) newUsers = [] # initialize add user list return redirect(url_for('.class_manage_user')) elif 'deleteUser' in request.form: for form in request.form: if not form is 'deleteUser': targetUserIdToDelete.append(form) # if id list is not empty if len(targetUserIdToDelete) != 0: # each target user id for targetUser in targetUserIdToDelete: index = 0 # each new user id for newUser in newUsers: # if target id and new user id are same if targetUser == newUser[keys['memberId']]: del newUsers[index] break index += 1 return render_template('/class_add_user.html', error = error, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, ownCourses = ownCourses, allUsers = allUsers, allColleges = allColleges, allDepartments = allDepartments, authorities = authorities, newUsers = newUsers)
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 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 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 read(activeTabCourseId, articleIndex, error = None): ''' when you push a title of board content ''' try: # 내가 게시글에 누른 좋아요 정보 try: isLikeCancelled = select_article_is_like(articleParameter = ArticleParameter(articleIndex = articleIndex, boardLikerId = session[SessionResources().const.MEMBER_ID])).first().\ isLikeCancelled except Exception: # Non-Exist Case isLikeCancelled = None if request.method == 'POST': # flash message Init flashMsg =None for form in request.form: # 게시글 좋아요 Push if form == 'articleLike': # 좋아요를 누른적 없을 때 if not isLikeCancelled: # Counting +1 LIKE_INCREASE = 1 else: # 다시 좋아요 누를 때 if isLikeCancelled == ENUMResources().const.TRUE: # Counting +1 LIKE_INCREASE = 1 isLikeCancelled = ENUMResources().const.FALSE # 좋아요 취소 할 때 else: # if it's already exist then change the value of 'pushedLike' # Counting -1 LIKE_INCREASE = -1 isLikeCancelled = ENUMResources().const.TRUE update_article_like_counting(articleParameter = ArticleParameter(articleIndex = articleIndex), LIKE_INCREASE = LIKE_INCREASE) if not isLikeCancelled: # Insert Like dao.add(LikesOnBoard(articleIndex = articleIndex, boardLikerId = session[SessionResources().const.MEMBER_ID])) else: # Update Like update_article_is_like(articleParameter = ArticleParameter(articleIndex = articleIndex, boardLikerId = session[SessionResources().const.MEMBER_ID]), isLikeCancelled = isLikeCancelled) # remove duplicated read count update_view_reply_counting(articleParameter = ArticleParameter(articleIndex = articleIndex), VIEW_INCREASE = -1) break # 댓글 달기 elif form == 'writeArticleReply': # 새로운 댓글 정보 boardReplyContent = request.form['writeArticleReply'] if boardReplyContent: dao.add(RepliesOnBoard(articleIndex = articleIndex, boardReplierId = session[SessionResources().const.MEMBER_ID], boardReplyContent = boardReplyContent, boardReplierIp = socket.gethostbyname(socket.gethostname()), boardRepliedDate = datetime.now())) # remove duplicated read count update_view_reply_counting(articleParameter = ArticleParameter(articleIndex = articleIndex), VIEW_INCREASE = -1, REPLY_INCREASE = 1) flashMsg =get_message('writtenComment') else: error = 'data' + get_message('fillData') break # 댓글 좋아요 elif 'articleReplyLike' in form: # the name starts with 'articleReplyLike' and it has its unique number idIndex = len('articleReplyLike') # 내가 게시글에 누른 좋아요 정보 try: isReplyLike = select_replies_on_board_is_like(replyParameter = ReplyParameter(boardReplyIndex = int(form[idIndex:]), boardReplyLikerId = session[SessionResources().const.MEMBER_ID])).first().\ isLikeCancelled except Exception: # Non-Exist Case isReplyLike = None # 좋아요를 누른적 없을 때 if not isReplyLike: # Counting +1 LIKE_INCREASE = 1 else: # 다시 좋아요 누를 때 if isReplyLike == ENUMResources().const.TRUE: # Counting +1 LIKE_INCREASE = 1 isLikeCancelled = ENUMResources().const.FALSE # 좋아요 취소 할 때 else: # if it's already exist then change the value of 'pushedLike' # Counting -1 LIKE_INCREASE = -1 isLikeCancelled = ENUMResources().const.TRUE # Like or UnLIke update_replies_on_board_like_counting(replyParameter = ReplyParameter(boardReplyIndex = int(form[idIndex:])), LIKE_INCREASE = LIKE_INCREASE) if not isReplyLike: # Insert Like dao.add(LikesOnReplyOfBoard(boardReplyIndex = int(form[idIndex:]), boardReplyLikerId = session[SessionResources().const.MEMBER_ID])) else: # Update Like update_replies_on_board_is_like(replyParameter = ReplyParameter(boardReplyIndex = int(form[idIndex:]), boardReplyLikerId = session[SessionResources().const.MEMBER_ID]), isLikeCancelled = isLikeCancelled) # remove duplicated read count update_view_reply_counting(articleParameter = ArticleParameter(articleIndex = articleIndex), VIEW_INCREASE = -1) break # 댓글 삭제 elif 'deleteArticleReply' in form: idIndex = len('deleteArticleReply') update_replies_on_board_delete(replyParameter = ReplyParameter(boardReplyIndex = int(form[idIndex:])), isDeleted = ENUMResources().const.TRUE) # remove duplicated read count update_view_reply_counting(articleParameter = ArticleParameter(articleIndex = articleIndex), VIEW_INCREASE = -1, REPLY_INCREASE = -1) flashMsg = get_message('deletedComment') break # Commit Modify elif 'modifyArticleReplyContent' in form: idIndex = len('modifyArticleReplyContent') boardReplyContent = request.form['modifyArticleReplyContent' + form[idIndex:]] if boardReplyContent: #update comment update_replies_on_board_modify(replyParameter = ReplyParameter(boardReplyIndex = int(form[idIndex:]), boardReplyLikerId = None, boardReplyContent = boardReplyContent)) # remove duplicated read count update_view_reply_counting(articleParameter = ArticleParameter(articleIndex = articleIndex), VIEW_INCREASE = -1) flashMsg =get_message('modifiedComment') else: error = 'data' + get_message('fillData') break # 게시물 삭제 elif form == 'deleteArticle': update_article_delete(articleParameter = ArticleParameter(articleIndex = articleIndex), isDeleted = ENUMResources().const.TRUE) # Commit Exception try: dao.commit() flash(get_message('deletedPost')) except Exception: dao.rollback() error = get_message('updateFailed') return redirect(url_for(RouteResources().const.BOARD, activeTabCourseId = OtherResources().const.ALL, pageNum = 1)) # end Loop # Commit Exception try: dao.commit() # if flash Message exist if flashMsg: flash(flashMsg) except Exception: dao.rollback() error = get_message('updateFailed') # 게시글 정보 try: articlesOnBoard = select_article(articleParameter = ArticleParameter(articleIndex = articleIndex), isDeleted = ENUMResources().const.FALSE) articlesOnBoard = join_courses_names(articlesOnBoard.subquery(), select_current_courses(select_accept_courses().subquery()).subquery()).first() except Exception: articlesOnBoard = [] try: # replies 정보 repliesOnBoardRecords = select_replies_on_board(articleParameter = ArticleParameter(articleIndex = articleIndex), isDeleted = ENUMResources().const.FALSE) # 내가 게시글 리플에 누른 좋아요 정보 repliesOnBoardIsLikeRecords = select_replies_on_board_like(repliesOnBoardRecords.subquery(), memberCourseProblemParameter = MemberCourseProblemParameter(memberId = session[SessionResources().const.MEMBER_ID])).all() except Exception: repliesOnBoardIsLikeRecords = [] try: repliesOnBoardRecords = repliesOnBoardRecords.all() except Exception: repliesOnBoardRecords = [] # 나의 댓글 좋아요 여부 적용 subIndex = 0 isLikeRecords = [] for i in range(0, len(repliesOnBoardRecords)): # 나의 댓글 좋아요 정보 비교 isLikeRecords.append(ENUMResources().const.TRUE) for j in range(subIndex, len(repliesOnBoardIsLikeRecords)): if repliesOnBoardRecords[i].boardReplyIndex == repliesOnBoardIsLikeRecords[j].boardReplyIndex: isLikeRecords[i] = repliesOnBoardIsLikeRecords[j].isLikeCancelled # 다음 시작 루프 인덱스 변경 subIndex = j break # 읽은 횟수 카운팅 update_view_reply_counting(articleParameter = ArticleParameter(articleIndex = articleIndex), VIEW_INCREASE = 1) # Commit Exception try: dao.commit() except Exception: dao.rollback() return render_template(HTMLResources().const.ARTICLE_READ_HTML, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, articlesOnBoard = articlesOnBoard, activeTabCourseId = activeTabCourseId, repliesOnBoardRecords = repliesOnBoardRecords, isLikeRecords = isLikeRecords, isLikeCancelled = isLikeCancelled, error = error) except Exception: # Exception View return redirect(url_for(RouteResources().const.BOARD, activeTabCourseId = OtherResources().const.ALL, pageNum = 1))
def submission_code(memberId, courseId, problemId, error = None): try: # Get endDateOfSubmission of Problem try: endDateOfSubmission = select_problems_of_course(memberCourseProblemParameter = MemberCourseProblemParameter(memberId = None, courseId = courseId, problemId = problemId)).first().\ endDateOfSubmission except Exception: endDateOfSubmission = None # are Not Access. conditions is an Administrator and endOfSubmission ago if SETResources().const.SERVER_ADMINISTRATOR in session[SessionResources().const.AUTHORITY]\ or SETResources().const.COURSE_ADMINISTRATOR in session[SessionResources().const.AUTHORITY]\ or endDateOfSubmission <= datetime.now(): # last Submissions Info lastSubmission = select_last_submissions(memberCourseProblemParameter = MemberCourseProblemParameter(memberId = memberId, courseId = courseId, problemId = problemId)).subquery() # Code View Count Up update_submission_code_view_count(lastSubmission, memberCourseProblemParameter = MemberCourseProblemParameter(memberId = memberId, courseId = courseId, problemId = problemId)) # Commit Exception try: dao.commit() except Exception: dao.rollback() error = get_message('updateFailed') # Problem Information (LimitedTime, LimitedMemory try: problemName = select_problem_informations(memberCourseProblemParameter = MemberCourseProblemParameter(memberId = None, courseId = None, problemId = problemId)).first().\ problemName except Exception: problemName = None # Problem Solved Users try: # last Submissions Info submissions = select_all_submissions(lastSubmission, memberCourseProblemParameter = MemberCourseProblemParameter(memberId = memberId, courseId = courseId, problemId = problemId)).subquery() problemSolvedMemberRecords = select_solved_submissions(submissions).first() except Exception: problemSolvedMemberRecords = [] # Submitted Files Information try: submittedFileRecords = select_submitted_files(memberCourseProblemParameter = MemberCourseProblemParameter(memberId = memberId, courseId = courseId, problemId = problemId)).all() fileData = [] for raw in submittedFileRecords: # Open filePath = raw.filePath + '/' +raw.fileName file = open(filePath) # Read data = file.read() # Close file.close() fileData.append(data) except Exception: submittedFileRecords = [] fileData = [] return render_template(HTMLResources().const.SUBMISSION_CODE_HTML, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, submittedFileRecords = submittedFileRecords, fileData = fileData, problemName = problemName, problemSolvedMemberRecords = problemSolvedMemberRecords, error = error) #Access Rejection else: flash('코드를 볼 권한이 없습니다!!!') return redirect(url_for(RouteResources().const.PROBLEM_RECORD, courseId = courseId, problemId = problemId, sortCondition = OtherResources().const.RUN_TIME)) except Exception: return unknown_error()
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 make_team(error = None): """ doesn't have any application of button. you need to make the button app. """ try: global gTeamMembersId, gTeamName, gTeamDescription # 자동 완성을 위한 모든 유저기록 try : memberRecords = select_all_users().all() except Exception: memberRecords = [] print "?", memberRecords for k in memberRecords: print k.memberId if request.method == 'GET': del gTeamMembersId[:] gTeamName, gTeamDescription = None, None return render_template(HTMLResources().const.TEAM_MAKE_HTML, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, memberRecords = memberRecords) elif request.method == 'POST': # 뷰를 인벨리 데이트 하기전에 인풋값 저장 gTeamName = request.form['teamName'] gTeamDescription = request.form['teamDescription'] if request.form['teamDescription'] else None for form in request.form: # Making Team if form == 'makeTeam': # 인풋 확인 if not gTeamName: return render_template(HTMLResources().const.TEAM_MAKE_HTML, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, memberRecords = memberRecords, gTeamMembersId = gTeamMembersId, gTeamDescription = gTeamDescription, error = '팀 명' + get_message('fillData')) # 중복 팀명 확인 try: if check_team_name(gTeamName).first().\ isDeleted == ENUMResources().const.FALSE: # don't Exception return render_template(HTMLResources().const.TEAM_MAKE_HTML, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, memberRecords = memberRecords, gTeamMembersId = gTeamMembersId, gTeamDescription = gTeamDescription, error = get_message('existTeamName')) # Deleted Teams else: # Update Team dao.query(Teams).\ filter(Teams.teamName == gTeamName).\ update(dict(isDeleted = ENUMResources().const.FALSE)) except Exception: # Insert Team newTeam = Teams(teamName = gTeamName, teamDescription = gTeamDescription) dao.add(newTeam) # Commit Exception try: # this Commit Succeeded Go Next Step dao.commit() # 마스터 정보first().teamName insert_team_member_id(gTeamName, session[SessionResources().const.MEMBER_ID], ENUMResources().const.TRUE) # this Commit Succeeded Go Next Step try: dao.commit() for inviteeId in gTeamMembersId: error = insert_invitee_id(gTeamName, inviteeId) # Exception Check if error: break #init del gTeamMembersId[:] gTeamName, gTeamDescription = None, None flash(get_message('makeTeamSucceeded')) return redirect(url_for(RouteResources().const.TEAM, pageNum = 1)) except Exception: dao.rollback() error = get_message('updateFailed') except Exception: dao.rollback() error = get_message('updateFailed') # Add Members elif form == 'inviteeMember': try: inviteeId = request.form['inviteeId'].split()[0] except Exception: inviteeId = None # teamMember Invitee error = check_invitee_member(inviteeId) break # Delete Members elif 'deleteInviteeMember' in form: # form의 name이 deleteMemberi -> i=Index이므로 해당 인덱스 값 제거 gTeamMembersId.pop(int(form[-1])) break return render_template(HTMLResources().const.TEAM_MAKE_HTML, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, memberRecords = memberRecords, gTeamMembersId = gTeamMembersId, gTeamName = gTeamName, gTeamDescription = gTeamDescription, error = error) except Exception: # Unknown Error del gTeamMembersId[:] gTeamName, gTeamDescription = None, None return unknown_error()
def team_manage(teamName, error = None): """ 팀 관리 페이지 """ try: global gTeamMembersId, gTeamName, gTeamDescription try: # 자동 완성을 위한 모든 유저기록 memberRecords = dao.query(select_all_user().subqeury()).\ all() except Exception: memberRecords = [] # 팀 정보 try: teamInformation = dao.query(Teams).\ filter(Teams.teamName == teamName, Teams.isDeleted == ENUMResources().const.FALSE).first() except Exception: # None Type Exception teamInformation = [] # 팀 멤버 정보 try: teamMemberRecords = dao.query(RegisteredTeamMembers.teamMemberId).\ filter(RegisteredTeamMembers.teamName == teamName, RegisteredTeamMembers.isDeleted == ENUMResources().const.FALSE).\ order_by(RegisteredTeamMembers.isTeamMaster.asc(), RegisteredTeamMembers.teamMemberId.asc()).all() except Exception: # None Type Exception teamMemberRecords = [] # 팀장이 아닌 애가 왔을 때 if session[SessionResources().const.MEMBER_ID] != teamMemberRecords[0].teamMemberId: return unknown_error(error = get_message('accessFailed')) if request.method == 'GET': # init gTeamMembersId = copy.deepcopy(teamMemberRecords) gTeamName, gTeamDescription =None, None return render_template(HTMLResources().const.TEAM_MANAGE_HTML, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, memberRecords = memberRecords, teamInformation =teamInformation, gTeamMembersId = gTeamMembersId, gTeamName = gTeamName, gTeamDescription = gTeamDescription) elif request.method == 'POST': # 인풋이 없다면 기존 이름 가져옴 gTeamName =request.form['teamName'] if request.form['teamName'] else teamInformation.teamName gTeamDescription = request.form['teamDescription'] if request.form['teamDescription'] else teamInformation.teamDescription for form in request.form: # Saving Team if form == 'saveTeam': # 팀과 팀 멤버 변경은 동시에 업데이트 # Update Team # 중복 팀명 확인 if gTeamName != teamName and\ not dao.query(check_team_name(gTeamName).subquery()).\ first(): dao.query(Teams).\ filter(Teams.teamName == teamName).\ update(dict(teamName = gTeamName, teamDescription = gTeamDescription)) # Update TeamMembers index = 0 for raw in teamMemberRecords: if index < len(gTeamMembersId) and\ raw.teamMemberId == gTeamMembersId[index].teamMemberId: index += 1 # 삭제 팀원 적용 else: dao.query(RegisteredTeamMembers).\ filter(RegisteredTeamMembers.teamName == teamName, RegisteredTeamMembers.teamMemberId == raw.teamMemberId).\ update(dict(isDeleted = ENUMResources().const.TRUE)) # Commit Exception try: dao.commit() #init del gTeamMembersId[:] gTeamName, gTeamDescription = None, None flash(get_message('updateSucceeded')) except Exception: dao.rollback() error =get_message('updateFailed') return redirect(url_for(RouteResources().const.TEAM, pageNum = 1, error = error)) # Invitee Members elif form == 'inviteeMember': try: inviteeId = request.form['inviteeId'].split()[0] except Exception: inviteeId = None # teamMember Invitee error = check_invitee_member(inviteeId, teamName) return render_template(HTMLResources().const.TEAM_MANAGE_HTML, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, memberRecords = memberRecords, teamInformation = teamInformation, gTeamMembersId = gTeamMembersId, gTeamName = gTeamName, gTeamDescription = gTeamDescription, error = error) # Delete Members elif 'deleteMember' in form: # form의 name이 deleteMemberi -> i=Index이므로 해당 인덱스 값 제거 gTeamMembersId.pop(int(form[-1])) return render_template(HTMLResources().const.TEAM_MANAGE_HTML, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, memberRecords = memberRecords, teamInformation = teamInformation, gTeamMembersId = gTeamMembersId, gTeamName = gTeamName, gTeamDescription = gTeamDescription) # Delete Team elif form == 'deleteTeam': dao.query(Teams).\ filter(Teams.teamName == teamName).\ update(dict(isDeleted = ENUMResources().const.TRUE)) dao.query(RegisteredTeamMembers).\ filter(RegisteredTeamMembers.teamName == teamName).\ update(dict(isDeleted = ENUMResources().const.TRUE)) dao.query(TeamInvitations).\ filter(TeamInvitations.teamName == teamName).\ update(dict(isDeleted = ENUMResources().const.TRUE)) # Commit Exception try: dao.commit() #init del gTeamMembersId[:] gTeamName, gTeamDescription = None, None flash(get_message('removeTeamSucceeded')) except Exception: dao.rollback() error = get_message('updateFailed') return redirect(url_for(RouteResources().const.TEAM, pageNum = 1, error =error)) except Exception: # Unknown Error del gTeamMembersId[:] gTeamName, gTeamDescription = None, None return unknown_error()
def edit_personal(error = None): contactNumber, emailAddress, comment = None, None, None try: #Get User Information try: memberInformation = join_member_informations(select_match_member(memberCourseProblemParameter = MemberCourseProblemParameter(memberId = session[SessionResources().const.MEMBER_ID])).subquery()).first() except Exception: #None Type Exception memberInformation = [] #Get Post if request.method == 'POST': password = request.form['password'] passwordConfirm = request.form['passwordConfirm'] #Get Updating Data contactNumber = request.form['contactNumber'] emailAddress = request.form['emailAddress'] comment = request.form['comment'] #Password Same if(password and passwordConfirm) and password == passwordConfirm: #Generate Password tripleDes = triple_des(OtherResources().const.TRIPLE_DES_KEY, mode = ECB, IV = "\0\0\0\0\0\0\0\0", pad = None, padmode = PAD_PKCS5) # ID, Password NO if password == memberInformation.password\ or password == memberInformation.memberId: error = get_message('pattenFailed') else: password = generate_password_hash(tripleDes.encrypt(str(password))) passwordConfirm = None #Update DB update_member_informations(select_match_member(memberCourseProblemParameter = MemberCourseProblemParameter(memberId = session[SessionResources().const.MEMBER_ID])), password, contactNumber, emailAddress, comment) # Commit Exception try: dao.commit() flash(get_message('updateSucceeded')) return redirect(url_for(RouteResources().const.SIGN_IN)) except Exception: dao.rollback() error = get_message('upateFailed') #Password Different elif not password and not passwordConfirm: #Update DB update_member_informations(members = select_match_member(memberCourseProblemParameter = MemberCourseProblemParameter(memberId = session[SessionResources().const.MEMBER_ID])), password = None, contactNumber = contactNumber, emailAddress = emailAddress, comment = comment) # Commit Exception try: dao.commit() flash(get_message('updateSucceeded')) return redirect(url_for(RouteResources().const.SIGN_IN)) except Exception: dao.rollback() error = get_message('upateFailed') else: error = get_message('wrongPassword') return render_template(HTMLResources().const.EDIT_PERSONAL_HTML, memberInformation = memberInformation, contactNumber = contactNumber, emailAddress = emailAddress, comment = comment, error = error) except Exception: return unknown_error()
def sign_in(): ''' @@ Success sign in flash When the page redirected from sign up page, It display flash message. ''' if '?' in request.url: flash('Signed up successfully') """ main page before sign in""" from GradeServer.utils.utilMessages import get_message from GradeServer.utils.memberCourseProblemParameter import MemberCourseProblemParameter from GradeServer.utils.utilArticleQuery import select_notices from GradeServer.utils.utilUserQuery import select_match_member from GradeServer.utils.utilRankQuery import select_top_coder from GradeServer.resource.htmlResources import HTMLResources from GradeServer.resource.sessionResources import SessionResources error = None if request.method == 'POST': checker = True language = {'kr':0, # default 'en':1} for form in request.form: if "language" in form: checker = False lang = request.form['language'] session['language'] = language[lang] if checker: if not request.form['memberId']: error = '아이디' + get_message('fillData') elif not request.form['password']: error = '암호' + get_message('fillData') else: try: """ DB Password check """ memberId = request.form['memberId'].split()[0] password = request.form['password'] check = select_match_member(memberCourseProblemParameter = MemberCourseProblemParameter(memberId = memberId)).first() from werkzeug.security import check_password_hash from GradeServer.GradeServer_py3des import TripleDES #Checking Success if check_password_hash (check.password, TripleDES.encrypt(str(password))): flash(get_message('login')) #push Session Cache 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'] update_recent_access_date(memberId) # Commit Exception try: dao.commit() except Exception: dao.rollback() error = get_message('updateFailed') else: error = get_message('tryAgain') # Not Exist MemberId except Exception: error = get_message('notExists') return render_template(HTMLResources().const.MAIN_HTML, noticeRecords = select_notices(), topCoderId = select_top_coder(), error = error)
def class_manage_problem(): global projectPath global newProblems modalError = None error, allProblems = get_all_problems() if error: return render_template('/class_manage_problem.html', error = error, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, modalError = error, allProblems = [], ownCourses = [], ownProblems = []) ownCourses = get_own_courses(session[SessionResources().const.MEMBER_ID]) ownProblems = get_own_problems(session[SessionResources().const.MEMBER_ID]) if request.method == 'POST': isNewProblem = True numberOfNewProblems = (len(request.form)-1)/7 keys = {'courseId':0, 'courseName':1, 'problemId':2, 'problemName':3, 'isAllInputCaseInOneFile':4, 'startDate':5, 'endDate':6, 'openDate':7, 'closeDate':8} # courseId,courseName,problemId,problemName,isAllInputCaseInOneFile,startDate,endDate,openDate,closeDate newProblem = [['' for _ in range(len(keys.keys()))] for __ in range(numberOfNewProblems+1)] for form in request.form: if DELETE in form: isNewProblem = False courseId,problemId = form.split('_')[1:] if delete_registered_problem(courseId, problemId): break elif EDIT in form: isNewProblem = False editTarget,courseId,problemId,targetData = form[5:].split('_') targetData = request.form[form] # actually editTarget is 'id' value of tag. # That's why it may have 'Tab' at the last of id to clarify whether it's 'all' tab or any tab of each course. # so when user pushes one of tab and modify the data,then we need to re-make the editTarget if TAB in editTarget: editTarget = editTarget[:-3] for registeredProblem, registeredCourse, problemName in ownProblems: if registeredCourse.courseId == courseId and\ registeredProblem.problemId == int(problemId): kwargs = { editTarget : targetData } if update_registered_problem_info(courseId, problemId, dict(**kwargs)): break # addition problem else: value,index = re.findall('\d+|\D+',form) index = int(index) data = request.form[form] newProblem[index-1][keys[value]] = data if error: return render_template('/class_manage_problem.html', error = error, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, modalError = modalError, allProblems = allProblems, ownCourses = ownCourses, ownProblems = ownProblems) # when 'add' button is pushed,insert new problem into RegisteredProblems table if isNewProblem: for index in range(numberOfNewProblems+1): newProblems.append(newProblem[index]) for problem in newProblems: # if openDate,closeDate are empty then same with startDate,endDate if not problem[keys['openDate']]: problem[keys['openDate']] = problem[keys['startDate']] if not problem[keys['closeDate']]: problem[keys['closeDate']] = problem[keys['endDate']] if not problem[keys['isAllInputCaseInOneFile']]: problem[keys['isAllInputCaseInOneFile']] = ENUMResources().const.FALSE else: problem[keys['isAllInputCaseInOneFile']] = ENUMResources().const.TRUE if problem[keys['courseId']]: problem[keys['courseId']],problem[keys['courseName']] = problem[keys['courseId']].split(' ',1) if problem[keys['problemId']]: problem[keys['problemId']],problem[keys['problemName']] = problem[keys['problemId']].split(' ',1) try: solutionCheckType = dao.query(Problems).\ filter(Problems.problemId == problem[keys['problemId']]).\ first().solutionCheckType except: error = 'error has been occurred while getting solution check type' return render_template('/class_manage_problem.html', error = error, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, modalError = modalError, allProblems = allProblems, ownCourses = ownCourses, ownProblems = ownProblems) pathOfTestCase = '%s/%s_%s/%s_%s_%s' % (problemsPath, problem[keys['problemId']], problem[keys['problemName']], problem[keys['problemId']], problem[keys['problemName']], solutionCheckType) numberOfTestCase = get_case_count(pathOfTestCase, problem[keys['isAllInputCaseInOneFile']]) # validation check before insert new problem isValid = True for key in problem: if not key: isValid = False break if not isValid: continue newProblem = RegisteredProblems(problemId = problem[keys['problemId']], courseId = problem[keys['courseId']], isAllInputCaseInOneFile = problem[keys['isAllInputCaseInOneFile']], limittedFileSize = limitedFileSize, numberOfTestCase = numberOfTestCase, startDateOfSubmission = problem[keys['startDate']], endDateOfSubmission = problem[keys['endDate']], openDate = problem[keys['openDate']], closeDate = problem[keys['closeDate']]) dao.add(newProblem) try: dao.commit() except exc.SQLAlchemyError: dao.rollback() error = 'Error has been occurred while making a new problem' return render_template('/class_manage_problem.html', error = error, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, modalError = modalError, allProblems = allProblems, ownCourses = ownCourses, ownProblems = ownProblems) newProblemRecord = SubmittedRecordsOfProblems(problemId = problem[keys['problemId']], courseId = problem[keys['courseId']]) dao.add(newProblemRecord) try: dao.commit() except exc.SQLAlchemyError: dao.rollback() error = 'Error has been occurred while creating new record' return render_template('/class_manage_problem.html', error = error, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, modalError = modalError, allProblems = allProblems, ownCourses = ownCourses, ownProblems = ownProblems) newProblems = [] return redirect(url_for('.class_manage_problem')) ownProblems = get_own_problems(session[SessionResources().const.MEMBER_ID]) return render_template('/class_manage_problem.html', error = error, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, modalError = modalError, allProblems = allProblems, ownCourses = ownCourses, ownProblems = ownProblems)
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_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 write(activeTabCourseId, articleIndex, error =None): title, content, articlesOnBoard = None, None, None try: # 수강 과목 정보 myCourses = select_current_courses(select_accept_courses().subquery()).subquery() # Modify Case if articleIndex > 0: try: articlesOnBoard = join_courses_names(select_article(articleParameter = ArticleParameter(articleIndex = articleIndex), isDeleted = ENUMResources().const.FALSE).subquery(), myCourses).first() except Exception: articlesOnBoard = [] try: myCourses = dao.query(myCourses).all() except Exception: myCourses = [] # 작성시 빈칸 검사 if request.method == 'POST': # Not None try: courseId = request.form['courseId'] # request.form['courseId']가 ex)2015100101 전산학 실습 일경우 중간의 공백을 기준으로 나눔 courseId = courseId.split()[0] if courseId == OtherResources().const.ALL: courseId = None # 타이틀 가져오기 title = request.form['title'] # Get Exist Content content = request.form['content'] if not title: error ='제목' +get_message('fillData') elif not request.form['content']: error ='내용' +get_message('fillData') elif len(title) > 50: error = 'Title is too long. please write less than 50 letters' # All Fill InputText else: isNotice = ENUMResources().const.TRUE currentDate = datetime.now() currentIP = socket.gethostbyname(socket.gethostname()) # 새로 작성 if articleIndex == 0: # Set isNotice if SETResources().const.USER in session['authority']: isNotice = ENUMResources().const.FALSE # user None courseId reject newPost = ArticlesOnBoard(problemId = None, courseId = courseId, writerId = session[SessionResources().const.MEMBER_ID], isNotice = isNotice, title = title, content = content, writtenDate = currentDate, writerIp = currentIP) dao.add(newPost) # Commit Exception try: dao.commit() flash(get_message('writtenPost')) except Exception: dao.rollback() error =get_message('updateFailed') return redirect(url_for(RouteResources().const.BOARD, activeTabCourseId = activeTabCourseId, pageNum = 1)) # 게시물 수정 else: # 수정 할 글 정보 articlesOnBoard = select_article(articleParameter = ArticleParameter(articleIndex = articleIndex), isDeleted = ENUMResources().const.FALSE).update(dict(courseId = courseId, title = title, content = content, writtenDate = currentDate, writerIp = currentIP)) # Commit Exception try: dao.commit() flash(get_message('modifiedPost')) except Exception: dao.rollback() error =get_message('updateFailed') return redirect(url_for(RouteResources().const.ARTICLE_READ, activeTabCourseId = activeTabCourseId, articleIndex = articleIndex)) except Exception: # User None Course Posting Rejection if SETResources().const.USER in session['authority']: error = get_message('banPosting') else: error = get_message() return render_template(HTMLResources().const.ARTICLE_WRITE_HTML, SETResources = SETResources, SessionResources = SessionResources, LanguageResources = LanguageResources, myCourses = myCourses, articlesOnBoard = articlesOnBoard, title = title, content = content, error = error) except Exception: # Unknown Error return unknown_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)