Verified Commit ece50f92 authored by Peter Stanko's avatar Peter Stanko
Browse files

Send email after the notepad has been updated

parent aff7341c
Loading
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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
+6 −0
Original line number Diff line number Diff line
@@ -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
@@ -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:
+9 −0
Original line number Diff line number Diff line
@@ -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
+36 −2
Original line number Diff line number Diff line
@@ -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
        """
@@ -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()
@@ -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