diff options
-rw-r--r-- | online_test/settings.py | 34 | ||||
-rw-r--r-- | yaksh/admin.py | 3 | ||||
-rw-r--r-- | yaksh/models.py | 9 | ||||
-rw-r--r-- | yaksh/storage_backends.py | 18 | ||||
-rw-r--r-- | yaksh/templates/yaksh/add_quiz.html | 4 | ||||
-rw-r--r-- | yaksh/views.py | 18 |
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, |