helix.fhir.client.sdk 4.2.13__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.13/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.13 → helix_fhir_client_sdk-4.2.15/helix.fhir.client.sdk.egg-info}/PKG-INFO +1 -1
  4. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/fhir_auth_mixin.py +0 -2
  5. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/fhir_client.py +25 -6
  6. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/fhir_delete_mixin.py +0 -2
  7. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/fhir_merge_mixin.py +0 -1
  8. {helix_fhir_client_sdk-4.2.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/fhir_patch_mixin.py +0 -1
  10. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/fhir_update_mixin.py +0 -1
  11. {helix_fhir_client_sdk-4.2.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/fhir_client_protocol.py +8 -4
  13. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/retryable_aiohttp_client.py +2 -7
  14. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/tests/test_fhir_client_clone.py +77 -0
  15. helix_fhir_client_sdk-4.2.13/VERSION +0 -1
  16. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/LICENSE +0 -0
  17. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/MANIFEST.in +0 -0
  18. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/Makefile +0 -0
  19. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/README.md +0 -0
  20. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix.fhir.client.sdk.egg-info/SOURCES.txt +0 -0
  21. {helix_fhir_client_sdk-4.2.13 → 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.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix.fhir.client.sdk.egg-info/requires.txt +0 -0
  24. {helix_fhir_client_sdk-4.2.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/__init__.py +0 -0
  26. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/dictionary_parser.py +0 -0
  27. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/dictionary_writer.py +0 -0
  28. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/exceptions/__init__.py +0 -0
  29. {helix_fhir_client_sdk-4.2.13 → 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.13 → 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.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/fhir_bundle_appender.py +0 -0
  33. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/filters/__init__.py +0 -0
  34. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/filters/base_filter.py +0 -0
  35. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/filters/identifier_filter.py +0 -0
  36. {helix_fhir_client_sdk-4.2.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/filters/property_filter.py +0 -0
  38. {helix_fhir_client_sdk-4.2.13 → 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.13 → 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.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/filters/sort_field.py +0 -0
  42. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/filters/source_filter.py +0 -0
  43. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/filters/version_filter.py +0 -0
  44. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/function_types.py +0 -0
  45. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/graph/__init__.py +0 -0
  46. {helix_fhir_client_sdk-4.2.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/graph/graph_definition.py +0 -0
  48. {helix_fhir_client_sdk-4.2.13 → 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.13 → 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.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/graph/test/__init__.py +0 -0
  52. {helix_fhir_client_sdk-4.2.13 → 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.13 → 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.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/open_telemetry/__init__.py +0 -0
  56. {helix_fhir_client_sdk-4.2.13 → 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.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/py.typed +0 -0
  59. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/queue/__init__.py +0 -0
  60. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/__init__.py +0 -0
  61. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/bundle_expander.py +0 -0
  62. {helix_fhir_client_sdk-4.2.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/get/__init__.py +0 -0
  68. {helix_fhir_client_sdk-4.2.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/get_result.py +0 -0
  82. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/merge/__init__.py +0 -0
  83. {helix_fhir_client_sdk-4.2.13 → 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.13 → 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.13 → 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.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/paging_result.py +0 -0
  88. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/resource_separator.py +0 -0
  89. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/responses/test/__init__.py +0 -0
  90. {helix_fhir_client_sdk-4.2.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/structures/__init__.py +0 -0
  103. {helix_fhir_client_sdk-4.2.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/test/__init__.py +0 -0
  105. {helix_fhir_client_sdk-4.2.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/__init__.py +0 -0
  111. {helix_fhir_client_sdk-4.2.13 → 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.13 → 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.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/async_runner.py +0 -0
  115. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/cache/__init__.py +0 -0
  116. {helix_fhir_client_sdk-4.2.13 → 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.13 → 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.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/fhir_helper.py +0 -0
  120. {helix_fhir_client_sdk-4.2.13 → 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.13 → 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.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/hash_util.py +0 -0
  124. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/list_chunker.py +0 -0
  125. {helix_fhir_client_sdk-4.2.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/practitioner_generator.py +0 -0
  127. {helix_fhir_client_sdk-4.2.13 → 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.13 → 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.13 → 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.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/test/__init__.py +0 -0
  132. {helix_fhir_client_sdk-4.2.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/utilities/url_checker.py +0 -0
  141. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/validators/__init__.py +0 -0
  142. {helix_fhir_client_sdk-4.2.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/validators/fhir_validator.py +0 -0
  144. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/validators/test/__init__.py +0 -0
  145. {helix_fhir_client_sdk-4.2.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/helix_fhir_client_sdk/well_known_configuration.py +0 -0
  147. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/pyproject.toml +0 -0
  148. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/setup.cfg +0 -0
  149. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/setup.py +0 -0
  150. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/tests/__init__.py +0 -0
  151. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/tests/async/__init__.py +0 -0
  152. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/tests/async/fhir_server/__init__.py +0 -0
  153. {helix_fhir_client_sdk-4.2.13 → 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.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/tests/async/graph/__init__.py +0 -0
  156. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/tests/async/graph/test_fhir_graph.py +0 -0
  157. {helix_fhir_client_sdk-4.2.13 → 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.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/tests/async/simulated_graph/__init__.py +0 -0
  160. {helix_fhir_client_sdk-4.2.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/tests/async/simulated_graph_practitioner/__init__.py +0 -0
  170. {helix_fhir_client_sdk-4.2.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/tests/async/test_benchmark_compress.py +0 -0
  198. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/tests/async/test_benchmark_merge.py +0 -0
  199. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/tests/logger_for_test.py +0 -0
  200. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/tests/sync/__init__.py +0 -0
  201. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/tests/sync/graph/__init__.py +0 -0
  202. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/tests/sync/graph/test_fhir_graph.py +0 -0
  203. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/tests/sync/test_fhir_client_bundle/__init__.py +0 -0
  204. {helix_fhir_client_sdk-4.2.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/tests/sync/test_fhir_client_patient_delete.py +0 -0
  213. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/tests/sync/test_fhir_client_patient_list.py +0 -0
  214. {helix_fhir_client_sdk-4.2.13 → 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.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/tests/sync/test_fhir_client_patient_merge.py +0 -0
  217. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/tests/sync/test_fhir_client_patient_update.py +0 -0
  218. {helix_fhir_client_sdk-4.2.13 → 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.13 → helix_fhir_client_sdk-4.2.15}/tests/test_get_nested_property.py +0 -0
  220. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/tests_integration/__init__.py +0 -0
  221. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/tests_integration/test_aetna_server_auth.py +0 -0
  222. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/tests_integration/test_aetna_server_auth_aiohttp.py +0 -0
  223. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/tests_integration/test_aetna_server_auth_httpx.py +0 -0
  224. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/tests_integration/test_dev_server_auth.py +0 -0
  225. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/tests_integration/test_dev_server_no_auth.py +0 -0
  226. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/tests_integration/test_emr_server_auth.py +0 -0
  227. {helix_fhir_client_sdk-4.2.13 → helix_fhir_client_sdk-4.2.15}/tests_integration/test_firely_fhir.py +0 -0
  228. {helix_fhir_client_sdk-4.2.13 → 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.13 → 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.13
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.13
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":
@@ -883,6 +897,8 @@ class FhirClient(
883
897
  fhir_client._client_id = self._client_id
884
898
  fhir_client._auth_server_url = self._auth_server_url
885
899
  fhir_client._login_token = self._login_token
900
+ fhir_client._access_token = self._access_token
901
+ fhir_client._access_token_expiry_date = self._access_token_expiry_date
886
902
  fhir_client._refresh_token_function = self._refresh_token_function
887
903
  fhir_client._exclude_status_codes_from_retry = self._exclude_status_codes_from_retry
888
904
  fhir_client._chunk_size = self._chunk_size
@@ -905,6 +921,9 @@ class FhirClient(
905
921
  fhir_client._trace_request_function = self._trace_request_function
906
922
  fhir_client._log_all_response_urls = self._log_all_response_urls
907
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
925
+ if self._max_concurrent_requests is not None:
926
+ fhir_client.set_max_concurrent_requests(self._max_concurrent_requests)
908
927
  return fhir_client
909
928
 
910
929
  def set_log_all_response_urls(self, value: bool) -> FhirClient:
@@ -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
@@ -128,6 +126,12 @@ class FhirClientProtocol(Protocol):
128
126
  _create_operation_outcome_for_error: bool | None
129
127
  """ whether to create OperationOutcome resource for errors """
130
128
 
129
+ _max_concurrent_requests: int | None
130
+ """ maximum number of concurrent requests to make to the FHIR server """
131
+
132
+ _fn_create_http_session: Callable[[], ClientSession] | None
133
+ """ optional callable to create HTTP sessions """
134
+
131
135
  async def get_access_token_async(self) -> GetAccessTokenResult: ...
132
136
 
133
137
  async def _send_fhir_request_async(
@@ -211,4 +215,4 @@ class FhirClientProtocol(Protocol):
211
215
  # this is just here to tell Python this returns a generator
212
216
  yield None # type: ignore[misc]
213
217
 
214
- 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,13 +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
- if self.persistent_session is not None:
78
- self.session = self.persistent_session
79
- else:
80
- self.session = self.fn_get_session()
75
+ self.session = self.fn_get_session()
81
76
  return self
82
77
 
83
78
  async def __aexit__(
@@ -86,7 +81,7 @@ class RetryableAioHttpClient:
86
81
  exc_val: BaseException | None,
87
82
  exc_tb: type[BaseException] | None | None,
88
83
  ) -> None:
89
- if not self.persistent_session and self.session is not None:
84
+ if self.session is not None:
90
85
  await self.session.close()
91
86
 
92
87
  @staticmethod
@@ -2,6 +2,8 @@
2
2
  Tests for FhirClient.clone() method to ensure all properties are properly copied.
3
3
  """
4
4
 
5
+ from datetime import UTC, datetime, timedelta
6
+
5
7
  from compressedfhir.utilities.compressed_dict.v1.compressed_dict_storage_mode import (
6
8
  CompressedDictStorageMode,
7
9
  )
@@ -76,3 +78,78 @@ def test_default_storage_mode_is_raw() -> None:
76
78
  """Test that the default storage mode is 'raw'"""
77
79
  fhir_client = FhirClient()
78
80
  assert fhir_client._storage_mode.storage_type == "raw"
81
+
82
+
83
+ def test_clone_preserves_access_token() -> None:
84
+ """Test that clone() preserves access token and expiry date"""
85
+ expiry_date = datetime.now(UTC) + timedelta(hours=1)
86
+ fhir_client = (
87
+ FhirClient()
88
+ .url("http://example.com")
89
+ .set_access_token("test-access-token-12345")
90
+ .set_access_token_expiry_date(expiry_date)
91
+ )
92
+
93
+ assert fhir_client._access_token == "test-access-token-12345"
94
+ assert fhir_client._access_token_expiry_date == expiry_date
95
+
96
+ # Clone and verify access token is preserved
97
+ cloned_client = fhir_client.clone()
98
+
99
+ assert cloned_client._access_token == "test-access-token-12345"
100
+ assert cloned_client._access_token_expiry_date == expiry_date
101
+
102
+
103
+ def test_clone_preserves_max_concurrent_requests() -> None:
104
+ """Test that clone() preserves max_concurrent_requests setting"""
105
+ fhir_client = FhirClient().url("http://example.com").set_max_concurrent_requests(10)
106
+
107
+ assert fhir_client._max_concurrent_requests == 10
108
+
109
+ # Clone and verify max_concurrent_requests is preserved
110
+ cloned_client = fhir_client.clone()
111
+
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.13