Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

upgrade django to 4.2 #1371

Merged
merged 25 commits into from
Jun 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
9dc7e9f
remove django extra fields
sainak Jun 13, 2023
6c1a465
remove django location field
sainak Jun 13, 2023
da247a1
remove dateparser
sainak Jun 13, 2023
65b7c86
remove django celery beat
sainak Jun 13, 2023
a1197d3
squash migrations
sainak Jun 13, 2023
d953637
Convert partial indexes to unique constraints and remove dependency
sainak Jun 13, 2023
e7fb7cb
remove phone number field and use consistent phone number validation
sainak Jun 13, 2023
f585952
Remove PatientSearch model
sainak Jun 13, 2023
5907f29
update django and related dependencies
sainak Jun 14, 2023
26f34dd
use default cache backend for django rate limit in tests
sainak Jun 14, 2023
5f9e966
upgrade celery
sainak Jun 15, 2023
40ff444
fix tests
sainak Jun 15, 2023
697ddd9
fix migration edge cases
sainak Jun 15, 2023
0e440c7
update fixtures
sainak Jun 15, 2023
76abf85
reduce db connection max age to prevent exhausting connections in dev…
sainak Jun 15, 2023
1474257
fix test cases
sainak Jun 15, 2023
ca90ddc
cypress is still too fast for devserver
sainak Jun 15, 2023
34f6a46
update api schema groups
sainak Jun 17, 2023
82847c3
Merge commit 'd1d29cdc753d22f7a4e430784ff86c6c6cd1b57b' into feat/dja…
sainak Jun 17, 2023
73a504a
update migrations
sainak Jun 17, 2023
2c73695
Revert "fix test cases"
sainak Jun 17, 2023
ede6933
fix dummy serializers
sainak Jun 19, 2023
df443ac
limit PatientRegisteration fields for PatientSearch
sainak Jun 19, 2023
215f987
UserAccessMixin is not being used in PatientSearch
sainak Jun 20, 2023
494b4a7
update default mail addresses
sainak Jun 20, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .flake8
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@ exclude =
__pycache__,
.venv,
*/migrations/*,
*/migrations_old/*,
*/static/CACHE/*,
docs
20 changes: 20 additions & 0 deletions care/contrib/sites/migrations/0004_alter_site_options.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Generated by Django 4.2.2 on 2023-06-14 08:36

from django.db import migrations


class Migration(migrations.Migration):
dependencies = [
("sites", "0003_set_site_domain_and_name"),
]

operations = [
migrations.AlterModelOptions(
name="site",
options={
"ordering": ["domain"],
"verbose_name": "site",
"verbose_name_plural": "sites",
},
),
]
13 changes: 13 additions & 0 deletions care/facility/api/serializers/ambulance.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,16 @@ def update(self, instance, validated_data):
validated_data.pop("drivers", [])
ambulance = super(AmbulanceSerializer, self).update(instance, validated_data)
return ambulance


class DeleteDriverSerializer(serializers.Serializer):
driver_id = serializers.IntegerField()

def update(self, instance, validated_data):
raise NotImplementedError

def create(self, validated_data):
raise NotImplementedError

class Meta:
fields = ("driver_id",)
49 changes: 48 additions & 1 deletion care/facility/api/serializers/asset.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
import enum
from datetime import datetime

from django.core.cache import cache
from django.db import transaction
from django.shortcuts import get_object_or_404
from rest_framework.exceptions import ValidationError
from rest_framework.serializers import ModelSerializer, UUIDField
from rest_framework.serializers import (
CharField,
JSONField,
ModelSerializer,
Serializer,
UUIDField,
)
from rest_framework.validators import UniqueValidator

from care.facility.api.serializers import TIMESTAMP_FIELDS
Expand All @@ -16,6 +23,9 @@
UserDefaultAssetLocation,
)
from care.users.api.serializers.user import UserBaseMinimumSerializer
from care.utils.assetintegration.hl7monitor import HL7MonitorAsset
from care.utils.assetintegration.onvif import OnvifAsset
from care.utils.assetintegration.ventilator import VentilatorAsset
from care.utils.queryset.facility import get_facility_queryset
from config.serializers import ChoiceField

Expand Down Expand Up @@ -161,3 +171,40 @@ class UserDefaultAssetLocationSerializer(ModelSerializer):
class Meta:
model = UserDefaultAssetLocation
exclude = ("deleted", "external_id", "location", "user", "id")


class AssetActionSerializer(Serializer):
def actionChoices():
actions: list[enum.Enum] = [
OnvifAsset.OnvifActions,
HL7MonitorAsset.HL7MonitorActions,
VentilatorAsset.VentilatorActions,
]
choices = []
for action in actions:
choices += [(e.value, e.name) for e in action]
return choices

type = ChoiceField(
choices=actionChoices(),
required=True,
)
data = JSONField(required=False)

class Meta:
fields = ("type", "data")


class DummyAssetOperateSerializer(Serializer):
action = AssetActionSerializer(required=True)

class Meta:
fields = ("action",)


class DummyAssetOperateResponseSerializer(Serializer):
message = CharField(required=True)
result = JSONField(required=False)

class Meta:
fields = ("message", "result")
29 changes: 11 additions & 18 deletions care/facility/api/serializers/patient.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
PatientMetaInfo,
PatientNotes,
PatientRegistration,
PatientSearch,
)
from care.facility.models.notification import Notification
from care.facility.models.patient_base import (
Expand All @@ -48,9 +47,6 @@
from care.utils.notification_handler import NotificationGenerator
from care.utils.queryset.facility import get_home_facility_queryset
from care.utils.serializer.external_id_field import ExternalIdSerializerField
from care.utils.serializer.phonenumber_ispossible_field import (
PhoneNumberIsPossibleField,
)
from config.serializers import ChoiceField


Expand Down Expand Up @@ -120,7 +116,6 @@ class Meta:
"created_by",
"deleted",
"ongoing_medication",
"patient_search_id",
"year_of_birth",
"meta_info",
"countries_travelled_old",
Expand Down Expand Up @@ -165,8 +160,6 @@ class Meta:
model = PatientTeleConsultation
fields = "__all__"

phone_number = PhoneNumberIsPossibleField()

facility = ExternalIdSerializerField(
queryset=Facility.objects.all(), required=False
)
Expand Down Expand Up @@ -220,7 +213,6 @@ class Meta:
model = PatientRegistration
exclude = (
"deleted",
"patient_search_id",
"year_of_birth",
"countries_travelled_old",
"external_id",
Expand Down Expand Up @@ -417,19 +409,20 @@ def create(self, validated_data):

class PatientSearchSerializer(serializers.ModelSerializer):
gender = ChoiceField(choices=GENDER_CHOICES)
phone_number = PhoneNumberIsPossibleField()
patient_id = serializers.UUIDField(source="external_id", read_only=True)

# facility_id = serializers.UUIDField(read_only=True, allow_null=True)

class Meta:
model = PatientSearch
exclude = (
"date_of_birth",
"year_of_birth",
"external_id",
"id",
) + TIMESTAMP_FIELDS
model = PatientRegistration
fields = (
"patient_id",
"name",
"gender",
"phone_number",
"state_id",
"facility",
"allow_transfer",
"is_active",
)


class PatientTransferSerializer(serializers.ModelSerializer):
Expand Down
18 changes: 18 additions & 0 deletions care/facility/api/serializers/patient_consultation.py
Original file line number Diff line number Diff line change
Expand Up @@ -465,3 +465,21 @@ class PatientConsultationIDSerializer(serializers.ModelSerializer):
class Meta:
model = PatientConsultation
fields = ("consultation_id", "patient_id")


class EmailDischargeSummarySerializer(serializers.Serializer):
email = serializers.EmailField(
required=False,
help_text=(
"Email address to send the discharge summary to. If not provided, "
"the email address of the current user will be used."
),
)

def validate(self, attrs):
if not attrs.get("email"):
attrs["email"] = self.context["request"].user.email
return attrs

class Meta:
fields = ("email",)
14 changes: 14 additions & 0 deletions care/facility/api/serializers/patient_investigation.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,3 +81,17 @@ class Meta:
model = InvestigationValue
read_only_fields = TIMESTAMP_FIELDS
exclude = TIMESTAMP_FIELDS + ("external_id",)


class ValueSerializer(serializers.ModelSerializer):
class Meta:
model = InvestigationValue
fields = ("external_id", "value", "notes")


# Dummy for Spec
class InvestigationUpdateSerializer(serializers.Serializer):
investigations = ValueSerializer(many=True)

class Meta:
fields = ("investigations",)
5 changes: 3 additions & 2 deletions care/facility/api/serializers/patient_otp.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,9 @@ def send_sms(otp, phone_number):
if settings.USE_SMS:
sendSMS(
phone_number,
"CoronaSafe Network Patient Management System Login, OTP is {} . Please do not share this Confidential Login Token with anyone else".format(
otp
(
f"CoronaSafe Network Patient Management System Login, OTP is {otp} . "
"Please do not share this Confidential Login Token with anyone else"
),
)
else:
Expand Down
19 changes: 0 additions & 19 deletions care/facility/api/serializers/patient_search.py

This file was deleted.

7 changes: 1 addition & 6 deletions care/facility/api/serializers/shifting.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,6 @@
from care.users.api.serializers.user import UserBaseMinimumSerializer
from care.utils.notification_handler import NotificationGenerator
from care.utils.serializer.external_id_field import ExternalIdSerializerField
from care.utils.serializer.phonenumber_ispossible_field import (
PhoneNumberIsPossibleField,
)
from config.serializers import ChoiceField


Expand Down Expand Up @@ -223,9 +220,7 @@ class ShiftingSerializer(serializers.ModelSerializer):
ambulance_driver_name = serializers.CharField(
required=False, allow_null=True, allow_blank=True
)
ambulance_phone_number = PhoneNumberIsPossibleField(
required=False, allow_null=True, allow_blank=True
)

ambulance_number = serializers.CharField(
required=False, allow_null=True, allow_blank=True
)
Expand Down
24 changes: 24 additions & 0 deletions care/facility/api/serializers/summary.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from rest_framework import serializers

from care.facility.api.serializers.facility import FacilitySerializer
from care.facility.models import DistrictScopedSummary, FacilityRelatedSummary


class FacilitySummarySerializer(serializers.ModelSerializer):
facility = FacilitySerializer()

class Meta:
model = FacilityRelatedSummary
exclude = (
"id",
"s_type",
)


class DistrictSummarySerializer(serializers.ModelSerializer):
class Meta:
model = DistrictScopedSummary
exclude = (
"id",
"s_type",
)
25 changes: 14 additions & 11 deletions care/facility/api/viewsets/ambulance.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from django_filters import rest_framework as filters
from drf_spectacular.utils import extend_schema, extend_schema_view
from rest_framework import serializers, status
from rest_framework.decorators import action
from rest_framework.mixins import (
Expand All @@ -15,6 +16,7 @@
from care.facility.api.serializers.ambulance import (
AmbulanceDriverSerializer,
AmbulanceSerializer,
DeleteDriverSerializer,
)
from care.facility.api.viewsets import UserAccessMixin
from care.facility.models.ambulance import Ambulance
Expand Down Expand Up @@ -54,10 +56,18 @@ class AmbulanceViewSet(
filter_backends = (filters.DjangoFilterBackend,)
filterset_class = AmbulanceFilterSet

def get_serializer_class(self):
if self.action == "add_driver":
return AmbulanceDriverSerializer
elif self.action == "remove_driver":
return DeleteDriverSerializer
return AmbulanceSerializer

@extend_schema(tags=["ambulance"])
@action(methods=["POST"], detail=True)
def add_driver(self, request):
ambulance = self.get_object()
serializer = AmbulanceDriverSerializer(data=request.data)
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)

driver = ambulance.ambulancedriver_set.create(**serializer.validated_data)
Expand All @@ -66,19 +76,11 @@ def add_driver(self, request):
status=status.HTTP_201_CREATED,
)

@extend_schema(tags=["ambulance"])
@action(methods=["DELETE"], detail=True)
def remove_driver(self, request):
class DeleteDriverSerializer(serializers.Serializer):
driver_id = serializers.IntegerField()

def update(self, instance, validated_data):
raise NotImplementedError

def create(self, validated_data):
raise NotImplementedError

ambulance = self.get_object()
serializer = DeleteDriverSerializer(data=request.data)
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)

driver = ambulance.ambulancedriver_set.filter(
Expand All @@ -91,6 +93,7 @@ def create(self, validated_data):
return Response(status=status.HTTP_204_NO_CONTENT)


@extend_schema_view(create=extend_schema(tags=["ambulance"]))
class AmbulanceCreateViewSet(CreateModelMixin, GenericViewSet):
permission_classes = (IsAuthenticated,)
serializer_class = AmbulanceSerializer
Expand Down
Loading