Exemple #1
0
async def set_eligible(request):
    client_key = general.get_request_key_header(request)
    required_fields = ['id', 'eligible']
    general.validate_fields(required_fields, request.json)

    uid = request.json.get('id')
    eligible = bool(request.json.get('eligible'))

    client_signer = request.app.config.SIGNER_INVESTIGATOR  # .get_public_key().as_hex()

    client_txn = trial_transaction.set_eligible(txn_signer=client_signer,
                                                batch_signer=client_signer,
                                                uid=uid,
                                                eligible=eligible)

    batch, batch_id = trial_transaction.make_batch_and_id([client_txn],
                                                          client_signer)

    await security_messaging.set_eligible(
        request.app.config.INVESTIGATOR_VAL_CONN,
        request.app.config.CONSENT_VAL_CONN, request.app.config.TIMEOUT,
        [batch], client_key)

    try:
        await security_messaging.check_batch_status(
            request.app.config.INVESTIGATOR_VAL_CONN, [batch_id])
    except (ApiBadRequest, ApiInternalError) as err:
        # await auth_query.remove_auth_entry(
        #     request.app.config.DB_CONN, request.json.get('email'))
        raise err

    return response.json(body={'status': general.DONE},
                         headers=general.get_response_headers())
Exemple #2
0
async def get_all_clients(request):
    """Fetches complete details of all Accounts in state"""
    investigator_pkey = request.app.config.SIGNER_INVESTIGATOR.get_public_key(
    ).as_hex()
    clients = {'investigator': investigator_pkey}
    return response.json(body={'data': clients},
                         headers=general.get_response_headers())
Exemple #3
0
async def request_inform_consent(request, patient_pkey):
    """Updates auth information for the authorized account"""
    client_key = general.get_request_key_header(request)
    client_signer = general.get_signer(request, client_key)
    grant_read_ehr_permission_txn = consent_transaction.request_inform_document_consent(
        txn_signer=client_signer,
        batch_signer=client_signer,
        patient_pkey=patient_pkey)

    batch, batch_id = trial_transaction.make_batch_and_id(
        [grant_read_ehr_permission_txn], client_signer)

    await security_messaging.request_inform_document_consent(
        request.app.config.CONSENT_VAL_CONN, request.app.config.TIMEOUT,
        [batch], client_key)

    try:
        await security_messaging.check_batch_status(
            request.app.config.CONSENT_VAL_CONN, [batch_id])
    except (ApiBadRequest, ApiInternalError) as err:
        # await auth_query.remove_auth_entry(
        #     request.app.config.DB_CONN, request.json.get('email'))
        raise err

    return response.json(body={'status': general.DONE},
                         headers=general.get_response_headers())
Exemple #4
0
async def get_screening_data(request):
    """Updates auth information for the authorized account"""
    inc_excl_criteria = '?'

    for criteria, value in request.raw_args.items():
        LOGGER.debug('_match_incl_excl_criteria -> criteria: ' + criteria + '; value: ' + value + ';')
        inc_excl_criteria = inc_excl_criteria + criteria + "=" + value + '&'

    res_json = general.get_response_from_ehr(request, "/ehrs/pre_screening_data" + inc_excl_criteria)
    # investigator_pkey = general.get_request_key_header(request)
    # ehr_list = await security_messaging.get_pre_screening_data(request.app.config.EHR_VAL_CONN,
    #                                                            investigator_pkey, request.raw_args)

    ehr_list_json = []
    for entity in res_json['data']:
        ehr_list_json.append({
            'id': entity['id'],
            'client_pkey': entity['client_pkey'],
            'height': entity['height'],
            'weight': entity['weight'],
            'A1C': entity['A1C'],
            'FPG': entity['FPG'],
            'OGTT': entity['OGTT'],
            'RPGT': entity['RPGT'],
            'event_time': entity['event_time'],
            'name': entity['name'],
            'surname': entity['surname']
        })

    return response.json(body={'data': ehr_list_json},
                         headers=general.get_response_headers())
Exemple #5
0
async def register_investigator(request):
    """Updates auth information for the authorized account"""
    required_fields = ['name']
    general.validate_fields(required_fields, request.json)

    name = request.json.get('name')

    clinic_signer = request.app.config.SIGNER_INVESTIGATOR  # .get_public_key().as_hex()

    # Consent network

    client_txn = consent_transaction.create_investigator_client(
        txn_signer=clinic_signer, batch_signer=clinic_signer)

    batch, batch_id = consent_transaction.make_batch_and_id([client_txn],
                                                            clinic_signer)

    await security_messaging.add_investigator(
        request.app.config.CONSENT_VAL_CONN, request.app.config.TIMEOUT,
        [batch])

    try:
        await security_messaging.check_batch_status(
            request.app.config.CONSENT_VAL_CONN, [batch_id])
    except (ApiBadRequest, ApiInternalError) as err:
        # await auth_query.remove_auth_entry(
        #     request.app.config.DB_CONN, request.json.get('email'))
        raise err

    # Trial network

    clinic_txn = trial_transaction.create_investigator(
        txn_signer=clinic_signer, batch_signer=clinic_signer, name=name)
    batch, batch_id = trial_transaction.make_batch_and_id([clinic_txn],
                                                          clinic_signer)

    await security_messaging.add_investigator(
        request.app.config.INVESTIGATOR_VAL_CONN, request.app.config.TIMEOUT,
        [batch])

    try:
        await security_messaging.check_batch_status(
            request.app.config.INVESTIGATOR_VAL_CONN, [batch_id])
    except (ApiBadRequest, ApiInternalError) as err:
        # await auth_query.remove_auth_entry(
        #     request.app.config.DB_CONN, request.json.get('email'))
        raise err

    return response.json(body={'status': general.DONE},
                         headers=general.get_response_headers())
Exemple #6
0
async def get_all_investigators(request):
    """Fetches complete details of all Accounts in state"""
    client_key = general.get_request_key_header(request)
    investigator_list = await security_messaging.get_investigators(
        request.app.config.INVESTIGATOR_VAL_CONN,
        request.app.config.CONSENT_VAL_CONN, client_key)

    investigator_list_json = []
    for address, dp in investigator_list.items():
        investigator_list_json.append({
            'public_key': dp.public_key,
            'name': dp.name
        })
    return response.json(body={'data': investigator_list_json},
                         headers=general.get_response_headers())
Exemple #7
0
async def update_data(request):
    client_key = general.get_request_key_header(request)
    required_fields = ['id', 'height', 'weight', 'A1C', 'FPG', 'OGTT', 'RPGT']
    general.validate_fields(required_fields, request.json)

    uid = request.json.get('id')
    height = request.json.get('height')
    weight = request.json.get('weight')
    A1C = request.json.get('A1C')
    FPG = request.json.get('FPG')
    OGTT = request.json.get('OGTT')
    RPGT = request.json.get('RPGT')

    client_signer = request.app.config.SIGNER_INVESTIGATOR  # .get_public_key().as_hex()

    client_txn = trial_transaction.update_data(txn_signer=client_signer,
                                               batch_signer=client_signer,
                                               uid=uid,
                                               height=height,
                                               weight=weight,
                                               a1c=A1C,
                                               fpg=FPG,
                                               ogtt=OGTT,
                                               rpgt=RPGT)

    batch, batch_id = trial_transaction.make_batch_and_id([client_txn],
                                                          client_signer)

    await security_messaging.update_investigator(
        request.app.config.INVESTIGATOR_VAL_CONN,
        request.app.config.CONSENT_VAL_CONN, request.app.config.TIMEOUT,
        [batch], client_key)

    try:
        await security_messaging.check_batch_status(
            request.app.config.INVESTIGATOR_VAL_CONN, [batch_id])
    except (ApiBadRequest, ApiInternalError) as err:
        # await auth_query.remove_auth_entry(
        #     request.app.config.DB_CONN, request.json.get('email'))
        raise err

    return response.json(body={'status': general.DONE},
                         headers=general.get_response_headers())
Exemple #8
0
async def import_screening_data(request, patient_pkey, ehr_id):
    """Updates auth information for the authorized account"""
    res_json = general.get_response_from_ehr(
        request, "/ehrs/" + patient_pkey + "/" + ehr_id)
    investigator_pkey = general.get_request_key_header(request)
    client_signer = general.get_signer(request, investigator_pkey)
    data_json = res_json['data']

    if not data_json:
        raise ApiBadRequest("Can not retrieve '" + ehr_id + "' EHR ' for '" +
                            patient_pkey + "' patient")

    data_txn = trial_transaction.add_data(txn_signer=client_signer,
                                          batch_signer=client_signer,
                                          uid=data_json['id'],
                                          height=data_json['height'],
                                          weight=data_json['weight'],
                                          a1c=data_json['A1C'],
                                          fpg=data_json['FPG'],
                                          ogtt=data_json['OGTT'],
                                          rpgt=data_json['RPGT'],
                                          event_time=data_json['event_time'])

    batch, batch_id = trial_transaction.make_batch_and_id([data_txn],
                                                          client_signer)

    await security_messaging.import_screening_data(
        request.app.config.INVESTIGATOR_VAL_CONN,
        request.app.config.CONSENT_VAL_CONN, request.app.config.TIMEOUT,
        [batch], investigator_pkey)

    try:
        await security_messaging.check_batch_status(
            request.app.config.INVESTIGATOR_VAL_CONN, [batch_id])
    except (ApiBadRequest, ApiInternalError) as err:
        # await auth_query.remove_auth_entry(
        #     request.app.config.DB_CONN, request.json.get('email'))
        raise err

    return response.json(body={'status': general.DONE},
                         headers=general.get_response_headers())
Exemple #9
0
async def get_all_data_from_investigators(request):
    """Fetches complete details of all Accounts in state"""
    client_key = general.get_request_key_header(request)
    data_list = await security_messaging.get_data_from_investigators(
        request.app.config.INVESTIGATOR_VAL_CONN,
        request.app.config.CONSENT_VAL_CONN, client_key)

    data_list_json = []
    for address, data in data_list.items():
        data_list_json.append({
            'id': data.id,
            'height': data.height,
            'weight': data.weight,
            'A1C': data.A1C,
            'FPG': data.FPG,
            'OGTT': data.OGTT,
            'RPGT': data.RPGT,
            'event_time': data.event_time,
            'eligible': data.eligible
        })
    return response.json(body={'data': data_list_json},
                         headers=general.get_response_headers())