From a537561217e5df6477e5792cdb87f42646716907 Mon Sep 17 00:00:00 2001 From: Ross Date: Sun, 2 May 2021 16:12:30 +0100 Subject: [PATCH] . --- anatomy/models.py | 4 +++ anatomy/views.py | 13 ++++----- longs/models.py | 5 ++++ longs/views.py | 67 ++++++----------------------------------------- rapids/models.py | 5 +++- rapids/views.py | 16 ++++++----- 6 files changed, 37 insertions(+), 73 deletions(-) diff --git a/anatomy/models.py b/anatomy/models.py index ad287015..9786b5cb 100644 --- a/anatomy/models.py +++ b/anatomy/models.py @@ -18,6 +18,8 @@ from generic.models import Examination, ExamBase from collections import defaultdict from helpers.images import image_as_base64 +import reversion + image_storage = FileSystemStorage( # Physical file location ROOT location=u"{0}/".format(settings.MEDIA_ROOT), @@ -66,6 +68,7 @@ class QuestionType(models.Model): return self.text +@reversion.register class AnatomyQuestion(models.Model): # author = models.ForeignKey('auth.User', on_delete=models.CASCADE) # image = models.ImageField() @@ -269,6 +272,7 @@ class Answer(models.Model): # self.answer.strip() +@reversion.register class Exam(ExamBase): app_name = "anatomy" diff --git a/anatomy/views.py b/anatomy/views.py index 9806bff4..98edc7de 100644 --- a/anatomy/views.py +++ b/anatomy/views.py @@ -47,6 +47,7 @@ from .models import ( ) from generic.models import Examination from generic.views import ExamViews +from reversion.views import RevisionMixin from .decorators import user_is_author_or_anatomy_checker @@ -694,7 +695,7 @@ def exam_scores_cid_user(request, pk, sk): # ) -class AnatomyQuestionCreateBase(LoginRequiredMixin, CreateView): +class AnatomyQuestionCreateBase(RevisionMixin, LoginRequiredMixin, CreateView): model = AnatomyQuestion form_class = AnatomyQuestionForm @@ -799,7 +800,7 @@ class AnatomyQuestionCreate(AnatomyQuestionCreateBase): # class AnatomyQuestionUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin, -class AnatomyQuestionUpdate(AuthorOrCheckerRequiredMixin, UpdateView): +class AnatomyQuestionUpdate(RevisionMixin, AuthorOrCheckerRequiredMixin, UpdateView): model = AnatomyQuestion form_class = AnatomyQuestionForm @@ -989,7 +990,7 @@ class QuestionDelete(AuthorOrCheckerRequiredMixin, DeleteView): model = AnatomyQuestion success_url = reverse_lazy("anatomy:anatomy_question_view") -class ExamCreate(LoginRequiredMixin, CreateView): +class ExamCreate(RevisionMixin, LoginRequiredMixin, CreateView): model = Exam form_class = ExamForm @@ -1000,7 +1001,7 @@ class ExamCreate(LoginRequiredMixin, CreateView): form.instance.author.add(self.request.user.id) return super().form_valid(form) -class ExamUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView): +class ExamUpdate(RevisionMixin, LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView): model = Exam form_class = ExamForm @@ -1011,7 +1012,7 @@ class ExamUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView): form.instance.author.add(self.request.user.id) return super().form_valid(form) -class ExamViewSet(viewsets.ModelViewSet): +class ExamViewSet(RevisionMixin, viewsets.ModelViewSet): #queryset = Exam.objects.all().order_by('name') serializer_class = ExamSerializer permission_classes = [permissions.IsAuthenticated] @@ -1026,6 +1027,6 @@ class ExamViewSet(viewsets.ModelViewSet): return Exam.objects.filter(author__id=user.id) -class ExamDelete(AuthorOrCheckerRequiredMixin, DeleteView): +class ExamDelete(RevisionMixin, AuthorOrCheckerRequiredMixin, DeleteView): model = Exam success_url = reverse_lazy("anatomy:index") \ No newline at end of file diff --git a/longs/models.py b/longs/models.py index 4e2f7cd5..df02cd6a 100644 --- a/longs/models.py +++ b/longs/models.py @@ -38,6 +38,8 @@ from easy_thumbnails.exceptions import InvalidImageFormatError import pydicom import datetime +import reversion + image_storage = FileSystemStorage( @@ -61,6 +63,7 @@ def findMiddle(input_list): return (input_list[int(middle)], input_list[int(middle - 1)]) +@reversion.register class Long(models.Model): # author = models.ForeignKey('auth.User', on_delete=models.CASCADE) # image = models.ImageField() @@ -281,6 +284,7 @@ class LongSeriesImage(models.Model): ordering = ['position'] +@reversion.register class LongSeries(models.Model): modality = models.ForeignKey( Modality, related_name="series_modality", on_delete=models.SET_NULL, null=True @@ -512,6 +516,7 @@ class LongCreationDefault(models.Model): return reverse("longs:long_create") +@reversion.register class Exam(ExamBase): app_name = "longs" diff --git a/longs/views.py b/longs/views.py index e2b28e84..ec73369c 100755 --- a/longs/views.py +++ b/longs/views.py @@ -58,6 +58,7 @@ from longs.forms import LongCreationDefaultForm from longs.models import LongCreationDefault from generic.views import ExamViews +from reversion.views import RevisionMixin from rest_framework import viewsets @@ -245,11 +246,11 @@ class AddNote(LoginRequiredMixin, CreateView): #def long_delete(request, pk): #q = get_object_or_404(Long, pk=pk) #q.delete() -class LongDelete(AuthorOrCheckerRequiredMixin, DeleteView): +class LongDelete(RevisionMixin, AuthorOrCheckerRequiredMixin, DeleteView): model = Long success_url = reverse_lazy("longs:long_view") -class LongSeriesDelete(AuthorOrCheckerRequiredMixin, DeleteView): +class LongSeriesDelete(RevisionMixin, AuthorOrCheckerRequiredMixin, DeleteView): model = LongSeries success_url = reverse_lazy("longs:long_series_view") @@ -285,7 +286,7 @@ def long_clone(request, pk): return render(request, "longs/long_form.html", context) -class LongSeriesCreate(LoginRequiredMixin, CreateView): +class LongSeriesCreate(RevisionMixin, LoginRequiredMixin, CreateView): model = LongSeries form_class = LongSeriesForm @@ -329,7 +330,7 @@ class LongSeriesCreate(LoginRequiredMixin, CreateView): else: return super().form_invalid(form) -class LongSeriesUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView): +class LongSeriesUpdate(RevisionMixin, LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView): model = LongSeries form_class = LongSeriesForm @@ -371,7 +372,7 @@ class LongSeriesUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateV else: return super().form_invalid(form) -class LongCreateBase(LoginRequiredMixin, CreateView): +class LongCreateBase(RevisionMixin, LoginRequiredMixin, CreateView): model = Long form_class = LongForm @@ -441,7 +442,7 @@ class LongCreate(LongCreateBase): # return super().form_valid(form) -class LongUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView): +class LongUpdate(RevisionMixin, LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView): model = Long form_class = LongForm @@ -522,32 +523,6 @@ def long_scrap(request, pk): # return render(request, "longs/create_simple.html", {'form': form}) -@login_required -def create_abnormality(request): - form = AbnormalityForm(request.POST or None) - if form.is_valid(): - instance = form.save() - return HttpResponse( - '' - % (instance.pk, instance) - ) - return render( - request, "longs/create_simple.html", {"form": form, "name": "Abnormality"} - ) - - -@csrf_exempt -def get_abnormality_id(request): - if request.is_ajax(): - abnormality_name = request.GET["abnormality_name"] - abnormality_id = Abnormality.objects.get(name=abnormality_name).id - data = { - "abnormality_id": abnormality_id, - } - return HttpResponse(json.dumps(data), content_type="application/json") - return HttpResponse("/") - - @login_required def create_examination(request): form = ExaminationForm(request.POST or None) @@ -574,32 +549,6 @@ def get_examination_id(request): return HttpResponse("/") -@login_required -def create_region(request): - form = RegionForm(request.POST or None) - if form.is_valid(): - instance = form.save() - return HttpResponse( - '' - % (instance.pk, instance) - ) - return render( - request, "longs/create_simple.html", {"form": form, "name": "Region"} - ) - - -@csrf_exempt -def get_region_id(request): - if request.is_ajax(): - region_name = request.GET["region_name"] - region_id = Region.objects.get(name=region_name).id - data = { - "region_id": region_id, - } - return HttpResponse(json.dumps(data), content_type="application/json") - return HttpResponse("/") - - class LongView(LoginRequiredMixin, SingleTableMixin, FilterView): model = Long table_class = LongTable @@ -997,7 +946,7 @@ def long_series_order_upload_filename(request, pk): LongExamViews = ExamViews(Exam, Long, "longs", "long", loadJsonAnswer) -class ExamViewSet(viewsets.ModelViewSet): +class ExamViewSet(RevisionMixin, viewsets.ModelViewSet): queryset = Exam.objects.all().order_by('name') serializer_class = ExamSerializer diff --git a/rapids/models.py b/rapids/models.py index 51cb244a..ccef00fa 100644 --- a/rapids/models.py +++ b/rapids/models.py @@ -22,6 +22,8 @@ from helpers.images import image_as_base64 from generic.models import Site, Condition, Sign, ExamBase +import reversion + image_storage = FileSystemStorage( # Physical file location ROOT location=u"{0}".format(settings.MEDIA_ROOT), @@ -104,6 +106,7 @@ class Answer(models.Model): self.answer_compare = s +@reversion.register class Rapid(models.Model): #author = models.ForeignKey('auth.User', on_delete=models.CASCADE) #image = models.ImageField() @@ -349,7 +352,7 @@ class RapidCreationDefault(models.Model): def get_absolute_url(self): return reverse('rapids:rapid_create') - +@reversion.register class Exam(ExamBase): app_name = "rapids" diff --git a/rapids/views.py b/rapids/views.py index 7165a969..f955f204 100755 --- a/rapids/views.py +++ b/rapids/views.py @@ -43,6 +43,8 @@ from .models import ( from generic.views import ExamViews +from reversion.views import RevisionMixin + from .tables import RapidTable, RapidUserAnswerTable from .filters import RapidFilter, RapidUserAnswerFilter @@ -268,7 +270,7 @@ def rapid_clone(request, pk): return render(request, "rapids/rapid_form.html", context) -class RapidCreateBase(LoginRequiredMixin, CreateView): +class RapidCreateBase(RevisionMixin, LoginRequiredMixin, CreateView): model = Rapid form_class = RapidForm @@ -353,7 +355,7 @@ class RapidCreate(RapidCreateBase): # return super().form_valid(form) -class RapidUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView): +class RapidUpdate(RevisionMixin, LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView): model = Rapid form_class = RapidForm @@ -928,7 +930,7 @@ class QuestionDelete(AuthorOrCheckerRequiredMixin, DeleteView): RapidExamViews = ExamViews(Exam, Rapid, "rapids", "rapid", loadJsonAnswer) -class ExamCreate(LoginRequiredMixin, CreateView): +class ExamCreate(RevisionMixin, LoginRequiredMixin, CreateView): model = Exam form_class = ExamForm @@ -939,7 +941,7 @@ class ExamCreate(LoginRequiredMixin, CreateView): form.instance.author.add(self.request.user.id) return super().form_valid(form) -class ExamUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView): +class ExamUpdate(RevisionMixin, LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView): model = Exam form_class = ExamForm @@ -970,7 +972,7 @@ class StandardResultsSetPagination(PageNumberPagination): page_size = 100 page_size_query_param = 'page_size' max_page_size = 1000 -class ExamViewSet(viewsets.ModelViewSet): +class ExamViewSet(RevisionMixin, viewsets.ModelViewSet): #queryset = Exam.objects.all().order_by('name') serializer_class = ExamSerializer @@ -995,12 +997,12 @@ class UserAnswerViewSet(viewsets.ModelViewSet): permission_classes = [permissions.IsAuthenticated] -class RapidViewSet(viewsets.ModelViewSet): +class RapidViewSet(RevisionMixin, viewsets.ModelViewSet): queryset = Rapid.objects.all()#.order_by('name') serializer_class = RapidSerializer permission_classes = [permissions.IsAuthenticated] pagination_class = StandardResultsSetPagination -class ExamDelete(AuthorOrCheckerRequiredMixin, DeleteView): +class ExamDelete(RevisionMixin, AuthorOrCheckerRequiredMixin, DeleteView): model = Exam success_url = reverse_lazy("rapids:index") \ No newline at end of file