def close_review(review: Review, session) -> Review: review.status = "closed" review.finish_timestamp = helper.get_date_time_now() user_handler.give_experience_point(review.user_id, session) pair = review_pair_handler.get_review_pair_from_review(review, session) partner_review = get_partner_review(review, session) if partner_review != None and partner_review.status == 'closed': difference = review_pair_handler.compute_difference(pair) pair.variance = difference pair.is_good = True if difference <= 1 else False review.item.in_progress_reviews_level_1 -= 1 review.item.in_progress_reviews_level_2 -= 1 if pair.is_good: review.item.open_reviews -= 1 review.item.open_reviews_level_1 -= 1 review.item.open_reviews_level_2 -= 1 pairs = review_pair_handler.get_review_pairs_by_item( pair.item_id, session) if(len(list(filter(lambda p: p.is_good, pairs))) >= 4): review.item.status = "closed" review.item.close_timestamp = review.finish_timestamp review.item.result_score = item_handler.compute_item_result_score( review.item_id, session) update_object(review, session) update_object(pair, session) update_object(review.item, session) return review
def create_review(id: int, item_id: str, user_id: str=None, status: str=None, finish_time=None) -> Review: review = Review() review.id = id review.item_id = item_id review.user_id = user_id review.status = status if finish_time == None: review.finish_timestamp = get_date_time_now() else: review.finish_timestamp = get_date_time(finish_time) return review
def create_submission_db(submission, session): """Inserts a new submission into the database Parameters ---------- submission: Submission, required The submission to be inserted Returns ------ submission: Submission The inserted submission """ submission.id = str(uuid4()) submission.submission_date = helper.get_date_time_now() session.add(submission) session.commit() return submission
def create_review(user, item, is_test, session) -> Review: """Accepts an item for review Parameters ---------- user: User The user that reviews the item item: Item The item to be reviewed by the user Returns ------ item: Item The case to be assigned to the user """ # If a ReviewInProgress exists for the user, return session = get_db_session(is_test, session) try: review = session.query(Review).filter(Review.user_id == user.id, Review.status == "in_progress", Review.item_id == item.id).one() return review except: pass # If the amount of reviews in progress equals the amount of reviews needed, raise an error if item.in_progress_reviews_level_1 >= item.open_reviews_level_1: if user.level_id > 1: if item.in_progress_reviews_level_2 >= item.open_reviews_level_2: raise Exception( 'Item cannot be accepted since enough other detecitves are already working on the case' ) else: raise Exception( 'Item cannot be accepted since enough other detecitves are already working on the case' ) # Create a new ReviewInProgress rip = Review() rip.id = str(uuid4()) rip.item_id = item.id rip.user_id = user.id rip.start_timestamp = helper.get_date_time_now(is_test) rip.status = "in_progress" session.add(rip) session.commit() # If a user is a senior, the review will by default be a senior review, # except if no senior reviews are needed if user.level_id > 1 and item.open_reviews_level_2 > item.in_progress_reviews_level_2: rip.is_peer_review = True item.in_progress_reviews_level_2 = item.in_progress_reviews_level_2 + 1 # Check if a pair with open senior review exists pair_found = False for pair in item.review_pairs: if pair.senior_review_id == None: pair.senior_review_id = rip.id pair_found = True session.merge(pair) break # Create new pair, if review cannot be attached to existing pair if pair_found == False: pair = ReviewPair() pair.id = str(uuid4()) pair.senior_review_id = rip.id item.review_pairs.append(pair) session.merge(pair) # If review is junior review else: rip.is_peer_review = False item.in_progress_reviews_level_1 = item.in_progress_reviews_level_1 + 1 # Check if a pair with open junior review exists pair_found = False for pair in item.review_pairs: if pair.junior_review_id == None: pair.junior_review_id = rip.id pair_found = True session.merge(pair) break # Create new pair, if review cannot be attached to existing pair if pair_found == False: pair = ReviewPair() pair.id = str(uuid4()) pair.junior_review_id = rip.id item.review_pairs.append(pair) session.merge(pair) session.merge(rip) session.merge(item) session.commit() rip = create_answers_for_review(rip, is_test, session) return rip