1
1
import logging
2
- import tempfile
3
2
from typing import List
4
3
5
- import requests
6
- from django .conf import settings
7
- from django .core .files import File
8
4
from django .db .models import Count , Q , QuerySet
9
5
from django_q .tasks import async_task
10
- from pypdf import PdfReader
11
- from requests import Response
12
- from sentry_sdk import capture_message
13
6
14
7
from donations .models .main import Donor , Ngo
15
8
16
- from ..extract import DATA_ZONES , extract_data
17
-
18
9
logger = logging .getLogger (__name__ )
19
10
20
11
@@ -37,11 +28,9 @@ def import_donor_forms_task(batch_size: int = 50, run_async: bool = False, dry_r
37
28
index : int = 0
38
29
processed_form_ids : List [int ] = []
39
30
for index , ngo in enumerate (ngos_by_number_of_donors ):
40
- donor_forms_for_ngo : List [int ] = (
41
- Donor .objects .exclude (pdf_url = "" )
42
- .filter (ngo = ngo , pdf_file = "" , date_created__gte = "2023-12-31" )
43
- .values_list ("pk" , flat = True )[: batch_size + 1 ]
44
- )
31
+ donor_forms_for_ngo : List [int ] = Donor .objects .filter (
32
+ ngo = ngo , pdf_file = "" , date_created__gte = "2023-12-31"
33
+ ).values_list ("pk" , flat = True )[: batch_size + 1 ]
45
34
46
35
processed_form_ids .extend (donor_forms_for_ngo )
47
36
@@ -68,71 +57,6 @@ def execute_import(index, processed_form_ids: List[int], run_async: bool, dry_ru
68
57
def import_donor_forms (ids : List [int ], dry_run : bool ):
69
58
"""
70
59
Download and re-upload the donation form files one by one
60
+ XXX: Will be removed
71
61
"""
72
- target_donors : QuerySet [Donor ] = Donor .objects .filter (pk__in = ids ).order_by ("pk" )
73
-
74
- logger .info ("Found %s donors to import" , target_donors .count ())
75
-
76
- attempted_donors : int = 0
77
- transferred_donors : int = 0
78
-
79
- donor : Donor
80
- for attempted_donors , donor in enumerate (target_donors ):
81
-
82
- logger .debug ("Processing donation: %s" , donor .pk )
83
-
84
- if not donor .pdf_url .startswith ("http" ):
85
- logger .debug ("Skipped form %s: PDF URL does not start with http" , donor .pk )
86
- continue
87
-
88
- r : Response = requests .get (donor .pdf_url )
89
- if r .status_code != 200 :
90
- error_message = f"Donation form request status: { r .status_code } for donor { donor .pk } "
91
- logger .warning (error_message )
92
-
93
- if settings .ENABLE_SENTRY :
94
- capture_message (error_message , level = "error" )
95
-
96
- continue
97
-
98
- with tempfile .TemporaryFile () as fp :
99
- fp .write (r .content )
100
- fp .seek (0 )
101
- donor .pdf_file .save ("donation_form.pdf" , File (fp ), save = False )
102
- fp .seek (0 )
103
- reader = PdfReader (fp )
104
- page = reader .pages [0 ]
105
-
106
- try :
107
- donor .set_cnp (extract_data (page , DATA_ZONES ["cnp" ]))
108
- donor .initial = extract_data (page , DATA_ZONES ["father" ])
109
-
110
- donor .set_address_helper (
111
- street_name = extract_data (page , DATA_ZONES ["street_name" ]),
112
- street_number = extract_data (page , DATA_ZONES ["street_number" ]),
113
- street_bl = extract_data (page , DATA_ZONES ["street_bl" ]),
114
- street_sc = extract_data (page , DATA_ZONES ["street_sc" ]),
115
- street_et = extract_data (page , DATA_ZONES ["street_et" ]),
116
- street_ap = extract_data (page , DATA_ZONES ["street_ap" ]),
117
- )
118
- except Exception as e :
119
- logger .error ("Error extracting data from PDF: %s for donor %s" , e , donor .pk )
120
- continue
121
-
122
- logger .debug ("New form file: %s" , donor .pdf_file )
123
-
124
- if not dry_run :
125
- donor .save ()
126
- else :
127
- logger .info ("Dry run: not saving the donor form" )
128
-
129
- transferred_donors += 1
130
-
131
- if transferred_donors :
132
- logger .info ("Transferred %d out of %d donors" , transferred_donors , attempted_donors + 1 )
133
- else :
134
- error_message = f"No donors were transferred for the following list of { attempted_donors + 1 } IDs: { ids } "
135
- logger .error (error_message )
136
-
137
- if settings .ENABLE_SENTRY :
138
- capture_message (error_message , level = "error" )
62
+ ...
0 commit comments