def produce_demographics_result(demographics_request_id): current_app.logger.info( f'produce_demographics_result (demographics_request_id={demographics_request_id})' ) try: dr = DemographicsRequest.query.get(demographics_request_id) current_app.logger.info( f'produce_demographics_result: Creating result') dr.create_result() dr.result_created_datetime = datetime.utcnow() db.session.add(dr) email( subject='Identity Demographics Request Complete', recipients=[dr.owner.email], message='Your demographics request {} is complete.'.format( url_for('ui.demographics', _external=True), ), html=render_template('email/request_complete.html', request=dr), ) db.session.commit() except Exception as e: current_app.logger.info('produce_demographics_result: Rolling Back') db.session.rollback() log_exception(e) save_demographics_error(demographics_request_id, e)
def test__emailing__smtp_set__skips(app, client, faker): with patch('lbrc_flask.emailing.mail') as mock_mail: email(faker.pystr(min_chars=5, max_chars=10), faker.pystr(min_chars=5, max_chars=10), [faker.safe_email()]) mock_mail.send.mock.assert_not_called()
def log_exception(e): print(traceback.format_exc()) current_app.logger.error(traceback.format_exc()) email( subject=current_app.config["ERROR_EMAIL_SUBJECT"], message=traceback.format_exc(), recipients=[current_app.config["ADMIN_EMAIL_ADDRESS"]], )
def test__emailing__smtp_set__sends_email(app, client, faker): app.config['SMTP_SERVER'] = faker.ipv4_private() with patch('lbrc_flask.emailing.mail') as mock_mail: email(faker.pystr(min_chars=5, max_chars=10), faker.pystr(min_chars=5, max_chars=10), [faker.safe_email()]) mock_mail.send.assert_called_once()
def upload_data(study_id): study = Study.query.get_or_404(study_id) builder = UploadFormBuilder(study) form = builder.get_form()() if request.method == "POST": q = Upload.query q = q.filter(Upload.study_id == study_id) q = q.filter(Upload.deleted == 0) q = q.filter(Upload.study_number == form.study_number.data) duplicate = q.count() > 0 form.validate_on_submit() if duplicate and not study.allow_duplicate_study_number: form.study_number.errors.append( "Study Number already exists for this study") flash("Study Number already exists for this study", "error") if len(form.errors) == 0 and form.is_submitted(): u = Upload(study=study, uploader=current_user, study_number=form.study_number.data) db.session.add(u) if study.field_group: study_fields = {f.field_name: f for f in study.field_group.fields} else: study_fields = {} for field_name, value in form.data.items(): if field_name in study_fields: field = study_fields[field_name] if field.field_type.is_file: if type(value) is list: files = value else: files = [value] for f in files: uf = UploadFile(upload=u, field=field, filename=f.filename) db.session.add(uf) db.session.flush() # Make sure uf has ID assigned filepath = get_upload_filepath(uf) os.makedirs(os.path.dirname(filepath), exist_ok=True) f.save(filepath) else: ud = UploadData(upload=u, field=field, value=value) db.session.add(ud) db.session.commit() email( subject="BRC Upload: {}".format(study.name), message="A new set of files has been uploaded for the {} study.". format(study.name), recipients=[r.email for r in study.owners], ) email( subject="BRC Upload: {}".format(study.name), message= 'Your files for participant "{}" on study "{}" have been successfully uploaded.' .format(u.study_number, study.name), recipients=[current_user.email], ) return redirect(url_for("ui.index")) return render_template("ui/upload.html", form=form, study=study)
def save_task(task, form, context): task.requestor_id = form.requestor_id.data task.organisation_id = form.organisation_id.data task.organisation_description = form.organisation_description.data task.name = form.name.data assigned_user = form.assigned_user_id.data if assigned_user: tau = TaskAssignedUser( task=task, user_id=assigned_user, ) db.session.add(tau) task.current_assigned_user_id = assigned_user task.data.clear() db.session.add(task) for field_name, value in form.data.items(): field = task.service.get_field_for_field_name(field_name) if not field: continue if type(value) is list: values = value else: values = [value] for v in values: if field.field_type.is_file: if v is not None: tf = TaskFile(task=task, field=field) tf.set_filename_and_save(v) task.files.append(tf) else: td = TaskData(task=task, field=field, value=v) task.data.append(td) task_status = TaskStatus( task=task, task_status_type=task.current_status_type, notes='Task {} by {}'.format(context, current_user.full_name), ) db.session.add(task_status) db.session.commit() email( subject="{} Request {}".format(task.service.name, context), message="Request has been {} for {} by {}.".format( context, task.service.name, current_user.full_name, ), recipients=task.notification_email_addresses, html_template='ui/email/owner_email.html', context=context, task=task, )