Skip to content
Snippets Groups Projects
Unverified Commit 5cb5b779 authored by Peter Stanko's avatar Peter Stanko
Browse files

Review items service

parent 6aa72543
No related branches found
No related tags found
1 merge request!20Submission processor with Permission refactor
Pipeline #
......@@ -91,7 +91,7 @@ class ProjectResource(Resource):
)
project = general.find_project(course, pid)
ProjectService(project).update_project(project)
ProjectService(project).update_project(data)
return '', 204
......
......@@ -6,7 +6,7 @@ from portal import logger, storage
from portal.rest import rest_helpers
from portal.rest.schemas import review_schema, submission_schema, submission_state_schema
from portal.service import auth, general, permissions
from portal.service.reviews import create_review, create_review_items
from portal.service.reviews import ReviewService
from portal.service.submissions import SubmissionsService
submissions_namespace = Namespace('submissions')
......@@ -239,11 +239,11 @@ class SubmissionReview(Resource):
data = rest_helpers.parse_request_data(
review_schema, action='create', resource='review')
review_service = ReviewService(submission=submission)
if not submission.review:
create_review(submission)
review_service.create()
# also writes to db
create_review_items(review=submission.review,
items=data['review_items'], author=client)
review_service.create_review_items(items=data['review_items'], author=client)
return review_schema.dump(submission.review)[0], 201
......@@ -61,7 +61,7 @@ class GroupService:
Returns(Group): Updated group instance
"""
log.info(f"[UPDATE] Group {self.group.codename} to {group}.")
log.info(f"[UPDATE] Group {self.group.codename} to {self.group}.")
return _set_group_data(self.group, data)
def create_group(self, course: Course, **data) -> Course:
......@@ -169,6 +169,7 @@ class GroupService:
course = course or self.group.course
source_course = find_course(data['source_course'])
source_group = find_group(source_course, data['source_group'])
self._group = source_group
new_group = self.copy_group(course, data['with_users'])
general.write_entity(new_group)
log.info(
......
......@@ -5,41 +5,50 @@ Reviews service
import logging
from typing import List
from portal.database.models import Review, User, ReviewItem, Submission
from portal.database.models import Review, ReviewItem, Submission, User
from portal.service.general import write_entity
log = logging.getLogger(__name__)
def create_review_items(review: Review, author: User,
items: List[dict]) -> Review:
"""Creates review items for the review
class ReviewService:
def __init__(self, review: Review = None, submission: Submission = None):
self._review = review
self._submission = submission
Args:
review(Review): Review instance
author(User): Review's author
items(List[dict]): Review items to append to the review
@property
def review(self) -> Review:
return self._review or self.submission.review
Returns(Review): review instance with review items
"""
for item in items:
ReviewItem(user=author, review=review, file=item['file'], line=item['line'],
content=item['content'])
log.info(f"Added review items {items} to review {review.id} "
f"for submission {review.submission.id}")
write_entity(review)
return review
@property
def submission(self):
return self._submission or self._review.submission
def create_review_items(self, author: User, items: List[dict]) -> Review:
"""Creates review items for the review
def create_review(submission: Submission) -> Review:
"""Creates instance of the review
Args:
author(User): Review's author
items(List[dict]): Review items to append to the review
Args:
submission(Submission): Submission instance
Returns(Review): review instance with review items
"""
for item in items:
ReviewItem(user=author, review=self.review, file=item['file'], line=item['line'],
content=item['content'])
log.info(f"Added review items {items} to review {self.review.id} "
f"for submission {self.submission.id}")
write_entity(self.review)
return self.review
Returns(Review): Review instance
"""
log.debug(f"[CREATE] Review for submission: {submission.id}")
r = Review(submission=submission)
write_entity(r)
return r
def create(self) -> Review:
"""Creates instance of the review
Args:
Returns(Review): Review instance
"""
log.debug(f"[CREATE] Review for submission: {self.submission.id}")
review = Review(submission=self.submission)
write_entity(review)
return review
......@@ -2,6 +2,7 @@ import json
from portal.database.models import Course
from portal.service import courses, general
from portal.service.courses import CourseService
from . import utils
......@@ -165,7 +166,7 @@ def test_notes_token_update(client):
def test_copy_from_course(client):
source: Course = general.find_course('testcourse1')
target = courses.create_course(name='test_course', codename='test')
target = CourseService().create_course(name='test_course', codename='test')
request_dict = {
"source_course": "testcourse2",
"config": {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment