import timeit
response_content = {u'retrievePolicyBillingSummariesResponse': {u'billingSummaries': {u'policyBillingSummary': [{u'policy': {u'status': u'A', u'policyNumber': u'xyz123', u'writingCompany': u'FBI', u'renewalFlag': u'false', u'convertedRenewalOffer': u'false', u'termExpirationDate': u'2017-06-26', u'lineOfBusiness': u'PC', u'termEffectiveDate': u'2016-06-26', u'riskState': u'CA', u'insureds': {u'namedInsuredSummary': [{u'preferredPostalAddress': {u'streetAddressLine': u'1 disney', u'cityName': u'palo alto', u'zipCode': u'94100', u'isoRegionCode': u'CA'}, u'name': {u'lastName': u'DOE', u'fullName': u'john doe', u'firstName': u'john'}}]}, u'additionalInterests': {u'additionalInterest': [{u'billTo': u'N', u'name': {u'partyType': u'Organization'}}]}, u'type': u'PA', u'statusDescription': u'Active', u'dataSource': u'from_heaven'}, u'billingSummary': {u'paymentRestriction': u'false', u'nextInstallmentAmount': u'0.00', u'bill': {u'installmentNumber': u'1', u'statementDate': u'2016-06-26', u'paymentPlan': u'Direct', u'installmentAmount': u'12.00', u'totalBillAmountDue': u'1.76', u'previousBalance': u'0.00', u'dueDate': u'2016-06-26', u'billingPlan': u'ANN'}, u'lastPayment': {u'status': u'A'}, u'currentBalance': u'16.66', u'payOffAmount': u'15.66', u'isRestrictedToPay': u'false'}}]}}}
my_path = [
"retrievePolicyBillingSummariesResponse",
"billingSummaries",
"policyBillingSummary",
0,
"billingSummary",
"lastPayment",
"status"
]
def tne_get_value_from_content(extraction, my_path):
for el in my_path:
if isinstance(extraction, dict):
extraction = extraction.get(el, extraction)
else:
extraction = extraction[el]
return extraction
tne_perf = timeit.timeit('tne_get_value_from_content(response_content, my_path)',
setup='from __main__ import tne_get_value_from_content, response_content, my_path')
def abc_get_value_from_content(response_content, my_path):
if my_path:
return abc_get_value_from_content(response_content[my_path[0]], my_path[1:])
return response_content
abc_perf = timeit.timeit('abc_get_value_from_content(response_content, my_path)',
setup='from __main__ import abc_get_value_from_content, response_content, my_path')
def mgi_get_value_from_content(response_content, my_path):
if len(my_path) > 1:
return mgi_get_value_from_content(response_content[my_path[0]], my_path[1:])
else:
return response_content[my_path[0]]
mgi_perf = timeit.timeit('mgi_get_value_from_content(response_content, my_path)',
setup='from __main__ import mgi_get_value_from_content, response_content, my_path')
print('mgig :{perf}| {comp}% slower'.format(perf=mgi_perf, comp=100*(-1+mgi_perf/tne_perf)))
print('abccd :{perf}| {comp}% slower'.format(perf=abc_perf, comp=100*(-1+abc_perf/tne_perf)))
print('tnerual:{perf}'.format(perf=tne_perf))
aW1wb3J0IHRpbWVpdAoKcmVzcG9uc2VfY29udGVudCA9IHt1J3JldHJpZXZlUG9saWN5QmlsbGluZ1N1bW1hcmllc1Jlc3BvbnNlJzoge3UnYmlsbGluZ1N1bW1hcmllcyc6IHt1J3BvbGljeUJpbGxpbmdTdW1tYXJ5JzogW3t1J3BvbGljeSc6IHt1J3N0YXR1cyc6IHUnQScsIHUncG9saWN5TnVtYmVyJzogdSd4eXoxMjMnLCB1J3dyaXRpbmdDb21wYW55JzogdSdGQkknLCB1J3JlbmV3YWxGbGFnJzogdSdmYWxzZScsIHUnY29udmVydGVkUmVuZXdhbE9mZmVyJzogdSdmYWxzZScsIHUndGVybUV4cGlyYXRpb25EYXRlJzogdScyMDE3LTA2LTI2JywgdSdsaW5lT2ZCdXNpbmVzcyc6IHUnUEMnLCB1J3Rlcm1FZmZlY3RpdmVEYXRlJzogdScyMDE2LTA2LTI2JywgdSdyaXNrU3RhdGUnOiB1J0NBJywgdSdpbnN1cmVkcyc6IHt1J25hbWVkSW5zdXJlZFN1bW1hcnknOiBbe3UncHJlZmVycmVkUG9zdGFsQWRkcmVzcyc6IHt1J3N0cmVldEFkZHJlc3NMaW5lJzogdScxIGRpc25leScsIHUnY2l0eU5hbWUnOiB1J3BhbG8gYWx0bycsIHUnemlwQ29kZSc6IHUnOTQxMDAnLCB1J2lzb1JlZ2lvbkNvZGUnOiB1J0NBJ30sIHUnbmFtZSc6IHt1J2xhc3ROYW1lJzogdSdET0UnLCB1J2Z1bGxOYW1lJzogdSdqb2huIGRvZScsIHUnZmlyc3ROYW1lJzogdSdqb2huJ319XX0sIHUnYWRkaXRpb25hbEludGVyZXN0cyc6IHt1J2FkZGl0aW9uYWxJbnRlcmVzdCc6IFt7dSdiaWxsVG8nOiB1J04nLCB1J25hbWUnOiB7dSdwYXJ0eVR5cGUnOiB1J09yZ2FuaXphdGlvbid9fV19LCB1J3R5cGUnOiB1J1BBJywgdSdzdGF0dXNEZXNjcmlwdGlvbic6IHUnQWN0aXZlJywgdSdkYXRhU291cmNlJzogdSdmcm9tX2hlYXZlbid9LCB1J2JpbGxpbmdTdW1tYXJ5Jzoge3UncGF5bWVudFJlc3RyaWN0aW9uJzogdSdmYWxzZScsIHUnbmV4dEluc3RhbGxtZW50QW1vdW50JzogdScwLjAwJywgdSdiaWxsJzoge3UnaW5zdGFsbG1lbnROdW1iZXInOiB1JzEnLCB1J3N0YXRlbWVudERhdGUnOiB1JzIwMTYtMDYtMjYnLCB1J3BheW1lbnRQbGFuJzogdSdEaXJlY3QnLCB1J2luc3RhbGxtZW50QW1vdW50JzogdScxMi4wMCcsIHUndG90YWxCaWxsQW1vdW50RHVlJzogdScxLjc2JywgdSdwcmV2aW91c0JhbGFuY2UnOiB1JzAuMDAnLCB1J2R1ZURhdGUnOiB1JzIwMTYtMDYtMjYnLCB1J2JpbGxpbmdQbGFuJzogdSdBTk4nfSwgdSdsYXN0UGF5bWVudCc6IHt1J3N0YXR1cyc6IHUnQSd9LCB1J2N1cnJlbnRCYWxhbmNlJzogdScxNi42NicsIHUncGF5T2ZmQW1vdW50JzogdScxNS42NicsIHUnaXNSZXN0cmljdGVkVG9QYXknOiB1J2ZhbHNlJ319XX19fQoKbXlfcGF0aCA9IFsKICAgICJyZXRyaWV2ZVBvbGljeUJpbGxpbmdTdW1tYXJpZXNSZXNwb25zZSIsCiAgICAiYmlsbGluZ1N1bW1hcmllcyIsCiAgICAicG9saWN5QmlsbGluZ1N1bW1hcnkiLAogICAgMCwKICAgICJiaWxsaW5nU3VtbWFyeSIsCiAgICAibGFzdFBheW1lbnQiLAogICAgInN0YXR1cyIKXQoKZGVmIHRuZV9nZXRfdmFsdWVfZnJvbV9jb250ZW50KGV4dHJhY3Rpb24sIG15X3BhdGgpOgogICAgZm9yIGVsIGluIG15X3BhdGg6CiAgICAgICAgaWYgaXNpbnN0YW5jZShleHRyYWN0aW9uLCBkaWN0KToKICAgICAgICAgICAgZXh0cmFjdGlvbiA9IGV4dHJhY3Rpb24uZ2V0KGVsLCBleHRyYWN0aW9uKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGV4dHJhY3Rpb24gPSBleHRyYWN0aW9uW2VsXQogICAgcmV0dXJuIGV4dHJhY3Rpb24KdG5lX3BlcmYgPSB0aW1laXQudGltZWl0KCd0bmVfZ2V0X3ZhbHVlX2Zyb21fY29udGVudChyZXNwb25zZV9jb250ZW50LCBteV9wYXRoKScsCiAgICAgICAgICAgICAgICAgICAgICAgICBzZXR1cD0nZnJvbSBfX21haW5fXyBpbXBvcnQgdG5lX2dldF92YWx1ZV9mcm9tX2NvbnRlbnQsIHJlc3BvbnNlX2NvbnRlbnQsIG15X3BhdGgnKQoKCmRlZiBhYmNfZ2V0X3ZhbHVlX2Zyb21fY29udGVudChyZXNwb25zZV9jb250ZW50LCBteV9wYXRoKToKICAgICBpZiBteV9wYXRoOgogICAgICAgICByZXR1cm4gYWJjX2dldF92YWx1ZV9mcm9tX2NvbnRlbnQocmVzcG9uc2VfY29udGVudFtteV9wYXRoWzBdXSwgbXlfcGF0aFsxOl0pCiAgICAgcmV0dXJuIHJlc3BvbnNlX2NvbnRlbnQKYWJjX3BlcmYgPSB0aW1laXQudGltZWl0KCdhYmNfZ2V0X3ZhbHVlX2Zyb21fY29udGVudChyZXNwb25zZV9jb250ZW50LCBteV9wYXRoKScsCiAgICAgICAgICAgICAgICAgICAgICAgICBzZXR1cD0nZnJvbSBfX21haW5fXyBpbXBvcnQgYWJjX2dldF92YWx1ZV9mcm9tX2NvbnRlbnQsIHJlc3BvbnNlX2NvbnRlbnQsIG15X3BhdGgnKQoKCgpkZWYgbWdpX2dldF92YWx1ZV9mcm9tX2NvbnRlbnQocmVzcG9uc2VfY29udGVudCwgbXlfcGF0aCk6CiAgICBpZiBsZW4obXlfcGF0aCkgPiAxOgogICAgICAgIHJldHVybiBtZ2lfZ2V0X3ZhbHVlX2Zyb21fY29udGVudChyZXNwb25zZV9jb250ZW50W215X3BhdGhbMF1dLCBteV9wYXRoWzE6XSkKICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlX2NvbnRlbnRbbXlfcGF0aFswXV0KbWdpX3BlcmYgPSB0aW1laXQudGltZWl0KCdtZ2lfZ2V0X3ZhbHVlX2Zyb21fY29udGVudChyZXNwb25zZV9jb250ZW50LCBteV9wYXRoKScsCiAgICAgICAgICAgICAgICAgICAgICAgICBzZXR1cD0nZnJvbSBfX21haW5fXyBpbXBvcnQgbWdpX2dldF92YWx1ZV9mcm9tX2NvbnRlbnQsIHJlc3BvbnNlX2NvbnRlbnQsIG15X3BhdGgnKQoKcHJpbnQoJ21naWcgICA6e3BlcmZ9fCB7Y29tcH0lIHNsb3dlcicuZm9ybWF0KHBlcmY9bWdpX3BlcmYsIGNvbXA9MTAwKigtMSttZ2lfcGVyZi90bmVfcGVyZikpKQpwcmludCgnYWJjY2QgIDp7cGVyZn18IHtjb21wfSUgc2xvd2VyJy5mb3JtYXQocGVyZj1hYmNfcGVyZiwgY29tcD0xMDAqKC0xK2FiY19wZXJmL3RuZV9wZXJmKSkpCnByaW50KCd0bmVydWFsOntwZXJmfScuZm9ybWF0KHBlcmY9dG5lX3BlcmYpKQo=