.
This commit is contained in:
@@ -13,6 +13,7 @@ ENV PYTHONUNBUFFERED 1
|
|||||||
# python3 python3-dev gcc \
|
# python3 python3-dev gcc \
|
||||||
# gfortran musl-dev \
|
# gfortran musl-dev \
|
||||||
# libffi-dev openssl-dev
|
# libffi-dev openssl-dev
|
||||||
|
RUN apt-get update && apt-get -y install postgresql postgresql-contrib
|
||||||
|
|
||||||
# install dependencies
|
# install dependencies
|
||||||
RUN pip install --upgrade pip
|
RUN pip install --upgrade pip
|
||||||
|
|||||||
+19
-18
@@ -69,7 +69,7 @@ INSTALLED_APPS = [
|
|||||||
"dbbackup",
|
"dbbackup",
|
||||||
"rest_framework",
|
"rest_framework",
|
||||||
"tinymce",
|
"tinymce",
|
||||||
'django_unused_media',
|
"django_unused_media",
|
||||||
]
|
]
|
||||||
|
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
@@ -112,12 +112,11 @@ WSGI_APPLICATION = "rad.wsgi.application"
|
|||||||
DATABASES = {
|
DATABASES = {
|
||||||
"default": {
|
"default": {
|
||||||
"ENGINE": "django.db.backends.postgresql",
|
"ENGINE": "django.db.backends.postgresql",
|
||||||
"NAME": "rad",
|
"NAME": os.environ.get("DB_NAME", "rad"),
|
||||||
"USER": "django",
|
"USER": os.environ.get("DB_USER", "django"),
|
||||||
"PASSWORD": "f7bf31dc9bda1256ea827953480d1917",
|
"PASSWORD": os.environ.get("DB_PASSWORD", "f7bf31dc9bda1256ea827953480d1917"),
|
||||||
# "HOST": "xkjq.uk",
|
"HOST": os.environ.get("DB_HOST", "161.35.163.87"),
|
||||||
"HOST": "161.35.163.87",
|
"PORT": os.environ.get("DB_PORT", "5432"),
|
||||||
"PORT": "5432",
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -259,21 +258,23 @@ DEFAULT_AUTO_FIELD = "django.db.models.AutoField"
|
|||||||
|
|
||||||
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
|
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
|
||||||
|
|
||||||
#SENDGRID_API_KEY = os.getenv('SENDGRID_API_KEY')
|
# SENDGRID_API_KEY = os.getenv('SENDGRID_API_KEY')
|
||||||
SENDGRID_API_KEY = "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"
|
SENDGRID_API_KEY = (
|
||||||
|
"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"
|
||||||
|
)
|
||||||
|
|
||||||
EMAIL_HOST = 'smtp.sendgrid.net'
|
EMAIL_HOST = "smtp.sendgrid.net"
|
||||||
EMAIL_HOST_USER = 'apikey' # this is exactly the value 'apikey'
|
EMAIL_HOST_USER = "apikey" # this is exactly the value 'apikey'
|
||||||
EMAIL_HOST_PASSWORD = SENDGRID_API_KEY
|
EMAIL_HOST_PASSWORD = SENDGRID_API_KEY
|
||||||
EMAIL_PORT = 587
|
EMAIL_PORT = 587
|
||||||
EMAIL_USE_TLS = True
|
EMAIL_USE_TLS = True
|
||||||
#EMAIL_HOST = "smtp.office365.com "
|
# EMAIL_HOST = "smtp.office365.com "
|
||||||
#EMAIL_HOST_USER = "Penra.courses@nhs.net"
|
# EMAIL_HOST_USER = "Penra.courses@nhs.net"
|
||||||
#EMAIL_HOST_PASSWORD = '"got3<}%o"~\J",\Di3<'
|
# EMAIL_HOST_PASSWORD = '"got3<}%o"~\J",\Di3<'
|
||||||
#EMAIL_PORT = 587
|
# EMAIL_PORT = 587
|
||||||
#EMAIL_USE_TLS = True
|
# EMAIL_USE_TLS = True
|
||||||
#EMAIL_USE_SSl = False
|
# EMAIL_USE_SSl = False
|
||||||
#DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
|
# DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from .settings_local import *
|
from .settings_local import *
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
# Generated by Django 3.2.13 on 2022-05-18 18:30
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
('rapids', '0052_rapidimage_filename'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='ciduseranswer',
|
||||||
|
name='user',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
|
||||||
|
),
|
||||||
|
]
|
||||||
+12
-24
@@ -708,6 +708,11 @@ class CidUserAnswer(models.Model):
|
|||||||
help_text="Candidate ID (limitied by BigIntegerField size)",
|
help_text="Candidate ID (limitied by BigIntegerField size)",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
user = models.ForeignKey(
|
||||||
|
settings.AUTH_USER_MODEL, on_delete=models.CASCADE, blank=True, null=True
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# Each user answer is associated with a particular exam
|
# Each user answer is associated with a particular exam
|
||||||
exam = models.ForeignKey(
|
exam = models.ForeignKey(
|
||||||
Exam, related_name="cid_user_answers", on_delete=models.CASCADE, null=True
|
Exam, related_name="cid_user_answers", on_delete=models.CASCADE, null=True
|
||||||
@@ -724,12 +729,17 @@ class CidUserAnswer(models.Model):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
|
||||||
|
name = self.cid
|
||||||
|
if self.user is not None:
|
||||||
|
name = self.user.username
|
||||||
|
|
||||||
try:
|
try:
|
||||||
exam = self.exam
|
exam = self.exam
|
||||||
except (Exam.DoesNotExist, KeyError) as e:
|
except (Exam.DoesNotExist, KeyError) as e:
|
||||||
exam = "None"
|
exam = "None"
|
||||||
return "{}/{}/{}: {}".format(
|
return "{}/{}/{}: {}".format(
|
||||||
exam, self.cid, self.question.get_primary_answer(), self.answer
|
exam, name, self.question.get_primary_answer(), self.answer
|
||||||
)
|
)
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
@@ -815,26 +825,4 @@ class CidUserAnswer(models.Model):
|
|||||||
elif marked_ans.status == Answer.MarkOptions.INCORRECT:
|
elif marked_ans.status == Answer.MarkOptions.INCORRECT:
|
||||||
mark = 0
|
mark = 0
|
||||||
|
|
||||||
return mark
|
return mark
|
||||||
|
|
||||||
if (
|
|
||||||
q.answers.filter(
|
|
||||||
answer_compare__iexact=ans, status=Answer.MarkOptions.CORRECT
|
|
||||||
).first()
|
|
||||||
is not None
|
|
||||||
):
|
|
||||||
mark = 1
|
|
||||||
elif (
|
|
||||||
q.answers.filter(
|
|
||||||
answer_compare__iexact=ans, status=Answer.MarkOptions.HALF_MARK
|
|
||||||
).first()
|
|
||||||
is not None
|
|
||||||
):
|
|
||||||
mark = 0.5
|
|
||||||
elif q.answers.filter(
|
|
||||||
answer_compare__iexact=ans, status=Answer.MarkOptions.INCORRECT
|
|
||||||
).first():
|
|
||||||
mark = 0
|
|
||||||
else:
|
|
||||||
mark = "unmarked"
|
|
||||||
return mark
|
|
||||||
Reference in New Issue
Block a user