From b681a276409542d43215a1009ba596fa349695b8 Mon Sep 17 00:00:00 2001 From: Ross Date: Tue, 2 Feb 2021 09:35:29 +0000 Subject: [PATCH] repalce rapid - long --- longs/admin.py | 28 +-- longs/apps.py | 4 +- longs/decorators.py | 8 +- longs/filters.py | 6 +- longs/forms.py | 32 +-- longs/models.py | 48 ++-- longs/tables.py | 12 +- longs/templates/rapids/author_list.html | 4 +- longs/templates/rapids/base.html | 12 +- longs/templates/rapids/category_detail.html | 8 +- longs/templates/rapids/exam.html | 6 +- longs/templates/rapids/exam_list.html | 8 +- longs/templates/rapids/exam_overview.html | 22 +- longs/templates/rapids/exam_scores.html | 6 +- longs/templates/rapids/exam_scores_user.html | 4 +- longs/templates/rapids/exams.html | 4 +- longs/templates/rapids/index.html | 10 +- longs/templates/rapids/index_old.html | 16 +- longs/templates/rapids/mark.html | 6 +- longs/templates/rapids/mark_overview.html | 8 +- longs/templates/rapids/note_form.html | 2 +- longs/templates/rapids/rapid_detail.html | 16 +- .../templates/rapids/rapid_display_block.html | 14 +- longs/templates/rapids/rapid_form.html | 18 +- .../rapids/rapidcreationdefault_form.html | 4 +- longs/templates/rapids/view.html | 4 +- longs/urls.py | 24 +- longs/views.py | 218 +++++++++--------- 28 files changed, 276 insertions(+), 276 deletions(-) diff --git a/longs/admin.py b/longs/admin.py index 6d259e65..71d6f1e9 100755 --- a/longs/admin.py +++ b/longs/admin.py @@ -1,5 +1,5 @@ from django.contrib import admin -from .models import Rapid, RapidImage, Examination, Site, Abnormality, Region, Note, RapidCreationDefault, Answer, Exam +from .models import Long, LongImage, Examination, Site, Abnormality, Region, Note, LongCreationDefault, Answer, Exam import tagulous.admin @@ -15,29 +15,29 @@ admin.site.register(Exam) admin.site.register(Abnormality) admin.site.register(Region) admin.site.register(Note) -admin.site.register(RapidCreationDefault) +admin.site.register(LongCreationDefault) admin.site.register(Answer) -class RapidAnswersInline(admin.TabularInline): +class LongAnswersInline(admin.TabularInline): model = Answer extra = 1 -class RapidImageInline(admin.TabularInline): - model = RapidImage +class LongImageInline(admin.TabularInline): + model = LongImage extra = 1 readonly_fields = [ "image_tag", ] class ExamInline(admin.TabularInline): - model = Rapid.exams.through + model = Long.exams.through extra = 1 -class RapidAdminForm(ModelForm): +class LongAdminForm(ModelForm): class Meta: - model = Rapid + model = Long fields = [ "normal", "abnormality", "region", "laterality", "examination", @@ -49,8 +49,8 @@ class RapidAdminForm(ModelForm): } -class RapidAdmin(VersionAdmin): - form = RapidAdminForm +class LongAdmin(VersionAdmin): + form = LongAdminForm filter_horizontal = ( "abnormality", @@ -62,12 +62,12 @@ class RapidAdmin(VersionAdmin): view_on_site = True inlines = [ - RapidImageInline, - RapidAnswersInline, + LongImageInline, + LongAnswersInline, ExamInline, ] -admin.site.register(Rapid, RapidAdmin) +admin.site.register(Long, LongAdmin) -#tagulous.admin.register(Rapid.condition) +#tagulous.admin.register(Long.condition) diff --git a/longs/apps.py b/longs/apps.py index 4f99b06e..96e26aef 100755 --- a/longs/apps.py +++ b/longs/apps.py @@ -1,5 +1,5 @@ from django.apps import AppConfig -class RapidsConfig(AppConfig): - name = 'rapids' +class LongsConfig(AppConfig): + name = 'longs' diff --git a/longs/decorators.py b/longs/decorators.py index 72c1c36b..268511f5 100755 --- a/longs/decorators.py +++ b/longs/decorators.py @@ -1,10 +1,10 @@ from django.core.exceptions import PermissionDenied -from .models import Rapid +from .models import Long -def user_is_author_or_rapid_checker(function): +def user_is_author_or_long_checker(function): def wrap(request, *args, **kwargs): - rapid = Rapid.objects.get(pk=kwargs['pk']) - if request.user in rapid.author.all() or request.user.groups.filter(name='rapid_checker').exists(): + long = Long.objects.get(pk=kwargs['pk']) + if request.user in long.author.all() or request.user.groups.filter(name='long_checker').exists(): return function(request, *args, **kwargs) else: raise PermissionDenied diff --git a/longs/filters.py b/longs/filters.py index 3f10b4f6..f1817a4b 100755 --- a/longs/filters.py +++ b/longs/filters.py @@ -1,10 +1,10 @@ import django_filters -from .models import Rapid +from .models import Long -class RapidFilter(django_filters.FilterSet): +class LongFilter(django_filters.FilterSet): class Meta: - model = Rapid + model = Long fields = ("normal", "abnormality", "region", "examination", "laterality", "site", "created_date", "author") diff --git a/longs/forms.py b/longs/forms.py index c98304c5..8e042186 100755 --- a/longs/forms.py +++ b/longs/forms.py @@ -8,13 +8,13 @@ from django.forms import ( ) from django.forms import inlineformset_factory -from rapids.models import ( +from longs.models import ( Abnormality, Examination, Note, - Rapid, - RapidCreationDefault, - RapidImage, + Long, + LongCreationDefault, + LongImage, Region, Answer, CidUserAnswer, @@ -25,13 +25,13 @@ from django.contrib.admin.widgets import FilteredSelectMultiple from django.forms.widgets import RadioSelect, TextInput, Textarea -class RapidAnswerForm(ModelForm): +class LongAnswerForm(ModelForm): class Meta: model = CidUserAnswer fields = ("answer",) -class MarkRapidQuestionForm(Form): +class MarkLongQuestionForm(Form): # correct = forms.CharField(required=False) # half_correct = forms.CharField(required=False) # incorrect = forms.CharField(required=False) @@ -62,14 +62,14 @@ class AbnormalityForm(ModelForm): fields = ["name"] -class RapidCreationDefaultForm(ModelForm): +class LongCreationDefaultForm(ModelForm): class Meta: - model = RapidCreationDefault + model = LongCreationDefault fields = ["site"] exclude = ["author"] -class RapidForm(ModelForm): +class LongForm(ModelForm): class Media: # Django also includes a few javascript files necessary # for the operation of this form element. You need to @@ -82,7 +82,7 @@ class RapidForm(ModelForm): js = ["jsi18n.js", "tesseract.min.js"] def __init__(self, *args, **kwargs): - super(RapidForm, self).__init__(*args, **kwargs) + super(LongForm, self).__init__(*args, **kwargs) # self.fields['question'].widget.attrs = {'class': 'question-form', 'rows': 10, 'cols': 100} # self.fields['feedback'].widget.attrs = {'class': 'feedback-form', 'rows': 10, 'cols': 100} self.fields["abnormality"] = ModelMultipleChoiceField( @@ -103,11 +103,11 @@ class RapidForm(ModelForm): ) self.fields["laterality"] = ChoiceField( - choices=Rapid.LATERALITY_CHOICES, required=True, widget=RadioSelect() + choices=Long.LATERALITY_CHOICES, required=True, widget=RadioSelect() ) class Meta: - model = Rapid + model = Long # fields = ['due_back'] # fields = '__all__' fields = [ @@ -128,8 +128,8 @@ class RapidForm(ModelForm): ImageFormSet = inlineformset_factory( - Rapid, - RapidImage, + Long, + LongImage, fields=["image", "feedback_image"], exclude=[], can_delete=True, @@ -139,7 +139,7 @@ ImageFormSet = inlineformset_factory( ) AnswerFormSet = inlineformset_factory( - Rapid, + Long, Answer, fields=["answer", "status"], widgets={ @@ -154,7 +154,7 @@ AnswerFormSet = inlineformset_factory( ) AnswerUpdateFormSet = inlineformset_factory( - Rapid, + Long, Answer, fields=["answer", "status"], widgets={ diff --git a/longs/models.py b/longs/models.py index 83fbb41b..fd839611 100644 --- a/longs/models.py +++ b/longs/models.py @@ -19,9 +19,9 @@ import string image_storage = FileSystemStorage( # Physical file location ROOT - location=u"{0}/rapids/".format(settings.MEDIA_ROOT), + location=u"{0}/longs/".format(settings.MEDIA_ROOT), # Url for file - base_url=u"{0}rapids/".format(settings.MEDIA_URL), + base_url=u"{0}longs/".format(settings.MEDIA_URL), ) def image_directory_path(instance, filename): @@ -81,7 +81,7 @@ class Sign(tagulous.models.TagModel): class Answer(models.Model): question = models.ForeignKey( - "Rapid", related_name="answers", on_delete=models.CASCADE + "Long", related_name="answers", on_delete=models.CASCADE ) answer = models.TextField(max_length=500) answer_compare = models.TextField(max_length=500) @@ -113,7 +113,7 @@ class Answer(models.Model): self.answer_compare = s -class Rapid(models.Model): +class Long(models.Model): #author = models.ForeignKey('auth.User', on_delete=models.CASCADE) #image = models.ImageField() question = models.TextField(null=True, blank=True) @@ -174,7 +174,7 @@ class Rapid(models.Model): author = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, help_text='Author of question', - related_name="rapid_authored_questions") + related_name="long_authored_questions") scrapped = models.BooleanField( default=False, @@ -186,7 +186,7 @@ class Rapid(models.Model): def get_absolute_url(self): - return reverse('rapids:rapid_detail', kwargs={'pk': self.pk}) + return reverse('longs:long_detail', kwargs={'pk': self.pk}) def get_authors(self): """Returns a comma seperated text list of authors""" @@ -295,8 +295,8 @@ class Rapid(models.Model): #return self.GetImages() -class RapidImage(models.Model): - rapid = models.ForeignKey(Rapid, +class LongImage(models.Model): + long = models.ForeignKey(Long, related_name="images", on_delete=models.CASCADE) image = models.ImageField(upload_to=image_directory_path, storage=image_storage) @@ -306,7 +306,7 @@ class RapidImage(models.Model): def image_tag(self): if self.image: return mark_safe( - 'Click and hold to zoom' + 'Click and hold to zoom' .format(self.image.url)) else: return "" @@ -315,46 +315,46 @@ class RapidImage(models.Model): class Note(models.Model): - rapid = models.ForeignKey(Rapid, - related_name="rapid_notes", + long = models.ForeignKey(Long, + related_name="long_notes", on_delete=models.CASCADE, null=True) #author = models.ForeignKey(User, author = models.ForeignKey( settings.AUTH_USER_MODEL, - related_name="rapid_notes", + related_name="long_notes", on_delete=models.CASCADE) note = models.TextField() created_on = models.DateTimeField(auto_now_add=True) def get_absolute_url(self): - self.pk = self.rapid_id - return reverse('rapids:rapid_detail', kwargs={'pk': self.pk}) + self.pk = self.long_id + return reverse('longs:long_detail', kwargs={'pk': self.pk}) def __str__(self): - return "{} [{}] {}".format(self.rapid, self.author, self.created_on) + return "{} [{}] {}".format(self.long, self.author, self.created_on) -class RapidCreationDefault(models.Model): +class LongCreationDefault(models.Model): #author = models.OneToOneField(User, author = models.OneToOneField( settings.AUTH_USER_MODEL, - related_name="rapid_default", + related_name="long_default", on_delete=models.CASCADE) site = models.ManyToManyField( Site, blank=True, default=1, - help_text="Default site to use when creating a new rapid") + help_text="Default site to use when creating a new long") def get_absolute_url(self): - return reverse('rapids:rapid_create') + return reverse('longs:long_create') class Exam(models.Model): name = models.CharField(max_length=200) exam_questions = SortedManyToManyField( - Rapid, related_name="exams", blank="true" + Long, related_name="exams", blank="true" ) active = models.BooleanField( @@ -377,13 +377,13 @@ class Exam(models.Model): return self.name def get_absolute_url(self): - return reverse("rapids:exam_overview", kwargs={"pk": self.pk}) + return reverse("longs:exam_overview", kwargs={"pk": self.pk}) def get_exam_name(self): return self.name def get_json_url(self): - return reverse("rapids:exam_json", args=(self.pk,)) + return reverse("longs:exam_json", args=(self.pk,)) def get_question_index(self, question): return list(self.exam_questions.all()).index(question) @@ -392,10 +392,10 @@ class CidUserAnswer(models.Model): """User answers by candidate""" question = models.ForeignKey( - Rapid, related_name="cid_user_answers", on_delete=models.CASCADE + Long, related_name="cid_user_answers", on_delete=models.CASCADE ) - # For rapids the answer can be normal in which case the below field is true + # For longs the answer can be normal in which case the below field is true normal = models.BooleanField(default=False) answer = models.TextField(max_length=500, blank=True) diff --git a/longs/tables.py b/longs/tables.py index edcebe21..030c0036 100755 --- a/longs/tables.py +++ b/longs/tables.py @@ -1,7 +1,7 @@ import django_tables2 as tables from django_tables2.utils import A -from .models import Rapid +from .models import Long from django.utils.html import format_html @@ -25,23 +25,23 @@ class ImageColumn(tables.Column): return format_html('Invalid image url', image_object) -class RapidTable(tables.Table): - edit = tables.LinkColumn('rapids:rapid_update', +class LongTable(tables.Table): + edit = tables.LinkColumn('longs:long_update', text='Edit', args=[A('pk')], orderable=False) - view = tables.LinkColumn('rapids:rapid_detail', + view = tables.LinkColumn('longs:long_detail', text='View', args=[A('pk')], orderable=False) - clone = tables.LinkColumn('rapids:rapid_clone', + clone = tables.LinkColumn('longs:long_clone', text='Clone', args=[A('pk')], orderable=False) images = ImageColumn("images", orderable=False) class Meta: - model = Rapid + model = Long template_name = "django_tables2/bootstrap4.html" fields = ("normal", "abnormality", "region", "examination", "laterality", "site", "created_date", "author") diff --git a/longs/templates/rapids/author_list.html b/longs/templates/rapids/author_list.html index 82564136..a2ad3c2b 100755 --- a/longs/templates/rapids/author_list.html +++ b/longs/templates/rapids/author_list.html @@ -1,8 +1,8 @@ -{% extends 'rapids/base.html' %} +{% extends 'longs/base.html' %} {% block content %} {% for author in authors %} -

Author: {{author.username}},

+

Author: {{author.username}},

{% endfor %} {% endblock %} \ No newline at end of file diff --git a/longs/templates/rapids/base.html b/longs/templates/rapids/base.html index 9b974595..01846ab6 100755 --- a/longs/templates/rapids/base.html +++ b/longs/templates/rapids/base.html @@ -1,7 +1,7 @@ {% extends 'base.html' %} {% block title %} -Rapids +Longs {% endblock %} {% block css %} @@ -15,13 +15,13 @@ Rapids {% block content %} {% endblock %} {% block navigation %} -Rapids: +Longs: {% if request.user.is_authenticated %} -Exams / -Questions / -Create Question +Exams / +Questions / +Create Question {% endif %} {% comment %}
Questions by: -author {% endcomment %} +author {% endcomment %} {% endblock %} \ No newline at end of file diff --git a/longs/templates/rapids/category_detail.html b/longs/templates/rapids/category_detail.html index 0d8e840e..214690f9 100755 --- a/longs/templates/rapids/category_detail.html +++ b/longs/templates/rapids/category_detail.html @@ -1,11 +1,11 @@ -{% extends 'rapids/base.html' %} +{% extends 'longs/base.html' %} {% block content %} {{category}}: diff --git a/longs/templates/rapids/exam.html b/longs/templates/rapids/exam.html index 5636dc22..bda7eb4a 100644 --- a/longs/templates/rapids/exam.html +++ b/longs/templates/rapids/exam.html @@ -1,4 +1,4 @@ -{% extends 'rapids/base.html' %} +{% extends 'longs/base.html' %} {% block content %} ' % (instance.pk, instance)) -# return render(request, "rapids/create_simple.html", {'form': form}) +# return render(request, "longs/create_simple.html", {'form': form}) @login_required @@ -429,7 +429,7 @@ def create_abnormality(request): % (instance.pk, instance) ) return render( - request, "rapids/create_simple.html", {"form": form, "name": "Abnormality"} + request, "longs/create_simple.html", {"form": form, "name": "Abnormality"} ) @@ -455,7 +455,7 @@ def create_examination(request): % (instance.pk, instance) ) return render( - request, "rapids/create_simple.html", {"form": form, "name": "Examination"} + request, "longs/create_simple.html", {"form": form, "name": "Examination"} ) @@ -481,7 +481,7 @@ def create_region(request): % (instance.pk, instance) ) return render( - request, "rapids/create_simple.html", {"form": form, "name": "Region"} + request, "longs/create_simple.html", {"form": form, "name": "Region"} ) @@ -497,12 +497,12 @@ def get_region_id(request): return HttpResponse("/") -class RapidView(SingleTableMixin, FilterView): - model = Rapid - table_class = RapidTable - template_name = "rapids/view.html" +class LongView(SingleTableMixin, FilterView): + model = Long + table_class = LongTable + template_name = "longs/view.html" - filterset_class = RapidFilter + filterset_class = LongFilter def loadJsonAnswer(answer): @@ -617,7 +617,7 @@ def mark_overview(request, pk): questions = exam.exam_questions.all() return render( - request, "rapids/mark_overview.html", {"exam": exam, "questions": questions} + request, "longs/mark_overview.html", {"exam": exam, "questions": questions} ) @@ -659,14 +659,14 @@ def mark(request, pk, sk): if request.method == "POST": - form = MarkRapidQuestionForm(request.POST) + form = MarkLongQuestionForm(request.POST) # ******************************* # TODO: convert to JSON request # ******************************* if form.is_valid(): # If skip button is pressed skip the question without marking if "skip" in request.POST: - return redirect("rapids:mark", pk=pk, sk=n + 1) + return redirect("longs:mark", pk=pk, sk=n + 1) cd = form.cleaned_data # correct = cd.get("correct") @@ -738,14 +738,14 @@ def mark(request, pk, sk): # answer.published_date = timezone.now() # answer.save() if "next" in request.POST: - return redirect("rapids:mark", pk=pk, sk=n + 1) + return redirect("longs:mark", pk=pk, sk=n + 1) elif "previous" in request.POST: - return redirect("rapids:mark", pk=pk, sk=n - 1) + return redirect("longs:mark", pk=pk, sk=n - 1) # Reset user answers (relies on the functional javascript) unmarked_user_answers = set() else: - form = MarkRapidQuestionForm() + form = MarkLongQuestionForm() correct_answers = question.answers.filter(status=Answer.MarkOptions.CORRECT) half_mark_answers = question.answers.filter(status=Answer.MarkOptions.HALF_MARK) @@ -753,7 +753,7 @@ def mark(request, pk, sk): return render( request, - "rapids/mark.html", + "longs/mark.html", { "exam": exam, "form": form, @@ -808,7 +808,7 @@ def active_exams(request, json=True): { "name": exam.get_exam_name(), "url": request.build_absolute_uri(exam.get_json_url()), - "type": "rapid", + "type": "long", } ) @@ -825,7 +825,7 @@ def exam_json(request, pk): if not exam.active: raise Http404("No available exam") - exam_json_cache = cache.get("rapids_exam_json_{}".format(pk)) + exam_json_cache = cache.get("longs_exam_json_{}".format(pk)) if exam_json_cache is not None and not exam.recreate_json: exam_json_cache["cached"] = True @@ -840,7 +840,7 @@ def exam_json(request, pk): for q in questions: exam_order.append(q.id) - # Loop through rapidimage associations + # Loop through longimage associations images = [] feedback_images = [] for i in q.images.all(): @@ -857,7 +857,7 @@ def exam_json(request, pk): "images": images, #"feedback_image": [], #"annotations": [str(q.image_annotations)], - "type": "rapid", + "type": "long", } #if feedback_images: @@ -865,9 +865,9 @@ def exam_json(request, pk): exam_json = { - "eid": "rapid/{}".format(exam.id), + "eid": "long/{}".format(exam.id), "cached": False, - "exam_type": "rapid", + "exam_type": "long", "exam_name": exam.name, "exam_mode": True, "exam_order": exam_order, @@ -880,7 +880,7 @@ def exam_json(request, pk): exam.recreate_json = False exam.save() - cache.set("rapids_exam_json_{}".format(pk), exam_json, 3600) + cache.set("longs_exam_json_{}".format(pk), exam_json, 3600) return JsonResponse(exam_json) @@ -892,7 +892,7 @@ def exam_json_recreate(request, pk): exam.recreate_json = True exam.save() - return redirect("rapids:exam_overview", pk=pk) + return redirect("longs:exam_overview", pk=pk) @login_required @@ -980,7 +980,7 @@ def exam_scores_cid(request, pk): return render( request, - "rapids/exam_scores.html", + "longs/exam_scores.html", { "cids": cids, "exam": exam, @@ -1053,7 +1053,7 @@ def exam_scores_cid_user(request, pk, sk): return render( request, - "rapids/exam_scores_user.html", + "longs/exam_scores_user.html", { "exam": exam, "cid": cid, @@ -1088,7 +1088,7 @@ def exam_question_detail(request, pk, sk): return render( request, - "rapids/rapid_detail.html", + "longs/long_detail.html", { "question": question, "exam": exam, @@ -1103,7 +1103,7 @@ def exam_question_detail(request, pk, sk): @login_required def exam_list(request): exams = Exam.objects.all() - return render(request, "rapids/exam_list.html", {"exams": exams}) + return render(request, "longs/exam_list.html", {"exams": exams}) @login_required @@ -1121,6 +1121,6 @@ def exam_overview(request, pk): return render( request, - "rapids/exam_overview.html", + "longs/exam_overview.html", {"exam": exam, "questions": questions, "question_number": question_number}, ) \ No newline at end of file