helix.fhir.client.sdk 4.2.8__tar.gz → 4.2.9__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 (228) hide show
  1. {helix_fhir_client_sdk-4.2.8/helix.fhir.client.sdk.egg-info → helix_fhir_client_sdk-4.2.9}/PKG-INFO +47 -2
  2. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/README.md +46 -1
  3. helix_fhir_client_sdk-4.2.9/VERSION +1 -0
  4. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9/helix.fhir.client.sdk.egg-info}/PKG-INFO +47 -2
  5. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix.fhir.client.sdk.egg-info/SOURCES.txt +2 -0
  6. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/fhir_client.py +39 -11
  7. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/fhir_merge_resources_mixin.py +193 -3
  8. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/merge/fhir_merge_resource_response_entry.py +30 -0
  9. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/retryable_aiohttp_client.py +1 -2
  10. helix_fhir_client_sdk-4.2.9/tests/async/test_benchmark_compress.py +448 -0
  11. helix_fhir_client_sdk-4.2.9/tests/test_fhir_client_clone.py +78 -0
  12. helix_fhir_client_sdk-4.2.8/VERSION +0 -1
  13. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/LICENSE +0 -0
  14. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/MANIFEST.in +0 -0
  15. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/Makefile +0 -0
  16. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix.fhir.client.sdk.egg-info/dependency_links.txt +0 -0
  17. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix.fhir.client.sdk.egg-info/not-zip-safe +0 -0
  18. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix.fhir.client.sdk.egg-info/requires.txt +0 -0
  19. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix.fhir.client.sdk.egg-info/top_level.txt +0 -0
  20. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/__init__.py +0 -0
  21. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/dictionary_parser.py +0 -0
  22. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/dictionary_writer.py +0 -0
  23. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/exceptions/__init__.py +0 -0
  24. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/exceptions/fhir_get_exception.py +0 -0
  25. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/exceptions/fhir_sender_exception.py +0 -0
  26. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/exceptions/fhir_validation_exception.py +0 -0
  27. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/fhir_auth_mixin.py +0 -0
  28. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/fhir_bundle_appender.py +0 -0
  29. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/fhir_delete_mixin.py +0 -0
  30. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/fhir_merge_mixin.py +0 -0
  31. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/fhir_patch_mixin.py +0 -0
  32. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/fhir_update_mixin.py +0 -0
  33. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/filters/__init__.py +0 -0
  34. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/filters/base_filter.py +0 -0
  35. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/filters/identifier_filter.py +0 -0
  36. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/filters/last_updated_filter.py +0 -0
  37. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/filters/property_filter.py +0 -0
  38. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/filters/property_missing_filter.py +0 -0
  39. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/filters/security_access_filter.py +0 -0
  40. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/filters/security_owner_filter.py +0 -0
  41. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/filters/sort_field.py +0 -0
  42. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/filters/source_filter.py +0 -0
  43. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/filters/version_filter.py +0 -0
  44. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/function_types.py +0 -0
  45. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/graph/__init__.py +0 -0
  46. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/graph/fhir_graph_mixin.py +0 -0
  47. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/graph/graph_definition.py +0 -0
  48. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/graph/graph_link_parameters.py +0 -0
  49. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/graph/graph_target_parameters.py +0 -0
  50. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/graph/simulated_graph_processor_mixin.py +0 -0
  51. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/graph/test/__init__.py +0 -0
  52. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/graph/test/test_graph_mixin.py +0 -0
  53. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/graph/test/test_simulate_graph_processor_mixin.py +0 -0
  54. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/graph/test/test_simulate_graph_processor_mixin_caching.py +0 -0
  55. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/open_telemetry/__init__.py +0 -0
  56. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/open_telemetry/attribute_names.py +0 -0
  57. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/open_telemetry/span_names.py +0 -0
  58. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/py.typed +0 -0
  59. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/queue/__init__.py +0 -0
  60. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/queue/request_queue_mixin.py +0 -0
  61. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/__init__.py +0 -0
  62. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/bundle_expander.py +0 -0
  63. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/fhir_client_protocol.py +0 -0
  64. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/fhir_delete_response.py +0 -0
  65. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/fhir_get_response.py +0 -0
  66. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/fhir_merge_response.py +0 -0
  67. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/fhir_response_processor.py +0 -0
  68. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/fhir_update_response.py +0 -0
  69. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/get/__init__.py +0 -0
  70. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/get/fhir_get_bundle_response.py +0 -0
  71. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/get/fhir_get_error_response.py +0 -0
  72. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/get/fhir_get_list_by_resource_type_response.py +0 -0
  73. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/get/fhir_get_list_response.py +0 -0
  74. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/get/fhir_get_response_factory.py +0 -0
  75. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/get/fhir_get_single_response.py +0 -0
  76. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/get/test/__init__.py +0 -0
  77. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/get/test/test_get_bundle_response.py +0 -0
  78. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/get/test/test_get_error_response.py +0 -0
  79. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/get/test/test_get_list_by_resource_type_response.py +0 -0
  80. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/get/test/test_get_list_response.py +0 -0
  81. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/get/test/test_get_response_factory.py +0 -0
  82. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/get/test/test_get_single_response.py +0 -0
  83. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/get_result.py +0 -0
  84. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/merge/__init__.py +0 -0
  85. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/merge/base_fhir_merge_resource_response_entry.py +0 -0
  86. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/merge/fhir_merge_resource_response.py +0 -0
  87. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/merge/fhir_merge_response_entry_issue.py +0 -0
  88. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/paging_result.py +0 -0
  89. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/resource_separator.py +0 -0
  90. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/test/__init__.py +0 -0
  91. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/test/fhir_response_processor/__init__.py +0 -0
  92. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_expand_or_separate_bundle_async.py +0 -0
  93. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_handle_response_200.py +0 -0
  94. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_handle_response_200_non_streaming.py +0 -0
  95. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_handle_response_200_non_streaming_separate_bundle.py +0 -0
  96. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_handle_response_200_streaming.py +0 -0
  97. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_handle_response_200_streaming_separate_bundle.py +0 -0
  98. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_handle_response_200_streaming_separate_bundle_ndjson.py +0 -0
  99. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_handle_response_404.py +0 -0
  100. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/test/test_bundle_expander.py +0 -0
  101. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/test/test_fhir_get_response.py +0 -0
  102. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/responses/test/test_resource_separator.py +0 -0
  103. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/structures/__init__.py +0 -0
  104. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/structures/get_access_token_result.py +0 -0
  105. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/test/__init__.py +0 -0
  106. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/test/test_delete_mixin.py +0 -0
  107. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/test/test_fhir_auth_mixin.py +0 -0
  108. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/test/test_fhir_bundle_appender.py +0 -0
  109. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/test/test_merge_mixin.py +0 -0
  110. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/test/test_merge_mixin_resources.py +0 -0
  111. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/__init__.py +0 -0
  112. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/async_parallel_processor/__init__.py +0 -0
  113. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/async_parallel_processor/v1/__init__.py +0 -0
  114. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/async_parallel_processor/v1/async_parallel_processor.py +0 -0
  115. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/async_runner.py +0 -0
  116. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/cache/__init__.py +0 -0
  117. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/cache/request_cache.py +0 -0
  118. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/cache/request_cache_entry.py +0 -0
  119. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/fhir_client_logger.py +0 -0
  120. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/fhir_helper.py +0 -0
  121. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/fhir_scope_parser.py +0 -0
  122. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/fhir_scope_parser_result.py +0 -0
  123. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/fhir_server_helpers.py +0 -0
  124. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/hash_util.py +0 -0
  125. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/list_chunker.py +0 -0
  126. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/ndjson_chunk_streaming_parser.py +0 -0
  127. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/practitioner_generator.py +0 -0
  128. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/retryable_aiohttp_response.py +0 -0
  129. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/retryable_aiohttp_url_result.py +0 -0
  130. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/size_calculator/__init__.py +0 -0
  131. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/size_calculator/size_calculator.py +0 -0
  132. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/test/__init__.py +0 -0
  133. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/test/test_async_runner.py +0 -0
  134. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/test/test_fhir_scope_parser.py +0 -0
  135. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/test/test_fhir_scope_parser_can_parse_scopes.py +0 -0
  136. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/test/test_fhir_scope_parser_correct_allow.py +0 -0
  137. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/test/test_json_helpers.py +0 -0
  138. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/test/test_list_chunker.py +0 -0
  139. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/test/test_ndjson_chunk_streaming_parser.py +0 -0
  140. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/test/test_retryable_aiohttp_client.py +0 -0
  141. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/utilities/url_checker.py +0 -0
  142. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/validators/__init__.py +0 -0
  143. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/validators/async_fhir_validator.py +0 -0
  144. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/validators/fhir_validator.py +0 -0
  145. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/validators/test/__init__.py +0 -0
  146. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/validators/test/test_async_fhir_validator.py +0 -0
  147. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/helix_fhir_client_sdk/well_known_configuration.py +0 -0
  148. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/pyproject.toml +0 -0
  149. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/setup.cfg +0 -0
  150. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/setup.py +0 -0
  151. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/__init__.py +0 -0
  152. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/__init__.py +0 -0
  153. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/fhir_server/__init__.py +0 -0
  154. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/fhir_server/test_async_real_fhir_server_get_graph_large.py +0 -0
  155. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/fhir_server/test_async_real_fhir_server_get_patients_large.py +0 -0
  156. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/graph/__init__.py +0 -0
  157. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/graph/test_fhir_graph.py +0 -0
  158. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/graph/test_fhir_graph_multiple_ids.py +0 -0
  159. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/graph/test_fhir_graph_multiple_ids_in_batches.py +0 -0
  160. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/simulated_graph/__init__.py +0 -0
  161. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/simulated_graph/test_fhir_simulated_graph_async.py +0 -0
  162. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/simulated_graph/test_fhir_simulated_graph_caching_async.py +0 -0
  163. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/simulated_graph/test_fhir_simulated_graph_caching_input_cache_async.py +0 -0
  164. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/simulated_graph/test_fhir_simulated_graph_caching_input_cache_if_modified_since_async.py +0 -0
  165. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/simulated_graph/test_fhir_simulated_graph_caching_scope_parser_async.py +0 -0
  166. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/simulated_graph/test_fhir_simulated_graph_separate_resources_async.py +0 -0
  167. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/simulated_graph/test_fhir_simulated_graph_with_errors_async.py +0 -0
  168. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/simulated_graph/test_fhir_simulated_graph_with_operation_outcomes_async.py +0 -0
  169. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/simulated_graph/test_fhir_simulated_graph_with_url_column_async.py +0 -0
  170. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/simulated_graph_practitioner/__init__.py +0 -0
  171. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/simulated_graph_practitioner/test_fhir_simulated_graph_multiple_practitioner_async.py +0 -0
  172. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/simulated_graph_practitioner/test_fhir_simulated_graph_multiple_practitioner_in_one_call_async.py +0 -0
  173. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/simulated_graph_practitioner/test_fhir_simulated_graph_multiple_practitioner_in_one_call_async_with_request_size.py +0 -0
  174. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/simulated_graph_practitioner/test_fhir_simulated_graph_practitioner_async.py +0 -0
  175. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/simulated_graph_practitioner/test_fhir_simulated_graph_practitioner_separate_resources_async.py +0 -0
  176. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/test_async_fhir_client_bundle/__init__.py +0 -0
  177. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/test_async_fhir_client_bundle/not_expanded/__init__.py +0 -0
  178. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/test_async_fhir_client_bundle/not_expanded/test_fhir_client_bundle_not_expanded.py +0 -0
  179. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/test_async_fhir_client_bundle/not_separated/__init__.py +0 -0
  180. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/test_async_fhir_client_bundle/not_separated/test_fhir_client_bundle_not_separated.py +0 -0
  181. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/test_async_fhir_client_bundle/separated/__init__.py +0 -0
  182. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/test_async_fhir_client_bundle/separated/test_fhir_client_bundle_separated.py +0 -0
  183. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/test_async_fhir_client_fetch_response_in_chunks.py +0 -0
  184. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/test_async_fhir_client_patient_by_id.py +0 -0
  185. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/test_async_fhir_client_patient_by_identifier_missing.py +0 -0
  186. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/test_async_fhir_client_patient_delete.py +0 -0
  187. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/test_async_fhir_client_patient_list.py +0 -0
  188. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/test_async_fhir_client_patient_list_auth_fail.py +0 -0
  189. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/test_async_fhir_client_patient_list_auth_fail_retry.py +0 -0
  190. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/test_async_fhir_client_patient_list_auth_fail_retry_custom_refresh_function.py +0 -0
  191. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/test_async_fhir_client_patient_list_resource_streaming.py +0 -0
  192. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/test_async_fhir_client_patient_list_streaming.py +0 -0
  193. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/test_async_fhir_client_patient_merge.py +0 -0
  194. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/test_async_fhir_client_patient_merge_with_validate.py +0 -0
  195. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/test_async_fhir_client_patient_update.py +0 -0
  196. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/test_async_real_fhir_server_get_patients.py +0 -0
  197. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/async/test_async_real_fhir_server_get_patients_error.py +0 -0
  198. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/logger_for_test.py +0 -0
  199. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/sync/__init__.py +0 -0
  200. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/sync/graph/__init__.py +0 -0
  201. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/sync/graph/test_fhir_graph.py +0 -0
  202. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/sync/test_fhir_client_bundle/__init__.py +0 -0
  203. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/sync/test_fhir_client_bundle/not_expanded/__init__.py +0 -0
  204. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/sync/test_fhir_client_bundle/not_expanded/test_fhir_client_bundle_not_expanded.py +0 -0
  205. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/sync/test_fhir_client_bundle/not_separated/__init__.py +0 -0
  206. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/sync/test_fhir_client_bundle/not_separated/test_fhir_client_bundle_not_separated.py +0 -0
  207. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/sync/test_fhir_client_bundle/separated/__init__.py +0 -0
  208. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/sync/test_fhir_client_bundle/separated/test_fhir_client_bundle_separated.py +0 -0
  209. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/sync/test_fhir_client_logs_not_contains_secret_information.py +0 -0
  210. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/sync/test_fhir_client_patient_by_id.py +0 -0
  211. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/sync/test_fhir_client_patient_delete.py +0 -0
  212. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/sync/test_fhir_client_patient_list.py +0 -0
  213. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/sync/test_fhir_client_patient_list_auth_fail.py +0 -0
  214. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/sync/test_fhir_client_patient_list_auth_fail_retry.py +0 -0
  215. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/sync/test_fhir_client_patient_merge.py +0 -0
  216. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/sync/test_fhir_client_patient_update.py +0 -0
  217. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/sync/test_fhir_client_patient_update_patch.py +0 -0
  218. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests/test_get_nested_property.py +0 -0
  219. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests_integration/__init__.py +0 -0
  220. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests_integration/test_aetna_server_auth.py +0 -0
  221. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests_integration/test_aetna_server_auth_aiohttp.py +0 -0
  222. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests_integration/test_aetna_server_auth_httpx.py +0 -0
  223. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests_integration/test_dev_server_auth.py +0 -0
  224. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests_integration/test_dev_server_no_auth.py +0 -0
  225. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests_integration/test_emr_server_auth.py +0 -0
  226. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests_integration/test_firely_fhir.py +0 -0
  227. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/tests_integration/test_merge_vs_smart_merge_behavior.py +0 -0
  228. {helix_fhir_client_sdk-4.2.8 → helix_fhir_client_sdk-4.2.9}/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.8
3
+ Version: 4.2.9
4
4
  Summary: helix.fhir.client.sdk
5
5
  Home-page: https://github.com/icanbwell/helix.fhir.client.sdk
6
6
  Author: Imran Qureshi
@@ -115,4 +115,49 @@ For FHIR servers that support data streaming (e.g., b.well FHIR server), you can
115
115
  The data will be streamed in AsyncGenerators as described above.
116
116
 
117
117
  # Storage Compression
118
- The FHIR client SDK natively stores the FHIR resources compressed in memory. This allows use in environments where you are processing large number of FHIR resources.
118
+ The FHIR client SDK supports two types of compression:
119
+
120
+ 1. **HTTP Compression** (`compress`): Compresses HTTP request body when sending data to the server. Default: **enabled**
121
+ 2. **In-Memory Storage** (`storage_mode`): Controls how FHIR resources are stored in memory. Default: **raw (no compression)**
122
+
123
+ ## Disabling HTTP Compression
124
+ HTTP compression (gzip) is enabled by default for request bodies. To disable it:
125
+
126
+ ```python
127
+ from helix_fhir_client_sdk.fhir_client import FhirClient
128
+
129
+ # Disable HTTP compression for requests
130
+ fhir_client = FhirClient().url("https://fhir.example.com").compress(False)
131
+ ```
132
+
133
+ ## In-Memory Storage Modes
134
+ The SDK supports different storage modes for FHIR resources through the `set_storage_mode()` method.
135
+ By default, resources are stored as raw Python dictionaries (no compression).
136
+
137
+ ```python
138
+ from helix_fhir_client_sdk.fhir_client import FhirClient
139
+ from compressedfhir.utilities.compressed_dict.v1.compressed_dict_storage_mode import CompressedDictStorageMode
140
+
141
+ # Use raw storage (default) - no compression, resources stored as plain Python dicts
142
+ fhir_client = FhirClient().set_storage_mode(CompressedDictStorageMode(storage_type="raw"))
143
+
144
+ # Use msgpack storage - stores resources in msgpack format
145
+ fhir_client = FhirClient().set_storage_mode(CompressedDictStorageMode(storage_type="msgpack"))
146
+
147
+ # Use compressed msgpack storage - stores resources in compressed msgpack format
148
+ fhir_client = FhirClient().set_storage_mode(CompressedDictStorageMode(storage_type="compressed_msgpack"))
149
+ ```
150
+
151
+ Available storage types:
152
+ - `raw`: Default. Resources are stored as standard Python dictionaries (no compression)
153
+ - `msgpack`: Resources are serialized using MessagePack for efficient storage
154
+ - `compressed_msgpack`: Resources are serialized using MessagePack and then compressed
155
+
156
+ ## Getting Raw Python Dictionaries
157
+ To completely bypass the `compressedfhir` library and get plain Python dictionaries:
158
+
159
+ ```python
160
+ # Returns plain Python dicts, not FhirResource objects
161
+ result = await fhir_client.get_raw_resources_async()
162
+ resources = result["_resources"] # list[dict[str, Any]]
163
+ ```
@@ -79,4 +79,49 @@ For FHIR servers that support data streaming (e.g., b.well FHIR server), you can
79
79
  The data will be streamed in AsyncGenerators as described above.
