Source code for q2_cores.Summit.mappers.demographic_info

from typing import List
from lxml import objectify

from nameparser import HumanName
from q2_sdk.models.cores.queries.base_query import BaseQuery
from q2_sdk.models.cores.mappers.base_mapper import BaseMapper
from q2_sdk.models.demographic import (
    Address,
    DemographicInfo,
    DriverLicense,
    Phone,
    PhoneType,
)

from q2_cores.exceptions import CoreException
from q2_cores.Summit.queries import DemographicInfoQuery


[docs] class BuildDemographicInfoMapper(BaseMapper):
[docs] @staticmethod def parse_returned_queries(list_of_queries: List[BaseQuery]) -> DemographicInfo: assert len(list_of_queries) == 1 assert isinstance(list_of_queries[0], DemographicInfoQuery), ( "Query must be an instance of Summit.queries.DemographicInfoQuery" ) response = list_of_queries[0].raw_core_response root = objectify.fromstring(response) status_code = root.findtext(".//{*}Status/{*}StatusCode") status_desc = root.findtext(".//{*}Status/{*}StatusDesc") if status_code != "00": raise CoreException( f"Core returned unsuccessful status: {status_code} - {status_desc}" ) member_result_node = root.find(".//{*}MemberResults") dob = member_result_node.BirthDate.text email = member_result_node.Email.text home_phone = Phone( member_result_node.PhoneAC.text, member_result_node.Phone.text, PhoneType.PERSONAL, ) work_phone = Phone( member_result_node.WorkPhoneAC.text, member_result_node.WorkPhone.text, PhoneType.BUSINESS, extension=member_result_node.WorkPhoneExt.text, ) phones = [home_phone, work_phone] address = Address( member_result_node.AddressLine1.text, member_result_node.AddressLine2.text, member_result_node.City.text, member_result_node.State.text, member_result_node.ZipCode.text, ) full_name = member_result_node.MemberName.text human_name = HumanName(full_name) first_name = human_name.first last_name = human_name.last middle_name = human_name.middle title = human_name.title ssn = member_result_node.SSN.text drivers_license = DriverLicense( member_result_node.DriverLicenseNum.text, member_result_node.DriverLicenseState.text, ) return DemographicInfo( dob, [email], phones, [address], first_name, last_name, ssn, middle_name=middle_name, title=title, driver_license=drivers_license, )