From 434dddaceeb631f5734cd25a584a318d72d36510 Mon Sep 17 00:00:00 2001
From: Peter Stanko <peter.stanko0@gmail.com>
Date: Mon, 13 Aug 2018 15:27:03 +0200
Subject: [PATCH] Submissions cancelation

---
 app.py                      | 22 +++++++++++++++++++++-
 management/data/__init__.py | 24 ++++++++++++++++++++++--
 2 files changed, 43 insertions(+), 3 deletions(-)

diff --git a/app.py b/app.py
index 2ebae75..54245c2 100644
--- a/app.py
+++ b/app.py
@@ -3,8 +3,9 @@ Main application module
 - Creates instance of the flask app named app
 - registers commands
 """
-import click
 import logging as logger
+
+import click
 from flask import Flask
 from flask.cli import AppGroup, run_command
 
@@ -145,5 +146,24 @@ def cli_projects_list(course):
     manager.list_projects(course)
 
 
+@submissions_cli.command('cancel-all', help="Cancel all submissions")
+def cli_submissions_cancel_all():
+    log.info(f"[CMD] Cancelling all submissions")
+    manager.cancel_all_submissions()
+
+
+@submissions_cli.command('cancel', help="Cancel submission")
+@click.argument('sid')
+def cli_submissions_cancel(sid):
+    log.info(f"[CMD] Cancelling all submissions")
+    manager.cancel_submission(sid)
+
+
+@submissions_cli.command('list', help="List all submissions")
+def cli_submissions_cancel_all():
+    log.info(f"[CMD] List all submissions")
+    manager.list_all_submissions()
+
+
 if __name__ == '__main__':
     cli_run_devel()
diff --git a/management/data/__init__.py b/management/data/__init__.py
index 4365185..e8bea64 100644
--- a/management/data/__init__.py
+++ b/management/data/__init__.py
@@ -6,7 +6,7 @@ from management.data import shared
 from management.data.data_test import init_test_data
 from management.data.data_dev import init_dev_data
 from management.data.data_prod import init_prod_data
-from portal.database.models import Course, Role, User
+from portal.database.models import Course, Role, User, Submission, SubmissionState
 from portal.service import general
 from portal.service.general import write_entity
 from portal.tools import time
@@ -121,7 +121,6 @@ class DataManagement(object):
             project.config.archive_from = None
             project.config.submissions_allowed_to = days_allow_to
             write_entity(project)
-            self.db.session.commit()
             return project
 
     def list_projects(self, course: str):
@@ -134,3 +133,24 @@ class DataManagement(object):
         with self.app.app_context():
             for course in Course.query.all():
                 print(f"{course.codename}: {course.name}")
+
+    def list_all_submissions(self):
+        with self.app.app_context():
+            for submission in Submission.query.all():
+                print(f"{submission.id} [{submission.state}]: {submission.user.username}")
+
+    def cancel_all_submissions(self):
+        with self.app.app_context():
+            for submission in Submission.query.all():
+                submission.change_state(SubmissionState.CANCELLED)
+                write_entity(submission)
+            self.db.session.commit()
+
+    def cancel_submission(self, sid):
+        with self.app.app_context():
+            submission = general.find_submission(sid)
+            submission.change_state(SubmissionState.CANCELLED)
+            write_entity(submission)
+            self.db.session.commit()
+
+
-- 
GitLab