class AssignmentManager: def __init__(self): self.assignment_list = AssignmentList() self.account_list = AccountList() self.artifact_list = ArtifactList() def create_assignment(self, paper_id, author_id): paper = self.artifact_list.get_entry(paper_id) author = self.account_list.get_entry(author_id) assignment_id = paper_id assignment = Assignment(assignment_id, Assignment.Status.WAITING_FOR_REVIEWS, paper, author) self.assignment_list.add_entry(assignment_id, assignment) def volunteer_paper(self, account_id, paper_id): account_id = self.account_list.get_entry(account_id) assignment = self.assignment_list.get_entry(paper_id) assignment.pcm_volunteer(account_id) self.assignment_list.update_entry(paper_id, assignment) def get_volunteerable_papers(self): lst = [] assignments = self.assignment_list.get_list() for i in assignments: if assignments[i].status == Assignment.Status.WAITING_FOR_REVIEWS: lst.append(assignments[i].paper.create_entry_dictionary()) return lst
def set_entry_attributes(self, attributes: {}): account_list = AccountList() artifact_list = ArtifactList() self.assignment_id = attributes["assignmentID"] paper_id = attributes["paperID"] author_id = attributes["authorID"] pcc_id = attributes["pccID"] report_id = attributes["reportID"] reviews = attributes["reviews"] status_value = attributes["status"] if status_value == Assignment.Status.WAITING_FOR_REVIEWS.value: self.status = Assignment.Status.WAITING_FOR_REVIEWS elif status_value == Assignment.Status.WAITING_FOR_REPORT.value: self.status = Assignment.Status.WAITING_FOR_REPORT elif status_value == Assignment.Status.COMPLETED.value: self.status = Assignment.Status.COMPLETED self.paper = artifact_list.get_entry(paper_id) self.author = account_list.get_entry(author_id) self.pcc = account_list.get_entry(pcc_id) self.report = artifact_list.get_entry(report_id) pcm_reviews = dict() for pcm_id in reviews: pcm = account_list.get_entry(int(pcm_id)) pcm_dict_num = reviews[pcm_id] if pcm_dict_num < 0: if pcm_dict_num == Assignment.CurrentEnrollment.VOLUNTEERED.value: pcm_reviews[pcm] = Assignment.CurrentEnrollment.VOLUNTEERED elif pcm_dict_num == Assignment.CurrentEnrollment.ASSIGNED.value: pcm_reviews[pcm] = Assignment.CurrentEnrollment.ASSIGNED else: pcm_reviews[pcm] = artifact_list.get_entry( reviews[pcm_dict_num]) self.reviews = pcm_reviews
def __init__(self): self.assignment_list = AssignmentList() self.account_list = AccountList() self.artifact_list = ArtifactList()
class AssignmentManager: def __init__(self): self.assignment_list = AssignmentList() self.account_list = AccountList() self.artifact_list = ArtifactList() def create_assignment(self, paper_id, author_id): paper = self.artifact_list.get_entry(paper_id) author = self.account_list.get_entry(author_id) assignment_id = paper_id assignment = Assignment(assignment_id, Assignment.Status.WAITING_FOR_REVIEWS, paper, author) self.assignment_list.add_entry(assignment_id, assignment) def volunteer_paper(self, account_id, paper_id): account_id = self.account_list.get_entry(account_id) assignment = self.assignment_list.get_entry(paper_id) assignment.pcm_volunteer(account_id) self.assignment_list.update_entry(paper_id, assignment) def get_volunteerable_papers(self): lst = [] assignments = self.assignment_list.get_list() for i in assignments: if assignments[i].status == Assignment.Status.WAITING_FOR_REVIEWS: lst.append(assignments[i].paper.create_entry_dictionary()) return lst def get_assignable_papers(self): assignments = self.assignment_list.get_list() ls = [] for i in assignments: if assignments[i].status == Assignment.Status.WAITING_FOR_REVIEWS: dic = {} pcm_str = "" rvs = assignments[i].reviews paper = assignments[i].paper.create_entry_dictionary() dic['Paper'] = paper if rvs == {}: pcm_str = "" else: for pcm in rvs: if rvs[pcm].value == -2: pcmid = pcm.get_entry_id() pcm_str += self.account_list.get_entry( pcmid).create_entry_dictionary( )['username'] + ", " paper_id = paper['artifactID'] pcm_str = pcm_str[:-2] dic['PCM'] = pcm_str dic['List_PCM'] = self.get_pcm_assign_dic(paper_id) ls.append(dic) return ls def get_pcm_assign_dic(self, paper_id): pcm_dic = {} assignment = self.assignment_list.get_entry(paper_id) rvs = assignment.reviews for pcm in rvs: if rvs[pcm].value == -1: pcm_id = pcm.get_entry_id() pcm_name = "*" + pcm.get_username() pcm_dic[pcm_name] = pcm_id entries = self.account_list.get_list() for entry in entries: entry_dict = entries[entry].create_entry_dictionary() role = entry_dict['role'] if role == 'PCM': username = entry_dict['username'] acc_id = entry_dict['accountID'] if '*' + username not in pcm_dic and acc_id >= 0: pcm_dic[username] = acc_id return pcm_dic def assign_list_pcm(self, paper_id, pcm_id_list): assignment = self.assignment_list.get_entry(paper_id) for pcm_id in pcm_id_list: pcm_acc = self.account_list.get_entry(int(pcm_id)) assignment.pcc_assign_pcm(pcm_acc) self.assignment_list.update_entry(paper_id, assignment) def get_pcm_assigned_paper(self, pcm_id): ls = [] assignments = self.assignment_list.get_list() for i in assignments: rvs = assignments[i].reviews as_paper_dic = {} for pcm in rvs: as_pcm_id = pcm.get_entry_id() if int(as_pcm_id) == pcm_id and rvs[pcm].value == -2: paper_id = assignments[i].get_entry_id() as_paper_dic['paperID'] = paper_id tmp_paper_dic = self.artifact_list.get_entry( paper_id).create_entry_dictionary() title = tmp_paper_dic['title'] as_paper_dic['title'] = title version = tmp_paper_dic['version'] as_paper_dic['fileName'] = title + str(version) if as_paper_dic != {}: ls.append(as_paper_dic) return ls
from controller.artifact_manager import ArtifactManager from controller.assignment_manager import AssignmentManager from controller.notification_manager import NotificationManager from functools import wraps import urllib.parse from flask_pymongo import PyMongo app = Flask(__name__, template_folder="view") app.config["MONGO_URI"] = "mongodb+srv://" + urllib.parse.quote_plus( "USER2") + ":" + urllib.parse.quote_plus( "1q2w3e4r" ) + "@cluster0-tk7v1.mongodb.net/SAM2020?retryWrites=true&w=majority" mongo = PyMongo(app) ARTIFACT_COLLECTION = mongo.db['Artifacts'] COLLECTION = mongo.db['Accounts'] ARTIFACTS = ArtifactList() ACCOUNTS = AccountList() ASSIGNMENTS = AssignmentList() TEMPLATES = TemplateList() atf_manager = ArtifactManager() assignment_manager = AssignmentManager() notification_manager = NotificationManager() def admin_login_required(f): @wraps(f) def wrap(*args, **kwargs): user_id = int(request.cookies.get('userID')) if ACCOUNTS.get_entry(user_id).role == Account.Role.ADMIN: return f(*args, **kwargs) else: