def submit_request_to_go_live(service_id): form = RequestToGoLiveForm() if form.validate_on_submit(): try: data = dict( service_name=current_service['name'], service_url=url_for('main.service_dashboard', service_id=current_service['id'], _external=True), requested_by="{} ({})".format(current_user.name, current_user.email_address), organisation_type=current_service['organisation_type'], agreement_signed=AgreementInfo.from_current_user().as_human_readable, channel=formatted_list(filter(None, ( 'email' if form.channel_email.data else None, 'text messages' if form.channel_sms.data else None, 'letters' if form.channel_letter.data else None, )), before_each='', after_each=''), start_date=form.start_date.data, start_volume=form.start_volume.data, peak_volume=form.peak_volume.data, features=formatted_list(filter(None, ( 'one off' if form.method_one_off.data else None, 'file upload' if form.method_upload.data else None, 'API' if form.method_api.data else None, )), before_each='', after_each='') ) service_api_client.request_to_go_live(service_id, data) except HTTPError: flash('Error processing your request. Please try again later.', 'error') else: flash('We’ve received your request to go live. We will respond within the next 48 business hours.', 'default') return redirect(url_for('.service_settings', service_id=service_id)) return render_template('views/service-settings/submit-request-to-go-live.html', form=form)
def format_permissions(self): added = list(sorted(set(self.value_to) - set(self.value_from))) removed = list(sorted(set(self.value_from) - set(self.value_to))) if removed and added: return 'Removed {} from this service’s permissions, added {}'.format( formatted_list(removed), formatted_list(added), ) if added: return 'Added {} to this service’s permissions'.format( formatted_list(added)) if removed: return 'Removed {} from this service’s permissions'.format( formatted_list(removed))
def __init__( self, template, values=None, image_url=None, page_count=None, contact_block=None, postage=None, ): super().__init__(template, values, contact_block=contact_block) if not image_url: raise TypeError('image_url is required') if not page_count: raise TypeError('page_count is required') if postage not in [None] + list(self.allowed_postage_types): raise TypeError('postage must be None, {}'.format( formatted_list( self.allowed_postage_types, conjunction='or', before_each='\'', after_each='\'', ))) self.image_url = image_url self.page_count = int(page_count) self._postage = postage
def submit_request_to_go_live(service_id): form = RequestToGoLiveForm() if form.validate_on_submit(): zendesk_client.create_ticket( subject='Request to go live - {}'.format(current_service['name']), message=( 'Service: {}\n' '{}\n' '\n---' '\nOrganisation type: {}' '\nAgreement signed: {}' '\nChannel: {}\nStart date: {}\nStart volume: {}' '\nPeak volume: {}' '\nFeatures: {}').format( current_service['name'], url_for('main.service_dashboard', service_id=current_service['id'], _external=True), current_service['organisation_type'], AgreementInfo.from_current_user().as_human_readable, formatted_list(filter(None, ( 'email' if form.channel_email.data else None, 'text messages' if form.channel_sms.data else None, 'letters' if form.channel_letter.data else None, )), before_each='', after_each=''), form.start_date.data, form.start_volume.data, form.peak_volume.data, formatted_list(filter(None, ( 'one off' if form.method_one_off.data else None, 'file upload' if form.method_upload.data else None, 'API' if form.method_api.data else None, )), before_each='', after_each='')), ticket_type=zendesk_client.TYPE_QUESTION, user_email=current_user.email_address, user_name=current_user.name) flash( 'Thanks for your request to go live. We’ll get back to you within one working day.', 'default') return redirect(url_for('.service_settings', service_id=service_id)) return render_template( 'views/service-settings/submit-request-to-go-live.html', form=form)
def submit_request_to_go_live(service_id): form = RequestToGoLiveForm() if form.validate_on_submit(): try: deskpro_client.create_ticket( subject='Request to go live - {}'.format(current_service['name']), message=( 'On behalf of {} ({})\n' '\n---' '\nOrganisation type: {}' '\nAgreement signed: {}' '\nChannel: {}\nStart date: {}\nStart volume: {}' '\nPeak volume: {}' '\nFeatures: {}' ).format( current_service['name'], url_for('main.service_dashboard', service_id=current_service['id'], _external=True), current_service['organisation_type'], AgreementInfo.from_current_user().as_human_readable, formatted_list(filter(None, ( 'email' if form.channel_email.data else None, 'text messages' if form.channel_sms.data else None, 'letters' if form.channel_letter.data else None, )), before_each='', after_each=''), form.start_date.data, form.start_volume.data, form.peak_volume.data, formatted_list(filter(None, ( 'one off' if form.method_one_off.data else None, 'file upload' if form.method_upload.data else None, 'API' if form.method_api.data else None, )), before_each='', after_each='') ), user_email=current_user.email_address, user_name=current_user.name ) except DeskproError: abort(500, "Request to go live submission failed") flash('We’ve received your request to go live', 'default') return redirect(url_for('.service_settings', service_id=service_id)) return render_template('views/service-settings/submit-request-to-go-live.html', form=form)
def get_examples(self): # we show up to four things. three areas, then either a fourth area if there are exactly four, or "and X more". areas_to_show = sorted(area.name for area in self)[:4] count_of_areas_not_named = len(self.items) - 3 # if there's exactly one area not named, there are exactly four - we should just show all four. if count_of_areas_not_named > 1: areas_to_show = areas_to_show[:3] + [f'{count_of_areas_not_named} more…'] return formatted_list(areas_to_show, before_each='', after_each='')
def service_request_to_go_live(service_id): form = RequestToGoLiveForm() if form.validate_on_submit(): data = { 'person_email': current_user.email_address, 'person_name': current_user.name, 'department_id': current_app.config.get('DESKPRO_DEPT_ID'), 'agent_team_id': current_app.config.get('DESKPRO_ASSIGNED_AGENT_TEAM_ID'), 'subject': 'Request to go live - {}'.format(current_service['name']), 'message': ('On behalf of {} ({})\n\nExpected usage\n---' '\nMOU in place: {}' '\nChannel: {}\nStart date: {}\nStart volume: {}' '\nPeak volume: {}\nUpload or API: {}').format( current_service['name'], url_for('main.service_dashboard', service_id=current_service['id'], _external=True), form.mou.data, formatted_list(filter(None, ( 'email' if form.channel_email.data else None, 'text messages' if form.channel_sms.data else None, 'letters' if form.channel_letter.data else None, )), before_each='', after_each=''), form.start_date.data, form.start_volume.data, form.peak_volume.data, form.upload_or_api.data) } headers = { "X-DeskPRO-API-Key": current_app.config.get('DESKPRO_API_KEY'), 'Content-Type': "application/x-www-form-urlencoded" } resp = requests.post(current_app.config.get('DESKPRO_API_HOST') + '/api/tickets', data=data, headers=headers) if resp.status_code != 201: current_app.logger.error( "Deskpro create ticket request failed with {} '{}'".format( resp.status_code, resp.json())) abort(500, "Request to go live submission failed") flash('We’ve received your request to go live', 'default') return redirect(url_for('.service_settings', service_id=service_id)) return render_template('views/service-settings/request-to-go-live.html', form=form)
def __call__(self, form, field): non_sms_characters = sorted( list(SanitiseSMS.get_non_compatible_characters(field.data))) if non_sms_characters: raise ValidationError( 'You cannot use {} in text messages. {} will not show up properly on everyone’s phones.' .format( formatted_list(non_sms_characters, conjunction='or', before_each='', after_each=''), ('It' if len(non_sms_characters) == 1 else 'They')))
def test_formatted_list_returns_markup(): assert isinstance(formatted_list([0]), Markup)
def test_formatted_list(items, kwargs, expected_output): assert formatted_list(items, **kwargs) == expected_output
repo.insert_broadcast_areas(areas_to_add, keep_old_polygons) # cheeky global variable keep_old_polygons = sys.argv[1:] == ['--keep-old-polygons'] print('keep_old_polygons: ', keep_old_polygons) # noqa: T001 repo = BroadcastAreasRepository() if keep_old_polygons: repo.delete_library_data() else: repo.delete_db() repo.create_tables() add_test_areas() add_countries() add_wards_local_authorities_and_counties() most_detailed_polygons = formatted_list( sorted(point_counts, reverse=True)[:5], before_each='', after_each='', ) print( # noqa: T001 '\n' 'DONE\n' f' Processed {len(point_counts):,} polygons.\n' f' Highest point counts once simplifed: {most_detailed_polygons}\n')