80
80
 
81
81
  # Storage Compression
82
- The FHIR client SDK natively stores the FHIR resources compressed in memory. This allows use in environments where you are processing large number of FHIR resources.
82
+ The FHIR client SDK supports two types of compression:
83
+
84
+ 1. **HTTP Compression** (`compress`): Compresses HTTP request body when sending data to the server. Default: **enabled**
85
+ 2. **In-Memory Storage** (`storage_mode`): Controls how FHIR resources are stored in memory. Default: **raw (no compression)**
86
+
87
+ ## Disabling HTTP Compression
88
+ HTTP compression (gzip) is enabled by default for request bodies. To disable it:
89
+
90
+ ```python
91
+ from helix_fhir_client_sdk.fhir_client import FhirClient
92
+
93
+ # Disable HTTP compression for requests
94
+ fhir_client = FhirClient().url("https://fhir.example.com").compress(False)
95
+ ```
96
+
97
+ ## In-Memory Storage Modes
98
+ The SDK supports different storage modes for FHIR resources through the `set_storage_mode()` method.
99
+ By default, resources are stored as raw Python dictionaries (no compression).
100
+
101
+ ```python
102
+ from helix_fhir_client_sdk.fhir_client import FhirClient
103
+ from compressedfhir.utilities.compressed_dict.v1.compressed_dict_storage_mode import CompressedDictStorageMode
104
+
105
+ # Use raw storage (default) - no compression, resources stored as plain Python dicts
106
+ fhir_client = FhirClient().set_storage_mode(CompressedDictStorageMode(storage_type="raw"))
107
+
108
+ # Use msgpack storage - stores resources in msgpack format
109
+ fhir_client = FhirClient().set_storage_mode(CompressedDictStorageMode(storage_type="msgpack"))
110
+
111
+ # Use compressed msgpack storage - stores resources in compressed msgpack format
112
+ fhir_client = FhirClient().set_storage_mode(CompressedDictStorageMode(storage_type="compressed_msgpack"))
113
+ ```
114
+
115
+ Available storage types:
116
+ - `raw`: Default. Resources are stored as standard Python dictionaries (no compression)
117
+ - `msgpack`: Resources are serialized using MessagePack for efficient storage
118
+ - `compressed_msgpack`: Resources are serialized using MessagePack and then compressed
119
+
120
+ ## Getting Raw Python Dictionaries
121
+ To completely bypass the `compressedfhir` library and get plain Python dictionaries:
122
+
123
+ ```python
124
+ # Returns plain Python dicts, not FhirResource objects
125
+ result = await fhir_client.get_raw_resources_async()
126
+ resources = result["_resources"] # list[dict[str, Any]]
127
+ ```
@@ -0,0 +1 @@
1
+ 4.2.9
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: helix.fhir.client.sdk
3
- Version: 4.2.8
3
+ Version: 4.2.9
4
4
  Summary: helix.fhir.client.sdk
