Skip to content

Commit 128ce69

Browse files
committed
refactor: replace global filter_validity with model-specific methods
Replace calls to the global filter_validity() function with model-specific filter_validity() methods (e.g., Item.filter_validity(), Service.filter_validity()) across resources.py and services.py. This change improves code modularity by encapsulating validity filtering logic within each model class, allowing for potential model-specific customizations in the future.
1 parent b2538a5 commit 128ce69

File tree

5 files changed

+44
-44
lines changed

5 files changed

+44
-44
lines changed

tools/resources.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ def before_import_row(self, row, **kwargs):
132132

133133
# This method is overridden in order to define which data is valid during import.
134134
def get_queryset(self):
135-
return Item.objects.filter(*filter_validity())
135+
return Item.objects.filter(*Item.filter_validity())
136136

137137

138138
class ServiceResource(ItemServiceResource):
@@ -160,4 +160,4 @@ def before_import_row(self, row, **kwargs):
160160

161161
# This method is overridden in order to define which data is valid during import.
162162
def get_queryset(self):
163-
return Service.objects.filter(*filter_validity())
163+
return Service.objects.filter(*Service.filter_validity())

tools/services.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -582,7 +582,7 @@ def upload_simple_data(user, context):
582582
db_entries = {
583583
x.code: x
584584
for x in context.object_manager.filter(
585-
code__in=[x["code"] for x in context.parsed_entries], *filter_validity()
585+
code__in=[x["code"] for x in context.parsed_entries], *context.object_manager.model.filter_validity()
586586
)
587587
}
588588

@@ -729,7 +729,7 @@ def load_locations_xml(xml):
729729

730730
@functools.lru_cache(None)
731731
def get_parent_location(code):
732-
return Location.objects.filter(code=code, *filter_validity()).first()
732+
return Location.objects.filter(code=code, *Location.filter_validity()).first()
733733

734734

735735
def __chunk_list(l, size=1000):
@@ -748,7 +748,7 @@ def upload_locations(user, xml, strategy=STRATEGY_INSERT, dry_run=False):
748748
existing_locations = {}
749749
for ids_chunk in __chunk_list(ids):
750750
existing_locations.update({
751-
loc.code: loc for loc in Location.objects.filter(code__in=ids_chunk, *filter_validity())
751+
loc.code: loc for loc in Location.objects.filter(code__in=ids_chunk, *Location.filter_validity())
752752
})
753753

754754
get_parent_location.cache_clear()
@@ -858,9 +858,9 @@ def load_health_facilities_xml(xml):
858858
@functools.lru_cache(None)
859859
def get_pricelist(name, type):
860860
if type == "services":
861-
return ServicesPricelist.objects.filter(name=name, *filter_validity()).first()
861+
return ServicesPricelist.objects.filter(name=name, *ServicesPricelist.filter_validity()).first()
862862
elif type == "items":
863-
return ItemsPricelist.objects.filter(name=name, *filter_validity()).first()
863+
return ItemsPricelist.objects.filter(name=name, *ServicesPricelist.filter_validity()).first()
864864

865865

