From 1422ab4ec271472e2b5a6e6104889c44bd64a581 Mon Sep 17 00:00:00 2001 From: Dami Adesola Date: Fri, 13 Aug 2021 00:15:41 +0400 Subject: [PATCH 1/2] Implemented Minio S3, Added Image field in Questions --- .env_sample | 2 ++ .gitignore | 1 + .../migrations/0015_question_image.py | 18 ++++++++++++++++++ codechallenges/models.py | 2 +- core/settings/base.py | 15 +++++++++++++++ polls/migrations/0003_auto_20210812_1958.py | 19 +++++++++++++++++++ requirements.txt | 7 ++++++- 7 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 .env_sample create mode 100644 codechallenges/migrations/0015_question_image.py create mode 100644 polls/migrations/0003_auto_20210812_1958.py diff --git a/.env_sample b/.env_sample new file mode 100644 index 0000000..8f41861 --- /dev/null +++ b/.env_sample @@ -0,0 +1,2 @@ +ACCESS_KEY= +SECRET_KEY= \ No newline at end of file diff --git a/.gitignore b/.gitignore index 9c71830..019ef1d 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ backups .ds_store core/staticfiles venv +.env diff --git a/codechallenges/migrations/0015_question_image.py b/codechallenges/migrations/0015_question_image.py new file mode 100644 index 0000000..d8a30f6 --- /dev/null +++ b/codechallenges/migrations/0015_question_image.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.4 on 2021-08-12 20:05 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('codechallenges', '0014_auto_20210731_1954'), + ] + + operations = [ + migrations.AddField( + model_name='question', + name='image', + field=models.ImageField(blank=True, null=True, upload_to='questions'), + ), + ] diff --git a/codechallenges/models.py b/codechallenges/models.py index eb8274b..3bc3053 100644 --- a/codechallenges/models.py +++ b/codechallenges/models.py @@ -60,7 +60,7 @@ class Question(models.Model): categories = models.ManyToManyField(Category, blank=True) authors = models.ManyToManyField(Author, blank=True) - + image = models.ImageField(upload_to="questions", null=True, blank=True) def __str__(self): return self.title diff --git a/core/settings/base.py b/core/settings/base.py index e16541c..a2dc267 100644 --- a/core/settings/base.py +++ b/core/settings/base.py @@ -12,6 +12,9 @@ from pathlib import Path import os +from dotenv import load_dotenv + +load_dotenv() # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent @@ -169,3 +172,15 @@ } CELERY_IMPORTS = "core.tasks" + +# S3 configuration +ACCESS_KEY = str(os.getenv("ACCESS_KEY")) +SECRET_KEY = str(os.getenv("SECRET_KEY")) + +DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage" + +AWS_S3_ENDPOINT_URL = "http://minio.discretemath.ca/" +AWS_ACCESS_KEY_ID = os.environ.get("ACCESS_KEY", "access-key") +DEBUG = bool(os.environ.get("DJANGO_DEBUG", True)) +AWS_SECRET_ACCESS_KEY = os.environ.get("SECRET_KEY", "secret-key") +AWS_STORAGE_BUCKET_NAME = os.environ.get("AWS_STORAGE_BUCKET_NAME", "core") diff --git a/polls/migrations/0003_auto_20210812_1958.py b/polls/migrations/0003_auto_20210812_1958.py new file mode 100644 index 0000000..d056acb --- /dev/null +++ b/polls/migrations/0003_auto_20210812_1958.py @@ -0,0 +1,19 @@ +# Generated by Django 3.1.4 on 2021-08-12 19:58 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('polls', '0002_auto_20210731_2003'), + ] + + operations = [ + migrations.AlterField( + model_name='multiplechoicequestion', + name='poll', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='multiple_choice_questions', to='polls.poll'), + ), + ] diff --git a/requirements.txt b/requirements.txt index 18c03d0..394aa90 100644 --- a/requirements.txt +++ b/requirements.txt @@ -27,4 +27,9 @@ sqlparse==0.4.1 toml==0.10.2 vine==5.0.0 wcwidth==0.2.5 -drf-yasg \ No newline at end of file +python-dotenv==0.19.0 +drf-yasg==1.20.0 +Pillow==8.3.1 +django-storages==1.11.1 +boto3==1.18.6 +botocore==1.21.6 \ No newline at end of file From bcb82e87414c54bec7accd61dd91225d9bc4e794 Mon Sep 17 00:00:00 2001 From: Dami Adesola Date: Fri, 13 Aug 2021 00:19:07 +0400 Subject: [PATCH 2/2] Implemented Minio S3, Added Image field in Questions --- codechallenges/migrations/0015_question_image.py | 8 ++++---- codechallenges/models.py | 1 + polls/migrations/0003_auto_20210812_1958.py | 14 ++++++++++---- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/codechallenges/migrations/0015_question_image.py b/codechallenges/migrations/0015_question_image.py index d8a30f6..5a8f17b 100644 --- a/codechallenges/migrations/0015_question_image.py +++ b/codechallenges/migrations/0015_question_image.py @@ -6,13 +6,13 @@ class Migration(migrations.Migration): dependencies = [ - ('codechallenges', '0014_auto_20210731_1954'), + ("codechallenges", "0014_auto_20210731_1954"), ] operations = [ migrations.AddField( - model_name='question', - name='image', - field=models.ImageField(blank=True, null=True, upload_to='questions'), + model_name="question", + name="image", + field=models.ImageField(blank=True, null=True, upload_to="questions"), ), ] diff --git a/codechallenges/models.py b/codechallenges/models.py index 3bc3053..9cd0c88 100644 --- a/codechallenges/models.py +++ b/codechallenges/models.py @@ -61,6 +61,7 @@ class Question(models.Model): categories = models.ManyToManyField(Category, blank=True) authors = models.ManyToManyField(Author, blank=True) image = models.ImageField(upload_to="questions", null=True, blank=True) + def __str__(self): return self.title diff --git a/polls/migrations/0003_auto_20210812_1958.py b/polls/migrations/0003_auto_20210812_1958.py index d056acb..fd861c1 100644 --- a/polls/migrations/0003_auto_20210812_1958.py +++ b/polls/migrations/0003_auto_20210812_1958.py @@ -7,13 +7,19 @@ class Migration(migrations.Migration): dependencies = [ - ('polls', '0002_auto_20210731_2003'), + ("polls", "0002_auto_20210731_2003"), ] operations = [ migrations.AlterField( - model_name='multiplechoicequestion', - name='poll', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='multiple_choice_questions', to='polls.poll'), + model_name="multiplechoicequestion", + name="poll", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="multiple_choice_questions", + to="polls.poll", + ), ), ]