Esempio n. 1
0
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)
Esempio n. 2
0
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()
Esempio n. 3
0
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"]],
    )
Esempio n. 4
0
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()
Esempio n. 5
0
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)
Esempio n. 6
0
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,
    )