summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--online_test/settings.py34
-rw-r--r--yaksh/admin.py3
-rw-r--r--yaksh/models.py9
-rw-r--r--yaksh/storage_backends.py18
-rw-r--r--yaksh/templates/yaksh/add_quiz.html4
-rw-r--r--yaksh/views.py18
6 files changed, 70 insertions, 16 deletions
diff --git a/online_test/settings.py b/online_test/settings.py
index e7e19a0..bca24d5 100644
--- a/online_test/settings.py
+++ b/online_test/settings.py
@@ -52,7 +52,8 @@ INSTALLED_APPS = (
'rest_framework',
'api',
'corsheaders',
- 'rest_framework.authtoken'
+ 'rest_framework.authtoken',
+ 'storages'
)
MIDDLEWARE = (
@@ -162,7 +163,7 @@ PRODUCTION_URL = 'your_project_url'
IS_DEVELOPMENT = True
# Video File upload size
-MAX_UPLOAD_SIZE = 52428800
+MAX_UPLOAD_SIZE = 524288000
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
@@ -250,3 +251,32 @@ REST_FRAMEWORK = {
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True
+
+
+# AWS Credentials
+USE_AWS = False
+if USE_AWS:
+ DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
+ STATICFILES_STORAGE = 'storages.backends.s3boto3.S3StaticStorage'
+
+ AWS_ACCESS_KEY_ID = "access-key"
+ AWS_SECRET_ACCESS_KEY = "secret-key"
+ AWS_S3_REGION_NAME = "ap-south-1"
+ AWS_STORAGE_BUCKET_NAME = "yaksh-django"
+ AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com'
+ AWS_DEFAULT_ACL = 'public-read'
+ AWS_S3_SIGNATURE_VERSION = 's3v4'
+ AWS_S3_ADDRESSING_STYLE = "virtual"
+
+ # Static Location
+ AWS_STATIC_LOCATION = 'static'
+ STATICFILES_STORAGE = 'yaksh.storage_backends.StaticStorage'
+ STATIC_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/{AWS_STATIC_LOCATION}/"
+
+ # Media Public
+ AWS_PUBLIC_MEDIA_LOCATION = 'media/public'
+ DEFAULT_FILE_STORAGE = 'yaksh.storage_backends.PublicMediaStorage'
+
+ # Media Private
+ AWS_PRIVATE_MEDIA_LOCATION = 'media/private'
+ PRIVATE_FILE_STORAGE = 'yaksh.storage_backends.PrivateMediaStorage'
diff --git a/yaksh/admin.py b/yaksh/admin.py
index e98c7c5..011e24f 100644
--- a/yaksh/admin.py
+++ b/yaksh/admin.py
@@ -2,7 +2,7 @@ from yaksh.models import Question, Quiz, QuestionPaper, Profile
from yaksh.models import (TestCase, StandardTestCase, StdIOBasedTestCase,
Course, AnswerPaper, CourseStatus, LearningModule,
Lesson, Post, Comment, Topic, TableOfContents,
- LessonQuizAnswer, Answer
+ LessonQuizAnswer, Answer, AssignmentUpload
)
from django.contrib import admin
@@ -64,3 +64,4 @@ admin.site.register(Topic)
admin.site.register(TableOfContents)
admin.site.register(LessonQuizAnswer)
admin.site.register(Answer)
+admin.site.register(AssignmentUpload) \ No newline at end of file
diff --git a/yaksh/models.py b/yaksh/models.py
index 11ddf8a..dd3838a 100644
--- a/yaksh/models.py
+++ b/yaksh/models.py
@@ -51,6 +51,8 @@ from yaksh.code_server import (
from yaksh.settings import SERVER_POOL_PORT, SERVER_HOST_NAME
from .file_utils import extract_files, delete_files
from grades.models import GradingSystem
+from yaksh.storage_backends import PublicMediaStorage
+
languages = (
("python", "Python"),
@@ -1442,8 +1444,9 @@ class Question(models.Model):
assignmentQuestion=self, user=user
)
if assignment_files:
- metadata['assign_files'] = [(file.assignmentFile.path, False)
+ metadata['assign_files'] = [(file.assignmentFile.url, False)
for file in assignment_files]
+ print(metadata['assign_files'])
question_data['metadata'] = metadata
return json.dumps(question_data)
@@ -2661,7 +2664,9 @@ class AssignmentUploadManager(models.Manager):
class AssignmentUpload(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
assignmentQuestion = models.ForeignKey(Question, on_delete=models.CASCADE)
- assignmentFile = models.FileField(upload_to=get_assignment_dir, max_length=255)
+ assignmentFile = models.FileField(
+ upload_to=get_assignment_dir, max_length=255
+ )
question_paper = models.ForeignKey(QuestionPaper, blank=True, null=True,
on_delete=models.CASCADE)
course = models.ForeignKey(Course, null=True, blank=True,
diff --git a/yaksh/storage_backends.py b/yaksh/storage_backends.py
new file mode 100644
index 0000000..4d08c8c
--- /dev/null
+++ b/yaksh/storage_backends.py
@@ -0,0 +1,18 @@
+from django.conf import settings
+from storages.backends.s3boto3 import S3Boto3Storage
+
+
+class StaticStorage(S3Boto3Storage):
+ location = settings.AWS_STATIC_LOCATION if settings.USE_AWS else settings.STATIC_URL
+
+
+class PublicMediaStorage(S3Boto3Storage):
+ location = settings.AWS_PUBLIC_MEDIA_LOCATION if settings.USE_AWS else settings.MEDIA_URL
+ file_overwrite = False
+
+
+class PrivateMediaStorage(S3Boto3Storage):
+ location = settings.AWS_PRIVATE_MEDIA_LOCATION if settings.USE_AWS else settings.MEDIA_URL
+ default_acl = 'private'
+ file_overwrite = False
+ custom_domain = False \ No newline at end of file
diff --git a/yaksh/templates/yaksh/add_quiz.html b/yaksh/templates/yaksh/add_quiz.html
index 1609639..d43c1c6 100644
--- a/yaksh/templates/yaksh/add_quiz.html
+++ b/yaksh/templates/yaksh/add_quiz.html
@@ -65,11 +65,11 @@
<br>
<br>
<h4>You can check the quiz by attempting it in the following modes:</h4>
- <a class="btn btn-outline-info" name="button" href="{% url 'yaksh:test_quiz' 'usermode' quiz.id course_id %}" target="blank">
+ <a class="btn btn-outline-info" name="button" href="{% url 'yaksh:test_quiz' 'usermode' quiz.id course_id %}" target="_blank">
Try as student
</a>
- <a class="btn btn-outline-primary" name="button" href="{% url 'yaksh:test_quiz' 'godmode' quiz.id course_id %}" target="blank">
+ <a class="btn btn-outline-primary" name="button" href="{% url 'yaksh:test_quiz' 'godmode' quiz.id course_id %}" target="_blank">
Try as teacher
</a>
<a data-toggle="modal" data-target="#help">
diff --git a/yaksh/views.py b/yaksh/views.py
index 1965191..8422110 100644
--- a/yaksh/views.py
+++ b/yaksh/views.py
@@ -858,15 +858,15 @@ def check(request, q_id, attempt_num=None, questionpaper_id=None,
)
for fname in assignment_filename:
fname._name = fname._name.replace(" ", "_")
- assignment_files = AssignmentUpload.objects.filter(
- assignmentQuestion=current_question, course_id=course_id,
- assignmentFile__icontains=fname, user=user,
- question_paper=questionpaper_id)
- if assignment_files.exists():
- assign_file = assignment_files.first()
- if os.path.exists(assign_file.assignmentFile.path):
- os.remove(assign_file.assignmentFile.path)
- assign_file.delete()
+ # assignment_files = AssignmentUpload.objects.filter(
+ # assignmentQuestion=current_question, course_id=course_id,
+ # assignmentFile__icontains=fname, user=user,
+ # question_paper=questionpaper_id)
+ # if assignment_files.exists():
+ # assign_file = assignment_files.first()
+ # if os.path.exists(assign_file.assignmentFile.path):
+ # os.remove(assign_file.assignmentFile.path)
+ # assign_file.delete()
AssignmentUpload.objects.create(
user=user, assignmentQuestion=current_question,
course_id=course_id,