5
5
  Home-page: https://github.com/icanbwell/helix.fhir.client.sdk
6
6
  Author: Imran Qureshi
@@ -115,4 +115,49 @@ For FHIR servers that support data streaming (e.g., b.well FHIR server), you can
115
115
  The data will be streamed in AsyncGenerators as described above.
116
116
 
117
117
  # Storage Compression
118
- The FHIR client SDK natively stores the FHIR resources compressed in memory. This allows use in environments where you are processing large number of FHIR resources.
118
+ The FHIR client SDK supports two types of compression:
119
+
120
+ 1. **HTTP Compression** (`compress`): Compresses HTTP request body when sending data to the server. Default: **enabled**
121
+ 2. **In-Memory Storage** (`storage_mode`): Controls how FHIR resources are stored in memory. Default: **raw (no compression)**
122
+
123
+ ## Disabling HTTP Compression
124
+ HTTP compression (gzip) is enabled by default for request bodies. To disable it:
125
+
126
+ ```python
127
+ from helix_fhir_client_sdk.fhir_client import FhirClient
128
+
129
+ # Disable HTTP compression for requests
130
+ fhir_client = FhirClient().url("https://fhir.example.com").compress(False)
131
+ ```
132
+
133
+ ## In-Memory Storage Modes
134
+ The SDK supports different storage modes for FHIR resources through the `set_storage_mode()` method.
135
+ By default, resources are stored as raw Python dictionaries (no compression).
136
+
137
+ ```python
138
+ from helix_fhir_client_sdk.fhir_client import FhirClient
139
+ from compressedfhir.utilities.compressed_dict.v1.compressed_dict_storage_mode import CompressedDictStorageMode
140
+
141
+ # Use raw storage (default) - no compression, resources stored as plain Python dicts
142
+ fhir_client = FhirClient().set_storage_mode(CompressedDictStorageMode(storage_type="raw"))
143
+
144
+ # Use msgpack storage - stores resources in msgpack format
145
+ fhir_client = FhirClient().set_storage_mode(CompressedDictStorageMode(storage_type="msgpack"))
146
+
147
+ # Use compressed msgpack storage - stores resources in compressed msgpack format
148
+ fhir_client = FhirClient().set_storage_mode(CompressedDictStorageMode(storage_type="compressed_msgpack"))
149
+ ```
150
+
151
+ Available storage types:
152
+ - `raw`: Default. Resources are stored as standard Python dictionaries (no compression)
153
+ - `msgpack`: Resources are serialized using MessagePack for efficient storage
154
+ - `compressed_msgpack`: Resources are serialized using MessagePack and then compressed
155
+
156
+ ## Getting Raw Python Dictionaries
157
+ To completely bypass the `compressedfhir` library and get plain Python dictionaries:
158
+
159
+ ```python
160
+ # Returns plain Python dicts, not FhirResource objects
161
+ result = await fhir_client.get_raw_resources_async()
162
+ resources = result["_resources"] # list[dict[str, Any]]
163
+ ```
@@ -146,6 +146,7 @@ helix_fhir_client_sdk/validators/test/__init__.py
146
146
  helix_fhir_client_sdk/validators/test/test_async_fhir_validator.py
