1
1
import csv
2
2
import io
3
3
import json
4
- from typing import Any , Optional
4
+ from typing import Any
5
5
6
6
import yaml
7
7
from django .conf import settings
8
8
from natsort import natsorted
9
9
10
10
from airone .celery import app
11
+ from airone .lib .job import may_schedule_until_job_is_ready
11
12
from airone .lib .types import AttrTypeValue
12
13
from entry .models import Entry
13
- from job .models import Job , JobStatus
14
+ from job .models import Job
14
15
15
16
16
- def _csv_export (job : Job , values , recv_data : dict , has_referral : bool ) -> Optional [ io .StringIO ] :
17
+ def _csv_export (job : Job , values , recv_data : dict , has_referral : bool ) -> io .StringIO | None :
17
18
output = io .StringIO (newline = "" )
18
19
writer = csv .writer (output )
19
20
@@ -102,7 +103,7 @@ def _csv_export(job: Job, values, recv_data: dict, has_referral: bool) -> Option
102
103
return output
103
104
104
105
105
- def _yaml_export (job : Job , values , recv_data : dict , has_referral : bool ) -> Optional [ io .StringIO ] :
106
+ def _yaml_export (job : Job , values , recv_data : dict , has_referral : bool ) -> io .StringIO | None :
106
107
output = io .StringIO ()
107
108
108
109
def _get_attr_value (atype : int , value : dict ):
@@ -163,22 +164,15 @@ def _get_attr_value(atype: int, value: dict):
163
164
164
165
165
166
@app .task (bind = True )
166
- def export_search_result (self , job_id ):
167
- job = Job .objects .get (id = job_id )
168
-
169
- if not job .proceed_if_ready ():
170
- return
171
-
172
- # set flag to indicate that this job starts processing
173
- job .update (JobStatus .PROCESSING .value )
174
-
167
+ @may_schedule_until_job_is_ready
168
+ def export_search_result (self , job : Job ):
175
169
user = job .user
176
170
recv_data = json .loads (job .params )
177
171
178
172
# Do not care whether the "has_referral" value is
179
173
has_referral : bool = recv_data .get ("has_referral" , False )
180
- referral_name : Optional [ str ] = recv_data .get ("referral_name" )
181
- entry_name : Optional [ str ] = recv_data .get ("entry_name" )
174
+ referral_name : str | None = recv_data .get ("referral_name" )
175
+ entry_name : str | None = recv_data .get ("entry_name" )
182
176
if has_referral and referral_name is None :
183
177
referral_name = ""
184
178
@@ -191,15 +185,11 @@ def export_search_result(self, job_id):
191
185
referral_name ,
192
186
)
193
187
194
- io_stream : Optional [ io .StringIO ] = None
188
+ io_stream : io .StringIO | None = None
195
189
if recv_data ["export_style" ] == "yaml" :
196
190
io_stream = _yaml_export (job , resp ["ret_values" ], recv_data , has_referral )
197
191
elif recv_data ["export_style" ] == "csv" :
198
192
io_stream = _csv_export (job , resp ["ret_values" ], recv_data , has_referral )
199
193
200
194
if io_stream :
201
195
job .set_cache (io_stream .getvalue ())
202
-
203
- # update job status and save it except for the case that target job is canceled.
204
- if not job .is_canceled ():
205
- job .update (JobStatus .DONE .value )
0 commit comments