helix.fhir.client.sdk 4.2.14__tar.gz → 4.2.15__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. {helix_fhir_client_sdk-4.2.14/helix.fhir.client.sdk.egg-info → helix_fhir_client_sdk-4.2.15}/PKG-INFO +1 -1
  2. helix_fhir_client_sdk-4.2.15/VERSION +1 -0
  3. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15/helix.fhir.client.sdk.egg-info}/PKG-INFO +1 -1
  4. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/fhir_auth_mixin.py +0 -2
  5. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/fhir_client.py +21 -6
  6. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/fhir_delete_mixin.py +0 -2
  7. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/fhir_merge_mixin.py +0 -1
  8. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/fhir_merge_resources_mixin.py +0 -3
  9. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/fhir_patch_mixin.py +0 -1
  10. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/fhir_update_mixin.py +0 -1
  11. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/queue/request_queue_mixin.py +0 -2
  12. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/fhir_client_protocol.py +5 -4
  13. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/retryable_aiohttp_client.py +2 -10
  14. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/test_fhir_client_clone.py +43 -0
  15. helix_fhir_client_sdk-4.2.14/VERSION +0 -1
  16. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/LICENSE +0 -0
  17. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/MANIFEST.in +0 -0
  18. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/Makefile +0 -0
  19. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/README.md +0 -0
  20. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix.fhir.client.sdk.egg-info/SOURCES.txt +0 -0
  21. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix.fhir.client.sdk.egg-info/dependency_links.txt +0 -0
  22. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix.fhir.client.sdk.egg-info/not-zip-safe +0 -0
  23. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix.fhir.client.sdk.egg-info/requires.txt +0 -0
  24. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix.fhir.client.sdk.egg-info/top_level.txt +0 -0
  25. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/__init__.py +0 -0
  26. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/dictionary_parser.py +0 -0
  27. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/dictionary_writer.py +0 -0
  28. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/exceptions/__init__.py +0 -0
  29. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/exceptions/fhir_get_exception.py +0 -0
  30. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/exceptions/fhir_sender_exception.py +0 -0
  31. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/exceptions/fhir_validation_exception.py +0 -0
  32. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/fhir_bundle_appender.py +0 -0
  33. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/filters/__init__.py +0 -0
  34. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/filters/base_filter.py +0 -0
  35. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/filters/identifier_filter.py +0 -0
  36. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/filters/last_updated_filter.py +0 -0
  37. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/filters/property_filter.py +0 -0
  38. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/filters/property_missing_filter.py +0 -0
  39. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/filters/security_access_filter.py +0 -0
  40. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/filters/security_owner_filter.py +0 -0
  41. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/filters/sort_field.py +0 -0
  42. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/filters/source_filter.py +0 -0
  43. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/filters/version_filter.py +0 -0
  44. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/function_types.py +0 -0
  45. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/graph/__init__.py +0 -0
  46. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/graph/fhir_graph_mixin.py +0 -0
  47. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/graph/graph_definition.py +0 -0
  48. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/graph/graph_link_parameters.py +0 -0
  49. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/graph/graph_target_parameters.py +0 -0
  50. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/graph/simulated_graph_processor_mixin.py +0 -0
  51. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/graph/test/__init__.py +0 -0
  52. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/graph/test/test_graph_mixin.py +0 -0
  53. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/graph/test/test_simulate_graph_processor_mixin.py +0 -0
  54. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/graph/test/test_simulate_graph_processor_mixin_caching.py +0 -0
  55. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/open_telemetry/__init__.py +0 -0
  56. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/open_telemetry/attribute_names.py +0 -0
  57. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/open_telemetry/span_names.py +0 -0
  58. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/py.typed +0 -0
  59. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/queue/__init__.py +0 -0
  60. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/__init__.py +0 -0
  61. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/bundle_expander.py +0 -0
  62. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/fhir_delete_response.py +0 -0
  63. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/fhir_get_response.py +0 -0
  64. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/fhir_merge_response.py +0 -0
  65. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/fhir_response_processor.py +0 -0
  66. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/fhir_update_response.py +0 -0
  67. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/get/__init__.py +0 -0
  68. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/get/fhir_get_bundle_response.py +0 -0
  69. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/get/fhir_get_error_response.py +0 -0
  70. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/get/fhir_get_list_by_resource_type_response.py +0 -0
  71. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/get/fhir_get_list_response.py +0 -0
  72. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/get/fhir_get_response_factory.py +0 -0
  73. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/get/fhir_get_single_response.py +0 -0
  74. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/get/test/__init__.py +0 -0
  75. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/get/test/test_get_bundle_response.py +0 -0
  76. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/get/test/test_get_error_response.py +0 -0
  77. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/get/test/test_get_list_by_resource_type_response.py +0 -0
  78. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/get/test/test_get_list_response.py +0 -0
  79. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/get/test/test_get_response_factory.py +0 -0
  80. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/get/test/test_get_single_response.py +0 -0
  81. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/get_result.py +0 -0
  82. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/merge/__init__.py +0 -0
  83. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/merge/base_fhir_merge_resource_response_entry.py +0 -0
  84. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/merge/fhir_merge_resource_response.py +0 -0
  85. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/merge/fhir_merge_resource_response_entry.py +0 -0
  86. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/merge/fhir_merge_response_entry_issue.py +0 -0
  87. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/paging_result.py +0 -0
  88. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/resource_separator.py +0 -0
  89. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/test/__init__.py +0 -0
  90. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/test/fhir_response_processor/__init__.py +0 -0
  91. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_expand_or_separate_bundle_async.py +0 -0
  92. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_handle_response_200.py +0 -0
  93. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_handle_response_200_non_streaming.py +0 -0
  94. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_handle_response_200_non_streaming_separate_bundle.py +0 -0
  95. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_handle_response_200_streaming.py +0 -0
  96. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_handle_response_200_streaming_separate_bundle.py +0 -0
  97. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_handle_response_200_streaming_separate_bundle_ndjson.py +0 -0
  98. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_handle_response_404.py +0 -0
  99. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/test/test_bundle_expander.py +0 -0
  100. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/test/test_fhir_get_response.py +0 -0
  101. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/test/test_resource_separator.py +0 -0
  102. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/structures/__init__.py +0 -0
  103. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/structures/get_access_token_result.py +0 -0
  104. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/test/__init__.py +0 -0
  105. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/test/test_delete_mixin.py +0 -0
  106. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/test/test_fhir_auth_mixin.py +0 -0
  107. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/test/test_fhir_bundle_appender.py +0 -0
  108. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/test/test_merge_mixin.py +0 -0
  109. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/test/test_merge_mixin_resources.py +0 -0
  110. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/__init__.py +0 -0
  111. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/async_parallel_processor/__init__.py +0 -0
  112. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/async_parallel_processor/v1/__init__.py +0 -0
  113. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/async_parallel_processor/v1/async_parallel_processor.py +0 -0
  114. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/async_runner.py +0 -0
  115. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/cache/__init__.py +0 -0
  116. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/cache/request_cache.py +0 -0
  117. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/cache/request_cache_entry.py +0 -0
  118. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/fhir_client_logger.py +0 -0
  119. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/fhir_helper.py +0 -0
  120. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/fhir_scope_parser.py +0 -0
  121. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/fhir_scope_parser_result.py +0 -0
  122. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/fhir_server_helpers.py +0 -0
  123. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/hash_util.py +0 -0
  124. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/list_chunker.py +0 -0
  125. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/ndjson_chunk_streaming_parser.py +0 -0
  126. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/practitioner_generator.py +0 -0
  127. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/retryable_aiohttp_response.py +0 -0
  128. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/retryable_aiohttp_url_result.py +0 -0
  129. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/size_calculator/__init__.py +0 -0
  130. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/size_calculator/size_calculator.py +0 -0
  131. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/test/__init__.py +0 -0
  132. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/test/test_async_runner.py +0 -0
  133. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/test/test_fhir_scope_parser.py +0 -0
  134. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/test/test_fhir_scope_parser_can_parse_scopes.py +0 -0
  135. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/test/test_fhir_scope_parser_correct_allow.py +0 -0
  136. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/test/test_json_helpers.py +0 -0
  137. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/test/test_list_chunker.py +0 -0
  138. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/test/test_ndjson_chunk_streaming_parser.py +0 -0
  139. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/test/test_retryable_aiohttp_client.py +0 -0
  140. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/url_checker.py +0 -0
  141. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/validators/__init__.py +0 -0
  142. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/validators/async_fhir_validator.py +0 -0
  143. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/validators/fhir_validator.py +0 -0
  144. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/validators/test/__init__.py +0 -0
  145. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/validators/test/test_async_fhir_validator.py +0 -0
  146. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/well_known_configuration.py +0 -0
  147. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/pyproject.toml +0 -0
  148. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/setup.cfg +0 -0
  149. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/setup.py +0 -0
  150. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/__init__.py +0 -0
  151. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/__init__.py +0 -0
  152. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/fhir_server/__init__.py +0 -0
  153. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/fhir_server/test_async_real_fhir_server_get_graph_large.py +0 -0
  154. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/fhir_server/test_async_real_fhir_server_get_patients_large.py +0 -0
  155. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/graph/__init__.py +0 -0
  156. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/graph/test_fhir_graph.py +0 -0
  157. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/graph/test_fhir_graph_multiple_ids.py +0 -0
  158. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/graph/test_fhir_graph_multiple_ids_in_batches.py +0 -0
  159. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/simulated_graph/__init__.py +0 -0
  160. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/simulated_graph/test_fhir_simulated_graph_async.py +0 -0
  161. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/simulated_graph/test_fhir_simulated_graph_caching_async.py +0 -0
  162. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/simulated_graph/test_fhir_simulated_graph_caching_input_cache_async.py +0 -0
  163. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/simulated_graph/test_fhir_simulated_graph_caching_input_cache_if_modified_since_async.py +0 -0
  164. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/simulated_graph/test_fhir_simulated_graph_caching_scope_parser_async.py +0 -0
  165. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/simulated_graph/test_fhir_simulated_graph_separate_resources_async.py +0 -0
  166. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/simulated_graph/test_fhir_simulated_graph_with_errors_async.py +0 -0
  167. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/simulated_graph/test_fhir_simulated_graph_with_operation_outcomes_async.py +0 -0
  168. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/simulated_graph/test_fhir_simulated_graph_with_url_column_async.py +0 -0
  169. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/simulated_graph_practitioner/__init__.py +0 -0
  170. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/simulated_graph_practitioner/test_fhir_simulated_graph_multiple_practitioner_async.py +0 -0
  171. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/simulated_graph_practitioner/test_fhir_simulated_graph_multiple_practitioner_in_one_call_async.py +0 -0
  172. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/simulated_graph_practitioner/test_fhir_simulated_graph_multiple_practitioner_in_one_call_async_with_request_size.py +0 -0
  173. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/simulated_graph_practitioner/test_fhir_simulated_graph_practitioner_async.py +0 -0
  174. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/simulated_graph_practitioner/test_fhir_simulated_graph_practitioner_separate_resources_async.py +0 -0
  175. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_async_fhir_client_bundle/__init__.py +0 -0
  176. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_async_fhir_client_bundle/not_expanded/__init__.py +0 -0
  177. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_async_fhir_client_bundle/not_expanded/test_fhir_client_bundle_not_expanded.py +0 -0
  178. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_async_fhir_client_bundle/not_separated/__init__.py +0 -0
  179. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_async_fhir_client_bundle/not_separated/test_fhir_client_bundle_not_separated.py +0 -0
  180. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_async_fhir_client_bundle/separated/__init__.py +0 -0
  181. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_async_fhir_client_bundle/separated/test_fhir_client_bundle_separated.py +0 -0
  182. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_async_fhir_client_fetch_response_in_chunks.py +0 -0
  183. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_async_fhir_client_patient_by_id.py +0 -0
  184. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_async_fhir_client_patient_by_identifier_missing.py +0 -0
  185. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_async_fhir_client_patient_delete.py +0 -0
  186. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_async_fhir_client_patient_list.py +0 -0
  187. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_async_fhir_client_patient_list_auth_fail.py +0 -0
  188. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_async_fhir_client_patient_list_auth_fail_retry.py +0 -0
  189. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_async_fhir_client_patient_list_auth_fail_retry_custom_refresh_function.py +0 -0
  190. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_async_fhir_client_patient_list_resource_streaming.py +0 -0
  191. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_async_fhir_client_patient_list_streaming.py +0 -0
  192. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_async_fhir_client_patient_merge.py +0 -0
  193. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_async_fhir_client_patient_merge_with_validate.py +0 -0
  194. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_async_fhir_client_patient_update.py +0 -0
  195. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_async_real_fhir_server_get_patients.py +0 -0
  196. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_async_real_fhir_server_get_patients_error.py +0 -0
  197. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_benchmark_compress.py +0 -0
  198. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/async/test_benchmark_merge.py +0 -0
  199. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/logger_for_test.py +0 -0
  200. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/sync/__init__.py +0 -0
  201. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/sync/graph/__init__.py +0 -0
  202. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/sync/graph/test_fhir_graph.py +0 -0
  203. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/sync/test_fhir_client_bundle/__init__.py +0 -0
  204. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/sync/test_fhir_client_bundle/not_expanded/__init__.py +0 -0
  205. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/sync/test_fhir_client_bundle/not_expanded/test_fhir_client_bundle_not_expanded.py +0 -0
  206. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/sync/test_fhir_client_bundle/not_separated/__init__.py +0 -0
  207. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/sync/test_fhir_client_bundle/not_separated/test_fhir_client_bundle_not_separated.py +0 -0
  208. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/sync/test_fhir_client_bundle/separated/__init__.py +0 -0
  209. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/sync/test_fhir_client_bundle/separated/test_fhir_client_bundle_separated.py +0 -0
  210. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/sync/test_fhir_client_logs_not_contains_secret_information.py +0 -0
  211. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/sync/test_fhir_client_patient_by_id.py +0 -0
  212. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/sync/test_fhir_client_patient_delete.py +0 -0
  213. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/sync/test_fhir_client_patient_list.py +0 -0
  214. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/sync/test_fhir_client_patient_list_auth_fail.py +0 -0
  215. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/sync/test_fhir_client_patient_list_auth_fail_retry.py +0 -0
  216. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/sync/test_fhir_client_patient_merge.py +0 -0
  217. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/sync/test_fhir_client_patient_update.py +0 -0
  218. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/sync/test_fhir_client_patient_update_patch.py +0 -0
  219. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests/test_get_nested_property.py +0 -0
  220. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests_integration/__init__.py +0 -0
  221. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests_integration/test_aetna_server_auth.py +0 -0
  222. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests_integration/test_aetna_server_auth_aiohttp.py +0 -0
  223. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests_integration/test_aetna_server_auth_httpx.py +0 -0
  224. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests_integration/test_dev_server_auth.py +0 -0
  225. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests_integration/test_dev_server_no_auth.py +0 -0
  226. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests_integration/test_emr_server_auth.py +0 -0
  227. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests_integration/test_firely_fhir.py +0 -0
  228. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests_integration/test_merge_vs_smart_merge_behavior.py +0 -0
  229. {helix_fhir_client_sdk-4.2.14 → helix_fhir_client_sdk-4.2.15}/tests_integration/test_staging_server_graph.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: helix.fhir.client.sdk
3
- Version: 4.2.14
3
+ Version: 4.2.15
4
4
  Summary: helix.fhir.client.sdk
5
5
  Home-page: https://github.com/icanbwell/helix.fhir.client.sdk
6
6
  Author: Imran Qureshi
@@ -0,0 +1 @@
1
+ 4.2.15
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: helix.fhir.client.sdk
3
- Version: 4.2.14
3
+ Version: 4.2.15
4
4
  Summary: helix.fhir.client.sdk
5
5
  Home-page: https://github.com/icanbwell/helix.fhir.client.sdk
6
6
  Author: Imran Qureshi
@@ -180,7 +180,6 @@ class FhirAuthMixin(FhirClientProtocol):
180
180
  access_token_expiry_date=self._access_token_expiry_date,
181
181
  refresh_token_func=self._refresh_token_function,
182
182
  tracer_request_func=self._trace_request_function,
183
- persistent_session=self._persistent_session,
184
183
  ) as client:
185
184
  if self._auth_wellknown_url:
186
185
  host_name: str = furl(self._auth_wellknown_url).host
@@ -282,7 +281,6 @@ class FhirAuthMixin(FhirClientProtocol):
282
281
  access_token_expiry_date=self._access_token_expiry_date,
283
282
  refresh_token_func=self._refresh_token_function,
284
283
  tracer_request_func=self._trace_request_function,
285
- persistent_session=self._persistent_session,
286
284
  ) as client:
287
285
  response: RetryableAioHttpResponse = await client.post(url=auth_server_url, headers=headers, data=payload)
288
286
  # token = response.text.encode('utf8')
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import logging
4
4
  import ssl
5
5
  import uuid
6
- from collections.abc import AsyncGenerator
6
+ from collections.abc import AsyncGenerator, Callable
7
7
  from datetime import datetime
8
8
  from logging import Logger
9
9
  from os import environ
@@ -155,6 +155,9 @@ class FhirClient(
155
155
 
156
156
  self._create_operation_outcome_for_error: bool | None = False
157
157
 
158
+ # Optional callable to create HTTP sessions. When set, create_http_session() will use this.
159
+ self._fn_create_http_session: Callable[[], ClientSession] | None = None
160
+
158
161
  def action(self, action: str) -> FhirClient:
159
162
  """
160
163
  Set the action
@@ -477,13 +480,17 @@ class FhirClient(
477
480
  self._throw_exception_on_error = throw_exception_on_error
478
481
  return self
479
482
 
480
- def set_persistent_session(self, session: ClientSession | None) -> FhirClient:
483
+ def use_http_session(self, fn_create_http_session: Callable[[], ClientSession] | None) -> FhirClient:
481
484
  """
482
- Sets the persistent session to use for requests
485
+ Sets a custom callable to create HTTP sessions.
486
+
487
+ When set, create_http_session() will use this callable instead of the default
488
+ implementation. This allows for custom session management, connection pooling,
489
+ or persistent session support.
483
490
 
484
- :param session: persistent session
491
+ :param fn_create_http_session: callable that returns a ClientSession, or None to use default
485
492
  """
486
- self._persistent_session = session
493
+ self._fn_create_http_session = fn_create_http_session
487
494
  return self
488
495
 
489
496
  # noinspection PyUnusedLocal
@@ -808,9 +815,16 @@ class FhirClient(
808
815
 
809
816
  def create_http_session(self) -> ClientSession:
810
817
  """
811
- Creates an HTTP Session
818
+ Creates an HTTP Session.
812
819
 
820
+ If a custom session factory was set via use_http_session(), it will be used.
821
+ Otherwise, creates a default aiohttp ClientSession with standard configuration.
813
822
  """
823
+ # Use a custom session factory if provided
824
+ if self._fn_create_http_session is not None:
825
+ return self._fn_create_http_session()
826
+
827
+ # Default implementation
814
828
  trace_config = aiohttp.TraceConfig()
815
829
  # trace_config.on_request_start.append(on_request_start)
816
830
  if self._log_level == "DEBUG":
@@ -907,6 +921,7 @@ class FhirClient(
907
921
  fhir_client._trace_request_function = self._trace_request_function
908
922
  fhir_client._log_all_response_urls = self._log_all_response_urls
909
923
  fhir_client._create_operation_outcome_for_error = self._create_operation_outcome_for_error
924
+ fhir_client._fn_create_http_session = self._fn_create_http_session
910
925
  if self._max_concurrent_requests is not None:
911
926
  fhir_client.set_max_concurrent_requests(self._max_concurrent_requests)
912
927
  return fhir_client
@@ -56,7 +56,6 @@ class FhirDeleteMixin(FhirClientProtocol):
56
56
  access_token=self._access_token,
57
57
  access_token_expiry_date=self._access_token_expiry_date,
58
58
  tracer_request_func=self._trace_request_function,
59
- persistent_session=self._persistent_session,
60
59
  ) as client:
61
60
  response: RetryableAioHttpResponse = await client.delete(url=full_uri.tostr(), headers=headers)
62
61
  request_id = response.response_headers.get("X-Request-ID", None)
@@ -126,7 +125,6 @@ class FhirDeleteMixin(FhirClientProtocol):
126
125
  access_token=self._access_token,
127
126
  access_token_expiry_date=self._access_token_expiry_date,
128
127
  tracer_request_func=self._trace_request_function,
129
- persistent_session=self._persistent_session,
130
128
  ) as client:
131
129
  response: RetryableAioHttpResponse = await client.delete(url=full_url, headers=headers)
132
130
  request_id = response.response_headers.get("X-Request-ID", None)
@@ -181,7 +181,6 @@ class FhirMergeMixin(FhirClientProtocol):
181
181
  log_all_url_results=self._log_all_response_urls,
182
182
  access_token=self._access_token,
183
183
  access_token_expiry_date=self._access_token_expiry_date,
184
- persistent_session=self._persistent_session,
185
184
  ) as client:
186
185
  # should we check if it exists and do a POST then?
187
186
  response: RetryableAioHttpResponse = await client.post(
@@ -118,7 +118,6 @@ class FhirMergeResourcesMixin(FhirClientProtocol):
118
118
  log_all_url_results=self._log_all_response_urls,
119
119
  access_token=self._access_token,
120
120
  access_token_expiry_date=self._access_token_expiry_date,
121
- persistent_session=self._persistent_session,
122
121
  ) as client:
123
122
  http_post_start = time.time()
124
123
  response: RetryableAioHttpResponse = await client.post(
@@ -312,7 +311,6 @@ class FhirMergeResourcesMixin(FhirClientProtocol):
312
311
  log_all_url_results=self._log_all_response_urls,
313
312
  access_token=self._access_token,
314
313
  access_token_expiry_date=self._access_token_expiry_date,
315
- persistent_session=self._persistent_session,
316
314
  ) as client:
317
315
  # should we check if it exists and do a POST then?
318
316
  response: RetryableAioHttpResponse = await client.post(
@@ -529,7 +527,6 @@ class FhirMergeResourcesMixin(FhirClientProtocol):
529
527
  log_all_url_results=self._log_all_response_urls,
530
528
  access_token=self._access_token,
531
529
  access_token_expiry_date=self._access_token_expiry_date,
532
- persistent_session=self._persistent_session,
533
530
  ) as client:
534
531
  # should we check if it exists and do a POST then?
535
532
  response: RetryableAioHttpResponse = await client.post(
@@ -72,7 +72,6 @@ class FhirPatchMixin(FhirClientProtocol):
72
72
  log_all_url_results=self._log_all_response_urls,
73
73
  access_token=self._access_token,
74
74
  access_token_expiry_date=self._access_token_expiry_date,
75
- persistent_session=self._persistent_session,
76
75
  ) as client:
77
76
  response: RetryableAioHttpResponse = await client.patch(
78
77
  url=full_uri.url, json=deserialized_data, headers=headers
@@ -106,7 +106,6 @@ class FhirUpdateMixin(FhirClientProtocol):
106
106
  log_all_url_results=self._log_all_response_urls,
107
107
  access_token=self._access_token,
108
108
  access_token_expiry_date=self._access_token_expiry_date,
109
- persistent_session=self._persistent_session,
110
109
  ) as client:
111
110
  response = await client.put(url=full_uri.url, data=json_data, headers=headers)
112
111
  request_id = response.response_headers.get("X-Request-ID", None)
@@ -130,7 +130,6 @@ class RequestQueueMixin(ABC, FhirClientProtocol):
130
130
  log_all_url_results=self._log_all_response_urls,
131
131
  access_token=self._access_token,
132
132
  access_token_expiry_date=self._access_token_expiry_date,
133
- persistent_session=self._persistent_session,
134
133
  ) as client:
135
134
  while next_url:
136
135
  # set access token in request if present
@@ -299,7 +298,6 @@ class RequestQueueMixin(ABC, FhirClientProtocol):
299
298
  log_all_url_results=self._log_all_response_urls,
300
299
  access_token=self._access_token,
301
300
  access_token_expiry_date=self._access_token_expiry_date,
302
- persistent_session=self._persistent_session,
303
301
  ) as client:
304
302
  while next_url:
305
303
  # set access token in request if present
@@ -1,5 +1,5 @@
1
1
  import uuid
2
- from collections.abc import AsyncGenerator
2
+ from collections.abc import AsyncGenerator, Callable
3
3
  from datetime import datetime
4
4
  from logging import Logger
5
5
  from threading import Lock
@@ -89,8 +89,6 @@ class FhirClientProtocol(Protocol):
89
89
  _send_data_as_chunked: bool = False
90
90
  _last_page_lock: Lock
91
91
 
92
- _persistent_session: ClientSession | None = None
93
-
94
92
  _use_post_for_search: bool = False
95
93
 
96
94
  _accept: str
@@ -131,6 +129,9 @@ class FhirClientProtocol(Protocol):
131
129
  _max_concurrent_requests: int | None
132
130
  """ maximum number of concurrent requests to make to the FHIR server """
133
131
 
132
+ _fn_create_http_session: Callable[[], ClientSession] | None
133
+ """ optional callable to create HTTP sessions """
134
+
134
135
  async def get_access_token_async(self) -> GetAccessTokenResult: ...
135
136
 
136
137
  async def _send_fhir_request_async(
@@ -214,4 +215,4 @@ class FhirClientProtocol(Protocol):
214
215
  # this is just here to tell Python this returns a generator
215
216
  yield None # type: ignore[misc]
216
217
 
217
- def set_persistent_session(self, session: ClientSession | None) -> "FhirClientProtocol": ...
218
+ def use_http_session(self, fn_create_http_session: Callable[[], ClientSession] | None) -> "FhirClientProtocol": ...
@@ -45,7 +45,6 @@ class RetryableAioHttpClient:
45
45
  log_all_url_results: bool = False,
46
46
  access_token: str | None,
47
47
  access_token_expiry_date: datetime | None,
48
- persistent_session: ClientSession | None = None,
49
48
  ) -> None:
50
49
  """
51
50
  RetryableClient provides a way to make HTTP calls with automatic retry and automatic refreshing of access tokens
@@ -71,16 +70,9 @@ class RetryableAioHttpClient:
71
70
  self.log_all_url_results: bool = log_all_url_results
72
71
  self.access_token: str | None = access_token
73
72
  self.access_token_expiry_date: datetime | None = access_token_expiry_date
74
- self.persistent_session: ClientSession | None = persistent_session
75
73
 
76
74
  async def __aenter__(self) -> "RetryableAioHttpClient":
77
- # Clear a stale persistent session if closed
78
- if self.persistent_session is not None and self.persistent_session.closed:
79
- self.persistent_session = None
80
-
81
- # Use an existing persistent session or create a new one
82
- self.session = self.persistent_session if self.persistent_session is not None else self.fn_get_session()
83
-
75
+ self.session = self.fn_get_session()
84
76
  return self
85
77
 
86
78
  async def __aexit__(
@@ -89,7 +81,7 @@ class RetryableAioHttpClient:
89
81
  exc_val: BaseException | None,
90
82
  exc_tb: type[BaseException] | None | None,
91
83
  ) -> None:
92
- if not self.persistent_session and self.session is not None:
84
+ if self.session is not None:
93
85
  await self.session.close()
94
86
 
95
87
  @staticmethod
@@ -110,3 +110,46 @@ def test_clone_preserves_max_concurrent_requests() -> None:
110
110
  cloned_client = fhir_client.clone()
111
111
 
112
112
  assert cloned_client._max_concurrent_requests == 10
113
+
114
+
115
+ def test_use_http_session() -> None:
116
+ """Test that use_http_session sets the callable correctly"""
117
+ from aiohttp import ClientSession
118
+
119
+ def custom_session_factory() -> ClientSession:
120
+ return ClientSession()
121
+
122
+ fhir_client = FhirClient().url("http://example.com")
123
+
124
+ # Initially None
125
+ assert fhir_client._fn_create_http_session is None
126
+
127
+ # Set the callable
128
+ result = fhir_client.use_http_session(custom_session_factory)
129
+
130
+ # Returns self for chaining
131
+ assert result is fhir_client
132
+
133
+ # Callable is stored
134
+ assert fhir_client._fn_create_http_session is custom_session_factory
135
+
136
+ # Can set to None
137
+ fhir_client.use_http_session(None)
138
+ assert fhir_client._fn_create_http_session is None
139
+
140
+
141
+ def test_clone_preserves_fn_create_http_session() -> None:
142
+ """Test that clone() preserves the _fn_create_http_session callable"""
143
+ from aiohttp import ClientSession
144
+
145
+ def custom_session_factory() -> ClientSession:
146
+ return ClientSession()
147
+
148
+ fhir_client = FhirClient().url("http://example.com").use_http_session(custom_session_factory)
149
+
150
+ assert fhir_client._fn_create_http_session is custom_session_factory
151
+
152
+ # Clone and verify fn_create_http_session is preserved
153
+ cloned_client = fhir_client.clone()
154
+
155
+ assert cloned_client._fn_create_http_session is custom_session_factory
@@ -1 +0,0 @@
1
- 4.2.14