示例#1
0
文件: paper.py 项目: zakird/revsub
    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)
示例#2
0
 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
示例#3
0
文件: __init__.py 项目: zakird/revsub
 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
示例#4
0
 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)
示例#5
0
    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)
示例#6
0
 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")