You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.5 KiB
Python

9 months ago
from django.contrib.auth.mixins import LoginRequiredMixin
from django.shortcuts import render
from django.urls import reverse
9 months ago
from rest_framework.views import APIView
from core.clients.sources.psychwiki import PsychWikiClient
9 months ago
from core.forms import DrugForm
from core.models import Drug
from core.views.helpers import synchronize_async_helper
9 months ago
from mxs.restrictions import StaffMemberRequiredMixin
from mxs.views import ObjectCreate, ObjectDelete, ObjectList, ObjectUpdate
class DrugList(LoginRequiredMixin, StaffMemberRequiredMixin, ObjectList):
list_template = "partials/drug-list.html"
model = Drug
page_title = "Global list of drugs"
list_url_name = "drugs"
list_url_args = ["type"]
submit_url_name = "drug_create"
delete_all_url_name = "drug_clear"
def get_context_data(self):
context = super().get_context_data()
self.extra_buttons = [
{
"url": reverse("drug_pull_merge"),
"action": "refresh",
"method": "post",
"label": "Update database from sources",
"icon": "fa-solid fa-refresh",
},
]
return context
9 months ago
class DrugCreate(LoginRequiredMixin, StaffMemberRequiredMixin, ObjectCreate):
model = Drug
form_class = DrugForm
submit_url_name = "drug_create"
class DrugUpdate(LoginRequiredMixin, StaffMemberRequiredMixin, ObjectUpdate):
model = Drug
form_class = DrugForm
submit_url_name = "drug_update"
class DrugDelete(LoginRequiredMixin, StaffMemberRequiredMixin, ObjectDelete):
model = Drug
class DrugClear(LoginRequiredMixin, StaffMemberRequiredMixin, APIView):
def delete(self, request):
template_name = "mixins/partials/notify.html"
drugs_all = Drug.objects.all()
drugs_all.delete()
context = {
"message": "Deleted all drugs",
"class": "success",
}
response = render(request, template_name, context)
response["HX-Trigger"] = "drugEvent"
return response
class DrugPullMerge(LoginRequiredMixin, StaffMemberRequiredMixin, APIView):
def post(self, request):
template_name = "mixins/partials/notify.html"
# Do something
run = synchronize_async_helper(PsychWikiClient())
result = synchronize_async_helper(run.update_drugs())
context = {
"message": f"Drugs fetched: {result}",
"class": "success",
}
response = render(request, template_name, context)
response["HX-Trigger"] = "drugEvent"
return response