866866
def upload_health_facilities(user, xml, strategy=STRATEGY_INSERT, dry_run=False):
@@ -878,7 +878,7 @@ def upload_health_facilities(user, xml, strategy=STRATEGY_INSERT, dry_run=False)
878878
db_health_facilities = {
879879
x.code: x
880880
for x in HealthFacility.objects.filter(
881-
code__in=[x["code"] for x in raw_health_facilities], *filter_validity()
881+
code__in=[x["code"] for x in raw_health_facilities], *HealthFacility.filter_validity()
882882
)
883883
}
884884
for facility in raw_health_facilities:
@@ -1014,7 +1014,7 @@ def create_officer_feedbacks_export(user, officer):
10141014
10151015
"""
10161016

1017-
prompts = FeedbackPrompt.objects.filter(*filter_validity())\
1017+
prompts = FeedbackPrompt.objects.filter(*FeedbackPrompt.filter_validity())\
10181018
.filter(officer_id=officer.id, claim__feedback_status=Claim.FEEDBACK_SELECTED)\
10191019
.select_related('claim',
10201020
'claim__insuree',
@@ -1061,7 +1061,7 @@ def create_officer_renewals_export(user, officer):
10611061
from policy.models import PolicyRenewal
10621062
format_date = '%d-%m-%Y'
10631063
renewals = PolicyRenewal.objects.filter(
1064-
new_officer=officer, *filter_validity()
1064+
new_officer=officer, *PolicyRenewal.filter_validity()
10651065
).select_related(
10661066
"policy",
10671067
"insuree",
@@ -1138,7 +1138,7 @@ def get_controls():
11381138

11391139

11401140
def create_phone_extract_db(location_id, with_insuree=False):
1141-
location = Location.objects.get(id=location_id, *filter_validity())
1141+
location = Location.objects.get(id=location_id, *Location.filter_validity())
11421142
if not location:
11431143
raise ValueError(f"Location {location_id} does not exist")
11441144

@@ -1173,23 +1173,23 @@ def create_phone_extract_db(location_id, with_insuree=False):
11731173
# Medical Services
11741174
db_con.executemany(
11751175
"INSERT INTO tblReferences(Code, Name, Type, Price) VALUES (?, ?, 'S', ?)",
1176-
Service.objects.filter(*filter_validity()).values_list(
1176+
Service.objects.filter(*Service.filter_validity()).values_list(
11771177
"code", "name", "price"
11781178
),
11791179
)
11801180

11811181
# Medical Items
11821182
db_con.executemany(
11831183
"INSERT INTO tblReferences(Code, Name, Type, Price) VALUES (?, ?, 'I', ?)",
1184-
Item.objects.filter(*filter_validity())
1184+
Item.objects.filter(*Item.filter_validity())
11851185
.values_list("code", "name", "price")
11861186
.all(),
11871187
)
11881188

11891189
# Medical Diagnosis
11901190
db_con.executemany(
11911191
"INSERT INTO tblReferences(Code, Name, Type, Price) VALUES (?, ?, 'D', 0)",
1192-
Diagnosis.objects.filter(*filter_validity())
1192+
Diagnosis.objects.filter(*Diagnosis.filter_validity())
11931193
.values_list("code", "name")
11941194
.all(),
11951195
)
@@ -1210,7 +1210,7 @@ def create_phone_extract_db(location_id, with_insuree=False):
12101210
ClaimAdmin.objects.filter(
12111211
health_facility__location_id=location_id,
12121212
health_facility__validity_to__isnull=True,
1213-
*filter_validity(),
1213+
*ClaimAdmin.filter_validity(),
12141214
)
12151215
.annotate(
12161216
name=Concat(

tools/tests/_test_upload_items.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1203,7 +1203,7 @@ def test_upload_items_multiple_insert_update_delete_dry_run(self, mock_parsing):
12031203
errors = []
12041204
mock_parsing.return_value = raw_items, errors
12051205

1206-
before_total_items = Item.objects.filter(*filter_validity()).count()
1206+
before_total_items = Item.objects.filter(*Item.filter_validity()).count()
12071207
expected_deleted = before_total_items - 2
12081208

12091209
expected = UploadResult(
@@ -1273,11 +1273,11 @@ def test_upload_items_multiple_insert(self, mock_parsing):
12731273
updated=0,
12741274
deleted=0,
12751275
)
1276-
total_items_before = Item.objects.filter(*filter_validity()).count()
1276+
total_items_before = Item.objects.filter(*Item.filter_validity()).count()
12771277

12781278
# Inserting
12791279
result = upload_items(self.admin_user, "xml", strategy, dry_run)
1280-
total_items_after = Item.objects.filter(*filter_validity()).count()
1280+
total_items_after = Item.objects.filter(*Item.filter_validity()).count()
12811281

12821282
self.assertEqual(expected, result)
12831283
self.assertEqual(total_items_before + 2, total_items_after)
@@ -1355,11 +1355,11 @@ def test_upload_items_multiple_update(self, mock_parsing):
13551355
updated=2,
13561356
deleted=0,
13571357
)
1358-
total_items_before = Item.objects.filter(*filter_validity()).count()
1358+
total_items_before = Item.objects.filter(*Item.filter_validity()).count()
13591359

13601360
# update
13611361
result = upload_items(self.admin_user, "xml", strategy, dry_run)
1362-
total_items_after = Item.objects.filter(*filter_validity()).count()
1362+
total_items_after = Item.objects.filter(*Item.filter_validity()).count()
13631363

13641364
self.assertEqual(expected, result)
13651365
self.assertEqual(total_items_before, total_items_after)
@@ -1448,11 +1448,11 @@ def test_upload_items_multiple_insert_update(self, mock_parsing):
14481448
updated=2,
14491449
deleted=0,
14501450
)
1451-
total_items_before = Item.objects.filter(*filter_validity()).count()
1451+
total_items_before = Item.objects.filter(*Item.filter_validity()).count()
14521452

14531453
# insert-update
14541454
result = upload_items(self.admin_user, "xml", strategy, dry_run)
1455-
total_items_after = Item.objects.filter(*filter_validity()).count()
1455+
total_items_after = Item.objects.filter(*Item.filter_validity()).count()
14561456

14571457
self.assertEqual(expected, result)
14581458
self.assertEqual(total_items_before + 2, total_items_after)
@@ -1475,7 +1475,7 @@ def test_upload_items_multiple_insert_update(self, mock_parsing):
14751475
@patch("tools.services.parse_xml_items")
14761476
def test_upload_items_multiple_insert_update_delete(self, mock_parsing):
14771477
# setup - fetching initial DB items in order not to delete them
1478-
all_items = Item.objects.filter(*filter_validity()).all()
1478+
all_items = Item.objects.filter(*Item.filter_validity()).all()
14791479
items_to_not_delete = []
14801480
for item in all_items:
14811481
item_dict = item.__dict__
@@ -1554,11 +1554,11 @@ def test_upload_items_multiple_insert_update_delete(self, mock_parsing):
15541554
updated=total_updated,
15551555
deleted=1,
15561556
)
1557-
total_items_before = Item.objects.filter(*filter_validity()).count()
1557+
total_items_before = Item.objects.filter(*Item.filter_validity()).count()
15581558

15591559
# insert update delete
15601560
result = upload_items(self.admin_user, "xml", strategy, dry_run)
1561-
total_items_after = Item.objects.filter(*filter_validity()).count()
1561+
total_items_after = Item.objects.filter(*Item.filter_validity()).count()
15621562

15631563
self.assertEqual(expected, result)
15641564
# 2 inserts and 1 deletion

tools/tests/_test_upload_services.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1063,7 +1063,7 @@ def test_upload_services_multiple_insert_update_delete_dry_run(self, mock_parsin
10631063
errors = []
10641064
mock_parsing.return_value = raw_services, errors
10651065

1066-
before_total_services = Service.objects.filter(*filter_validity()).count()
1066+
before_total_services = Service.objects.filter(*Service.filter_validity()).count()
10671067
expected_deleted = before_total_services - 2
10681068

10691069
expected = UploadResult(
@@ -1133,11 +1133,11 @@ def test_upload_services_multiple_insert(self, mock_parsing):
11331133
updated=0,
11341134
deleted=0,
11351135
)
1136-
total_services_before = Service.objects.filter(*filter_validity()).count()
1136+
total_services_before = Service.objects.filter(*Service.filter_validity()).count()
11371137

11381138
# Inserting
11391139
result = upload_services(self.admin_user, "xml", strategy, dry_run)
1140-
total_services_after = Service.objects.filter(*filter_validity()).count()
1140+
total_services_after = Service.objects.filter(*Service.filter_validity()).count()
11411141

11421142
self.assertEqual(expected, result)
11431143
self.assertEqual(total_services_before + 2, total_services_after)
@@ -1216,11 +1216,11 @@ def test_upload_services_multiple_update(self, mock_parsing):
12161216
updated=2,
12171217
deleted=0,
12181218
)
1219-
total_services_before = Service.objects.filter(*filter_validity()).count()
1219+
total_services_before = Service.objects.filter(*Service.filter_validity()).count()
12201220

12211221
# update
12221222
result = upload_services(self.admin_user, "xml", strategy, dry_run)
1223-
total_services_after = Service.objects.filter(*filter_validity()).count()
1223+
total_services_after = Service.objects.filter(*Service.filter_validity()).count()
12241224

12251225
self.assertEqual(expected, result)
12261226
self.assertEqual(total_services_before, total_services_after)
@@ -1310,11 +1310,11 @@ def test_upload_services_multiple_insert_update(self, mock_parsing):
13101310
updated=2,
13111311
deleted=0,
13121312
)
1313-
total_services_before = Service.objects.filter(*filter_validity()).count()
1313+
total_services_before = Service.objects.filter(*Service.filter_validity()).count()
13141314

13151315
# insert-update
13161316
result = upload_services(self.admin_user, "xml", strategy, dry_run)
1317-
total_services_after = Service.objects.filter(*filter_validity()).count()
1317+
total_services_after = Service.objects.filter(*Service.filter_validity()).count()
13181318

13191319
self.assertEqual(expected, result)
13201320
self.assertEqual(total_services_before + 2, total_services_after)
@@ -1337,7 +1337,7 @@ def test_upload_services_multiple_insert_update(self, mock_parsing):
13371337
@patch("tools.services.parse_xml_services")
13381338
def test_upload_services_multiple_insert_update_delete(self, mock_parsing):
13391339
# setup - fetching initial DB services in order not to delete them
1340-
services = Service.objects.filter(*filter_validity()).all()
1340+
services = Service.objects.filter(*Service.filter_validity()).all()
13411341
services_to_not_delete = []
13421342
for service in services:
13431343
service_dict = service.__dict__
@@ -1416,11 +1416,11 @@ def test_upload_services_multiple_insert_update_delete(self, mock_parsing):
14161416
updated=total_updated,
14171417
deleted=1,
14181418
)
1419-
total_services_before = Service.objects.filter(*filter_validity()).count()
1419+
total_services_before = Service.objects.filter(*Service.filter_validity()).count()
14201420

14211421
# insert update delete
14221422
result = upload_services(self.admin_user, "xml", strategy, dry_run)
1423-
total_services_after = Service.objects.filter(*filter_validity()).count()
1423+
total_services_after = Service.objects.filter(*Service.filter_validity()).count()
14241424

14251425
self.assertEqual(expected, result)
14261426
# 2 inserts and 1 deletion

tools/views.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
def download_locations(request):
4545
data = {"Regions": [], "Districts": [], "Municipalities": [], "Villages": []}
4646

47-
for region in Location.objects.filter(~Q(code="FR"), type="R", *filter_validity()):
47+
for region in Location.objects.filter(~Q(code="FR"), type="R", *Location.filter_validity()):
4848
data["Regions"].append(serializers.format_location(region))
4949
children = Location.objects.children(region.id)
5050
for child in children:
@@ -106,7 +106,7 @@ def upload_locations(request):
106106
)
107107
@renderer_classes([serializers.HealthFacilitiesXMLRenderer])
108108
def download_health_facilities(request):
109-
queryset = HealthFacility.objects.filter(*filter_validity())
109+
queryset = HealthFacility.objects.filter(*HealthFacility.filter_validity())
110110
data = {
111111
"health_facility_details": [
112112
serializers.format_health_facility(hf) for hf in queryset
@@ -174,7 +174,7 @@ def upload_health_facilities(request):
174174
)
175175
@renderer_classes([serializers.DiagnosesXMLRenderer])
176176
def download_diagnoses(request):
177-
queryset = Diagnosis.objects.filter(*filter_validity())
177+
queryset = Diagnosis.objects.filter(*Diagnosis.filter_validity())
178178
data = [serializers.format_diagnosis(hf) for hf in queryset]
179179
return Response(
180180
data=data,
@@ -209,7 +209,7 @@ def download_items(request):
209209
The requested data in an XML file.
210210
211211
"""
212-
queryset = Item.objects.filter(*filter_validity())
212+
queryset = Item.objects.filter(*Item.filter_validity())
213213
data = [serializers.format_items(item) for item in queryset]
214214
return Response(
215215
data=data,
@@ -227,7 +227,7 @@ def download_items(request):
227227
)
228228
@renderer_classes([serializers.ServicesXMLRenderer])
229229
def download_services(request):
230-
queryset = Service.objects.filter(*filter_validity())
230+
queryset = Service.objects.filter(*Service.filter_validity())
231231
data = [serializers.format_services(service) for service in queryset]
232232
return Response(
233233
data=data,
@@ -419,7 +419,7 @@ def download_feedbacks(request):
419419
raise PermissionDenied(_("unauthorized"))
420420

421421
officer_id = request.GET.get("officer_id")
422-
officer = get_object_or_404(Officer, id=officer_id, *filter_validity())
422+
officer = get_object_or_404(Officer, id=officer_id, *Officer.filter_validity())
423423

424424
export_file = services.create_officer_feedbacks_export(request.user, officer)
425425

@@ -438,7 +438,7 @@ def download_renewals(request):
438438
raise PermissionDenied(_("unauthorized"))
439439

440440
officer_id = request.GET.get("officer_id")
441-
officer = get_object_or_404(Officer, id=officer_id, *filter_validity())
441+
officer = get_object_or_404(Officer, id=officer_id, *Officer.filter_validity())
442442

443443
export_file = services.create_officer_renewals_export(request.user, officer)
444444
response = FileResponse(
@@ -586,7 +586,7 @@ def export_items(request):
586586
def process_export_items(user, data_type):
587587
logger.info("User (audit id %s) requested export of medical items in %s", user.id_for_audit, data_type)
588588
item_resource = ItemResource(user=user)
589-
query_set = Item.objects.filter(*filter_validity()).order_by("code")
589+
query_set = Item.objects.filter(*Item.filter_validity()).order_by("code")
590590
dataset = item_resource.export(query_set)
591591
datasets = {
592592
XLS: dataset.xls,
@@ -644,7 +644,7 @@ def export_services(request):
644644
def process_export_services(user, data_type):
645645
logger.info("User (audit id %s) requested export of medical services in %s", user.id_for_audit, data_type)
646646
service_resource = ServiceResource(user)
647-
query_set = Service.objects.filter(*filter_validity()).order_by("code")
647+
query_set = Service.objects.filter(*Service.filter_validity()).order_by("code")
648648
dataset = service_resource.export(query_set)
649649
datasets = {
650650
XLS: dataset.xls,

0 commit comments

Comments
 (0)