def download(service_id, upload_id): return strip_whitespace( s3download( service_id, upload_id, bucket=ContactList.get_bucket_name(), ))
def generate_notifications_csv(**kwargs): from app import notification_api_client from app.s3_client.s3_csv_client import s3download if 'page' not in kwargs: kwargs['page'] = 1 if kwargs.get('job_id'): original_file_contents = s3download(kwargs['service_id'], kwargs['job_id']) original_upload = RecipientCSV( original_file_contents, template_type=kwargs['template_type'], ) original_column_headers = original_upload.column_headers fieldnames = ['Row number'] + original_column_headers + [ 'Template', 'Type', 'Job', 'Status', 'Time' ] else: fieldnames = [ 'Recipient', 'Template', 'Type', 'Sent by', 'Sent by email', 'Job', 'Status', 'Time' ] yield ','.join(fieldnames) + '\n' while kwargs['page']: notifications_resp = notification_api_client.get_notifications_for_service( **kwargs) for notification in notifications_resp['notifications']: if kwargs.get('job_id'): values = [ notification['row_number'], ] + [ original_upload[notification['row_number'] - 1].get(header).data for header in original_column_headers ] + [ notification['template_name'], notification['template_type'], notification['job_name'], notification['status'], notification['created_at'], ] else: values = [ notification['recipient'], notification['template_name'], notification['template_type'], notification['created_by_name'] or '', notification['created_by_email_address'] or '', notification['job_name'] or '', notification['status'], notification['created_at'] ] yield Spreadsheet.from_rows([map(str, values)]).as_csv_data if notifications_resp['links'].get('next'): kwargs['page'] += 1 else: return raise Exception("Should never reach here")
def _check_messages(service_id, template_id, upload_id, preview_row, letters_as_pdf=False): try: # The happy path is that the job doesn’t already exist, so the # API will return a 404 and the client will raise HTTPError. job_api_client.get_job(service_id, upload_id) # the job exists already - so go back to the templates page # If we just return a `redirect` (302) object here, we'll get # errors when we try and unpack in the check_messages route. # Rasing a werkzeug.routing redirect means that doesn't happen. raise PermanentRedirect( url_for('.send_messages', service_id=service_id, template_id=template_id)) except HTTPError as e: if e.status_code != 404: raise statistics = service_api_client.get_service_statistics(service_id, today_only=True) remaining_messages = (current_service.message_limit - sum(stat['requested'] for stat in statistics.values())) contents = s3download(service_id, upload_id) db_template = current_service.get_template_with_user_permission_or_403( template_id, current_user) email_reply_to = None sms_sender = None if db_template['template_type'] == 'email': email_reply_to = get_email_reply_to_address_from_session() elif db_template['template_type'] == 'sms': sms_sender = get_sms_sender_from_session() template = get_template( db_template, current_service, show_recipient=True, letter_preview_url=url_for( '.check_messages_preview', service_id=service_id, template_id=template_id, upload_id=upload_id, filetype='png', row_index=preview_row, ) if not letters_as_pdf else None, email_reply_to=email_reply_to, sms_sender=sms_sender, page_count=get_page_count_for_letter(db_template), ) recipients = RecipientCSV( contents, template_type=template.template_type, placeholders=template.placeholders, max_initial_rows_shown=50, max_errors_shown=50, whitelist=itertools.chain.from_iterable( [user.name, user.mobile_number, user.email_address] for user in Users(service_id)) if current_service.trial_mode else None, remaining_messages=remaining_messages, international_sms=current_service.has_permission('international_sms'), ) if request.args.get('from_test'): # only happens if generating a letter preview test back_link = url_for('.send_test', service_id=service_id, template_id=template.id) choose_time_form = None else: back_link = url_for('.send_messages', service_id=service_id, template_id=template.id) choose_time_form = ChooseTimeForm() if preview_row < 2: abort(404) if preview_row < len(recipients) + 2: template.values = recipients[preview_row - 2].recipient_and_personalisation elif preview_row > 2: abort(404) return dict( recipients=recipients, template=template, errors=recipients.has_errors, row_errors=get_errors_for_csv(recipients, template.template_type), count_of_recipients=len(recipients), count_of_displayed_recipients=len(list(recipients.displayed_rows)), original_file_name=request.args.get('original_file_name', ''), upload_id=upload_id, form=CsvUploadForm(), remaining_messages=remaining_messages, choose_time_form=choose_time_form, back_link=back_link, help=get_help_argument(), trying_to_send_letters_in_trial_mode=all(( current_service.trial_mode, template.template_type == 'letter', )), required_recipient_columns=OrderedSet( recipients.recipient_column_headers) - optional_address_columns, preview_row=preview_row, sent_previously=job_api_client.has_sent_previously( service_id, template.id, db_template['version'], request.args.get('original_file_name', '')))
def generate_notifications_csv(**kwargs): from app import notification_api_client from app.s3_client.s3_csv_client import s3download if "page" not in kwargs: kwargs["page"] = 1 if kwargs.get("job_id"): original_file_contents = s3download(kwargs["service_id"], kwargs["job_id"]) original_upload = RecipientCSV( original_file_contents, template_type=kwargs["template_type"], ) original_column_headers = original_upload.column_headers fieldnames = ["Row number"] + original_column_headers + [ "Template", "Type", "Job", "Status", "Time" ] else: fieldnames = [ "Recipient", "Template", "Type", "Sent by", "Sent by email", "Job", "Status", "Time", ] yield ",".join(fieldnames) + "\n" while kwargs["page"]: notifications_resp = notification_api_client.get_notifications_for_service( **kwargs) for notification in notifications_resp["notifications"]: if kwargs.get("job_id"): values = ([ notification["row_number"], ] + [ original_upload[notification["row_number"] - 1].get(header).data for header in original_column_headers ] + [ notification["template_name"], notification["template_type"], notification["job_name"], notification["status"], notification["created_at"], ]) else: values = [ notification["recipient"], notification["template_name"], notification["template_type"], notification["created_by_name"] or "", notification["created_by_email_address"] or "", notification["job_name"] or "", notification["status"], notification["created_at"], ] yield Spreadsheet.from_rows([map(str, values)]).as_csv_data if notifications_resp["links"].get("next"): kwargs["page"] += 1 else: return raise Exception("Should never reach here")