0001-jobs-add-a-try_now-parameter-to-run-new-jobs-synchro.patch
passerelle/base/models.py | ||
---|---|---|
598 | 598 |
break |
599 | 599 |
job.status = 'running' |
600 | 600 |
job.save() |
601 | 601 |
# release lock |
602 | 602 |
result = job.run() |
603 | 603 |
if result == 'skipped': |
604 | 604 |
skipped_jobs.append(job.id) |
605 | 605 | |
606 |
def add_job(self, method_name, natural_id=None, after_timestamp=None, **kwargs): |
|
606 |
def add_job(self, method_name, natural_id=None, after_timestamp=None, try_now=False, **kwargs):
|
|
607 | 607 |
resource_type = ContentType.objects.get_for_model(self) |
608 | 608 |
job = Job( |
609 | 609 |
resource_type=resource_type, |
610 | 610 |
resource_pk=self.pk, |
611 | 611 |
method_name=method_name, |
612 | 612 |
natural_id=natural_id, |
613 | 613 |
parameters=kwargs, |
614 | 614 |
) |
615 | 615 |
job.set_after_timestamp(after_timestamp) |
616 | 616 |
job.save() |
617 |
if try_now: |
|
618 |
try: |
|
619 |
job.run(spool=False) |
|
620 |
except SkipJob: |
|
621 |
pass |
|
622 |
else: |
|
623 |
return job |
|
617 | 624 |
transaction.on_commit(lambda: job.run(spool=True)) |
618 | 625 |
return job |
619 | 626 | |
620 | 627 |
def handle_job_error(self, job, exc_info): |
621 | 628 |
from passerelle.utils.conversion import exception_to_text |
622 | 629 | |
623 | 630 |
(exc_type, exc_value, tb) = exc_info |
624 | 631 |
job.status = 'failed' |
tests/test_jobs.py | ||
---|---|---|
153 | 153 | |
154 | 154 |
freezer.move_to('2019-01-01 00:00:00') |
155 | 155 |
job = base_adresse.add_job('update_streets_data') |
156 | 156 |
assert job.status == 'registered' |
157 | 157 | |
158 | 158 |
call_command('runjob', '--job-id=%s' % job.pk) |
159 | 159 |
assert Job.objects.get(id=job.id).status == 'completed' |
160 | 160 |
assert StreetModel.objects.count() == 3 |
161 | ||
162 | ||
163 |
@mock.patch('passerelle.utils.Request.get') |
|
164 |
def test_jobs_try_now(mocked_get, app, base_adresse): |
|
165 |
mocked_get.side_effect = SkipJob() |
|
166 |
job1 = base_adresse.add_job('update_streets_data', try_now=True) |
|
167 |
assert job1.status == 'registered' |
|
168 |
assert StreetModel.objects.count() == 0 |
|
169 | ||
170 |
filepath = os.path.join(os.path.dirname(__file__), 'data', 'update_streets_test.gz') |
|
171 |
with open(filepath, 'rb') as ban_file: |
|
172 |
mocked_get.side_effect = [utils.FakedResponse(content=ban_file.read(), status_code=200)] |
|
173 |
job2 = base_adresse.add_job('update_streets_data', try_now=True) |
|
174 |
assert Job.objects.get(id=job1.id).status == 'registered' |
|
175 |
assert job2.status == 'completed' |
|
176 |
assert StreetModel.objects.count() == 3 |
|
161 |
- |