Loading portal/facade/__init__.py +2 −0 Original line number Diff line number Diff line Loading @@ -7,3 +7,5 @@ from .secrets_facade import SecretsFacade from .submissions_facade import SubmissionsFacade from .users_facade import UsersFacade from .workers_facade import WorkersFacade from .features import is_api_enabled, feature_not_enabled_error from .urls import UrlService portal/facade/general_facade.py +6 −0 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ from typing import List import flask from portal.database import models from portal.facade.urls import UrlService from portal.service import errors from portal.service.auth import AuthService from portal.service.find import FindService Loading @@ -24,6 +25,11 @@ class GeneralFacade: self._service = service_klass() self._entity_name = entity_name self._services = ServicesCollection() self._urls = UrlService() @property def urls(self): return self._urls @property def services(self) -> ServicesCollection: Loading portal/facade/projects_facade.py +9 −0 Original line number Diff line number Diff line Loading @@ -91,3 +91,12 @@ class ProjectsFacade(GeneralCRUDFacade): f"{self.client_name}") result = self._service(project).copy_project(target_course) return result def is_create_notepad(self, project: Project): """Creates notepad for the project """ log.info(f"[IS] Create notepad for project {project.log_name}" f"{self.client_name}") result = self._services.is_api(project.course).create_notepad(project=project) return result portal/facade/submissions_facade.py +36 −2 Original line number Diff line number Diff line Loading @@ -82,7 +82,6 @@ class SubmissionsFacade(GeneralCRUDFacade): Args: source_submission: Source submission instance note(str): Note for the submission. Typically contains a reason for the resubmit. Returns(Submission): Copied submission """ Loading @@ -97,7 +96,7 @@ class SubmissionsFacade(GeneralCRUDFacade): log.info(f"[SUBMIT] Resending submission task for {submission.log_name}") return self._service(submission).resend_submission() def cancel_submission(self, submission): def cancel_submission(self, submission: Submission): log.info(f"[CANCEL] Cancelling the submission {submission.log_name} " f"by {self.client_name}") return self._service(submission).cancel_submission() Loading @@ -113,3 +112,38 @@ class SubmissionsFacade(GeneralCRUDFacade): course_id=course, states=states, user_ids=user_ids, project_ids=project_ids, role_ids=role_ids, group_ids=group_ids) def is_read_notepad(self, submission: Submission): """Read IS MUNI notepad for the author's submission Args: submission(Submission): Submission instance """ log.debug(f"[IS] Reading notepad content for {submission.log_name} " f"by {self.client_name}") note = self._services.is_api(submission.course).read_note( project=submission.project, user=submission.user) return note def is_write_notepad(self, submission: Submission, content: str = None): """Write IS MUNI notepad content for the submission Args: submission(Submission): Submission instance content(str): Notepad content that will be written """ log.info(f"[IS] Writing notepad content for {submission.log_name} " f"by {self.client_name}: {content}") self._submission_email(content, submission) return self._services.is_api(submission.course).write_note( project=submission.project, user=submission.user, content=content ) def _submission_email(self, content, submission): self._services.emails.notify_user( user=submission.user, template='is_notepad_updated', content=content, submission=submission, submission_url=self.urls.submission(submission=submission) ) portal/facade/urls.py 0 → 100644 +24 −0 Original line number Diff line number Diff line import logging import flask from portal.database import Submission log = logging.getLogger(__name__) class UrlService: @property def flask_app(self) -> flask.Flask: return flask.current_app @property def frontend_url(self) -> str: return self.flask_app.config.get('FRONTEND_URL') def submission(self, submission: Submission): url = self.frontend_url + f"/submissions/{submission.id}" return url def submission_review(self, submission: Submission): return self.submission(submission) + "/review" Loading
portal/facade/__init__.py +2 −0 Original line number Diff line number Diff line Loading @@ -7,3 +7,5 @@ from .secrets_facade import SecretsFacade from .submissions_facade import SubmissionsFacade from .users_facade import UsersFacade from .workers_facade import WorkersFacade from .features import is_api_enabled, feature_not_enabled_error from .urls import UrlService
portal/facade/general_facade.py +6 −0 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ from typing import List import flask from portal.database import models from portal.facade.urls import UrlService from portal.service import errors from portal.service.auth import AuthService from portal.service.find import FindService Loading @@ -24,6 +25,11 @@ class GeneralFacade: self._service = service_klass() self._entity_name = entity_name self._services = ServicesCollection() self._urls = UrlService() @property def urls(self): return self._urls @property def services(self) -> ServicesCollection: Loading
portal/facade/projects_facade.py +9 −0 Original line number Diff line number Diff line Loading @@ -91,3 +91,12 @@ class ProjectsFacade(GeneralCRUDFacade): f"{self.client_name}") result = self._service(project).copy_project(target_course) return result def is_create_notepad(self, project: Project): """Creates notepad for the project """ log.info(f"[IS] Create notepad for project {project.log_name}" f"{self.client_name}") result = self._services.is_api(project.course).create_notepad(project=project) return result
portal/facade/submissions_facade.py +36 −2 Original line number Diff line number Diff line Loading @@ -82,7 +82,6 @@ class SubmissionsFacade(GeneralCRUDFacade): Args: source_submission: Source submission instance note(str): Note for the submission. Typically contains a reason for the resubmit. Returns(Submission): Copied submission """ Loading @@ -97,7 +96,7 @@ class SubmissionsFacade(GeneralCRUDFacade): log.info(f"[SUBMIT] Resending submission task for {submission.log_name}") return self._service(submission).resend_submission() def cancel_submission(self, submission): def cancel_submission(self, submission: Submission): log.info(f"[CANCEL] Cancelling the submission {submission.log_name} " f"by {self.client_name}") return self._service(submission).cancel_submission() Loading @@ -113,3 +112,38 @@ class SubmissionsFacade(GeneralCRUDFacade): course_id=course, states=states, user_ids=user_ids, project_ids=project_ids, role_ids=role_ids, group_ids=group_ids) def is_read_notepad(self, submission: Submission): """Read IS MUNI notepad for the author's submission Args: submission(Submission): Submission instance """ log.debug(f"[IS] Reading notepad content for {submission.log_name} " f"by {self.client_name}") note = self._services.is_api(submission.course).read_note( project=submission.project, user=submission.user) return note def is_write_notepad(self, submission: Submission, content: str = None): """Write IS MUNI notepad content for the submission Args: submission(Submission): Submission instance content(str): Notepad content that will be written """ log.info(f"[IS] Writing notepad content for {submission.log_name} " f"by {self.client_name}: {content}") self._submission_email(content, submission) return self._services.is_api(submission.course).write_note( project=submission.project, user=submission.user, content=content ) def _submission_email(self, content, submission): self._services.emails.notify_user( user=submission.user, template='is_notepad_updated', content=content, submission=submission, submission_url=self.urls.submission(submission=submission) )
portal/facade/urls.py 0 → 100644 +24 −0 Original line number Diff line number Diff line import logging import flask from portal.database import Submission log = logging.getLogger(__name__) class UrlService: @property def flask_app(self) -> flask.Flask: return flask.current_app @property def frontend_url(self) -> str: return self.flask_app.config.get('FRONTEND_URL') def submission(self, submission: Submission): url = self.frontend_url + f"/submissions/{submission.id}" return url def submission_review(self, submission: Submission): return self.submission(submission) + "/review"