rename rapid functions
This commit is contained in:
+11
-11
@@ -130,7 +130,7 @@ class AnatomyQuestion(models.Model):
|
||||
def __str__(self):
|
||||
# Get first answer
|
||||
return "{} [{}, {}]".format(
|
||||
self.GetPrimaryAnswer(), self.modality, self.structure
|
||||
self.get_primary_answer(), self.modality, self.structure
|
||||
)
|
||||
# Get associated exams
|
||||
e = self.exams.all().values_list("name", flat=True)
|
||||
@@ -146,19 +146,19 @@ class AnatomyQuestion(models.Model):
|
||||
def get_absolute_url(self):
|
||||
return reverse("anatomy:question_detail", kwargs={"pk": self.pk})
|
||||
|
||||
def GetPrimaryAnswer(self):
|
||||
def get_primary_answer(self):
|
||||
if len(self.answers.filter(proposed=False)) > 0:
|
||||
return self.answers.filter(proposed=False).first().answer
|
||||
else:
|
||||
return "None yet..."
|
||||
|
||||
def GetExams(self):
|
||||
def get_exams(self):
|
||||
e = self.exams.all().values_list("name", flat=True)
|
||||
exams = ", ".join(e)
|
||||
return exams
|
||||
|
||||
def GetUnmarkedAnswersString(self):
|
||||
unmarked_answers = self.GetUnmarkedAnswers()
|
||||
def get_unmarked_answer_string(self):
|
||||
unmarked_answers = self.get_unmarked_answers()
|
||||
|
||||
if not unmarked_answers:
|
||||
return "No answers to mark"
|
||||
@@ -168,18 +168,18 @@ class AnatomyQuestion(models.Model):
|
||||
)
|
||||
)
|
||||
|
||||
def GetUnmarkedAnswers(self):
|
||||
def get_unmarked_answers(self):
|
||||
user_answers = set(
|
||||
[i.answer_compare for i in self.cid_user_answers.all()]
|
||||
)
|
||||
unmarked_answers = user_answers - self.GetMarkedAnswers()
|
||||
unmarked_answers = user_answers - self.get_marked_answers()
|
||||
|
||||
return unmarked_answers
|
||||
|
||||
def GetUnmarkedAnswerCount(self):
|
||||
return len(self.GetUnmarkedAnswers())
|
||||
def get_unmarked_answer_count(self):
|
||||
return len(self.get_unmarked_answers())
|
||||
|
||||
def GetMarkedAnswers(self):
|
||||
def get_marked_answers(self):
|
||||
return set(
|
||||
[
|
||||
i.answer_compare
|
||||
@@ -350,7 +350,7 @@ class CidUserAnswer(models.Model):
|
||||
except (Exam.DoesNotExist, KeyError) as e:
|
||||
exam = "None"
|
||||
return "{}/{}/{}: {}".format(
|
||||
exam, self.cid, self.question.GetPrimaryAnswer(), self.answer
|
||||
exam, self.cid, self.question.get_primary_answer(), self.answer
|
||||
)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
</a>
|
||||
{{ question.description }}
|
||||
<br />
|
||||
{{ question.question_type }}: {{ question.GetPrimaryAnswer }}
|
||||
{{ question.question_type }}: {{ question.get_primary_answer }}
|
||||
<br />
|
||||
Modality: {{ question.modality }}, <a href="{% url 'anatomy:question_detail' pk=question.pk %}">View</a>, <a href="{% url 'anatomy:mark' pk=exam.pk sk=forloop.counter0 %}">Mark</a>
|
||||
</li>
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
|
||||
<ul id="question-mark-list">
|
||||
{% for question in questions.all %}
|
||||
<li data-markcount={{question.GetUnmarkedAnswerCount}}><a href="{% url 'anatomy:mark' pk=exam.pk sk=forloop.counter0 %}">Question {{forloop.counter }}:
|
||||
{{ question }}</a><br /> {{ question.GetUnmarkedAnswersString }}</li>
|
||||
<li data-markcount={{question.get_unmarked_answer_count}}><a href="{% url 'anatomy:mark' pk=exam.pk sk=forloop.counter0 %}">Question {{forloop.counter }}:
|
||||
{{ question }}</a><br /> {{ question.get_unmarked_answer_string }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
<div class="date">
|
||||
Created: {{ question.created_date }}
|
||||
</div>
|
||||
<h1>{{ question.GetPrimaryAnswer }}</h1>
|
||||
<h1>{{ question.get_primary_answer }}</h1>
|
||||
<h2>{{question.question_type}}</h2>
|
||||
Answers (score): {% for answer in question.answers.all %}
|
||||
{{ answer }} ({{answer.status}}),
|
||||
|
||||
+2
-2
@@ -333,7 +333,7 @@ def mark(request, pk, sk):
|
||||
# i.answer.lower() for i in question.incorrect_answers.all()
|
||||
# ]
|
||||
|
||||
unmarked_user_answers = question.GetUnmarkedAnswers()
|
||||
unmarked_user_answers = question.get_unmarked_answers()
|
||||
|
||||
if request.method == "POST":
|
||||
|
||||
@@ -576,7 +576,7 @@ def exam_scores_cid_user(request, pk, sk):
|
||||
|
||||
answer_score = user_answer.get_answer_score()
|
||||
|
||||
correct_answer = q.GetPrimaryAnswer()
|
||||
correct_answer = q.get_primary_answer()
|
||||
|
||||
if not exam.publish_results:
|
||||
correct_answer = "*****"
|
||||
|
||||
+1
-1
@@ -53,7 +53,7 @@ class Sign(tagulous.models.TagModel):
|
||||
|
||||
|
||||
class ExamBase(models.Model):
|
||||
name = models.CharField(max_length=200)
|
||||
name = models.CharField(max_length=200, help_text="Name of the exam")
|
||||
#exam_questions = SortedManyToManyField(Long, related_name="exams", blank="true")
|
||||
|
||||
active = models.BooleanField(
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 3.2.4 on 2021-07-06 19:03
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('longs', '0036_alter_exam_exam_mode'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='exam',
|
||||
name='time_limit',
|
||||
field=models.IntegerField(default=4500, help_text='Exam time limit (in seconds). Default is 4500 seconds (75 minutes)'),
|
||||
),
|
||||
]
|
||||
+8
-8
@@ -145,12 +145,12 @@ class Long(models.Model):
|
||||
examinations = [series.get_examination() for series in self.series.all()]
|
||||
return "{} : {}".format(self.description, ", ".join(examinations))
|
||||
|
||||
def GetExams(self):
|
||||
def get_exams(self):
|
||||
e = self.exams.all().values_list("name", flat=True)
|
||||
exams = ", ".join(e)
|
||||
return exams
|
||||
|
||||
def GetImages(self, feedback=False):
|
||||
def get_images(self, feedback=False):
|
||||
qs = self.images.all()
|
||||
|
||||
if not feedback:
|
||||
@@ -160,16 +160,16 @@ class Long(models.Model):
|
||||
|
||||
return images
|
||||
|
||||
def GetImageUrls(self):
|
||||
def get_image_urls(self):
|
||||
return ",".join(
|
||||
["https://penracourses.org.uk{}".format(i.url) for i in self.GetImages()]
|
||||
["https://penracourses.org.uk{}".format(i.url) for i in self.get_images()]
|
||||
)
|
||||
|
||||
def GetUnmarkedAnswerCount(self):
|
||||
def get_unmarked_answer_count(self):
|
||||
answers = self.cid_user_answers.all()
|
||||
return len([ans for ans in answers if not ans.is_marked()])
|
||||
|
||||
def GetUnmarkedAnswers(self):
|
||||
def get_unmarked_answers(self):
|
||||
answers = self.cid_user_answers.all()
|
||||
return [ans for ans in answers if not ans.is_marked()]
|
||||
|
||||
@@ -266,7 +266,7 @@ class Long(models.Model):
|
||||
|
||||
|
||||
# def GetNonFeedbackQuestionImages(self):
|
||||
# return self.GetImages()
|
||||
# return self.get_images()
|
||||
|
||||
|
||||
def test_image_validator(file):
|
||||
@@ -527,7 +527,7 @@ class Exam(ExamBase):
|
||||
exam_questions = SortedManyToManyField(Long, related_name="exams", blank="true")
|
||||
|
||||
time_limit = models.IntegerField(
|
||||
help_text="Exam time limit (in seconds). Default is 4500 secondse (75 minutes)",
|
||||
help_text="Exam time limit (in seconds). Default is 4500 seconds (75 minutes)",
|
||||
default=4500,
|
||||
)
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
<p class="pre-whitespace"><b>Mark Scheme:</b> <pre>{{ question.mark_scheme }}</pre></p>
|
||||
</div>
|
||||
</p>
|
||||
<p><b>Exam(s):</b> {{question.GetExams}}</p>
|
||||
<p><b>Exam(s):</b> {{question.get_exams}}</p>
|
||||
</div>
|
||||
<div>
|
||||
Notes:
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
|
||||
<ul id="question-mark-list">
|
||||
{% for question in questions.all %}
|
||||
<li data-markcount={{question.GetUnmarkedAnswerCount}}><a href="{% url 'longs:mark' pk=exam.pk sk=forloop.counter0 %}">Question {{forloop.counter }}:
|
||||
{{ question }}</a><br /> Answers to mark: {{question.GetUnmarkedAnswerCount}}</li>
|
||||
<li data-markcount={{question.get_unmarked_answer_count}}><a href="{% url 'longs:mark' pk=exam.pk sk=forloop.counter0 %}">Question {{forloop.counter }}:
|
||||
{{ question }}</a><br /> Answers to mark: {{question.get_unmarked_answer_count}}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+1
-1
@@ -655,7 +655,7 @@ def mark_answer(request, pk, sk, tk):
|
||||
raise Http404("User answer does not exist")
|
||||
|
||||
try:
|
||||
unmarked = question.GetUnmarkedAnswers()
|
||||
unmarked = question.get_unmarked_answers()
|
||||
next_unmarked_id = unmarked[0].cid
|
||||
if next_unmarked_id == tk:
|
||||
next_unmarked_id = unmarked[1].cid
|
||||
|
||||
+16
-16
@@ -216,7 +216,7 @@ class Rapid(models.Model):
|
||||
lat = self.laterality
|
||||
return "{} / {} {}".format(exams, lat, n)
|
||||
|
||||
def GetPrimaryAnswer(self):
|
||||
def get_primary_answer(self):
|
||||
if self.normal:
|
||||
return "Normal"
|
||||
elif len(self.answers.filter(proposed=False)) > 0:
|
||||
@@ -224,13 +224,13 @@ class Rapid(models.Model):
|
||||
else:
|
||||
return "None yet..."
|
||||
|
||||
def GetExams(self):
|
||||
def get_exams(self):
|
||||
e = self.exams.all().values_list("name", flat=True)
|
||||
exams = ", ".join(e)
|
||||
return exams
|
||||
|
||||
def GetUnmarkedAnswersString(self):
|
||||
unmarked_answers = self.GetUnmarkedAnswers()
|
||||
def get_unmarked_answer_string(self):
|
||||
unmarked_answers = self.get_unmarked_answers()
|
||||
|
||||
if not unmarked_answers:
|
||||
return "No answers to mark"
|
||||
@@ -240,7 +240,7 @@ class Rapid(models.Model):
|
||||
)
|
||||
)
|
||||
|
||||
def GetUnmarkedAnswers(self):
|
||||
def get_unmarked_answers(self):
|
||||
# If normal no answers to mark
|
||||
if self.normal:
|
||||
return []
|
||||
@@ -248,14 +248,14 @@ class Rapid(models.Model):
|
||||
user_answers = set(
|
||||
[i.answer_compare for i in self.cid_user_answers.all() if i.normal == False]
|
||||
)
|
||||
unmarked_answers = user_answers - self.GetMarkedAnswers()
|
||||
unmarked_answers = user_answers - self.get_marked_answers()
|
||||
|
||||
return unmarked_answers
|
||||
|
||||
def GetUnmarkedAnswerCount(self):
|
||||
return len(self.GetUnmarkedAnswers())
|
||||
def get_unmarked_answer_count(self):
|
||||
return len(self.get_unmarked_answers())
|
||||
|
||||
def GetMarkedAnswers(self):
|
||||
def get_marked_answers(self):
|
||||
return set(
|
||||
[
|
||||
i.answer_compare
|
||||
@@ -276,7 +276,7 @@ class Rapid(models.Model):
|
||||
marked_answers = correct_answers | half_mark_answers | incorrect_answers
|
||||
return marked_answers
|
||||
|
||||
def GetCorrectUnstrippedAnswers(self):
|
||||
def get_correct_unstripped_answers(self):
|
||||
return set(
|
||||
[
|
||||
str(i)
|
||||
@@ -285,7 +285,7 @@ class Rapid(models.Model):
|
||||
]
|
||||
)
|
||||
|
||||
def GetImages(self, feedback=False):
|
||||
def get_images(self, feedback=False):
|
||||
qs = self.images.all()
|
||||
|
||||
if not feedback:
|
||||
@@ -295,10 +295,10 @@ class Rapid(models.Model):
|
||||
|
||||
return images
|
||||
|
||||
def GetImageUrls(self):
|
||||
return ",".join(["https://penracourses.org.uk{}".format(i.url) for i in self.GetImages()])
|
||||
def get_image_urls(self):
|
||||
return ",".join(["https://penracourses.org.uk{}".format(i.url) for i in self.get_images()])
|
||||
#def GetNonFeedbackQuestionImages(self):
|
||||
#return self.GetImages()
|
||||
#return self.get_images()
|
||||
|
||||
|
||||
class RapidImage(models.Model):
|
||||
@@ -427,7 +427,7 @@ class Exam(ExamBase):
|
||||
if not self.exam_mode:
|
||||
exam_questions[q.id]["normal"] = q.normal
|
||||
exam_questions[q.id]["feedback_images"] = feedback_images
|
||||
exam_questions[q.id]["answers"] = list(q.GetCorrectUnstrippedAnswers())
|
||||
exam_questions[q.id]["answers"] = list(q.get_correct_unstripped_answers())
|
||||
|
||||
|
||||
#if feedback_images:
|
||||
@@ -482,7 +482,7 @@ class CidUserAnswer(models.Model):
|
||||
except (Exam.DoesNotExist, KeyError) as e:
|
||||
exam = "None"
|
||||
return "{}/{}/{}: {}".format(
|
||||
exam, self.cid, self.question.GetPrimaryAnswer(), self.answer
|
||||
exam, self.cid, self.question.get_primary_answer(), self.answer
|
||||
)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
|
||||
@@ -27,14 +27,14 @@
|
||||
|
||||
<li data-question_pk={{question.pk}}>
|
||||
<a href="{% url 'rapids:exam_question_detail' pk=exam.pk sk=forloop.counter0 %}">
|
||||
{% for image in question.GetImages %}
|
||||
{% for image in question.get_images %}
|
||||
<img src="{{ image|thumbnail_url:'exam-list' }}" alt="thumbail" />
|
||||
{% endfor %}
|
||||
</a>
|
||||
{% if not question.normal %}
|
||||
<b>Abnormality:</b> {{ question.get_abnormalities }} <b>Region:</b> {{ question.get_regions }}
|
||||
<br />
|
||||
{{ question.GetPrimaryAnswer }}
|
||||
{{ question.get_primary_answer }}
|
||||
{% else %}
|
||||
<b>Normal</b>
|
||||
{% endif %}
|
||||
|
||||
@@ -13,7 +13,7 @@ Answers will be automatically marked.
|
||||
Answers marked as normal will be automatically marked.<br/>
|
||||
Region: {{ question.get_regions }}, Abnormalities: {{ question.get_abnormalities }}
|
||||
{% endif %}
|
||||
<div id="single-dicom-viewer" class="marking-dicom" data-images="{{question.GetImageUrls}}"
|
||||
<div id="single-dicom-viewer" class="marking-dicom" data-images="{{question.get_image_urls}}"
|
||||
data-annotations='{{question.image_annotations}}'>
|
||||
</div>
|
||||
<div class="marking">
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
|
||||
<ul id="question-mark-list">
|
||||
{% for question in questions.all %}
|
||||
<li data-markcount={{question.GetUnmarkedAnswerCount}}><a href="{% url 'rapids:mark' pk=exam.pk sk=forloop.counter0 %}">Question {{forloop.counter }}:
|
||||
{{ question }}</a><br /> {{ question.GetUnmarkedAnswersString }}</li>
|
||||
<li data-markcount={{question.get_unmarked_answer_count}}><a href="{% url 'rapids:mark' pk=exam.pk sk=forloop.counter0 %}">Question {{forloop.counter }}:
|
||||
{{ question }}</a><br /> {{ question.get_unmarked_answer_string }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
<div id="single-dicom-viewer" class="dicom-viewer" data-images="{{ question.GetImageUrls }}" data-annotations=''></div>
|
||||
<div id="single-dicom-viewer" class="dicom-viewer" data-images="{{ question.get_image_urls }}" data-annotations=''></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
+2
-2
@@ -645,7 +645,7 @@ def mark(request, pk, sk):
|
||||
# i.answer.lower() for i in question.incorrect_answers.all()
|
||||
# ]
|
||||
|
||||
unmarked_user_answers = question.GetUnmarkedAnswers()
|
||||
unmarked_user_answers = question.get_unmarked_answers()
|
||||
|
||||
if request.method == "POST":
|
||||
|
||||
@@ -894,7 +894,7 @@ def exam_scores_cid_user(request, pk, sk):
|
||||
ans = user_answer.answer
|
||||
answer_score = user_answer.get_answer_score()
|
||||
|
||||
correct_answer = q.GetPrimaryAnswer()
|
||||
correct_answer = q.get_primary_answer()
|
||||
|
||||
if not exam.publish_results:
|
||||
correct_answer = "*****"
|
||||
|
||||
Reference in New Issue
Block a user