147
147
  tests/__init__.py
148
148
  tests/logger_for_test.py
149
+ tests/test_fhir_client_clone.py
149
150
  tests/test_get_nested_property.py
150
151
  tests/async/__init__.py
151
152
  tests/async/test_async_fhir_client_fetch_response_in_chunks.py
@@ -163,6 +164,7 @@ tests/async/test_async_fhir_client_patient_merge_with_validate.py
163
164
  tests/async/test_async_fhir_client_patient_update.py
164
165
  tests/async/test_async_real_fhir_server_get_patients.py
165
166
  tests/async/test_async_real_fhir_server_get_patients_error.py
167
+ tests/async/test_benchmark_compress.py
166
168
  tests/async/fhir_server/__init__.py
167
169
  tests/async/fhir_server/test_async_real_fhir_server_get_graph_large.py
168
170
  tests/async/fhir_server/test_async_real_fhir_server_get_patients_large.py
@@ -150,9 +150,10 @@ class FhirClient(
150
150
  self._log_all_response_urls: bool = False
151
151
  """ If True, logs all response URLs and status codes. Can take a lot of memory for when there are many responses. """
152
152
 
153
- self._storage_mode = CompressedDictStorageMode(storage_type="raw")
153
+ # Default to "raw" storage mode - no in-memory compression, resources stored as plain Python dicts
154
+ self._storage_mode: CompressedDictStorageMode = CompressedDictStorageMode(storage_type="raw")
154
155
 
155
- self._create_operation_outcome_for_error = False
156
+ self._create_operation_outcome_for_error: bool | None = False
156
157
 
157
158
  def action(self, action: str) -> FhirClient:
158
159
  """
@@ -455,9 +456,14 @@ class FhirClient(
455
456
 
456
457
  def compress(self, compress: bool) -> FhirClient:
457
458
  """
458
- Sets the compress flag
459
+ Sets whether to use HTTP compression (gzip) when sending request data to the server.
459
460
 
460
- :param compress: whether to compress the response
461
+ This controls compression of the HTTP request body only, not in-memory storage.
462
+ Default is True (compression enabled).
463
+
464
+ To disable all compression, call: .compress(False)
465
+
466
+ :param compress: whether to compress HTTP request body (default: True)
461
467
  """
462
468
  self._compress = compress
463
469
  return self
@@ -826,17 +832,17 @@ class FhirClient(
826
832
  Whether to ask the server to include the total count in the result
827
833
 
828
834
 
829
- :param include_total: whether to include total count
835
+ :param include_total: whether to include the total count
830
836
  """
831
837
  self._include_total = include_total
832
838
  return self
833
839
 
834
840
  def filter(self, filter_: list[BaseFilter]) -> FhirClient:
835
841
  """
836
- Allows adding in a custom filters that derives from BaseFilter
842
+ Allows adding in custom filters that derive from BaseFilter
837
843
 
838
844
 
839
- :param filter_: list of custom filter instances that derives from BaseFilter.
845
+ :param filter_: list of custom filter instances that derive from BaseFilter.
840
846
  """
841
847
  assert isinstance(filter_, list), "This function requires a list"
842
848
  self._filters.extend(filter_)
@@ -889,6 +895,16 @@ class FhirClient(
889
895
  fhir_client._time_to_live_in_secs_for_cache = self._time_to_live_in_secs_for_cache
890
896
  fhir_client._validation_server_url = self._validation_server_url
891
897
  fhir_client._smart_merge = self._smart_merge
898
+ fhir_client._compress = self._compress
899
+ fhir_client._storage_mode = self._storage_mode
900
+ fhir_client._send_data_as_chunked = self._send_data_as_chunked
901
+ fhir_client._use_post_for_search = self._use_post_for_search
902
+ fhir_client._maximum_time_to_retry_on_429 = self._maximum_time_to_retry_on_429
903
+ fhir_client._retry_count = self._retry_count
904
+ fhir_client._throw_exception_on_error = self._throw_exception_on_error
905
+ fhir_client._trace_request_function = self._trace_request_function
906
+ fhir_client._log_all_response_urls = self._log_all_response_urls
907
+ fhir_client._create_operation_outcome_for_error = self._create_operation_outcome_for_error
892
908
  return fhir_client
893
909
 
894
910
  def set_log_all_response_urls(self, value: bool) -> FhirClient:
@@ -911,18 +927,30 @@ class FhirClient(
911
927
 
912
928
  def set_storage_mode(self, value: CompressedDictStorageMode) -> FhirClient:
913
929
  """
914
- Sets the storage mode
930
+ Sets the in-memory storage mode for FHIR resources.
931
+
932
+ This controls how FHIR resources are stored in memory after being received.
933
+ The default is "raw" (no compression - resources stored as plain Python dicts).
934
+
935
+ Available storage types:
936
+ - "raw": No compression, standard Python dictionaries (default)
937
+ - "compressed": Zlib/gzip compression in memory
938
+ - "msgpack": MessagePack binary serialization
939
+ - "compressed_msgpack": MessagePack + compression
940
+
941
+ Note: This is separate from HTTP compression (controlled by .compress()).
942
+ With default settings, no in-memory compression is applied.
915
943
 
916
- :param value: storage mode
944
+ :param value: storage mode (default: raw)
917
945
  """
918
946
  self._storage_mode = value
919
947
  return self
920
948
 
921
- def set_create_operation_outcome_for_error(self, value: bool) -> FhirClient:
949
+ def set_create_operation_outcome_for_error(self, value: bool | None) -> FhirClient:
922
950
  """
923
951
  Sets the create_operation_outcome_for_error flag
924
952
 
925
- :param value: whether to create operation outcome for error
953
+ :param value: whether to create an operation outcome for error (True, False, or None)
926
954
  """
927
955
  self._create_operation_outcome_for_error = value
928
956
  return self
@@ -2,9 +2,7 @@ import json
2
2
  import time
3
3
  from collections import deque
4
4
  from collections.abc import AsyncGenerator
5
- from typing import (
6
- cast,
7
- )
5
+ from typing import Any, cast
8
6
  from urllib import parse
9
7
 
10
8
  import requests
@@ -45,6 +43,198 @@ from helix_fhir_client_sdk.validators.async_fhir_validator import AsyncFhirValid
45
43
 
46
44
 
47
45
  class FhirMergeResourcesMixin(FhirClientProtocol):
46
+ async def merge_bundle_uncompressed(
47
+ self,
48
+ id_: str | None,
49
+ bundle: FhirBundle,
50
+ ) -> FhirMergeResourceResponse:
51
+ """
52
+ Optimized variant of :meth:`merge_bundle_async` that bypasses storage-mode handling.
53
+ Use this method when you do not need storage-mode behavior, or features such as request/response compression.
54
+ :param id_: id of the resource to merge
55
+ :param bundle: FHIR Bundle to merge
56
+ :return: FhirMergeResourceResponse
57
+ """
58
+ # Initialize profiling dictionary
59
+ profiling: dict[str, float] = {
60
+ "total_time": 0.0,
61
+ "build_url": 0.0,
62
+ "get_access_token": 0.0,
63
+ "prepare_payload": 0.0,
64
+ "http_post": 0.0,
65
+ "parse_response": 0.0,
66
+ "create_response_objects": 0.0,
67
+ }
68
+
69
+ merge_start_time = time.time()
70
+
71
+ request_id: str | None = None
72
+ response_status: int = 500
73
+
74
+ # Build URL
75
+ build_url_start = time.time()
76
+ full_uri: furl = furl(self._url)
77
+ full_uri /= self._resource
78
+
79
+ # Prepare headers
80
+ headers = {"Content-Type": "application/fhir+json"}
81
+ headers.update(self._additional_request_headers)
82
+ profiling["build_url"] = time.time() - build_url_start
83
+
84
+ # Get access token
85
+ get_token_start = time.time()
86
+ access_token_result: GetAccessTokenResult = await self.get_access_token_async()
87
+ access_token: str | None = access_token_result.access_token
88
+ if access_token:
89
+ headers["Authorization"] = f"Bearer {access_token}"
90
+ profiling["get_access_token"] = time.time() - get_token_start
91
+
92
+ # Prepare JSON payload
93
+ prepare_payload_start = time.time()
94
+ first_resource: FhirResource | None = bundle.entry[0].resource
95
+ assert first_resource is not None
96
+ json_payload: str = first_resource.json() if len(bundle.entry) == 1 else bundle.json()
97
+
98
+ # Build merge URL
99
+ obj_id: str = id_ or "1"
100
+ resource_uri: furl = full_uri / parse.quote(str(obj_id), safe="") / "$merge"
101
+ profiling["prepare_payload"] = time.time() - prepare_payload_start
102
+
103
+ response_text: str | None = None
104
+ responses: list[dict[str, Any]] = []
105
+ errors: list[dict[str, Any]] = []
106
+
107
+ try:
108
+ async with RetryableAioHttpClient(
109
+ fn_get_session=self.create_http_session,
110
+ refresh_token_func=self._refresh_token_function,
111
+ tracer_request_func=self._trace_request_function,
112
+ retries=self._retry_count,
113
+ exclude_status_codes_from_retry=self._exclude_status_codes_from_retry,
114
+ use_data_streaming=self._use_data_streaming,
115
+ send_data_as_chunked=self._send_data_as_chunked,
116
+ compress=self._compress,
117
+ throw_exception_on_error=self._throw_exception_on_error,
118
+ log_all_url_results=self._log_all_response_urls,
119
+ access_token=self._access_token,
120
+ access_token_expiry_date=self._access_token_expiry_date,
121
+ persistent_session=self._persistent_session,
122
+ use_persistent_session=self._use_persistent_session,
123
+ close_session_on_exit=self._close_session,
124
+ ) as client:
125
+ http_post_start = time.time()
126
+ response: RetryableAioHttpResponse = await client.post(
127
+ url=resource_uri.url,
128
+ data=json_payload,
129
+ headers=headers,
130
+ )
131
+ profiling["http_post"] = time.time() - http_post_start
132
+
133
+ response_status = response.status
134
+ request_id = response.response_headers.get("X-Request-ID", None)
135
+
136
+ parse_response_start = time.time()
137
+ if response.status == 200:
138
+ response_text = await response.get_text_async()
139
+ if response_text:
140
+ try:
141
+ # Parse response as plain dicts for speed
142
+ parsed_response = json.loads(response_text)
143
+ if isinstance(parsed_response, list):
144
+ responses = parsed_response
145
+ else:
146
+ responses = [parsed_response]
147
+ except (ValueError, json.JSONDecodeError) as e:
148
+ errors.append(
149
+ {
150
+ "issue": [
151
+ {
152
+ "severity": "error",
153
+ "code": "exception",
154
+ "diagnostics": f"Failed to parse response: {str(e)}",
155
+ }
156
+ ]
157
+ }
158
+ )
159
+ else:
160
+ # HTTP error
161
+ response_text = await response.get_text_async()
162
+ errors.append(
163
+ {
164
+ "issue": [
165
+ {
166
+ "severity": "error",
167
+ "code": "exception",
168
+ "diagnostics": response_text or f"HTTP {response.status}",
169
+ }
170
+ ]
171
+ }
172
+ )
173
+ profiling["parse_response"] = time.time() - parse_response_start
174
+
175
+ except requests.exceptions.HTTPError as e:
176
+ raise FhirSenderException(
177
+ request_id=request_id,
178
+ url=resource_uri.url,
179
+ headers=headers,
180
+ json_data=json_payload,
181
+ response_text=response_text,
182
+ response_status_code=response_status,
183
+ exception=e,
184
+ variables=FhirClientLogger.get_variables_to_log(vars(self)),
185
+ message=f"HttpError: {e}",
186
+ elapsed_time=time.time() - merge_start_time,
187
+ ) from e
188
+ except Exception as e:
189
+ raise FhirSenderException(
190
+ request_id=request_id,
191
+ url=resource_uri.url,
192
+ headers=headers,
193
+ json_data=json_payload,
194
+ response_text=response_text,
195
+ response_status_code=response_status,
196
+ exception=e,
197
+ variables=FhirClientLogger.get_variables_to_log(vars(self)),
198
+ message=f"Unknown Error: {e}",
199
+ elapsed_time=time.time() - merge_start_time,
200
+ ) from e
201
+
202
+ # Convert dict responses to proper objects using fast method
203
+ create_objects_start = time.time()
204
+ response_entries: deque[BaseFhirMergeResourceResponseEntry] = deque()
205
+
206
+ for resp_dict in responses:
207
+ response_entries.append(FhirMergeResourceResponseEntry.from_dict_uncompressed(resp_dict))
208
+
209
+ for error_dict in errors:
210
+ response_entries.append(FhirMergeResponseEntryError.from_dict(error_dict, storage_mode=self._storage_mode))
211
+ profiling["create_response_objects"] = time.time() - create_objects_start
212
+
213
+ profiling["total_time"] = time.time() - merge_start_time
214
+
215
+ # Log profiling information if logger is available
216
+ if self._logger:
217
+ self._logger.debug(
218
+ f"merge_bundle_without_storage profiling: "
219
+ f"total={profiling['total_time']:.3f}s, "
220
+ f"build_url={profiling['build_url']:.3f}s, "
221
+ f"get_token={profiling['get_access_token']:.3f}s, "
222
+ f"prepare_payload={profiling['prepare_payload']:.3f}s, "
223
+ f"http_post={profiling['http_post']:.3f}s, "
224
+ f"parse_response={profiling['parse_response']:.3f}s, "
225
+ f"create_objects={profiling['create_response_objects']:.3f}s"
226
+ )
227
+
228
+ return FhirMergeResourceResponse(
229
+ request_id=request_id,
230
+ url=resource_uri.url,
231
+ responses=response_entries,
232
+ error=None if response_status == 200 else (response_text or f"HTTP {response_status}"),
233
+ access_token=self._access_token,
234
+ status=response_status,
235
+ response_text=response_text,
236
+ )
237
+
48
238
  async def merge_bundle_async(
49
239
  self,
50
240
  id_: str | None,
@@ -75,6 +75,36 @@ class FhirMergeResourceResponseEntry(BaseFhirMergeResourceResponseEntry):
75
75
  status=data.get("status"),
76
76
  )
77
77
 
78
+ @classmethod
79
+ def from_dict_uncompressed(cls, data: dict[str, Any]) -> "FhirMergeResourceResponseEntry":
80
+ """
81
+ Creates a FhirMergeResourceResponseEntry from a dictionary without storage_mode overhead.
82
+ Uses FhirResource.construct for faster object creation.
83
+
84
+ :param data: Dictionary containing the response entry data
85
+ :return: FhirMergeResourceResponseEntry instance
86
+ """
87
+ resource_payload = data.get("resource")
88
+ resource_obj: FhirResource | None = (
89
+ FhirResource.construct(**resource_payload) if isinstance(resource_payload, dict) else None
90
+ )
91
+ return FhirMergeResourceResponseEntry(
92
+ created=data.get("created"),
93
+ updated=data.get("updated"),
94
+ deleted=data.get("deleted"),
95
+ id_=data.get("id"),
96
+ uuid=data.get("uuid"),
97
+ resource_type=data.get("resourceType"),
98
+ source_assigning_authority=data.get("source_assigning_authority"),
99
+ resource_version=data.get("resource_version"),
100
+ message=data.get("message"),
101
+ issue=data.get("issue"),
102
+ error=data.get("error"),
103
+ token=data.get("token"),
104
+ resource=resource_obj,
105
+ status=data.get("status"),
106
+ )
107
+
78
108
  @classmethod
79
109
  @override
80
110
  def from_json(
@@ -8,7 +8,7 @@ import async_timeout
8
8
  from aiohttp import ClientError, ClientResponse, ClientResponseError, ClientSession
9
9
  from multidict import MultiMapping
10
10
  from opentelemetry import trace
11
- import logging
11
+
12
12
  from helix_fhir_client_sdk.function_types import (
13
13
  RefreshTokenFunction,
14
14
  RefreshTokenResult,
@@ -130,7 +130,6 @@ class RetryableAioHttpClient:
130
130
  if self.compress:
131
131
  kwargs["compress"] = self.compress
132
132
  assert self.session is not None
133
- logging.info(f"Using Session ID: {id(self.session)} for URL: {url}")
134
133
  with TRACER.start_as_current_span(FhirClientSdkOpenTelemetrySpanNames.HTTP_GET) as span:
135
134
  span.set_attribute(
136
135
  FhirClientSdkOpenTelemetryAttributeNames.URL,