def view_job(service_id, job_id): job = Job.from_id(job_id, service_id=current_service.id) if job.cancelled: abort(404) filter_args = parse_filter_args(request.args) filter_args['status'] = set_status_filters(filter_args) just_sent_message = 'Your {} been sent. Printing starts {} at 5:30pm.'.format( 'letter has' if job.notification_count == 1 else 'letters have', printing_today_or_tomorrow(job.created_at)) return render_template( 'views/jobs/job.html', job=job, status=request.args.get('status', ''), updates_url=url_for( ".view_job_updates", service_id=service_id, job_id=job.id, status=request.args.get('status', ''), ), partials=get_job_partials(job), just_sent=request.args.get('just_sent') == 'yes', just_sent_message=just_sent_message, )
def view_job_csv(service_id, job_id): job = Job.from_id(job_id, service_id=service_id) filter_args = parse_filter_args(request.args) filter_args['status'] = set_status_filters(filter_args) return Response( stream_with_context( generate_notifications_csv( service_id=service_id, job_id=job_id, status=filter_args.get('status'), page=request.args.get('page', 1), page_size=5000, format_for_csv=True, template_type=job.template_type, ) ), mimetype='text/csv', headers={ 'Content-Disposition': 'inline; filename="{} - {}.csv"'.format( job.template['name'], format_datetime_short(job.created_at) ) } )
def cancel_letter_job(service_id, job_id): if request.method == 'POST': job = Job.from_id(job_id, service_id=service_id) if job.status != 'finished' or job.notifications_created < job.notification_count: flash("We are still processing these letters, please try again in a minute.", 'try again') return view_job(service_id, job_id) try: number_of_letters = job.cancel() except HTTPError as e: flash(e.message, 'dangerous') return redirect(url_for('main.view_job', service_id=service_id, job_id=job_id)) flash("Cancelled {} letters from {}".format( format_thousands(number_of_letters), job.original_file_name ), 'default_with_tick') return redirect(url_for('main.service_dashboard', service_id=service_id)) flash("Are you sure you want to cancel sending these letters?", 'cancel') return view_job(service_id, job_id)
def test_client_parses_empty_job_stats(mocker): service_id = 'service_id' job_id = 'job_id' expected_data = { 'data': { 'status': 'finished', 'template_version': 3, 'id': job_id, 'updated_at': '2016-08-24T08:29:28.332972+00:00', 'service': service_id, 'processing_finished': '2016-08-24T08:11:48.676365+00:00', 'statistics': [], 'original_file_name': 'test-notify-email.csv', 'created_by': { 'name': '*****@*****.**', 'id': '3571f2ae-7a39-4fb4-9ad7-8453f5257072' }, 'created_at': '2016-08-24T08:09:56.371073+00:00', 'template': 'c0309261-9c9e-4530-8fed-5f67b02260d2', 'notification_count': 80, 'processing_started': '2016-08-24T08:09:57.661246+00:00' } } expected_url = '/service/{}/job/{}'.format(service_id, job_id) mock_get = mocker.patch( 'app.notify_client.job_api_client.JobApiClient.get', return_value=expected_data) result = Job.from_id(job_id, service_id=service_id) mock_get.assert_called_once_with(url=expected_url, params={}) assert result.notifications_requested == 0 assert result.notifications_sent == 0 assert result.notification_count == 80 assert result.notifications_failed == 0
def view_job_updates(service_id, job_id): job = Job.from_id(job_id, service_id=service_id) return jsonify(**get_job_partials(job))
def cancel_job(service_id, job_id): Job.from_id(job_id, service_id=service_id).cancel() return redirect(url_for('main.service_dashboard', service_id=service_id))