def save(self, paper_id, title, downloadurl, abstract, course_id, duedate): login = request.environ.get('repoze.who.identity')\ .get('repoze.who.userid') user = DBSession.query(User)\ .filter(User.user_name == login).one() course = DBSession.query(Course).filter(Course.id == int(course_id)).one() if paper_id != '': paper = DBSession.query(Paper)\ .filter(Paper.id == int(paper_id)).first() if not paper: redirect('/error', params=dict(msg="invalid paper")) if not self._can_view_paper(user, paper): redirect('/error', params=dict(msg="invalid permissions to view paper")) paper.name = str(title) paper.download_url = str(downloadurl) paper.abstract = str(abstract) paper.due_date = duedate else: paper = Paper() punctuation = { 0x2018:0x27, 0x2019:0x27, 0x201C:0x22, 0x201D:0x22 } paper.name = title.translate(punctuation).encode('ascii', 'replace') paper.download_url = downloadurl paper.abstract = abstract.encode('ascii', 'replace') paper.created_by = user.id paper.due_date = duedate paper.course_id = course_id DBSession.add(paper) DBSession.flush() redirect('/paper/view?paper_id=%i' % paper.id)
def setUp(self): """Prepare model test fixture.""" try: new_attrs = {} new_attrs.update(self.attrs) new_attrs.update(self.do_get_dependencies()) self.obj = self.klass(**new_attrs) DBSession.add(self.obj) DBSession.flush() return self.obj except: DBSession.rollback() raise
def setUp(self): """Prepare model test fixture.""" try: new_attrs = {} new_attrs.update(self.attrs) new_attrs.update(self.do_get_dependencies()) self.obj = self.klass(**new_attrs) DBSession.add(self.obj) DBSession.flush() return self.obj except: DBSession.rollback() raise
def create(self, paper_id): login = request.environ.get('repoze.who.identity').get('repoze.who.userid') user = DBSession.query(User).filter(User.user_name == login).one() # does this paper even exist? paper = self._check_valid_paper(int(paper_id)) if not paper: redirect('/error', params=dict(msg="invalid paper supplied")) # does this user have access to this paper? if not self._check_eligible_submit(user, paper): redirect('/error', params=dict( msg="user does not have access to paper")) # has this user already submitted this paper? if self._check_user_submitted_paper(user, paper): redirect('/error', params=dict( msg="user already submitted summary for this paper")) # check if the user has any "reserved" summaries that they need to review # this prevents users from just refreshing and getting new summaries until # they receive their friends summary or waiting until all the others have # been completed by other students. reserved = self._get_unfinished_peer_reviews(user) num_adtl_needed = self.MAX_PEER_REVIEWS - len(reserved) new_summaries = self._get_summaries_to_peer_review(user, num_adtl_needed) # for each of the new reviews, we need to start an "incomplete" review so # that it resurfaces in the future. summaries_to_review = [] for summary in reserved: summaries_to_review.append(summary) for summary in new_summaries: review = StudentSummaryReview( summary = summary, creator = user, status = 'incomplete' ) DBSession.add(review) summaries_to_review.append(summary) hmacs = {} for s in summaries_to_review: hmacs[s.id] = self._generate_peer_review_hmac(user, s) return dict(page="newreview", paper=paper, peer_review=summaries_to_review, hmacs=hmacs)
def save(self, paper_id, title, downloadurl, abstract, course_id, duedate): login = request.environ.get('repoze.who.identity')\ .get('repoze.who.userid') user = DBSession.query(User)\ .filter(User.user_name == login).one() course = DBSession.query(Course).filter( Course.id == int(course_id)).one() if paper_id != '': paper = DBSession.query(Paper)\ .filter(Paper.id == int(paper_id)).first() if not paper: redirect('/error', params=dict(msg="invalid paper")) if not self._can_view_paper(user, paper): redirect('/error', params=dict(msg="invalid permissions to view paper")) paper.name = str(title) paper.download_url = str(downloadurl) paper.abstract = str(abstract) paper.due_date = duedate else: paper = Paper() punctuation = { 0x2018: 0x27, 0x2019: 0x27, 0x201C: 0x22, 0x201D: 0x22 } paper.name = title.translate(punctuation).encode( 'ascii', 'replace') paper.download_url = downloadurl paper.abstract = abstract.encode('ascii', 'replace') paper.created_by = user.id paper.due_date = duedate paper.course_id = course_id DBSession.add(paper) DBSession.flush() redirect('/paper/view?paper_id=%i' % paper.id)
def _create(self, paper_id, summary, **kwargs): punctuation = { 0x2018:0x27, 0x2019:0x27, 0x201C:0x22, 0x201D:0x22 } summary = summary.translate(punctuation).encode('ascii', 'replace') login = request.environ.get('repoze.who.identity').get('repoze.who.userid') user = DBSession.query(User).filter(User.user_name == login).one() paper = self._check_valid_paper(int(paper_id)) if not paper: redirect('/error', params=dict(msg="invalid paper supplied")) # does this user have access to this paper? if not self._check_eligible_submit(user, paper): redirect('/error', params=dict( msg="user does not have access to submit paper")) if self._check_user_submitted_paper(user, paper): redirect('/error', params=dict( msg="user already submitted summary for this paper")) # add summary summary_ = PaperSummary(paper, user, summary) DBSession.add(summary_) if kwargs: # we know that we have some summary reviews to grade # figure out how which summaries have been reviewed s = set() for arg in kwargs: name, val = arg.split("_") s.add(val) for summary_id in s: summary = DBSession.query(PaperSummary).filter(PaperSummary.id == summary_id).first() if not summary: redirect('/error', params=dict(msg="invalid summary id received")) k_hmac = "_".join(["hmac", summary_id]) if k_hmac not in kwargs: redirect('/error', params=dict(msg="incomplete requested received")) hmac = kwargs[k_hmac] if not self._check_peer_review_hmac(user, summary, str(hmac)): redirect('/error', params=dict(msg="invalid peer hmac received")) k_rating_reading = "_".join(["reading", summary_id]) if k_rating_reading not in kwargs: redirect('/error', params=dict(msg="incomplete requested received")) rating_reading = int(kwargs[k_rating_reading]) if rating_reading > 3 or rating_reading < 0: redirect('/error', params=dict(msg="invalid value for reading rating")) k_rating_critique = "_".join(["critique", summary_id]) if k_rating_critique not in kwargs: redirect('/error', params=dict(msg="incomplete requested received")) rating_critique = int(kwargs[k_rating_critique]) if rating_critique > 3 or rating_critique < 0: redirect('/error', params=dict(msg="invalid value for critique rating")) k_comments = "_".join(["comments", summary_id]) if k_comments not in kwargs: redirect('/error', params=dict(msg="incomplete requested received")) if self._has_already_submitted_review(user, summary): redirect('/error', params=dict(msg="user has already submitted a review for this summary")) comments = str(kwargs[k_comments]) # because we "reserved" this earlier, we should have # database records already in place that we just need # to update. if not then something is broken... response = DBSession.query(StudentSummaryReview)\ .filter(StudentSummaryReview.creator_id == user.id)\ .filter(StudentSummaryReview.summary_id == summary.id)\ .filter(StudentSummaryReview.status == 'incomplete').one() response.rating = rating_reading response.insight_rating = rating_critique response.comments = comments response.status = 'complete' redirect("/course")