helix.fhir.client.sdk 4.2.2__tar.gz → 4.2.4__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.
- {helix_fhir_client_sdk-4.2.2/helix.fhir.client.sdk.egg-info → helix_fhir_client_sdk-4.2.4}/PKG-INFO +2 -5
- helix_fhir_client_sdk-4.2.4/VERSION +1 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4/helix.fhir.client.sdk.egg-info}/PKG-INFO +2 -5
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix.fhir.client.sdk.egg-info/SOURCES.txt +1 -3
- helix_fhir_client_sdk-4.2.4/helix.fhir.client.sdk.egg-info/requires.txt +8 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/fhir_auth_mixin.py +8 -13
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/fhir_client.py +48 -82
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/fhir_delete_mixin.py +2 -5
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/fhir_merge_mixin.py +1 -4
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/fhir_merge_resources_mixin.py +2 -8
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/fhir_patch_mixin.py +1 -4
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/fhir_update_mixin.py +1 -4
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/graph/simulated_graph_processor_mixin.py +21 -5
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/queue/request_queue_mixin.py +7 -18
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/bundle_expander.py +3 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/fhir_client_protocol.py +1 -3
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/fhir_delete_response.py +3 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/fhir_get_response.py +5 -1
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/fhir_merge_response.py +5 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/fhir_response_processor.py +65 -73
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/fhir_update_response.py +3 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/get/fhir_get_bundle_response.py +21 -1
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/get/fhir_get_error_response.py +7 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/get/fhir_get_list_by_resource_type_response.py +22 -1
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/get/fhir_get_list_response.py +20 -1
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/get/fhir_get_response_factory.py +3 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/get/fhir_get_single_response.py +21 -1
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/get_result.py +4 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/merge/fhir_merge_resource_response.py +2 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/paging_result.py +5 -1
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/resource_separator.py +1 -1
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/test/test_fhir_get_response.py +3 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/async_parallel_processor/v1/async_parallel_processor.py +3 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/cache/request_cache.py +60 -34
- helix_fhir_client_sdk-4.2.4/helix_fhir_client_sdk/utilities/logging_decorators.py +64 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/retryable_aiohttp_client.py +149 -158
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/retryable_aiohttp_response.py +5 -2
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/setup.py +1 -4
- helix_fhir_client_sdk-4.2.2/VERSION +0 -1
- helix_fhir_client_sdk-4.2.2/helix.fhir.client.sdk.egg-info/requires.txt +0 -11
- helix_fhir_client_sdk-4.2.2/helix_fhir_client_sdk/open_telemetry/attribute_names.py +0 -4
- helix_fhir_client_sdk-4.2.2/helix_fhir_client_sdk/open_telemetry/span_names.py +0 -8
- helix_fhir_client_sdk-4.2.2/tests_integration/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/LICENSE +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/MANIFEST.in +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/Makefile +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/README.md +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix.fhir.client.sdk.egg-info/dependency_links.txt +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix.fhir.client.sdk.egg-info/not-zip-safe +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix.fhir.client.sdk.egg-info/top_level.txt +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/dictionary_parser.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/dictionary_writer.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/exceptions/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/exceptions/fhir_get_exception.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/exceptions/fhir_sender_exception.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/exceptions/fhir_validation_exception.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/fhir_bundle_appender.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/filters/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/filters/base_filter.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/filters/identifier_filter.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/filters/last_updated_filter.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/filters/property_filter.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/filters/property_missing_filter.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/filters/security_access_filter.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/filters/security_owner_filter.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/filters/sort_field.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/filters/source_filter.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/filters/version_filter.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/function_types.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/graph/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/graph/fhir_graph_mixin.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/graph/graph_definition.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/graph/graph_link_parameters.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/graph/graph_target_parameters.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/graph/test/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/graph/test/test_graph_mixin.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/graph/test/test_simulate_graph_processor_mixin.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/graph/test/test_simulate_graph_processor_mixin_caching.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/py.typed +0 -0
- {helix_fhir_client_sdk-4.2.2/helix_fhir_client_sdk/open_telemetry → helix_fhir_client_sdk-4.2.4/helix_fhir_client_sdk/queue}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2/helix_fhir_client_sdk/queue → helix_fhir_client_sdk-4.2.4/helix_fhir_client_sdk/responses}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2/helix_fhir_client_sdk/responses → helix_fhir_client_sdk-4.2.4/helix_fhir_client_sdk/responses/get}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2/helix_fhir_client_sdk/responses/get → helix_fhir_client_sdk-4.2.4/helix_fhir_client_sdk/responses/get/test}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/get/test/test_get_bundle_response.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/get/test/test_get_error_response.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/get/test/test_get_list_by_resource_type_response.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/get/test/test_get_list_response.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/get/test/test_get_response_factory.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/get/test/test_get_single_response.py +0 -0
- {helix_fhir_client_sdk-4.2.2/helix_fhir_client_sdk/responses/get/test → helix_fhir_client_sdk-4.2.4/helix_fhir_client_sdk/responses/merge}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/merge/base_fhir_merge_resource_response_entry.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/merge/fhir_merge_resource_response_entry.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/merge/fhir_merge_response_entry_issue.py +0 -0
- {helix_fhir_client_sdk-4.2.2/helix_fhir_client_sdk/responses/merge → helix_fhir_client_sdk-4.2.4/helix_fhir_client_sdk/responses/test}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2/helix_fhir_client_sdk/responses/test → helix_fhir_client_sdk-4.2.4/helix_fhir_client_sdk/responses/test/fhir_response_processor}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_expand_or_separate_bundle_async.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_handle_response_200.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_handle_response_200_non_streaming.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_handle_response_200_non_streaming_separate_bundle.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_handle_response_200_streaming.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_handle_response_200_streaming_separate_bundle.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_handle_response_200_streaming_separate_bundle_ndjson.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/test/fhir_response_processor/test_handle_response_404.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/test/test_bundle_expander.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/responses/test/test_resource_separator.py +0 -0
- {helix_fhir_client_sdk-4.2.2/helix_fhir_client_sdk/responses/test/fhir_response_processor → helix_fhir_client_sdk-4.2.4/helix_fhir_client_sdk/structures}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/structures/get_access_token_result.py +0 -0
- {helix_fhir_client_sdk-4.2.2/helix_fhir_client_sdk/structures → helix_fhir_client_sdk-4.2.4/helix_fhir_client_sdk/test}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/test/test_delete_mixin.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/test/test_fhir_auth_mixin.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/test/test_fhir_bundle_appender.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/test/test_merge_mixin.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/test/test_merge_mixin_resources.py +0 -0
- {helix_fhir_client_sdk-4.2.2/helix_fhir_client_sdk/test → helix_fhir_client_sdk-4.2.4/helix_fhir_client_sdk/utilities}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2/helix_fhir_client_sdk/utilities → helix_fhir_client_sdk-4.2.4/helix_fhir_client_sdk/utilities/async_parallel_processor}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2/helix_fhir_client_sdk/utilities/async_parallel_processor → helix_fhir_client_sdk-4.2.4/helix_fhir_client_sdk/utilities/async_parallel_processor/v1}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/async_runner.py +0 -0
- {helix_fhir_client_sdk-4.2.2/helix_fhir_client_sdk/utilities/async_parallel_processor/v1 → helix_fhir_client_sdk-4.2.4/helix_fhir_client_sdk/utilities/cache}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/cache/request_cache_entry.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/fhir_client_logger.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/fhir_helper.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/fhir_scope_parser.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/fhir_scope_parser_result.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/fhir_server_helpers.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/hash_util.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/list_chunker.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/ndjson_chunk_streaming_parser.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/practitioner_generator.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/retryable_aiohttp_url_result.py +0 -0
- {helix_fhir_client_sdk-4.2.2/helix_fhir_client_sdk/utilities/cache → helix_fhir_client_sdk-4.2.4/helix_fhir_client_sdk/utilities/size_calculator}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/size_calculator/size_calculator.py +0 -0
- {helix_fhir_client_sdk-4.2.2/helix_fhir_client_sdk/utilities/size_calculator → helix_fhir_client_sdk-4.2.4/helix_fhir_client_sdk/utilities/test}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/test/test_async_runner.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/test/test_fhir_scope_parser.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/test/test_fhir_scope_parser_can_parse_scopes.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/test/test_fhir_scope_parser_correct_allow.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/test/test_json_helpers.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/test/test_list_chunker.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/test/test_ndjson_chunk_streaming_parser.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/test/test_retryable_aiohttp_client.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/utilities/url_checker.py +0 -0
- {helix_fhir_client_sdk-4.2.2/helix_fhir_client_sdk/utilities/test → helix_fhir_client_sdk-4.2.4/helix_fhir_client_sdk/validators}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/validators/async_fhir_validator.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/validators/fhir_validator.py +0 -0
- {helix_fhir_client_sdk-4.2.2/helix_fhir_client_sdk/validators → helix_fhir_client_sdk-4.2.4/helix_fhir_client_sdk/validators/test}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/validators/test/test_async_fhir_validator.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/well_known_configuration.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/pyproject.toml +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/setup.cfg +0 -0
- {helix_fhir_client_sdk-4.2.2/helix_fhir_client_sdk/validators/test → helix_fhir_client_sdk-4.2.4/tests}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2/tests → helix_fhir_client_sdk-4.2.4/tests/async}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2/tests/async → helix_fhir_client_sdk-4.2.4/tests/async/fhir_server}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/fhir_server/test_async_real_fhir_server_get_graph_large.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/fhir_server/test_async_real_fhir_server_get_patients_large.py +0 -0
- {helix_fhir_client_sdk-4.2.2/tests/async/fhir_server → helix_fhir_client_sdk-4.2.4/tests/async/graph}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/graph/test_fhir_graph.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/graph/test_fhir_graph_multiple_ids.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/graph/test_fhir_graph_multiple_ids_in_batches.py +0 -0
- {helix_fhir_client_sdk-4.2.2/tests/async/graph → helix_fhir_client_sdk-4.2.4/tests/async/simulated_graph}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/simulated_graph/test_fhir_simulated_graph_async.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/simulated_graph/test_fhir_simulated_graph_caching_async.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/simulated_graph/test_fhir_simulated_graph_caching_input_cache_async.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/simulated_graph/test_fhir_simulated_graph_caching_input_cache_if_modified_since_async.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/simulated_graph/test_fhir_simulated_graph_caching_scope_parser_async.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/simulated_graph/test_fhir_simulated_graph_separate_resources_async.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/simulated_graph/test_fhir_simulated_graph_with_errors_async.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/simulated_graph/test_fhir_simulated_graph_with_operation_outcomes_async.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/simulated_graph/test_fhir_simulated_graph_with_url_column_async.py +0 -0
- {helix_fhir_client_sdk-4.2.2/tests/async/simulated_graph → helix_fhir_client_sdk-4.2.4/tests/async/simulated_graph_practitioner}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/simulated_graph_practitioner/test_fhir_simulated_graph_multiple_practitioner_async.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/simulated_graph_practitioner/test_fhir_simulated_graph_multiple_practitioner_in_one_call_async.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/simulated_graph_practitioner/test_fhir_simulated_graph_multiple_practitioner_in_one_call_async_with_request_size.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/simulated_graph_practitioner/test_fhir_simulated_graph_practitioner_async.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/simulated_graph_practitioner/test_fhir_simulated_graph_practitioner_separate_resources_async.py +0 -0
- {helix_fhir_client_sdk-4.2.2/tests/async/simulated_graph_practitioner → helix_fhir_client_sdk-4.2.4/tests/async/test_async_fhir_client_bundle}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2/tests/async/test_async_fhir_client_bundle → helix_fhir_client_sdk-4.2.4/tests/async/test_async_fhir_client_bundle/not_expanded}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/test_async_fhir_client_bundle/not_expanded/test_fhir_client_bundle_not_expanded.py +0 -0
- {helix_fhir_client_sdk-4.2.2/tests/async/test_async_fhir_client_bundle/not_expanded → helix_fhir_client_sdk-4.2.4/tests/async/test_async_fhir_client_bundle/not_separated}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/test_async_fhir_client_bundle/not_separated/test_fhir_client_bundle_not_separated.py +0 -0
- {helix_fhir_client_sdk-4.2.2/tests/async/test_async_fhir_client_bundle/not_separated → helix_fhir_client_sdk-4.2.4/tests/async/test_async_fhir_client_bundle/separated}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/test_async_fhir_client_bundle/separated/test_fhir_client_bundle_separated.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/test_async_fhir_client_fetch_response_in_chunks.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/test_async_fhir_client_patient_by_id.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/test_async_fhir_client_patient_by_identifier_missing.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/test_async_fhir_client_patient_delete.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/test_async_fhir_client_patient_list.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/test_async_fhir_client_patient_list_auth_fail.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/test_async_fhir_client_patient_list_auth_fail_retry.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/test_async_fhir_client_patient_list_auth_fail_retry_custom_refresh_function.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/test_async_fhir_client_patient_list_resource_streaming.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/test_async_fhir_client_patient_list_streaming.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/test_async_fhir_client_patient_merge.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/test_async_fhir_client_patient_merge_with_validate.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/test_async_fhir_client_patient_update.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/test_async_real_fhir_server_get_patients.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/async/test_async_real_fhir_server_get_patients_error.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/logger_for_test.py +0 -0
- {helix_fhir_client_sdk-4.2.2/tests/async/test_async_fhir_client_bundle/separated → helix_fhir_client_sdk-4.2.4/tests/sync}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2/tests/sync → helix_fhir_client_sdk-4.2.4/tests/sync/graph}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/sync/graph/test_fhir_graph.py +0 -0
- {helix_fhir_client_sdk-4.2.2/tests/sync/graph → helix_fhir_client_sdk-4.2.4/tests/sync/test_fhir_client_bundle}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2/tests/sync/test_fhir_client_bundle → helix_fhir_client_sdk-4.2.4/tests/sync/test_fhir_client_bundle/not_expanded}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/sync/test_fhir_client_bundle/not_expanded/test_fhir_client_bundle_not_expanded.py +0 -0
- {helix_fhir_client_sdk-4.2.2/tests/sync/test_fhir_client_bundle/not_expanded → helix_fhir_client_sdk-4.2.4/tests/sync/test_fhir_client_bundle/not_separated}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/sync/test_fhir_client_bundle/not_separated/test_fhir_client_bundle_not_separated.py +0 -0
- {helix_fhir_client_sdk-4.2.2/tests/sync/test_fhir_client_bundle/not_separated → helix_fhir_client_sdk-4.2.4/tests/sync/test_fhir_client_bundle/separated}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/sync/test_fhir_client_bundle/separated/test_fhir_client_bundle_separated.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/sync/test_fhir_client_logs_not_contains_secret_information.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/sync/test_fhir_client_patient_by_id.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/sync/test_fhir_client_patient_delete.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/sync/test_fhir_client_patient_list.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/sync/test_fhir_client_patient_list_auth_fail.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/sync/test_fhir_client_patient_list_auth_fail_retry.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/sync/test_fhir_client_patient_merge.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/sync/test_fhir_client_patient_update.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/sync/test_fhir_client_patient_update_patch.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests/test_get_nested_property.py +0 -0
- {helix_fhir_client_sdk-4.2.2/tests/sync/test_fhir_client_bundle/separated → helix_fhir_client_sdk-4.2.4/tests_integration}/__init__.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests_integration/test_aetna_server_auth.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests_integration/test_aetna_server_auth_aiohttp.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests_integration/test_aetna_server_auth_httpx.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests_integration/test_dev_server_auth.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests_integration/test_dev_server_no_auth.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests_integration/test_emr_server_auth.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests_integration/test_firely_fhir.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests_integration/test_merge_vs_smart_merge_behavior.py +0 -0
- {helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/tests_integration/test_staging_server_graph.py +0 -0
{helix_fhir_client_sdk-4.2.2/helix.fhir.client.sdk.egg-info → helix_fhir_client_sdk-4.2.4}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: helix.fhir.client.sdk
|
|
3
|
-
Version: 4.2.
|
|
3
|
+
Version: 4.2.4
|
|
4
4
|
Summary: helix.fhir.client.sdk
|
|
5
5
|
Home-page: https://github.com/icanbwell/helix.fhir.client.sdk
|
|
6
6
|
Author: Imran Qureshi
|
|
@@ -19,10 +19,7 @@ Requires-Dist: chardet
|
|
|
19
19
|
Requires-Dist: aiohttp
|
|
20
20
|
Requires-Dist: async-timeout>=4.0.3
|
|
21
21
|
Requires-Dist: python-dateutil
|
|
22
|
-
Requires-Dist: compressedfhir>=1.0.
|
|
23
|
-
Requires-Dist: certifi>=2025.1.31
|
|
24
|
-
Requires-Dist: opentelemetry-api>=1.39
|
|
25
|
-
Requires-Dist: multidict>=6
|
|
22
|
+
Requires-Dist: compressedfhir>=1.0.3
|
|
26
23
|
Dynamic: author
|
|
27
24
|
Dynamic: author-email
|
|
28
25
|
Dynamic: classifier
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
4.2.4
|
{helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4/helix.fhir.client.sdk.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: helix.fhir.client.sdk
|
|
3
|
-
Version: 4.2.
|
|
3
|
+
Version: 4.2.4
|
|
4
4
|
Summary: helix.fhir.client.sdk
|
|
5
5
|
Home-page: https://github.com/icanbwell/helix.fhir.client.sdk
|
|
6
6
|
Author: Imran Qureshi
|
|
@@ -19,10 +19,7 @@ Requires-Dist: chardet
|
|
|
19
19
|
Requires-Dist: aiohttp
|
|
20
20
|
Requires-Dist: async-timeout>=4.0.3
|
|
21
21
|
Requires-Dist: python-dateutil
|
|
22
|
-
Requires-Dist: compressedfhir>=1.0.
|
|
23
|
-
Requires-Dist: certifi>=2025.1.31
|
|
24
|
-
Requires-Dist: opentelemetry-api>=1.39
|
|
25
|
-
Requires-Dist: multidict>=6
|
|
22
|
+
Requires-Dist: compressedfhir>=1.0.3
|
|
26
23
|
Dynamic: author
|
|
27
24
|
Dynamic: author-email
|
|
28
25
|
Dynamic: classifier
|
|
@@ -51,9 +51,6 @@ helix_fhir_client_sdk/graph/test/__init__.py
|
|
|
51
51
|
helix_fhir_client_sdk/graph/test/test_graph_mixin.py
|
|
52
52
|
helix_fhir_client_sdk/graph/test/test_simulate_graph_processor_mixin.py
|
|
53
53
|
helix_fhir_client_sdk/graph/test/test_simulate_graph_processor_mixin_caching.py
|
|
54
|
-
helix_fhir_client_sdk/open_telemetry/__init__.py
|
|
55
|
-
helix_fhir_client_sdk/open_telemetry/attribute_names.py
|
|
56
|
-
helix_fhir_client_sdk/open_telemetry/span_names.py
|
|
57
54
|
helix_fhir_client_sdk/queue/__init__.py
|
|
58
55
|
helix_fhir_client_sdk/queue/request_queue_mixin.py
|
|
59
56
|
helix_fhir_client_sdk/responses/__init__.py
|
|
@@ -116,6 +113,7 @@ helix_fhir_client_sdk/utilities/fhir_scope_parser_result.py
|
|
|
116
113
|
helix_fhir_client_sdk/utilities/fhir_server_helpers.py
|
|
117
114
|
helix_fhir_client_sdk/utilities/hash_util.py
|
|
118
115
|
helix_fhir_client_sdk/utilities/list_chunker.py
|
|
116
|
+
helix_fhir_client_sdk/utilities/logging_decorators.py
|
|
119
117
|
helix_fhir_client_sdk/utilities/ndjson_chunk_streaming_parser.py
|
|
120
118
|
helix_fhir_client_sdk/utilities/practitioner_generator.py
|
|
121
119
|
helix_fhir_client_sdk/utilities/retryable_aiohttp_client.py
|
{helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/fhir_auth_mixin.py
RENAMED
|
@@ -8,13 +8,11 @@ from threading import Lock
|
|
|
8
8
|
from typing import TYPE_CHECKING, Any, cast
|
|
9
9
|
|
|
10
10
|
from furl import furl
|
|
11
|
-
from opentelemetry import trace
|
|
12
11
|
|
|
13
12
|
from helix_fhir_client_sdk.function_types import (
|
|
14
13
|
RefreshTokenFunction,
|
|
15
14
|
RefreshTokenResult,
|
|
16
15
|
)
|
|
17
|
-
from helix_fhir_client_sdk.open_telemetry.span_names import FhirClientSdkOpenTelemetrySpanNames
|
|
18
16
|
from helix_fhir_client_sdk.responses.fhir_client_protocol import FhirClientProtocol
|
|
19
17
|
from helix_fhir_client_sdk.structures.get_access_token_result import (
|
|
20
18
|
GetAccessTokenResult,
|
|
@@ -33,9 +31,6 @@ if TYPE_CHECKING:
|
|
|
33
31
|
from helix_fhir_client_sdk.fhir_client import FhirClient
|
|
34
32
|
|
|
35
33
|
|
|
36
|
-
TRACER = trace.get_tracer(__name__)
|
|
37
|
-
|
|
38
|
-
|
|
39
34
|
class FhirAuthMixin(FhirClientProtocol):
|
|
40
35
|
_time_to_live_in_secs_for_cache: int = 10 * 60
|
|
41
36
|
|
|
@@ -124,15 +119,15 @@ class FhirAuthMixin(FhirClientProtocol):
|
|
|
124
119
|
access_token=self._access_token,
|
|
125
120
|
expiry_date=self._access_token_expiry_date,
|
|
126
121
|
)
|
|
127
|
-
with TRACER.start_as_current_span(FhirClientSdkOpenTelemetrySpanNames.GET_ACCESS_TOKEN):
|
|
128
|
-
refresh_token_result: RefreshTokenResult = await self._refresh_token_function(
|
|
129
|
-
url=None, status_code=0, current_token=None, expiry_date=None, retry_count=0
|
|
130
|
-
)
|
|
131
|
-
assert isinstance(refresh_token_result, RefreshTokenResult)
|
|
132
122
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
123
|
+
refresh_token_result: RefreshTokenResult = await self._refresh_token_function(
|
|
124
|
+
url=None, status_code=0, current_token=None, expiry_date=None, retry_count=0
|
|
125
|
+
)
|
|
126
|
+
assert isinstance(refresh_token_result, RefreshTokenResult)
|
|
127
|
+
|
|
128
|
+
self.set_access_token(refresh_token_result.access_token)
|
|
129
|
+
self.set_access_token_expiry_date(refresh_token_result.expiry_date)
|
|
130
|
+
return GetAccessTokenResult(access_token=self._access_token, expiry_date=self._access_token_expiry_date)
|
|
136
131
|
|
|
137
132
|
def authenticate_async_wrapper(self) -> RefreshTokenFunction:
|
|
138
133
|
"""
|
{helix_fhir_client_sdk-4.2.2 → helix_fhir_client_sdk-4.2.4}/helix_fhir_client_sdk/fhir_client.py
RENAMED
|
@@ -26,8 +26,6 @@ from compressedfhir.utilities.compressed_dict.v1.compressed_dict_storage_mode im
|
|
|
26
26
|
CompressedDictStorageMode,
|
|
27
27
|
)
|
|
28
28
|
from furl import furl
|
|
29
|
-
from opentelemetry import trace
|
|
30
|
-
from opentelemetry.trace import Status, StatusCode
|
|
31
29
|
from requests.adapters import BaseAdapter
|
|
32
30
|
|
|
33
31
|
from helix_fhir_client_sdk.dictionary_writer import convert_dict_to_str
|
|
@@ -48,7 +46,6 @@ from helix_fhir_client_sdk.graph.fhir_graph_mixin import FhirGraphMixin
|
|
|
48
46
|
from helix_fhir_client_sdk.graph.simulated_graph_processor_mixin import (
|
|
49
47
|
SimulatedGraphProcessorMixin,
|
|
50
48
|
)
|
|
51
|
-
from helix_fhir_client_sdk.open_telemetry.span_names import FhirClientSdkOpenTelemetrySpanNames
|
|
52
49
|
from helix_fhir_client_sdk.queue.request_queue_mixin import RequestQueueMixin
|
|
53
50
|
from helix_fhir_client_sdk.responses.fhir_client_protocol import FhirClientProtocol
|
|
54
51
|
from helix_fhir_client_sdk.responses.fhir_get_response import FhirGetResponse
|
|
@@ -58,8 +55,6 @@ from helix_fhir_client_sdk.structures.get_access_token_result import (
|
|
|
58
55
|
from helix_fhir_client_sdk.utilities.async_runner import AsyncRunner
|
|
59
56
|
from helix_fhir_client_sdk.utilities.fhir_client_logger import FhirClientLogger
|
|
60
57
|
|
|
61
|
-
TRACER = trace.get_tracer(__name__)
|
|
62
|
-
|
|
63
58
|
|
|
64
59
|
class FhirClient(
|
|
65
60
|
SimulatedGraphProcessorMixin,
|
|
@@ -471,24 +466,6 @@ class FhirClient(
|
|
|
471
466
|
self._throw_exception_on_error = throw_exception_on_error
|
|
472
467
|
return self
|
|
473
468
|
|
|
474
|
-
def set_persistent_session(self, session: ClientSession | None) -> FhirClient:
|
|
475
|
-
"""
|
|
476
|
-
Sets the persistent session to use for requests
|
|
477
|
-
|
|
478
|
-
:param session: persistent session
|
|
479
|
-
"""
|
|
480
|
-
self._persistent_session = session
|
|
481
|
-
return self
|
|
482
|
-
|
|
483
|
-
def use_persistent_session(self, value: bool) -> FhirClient:
|
|
484
|
-
"""
|
|
485
|
-
Sets the use_persistent_session flag
|
|
486
|
-
|
|
487
|
-
:param value: whether to use the persistent session
|
|
488
|
-
"""
|
|
489
|
-
self._use_persistent_session = value
|
|
490
|
-
return self
|
|
491
|
-
|
|
492
469
|
def close_session_after_request(self, value: bool) -> FhirClient:
|
|
493
470
|
"""
|
|
494
471
|
Sets the _close_session flag (default is True)
|
|
@@ -611,34 +588,33 @@ class FhirClient(
|
|
|
611
588
|
|
|
612
589
|
:return: response
|
|
613
590
|
"""
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
if self._id
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
if
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
return full_response
|
|
591
|
+
instance_variables_text = convert_dict_to_str(FhirClientLogger.get_variables_to_log(vars(self)))
|
|
592
|
+
if self._logger:
|
|
593
|
+
# self._logger.info(f"LOGLEVEL: {self._log_level}")
|
|
594
|
+
self._logger.debug(f"parameters: {instance_variables_text}")
|
|
595
|
+
else:
|
|
596
|
+
self._internal_logger.debug(f"LOGLEVEL (InternalLogger): {self._log_level}")
|
|
597
|
+
self._internal_logger.debug(f"parameters: {instance_variables_text}")
|
|
598
|
+
ids: list[str] | None = None
|
|
599
|
+
if self._id:
|
|
600
|
+
ids = self._id if isinstance(self._id, list) else [self._id]
|
|
601
|
+
# actually make the request
|
|
602
|
+
full_response: FhirGetResponse | None = None
|
|
603
|
+
async for response in self._get_with_session_async(
|
|
604
|
+
ids=ids,
|
|
605
|
+
fn_handle_streaming_chunk=data_chunk_handler,
|
|
606
|
+
page_number=None,
|
|
607
|
+
id_above=None,
|
|
608
|
+
additional_parameters=None,
|
|
609
|
+
resource_type=None,
|
|
610
|
+
):
|
|
611
|
+
if response:
|
|
612
|
+
if full_response:
|
|
613
|
+
full_response = full_response.append(response)
|
|
614
|
+
else:
|
|
615
|
+
full_response = response
|
|
616
|
+
assert full_response
|
|
617
|
+
return full_response
|
|
642
618
|
|
|
643
619
|
async def get_raw_resources_async(
|
|
644
620
|
self,
|
|
@@ -679,37 +655,27 @@ class FhirClient(
|
|
|
679
655
|
|
|
680
656
|
:return: async generator of responses
|
|
681
657
|
"""
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
ids
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
):
|
|
704
|
-
yield response
|
|
705
|
-
except BaseException as exc: # propagate cancellation/errors but keep span informative
|
|
706
|
-
# Record exception in span
|
|
707
|
-
span.record_exception(exc)
|
|
708
|
-
span.set_status(Status(StatusCode.ERROR, str(exc)))
|
|
709
|
-
raise
|
|
710
|
-
finally:
|
|
711
|
-
# Ensure span is ended after generator is exhausted or error occurs
|
|
712
|
-
span.end()
|
|
658
|
+
instance_variables_text = convert_dict_to_str(FhirClientLogger.get_variables_to_log(vars(self)))
|
|
659
|
+
if self._logger:
|
|
660
|
+
# self._logger.info(f"LOGLEVEL: {self._log_level}")
|
|
661
|
+
self._logger.info(f"parameters: {instance_variables_text}")
|
|
662
|
+
else:
|
|
663
|
+
self._internal_logger.info(f"LOGLEVEL (InternalLogger): {self._log_level}")
|
|
664
|
+
self._internal_logger.info(f"parameters: {instance_variables_text}")
|
|
665
|
+
ids: list[str] | None = None
|
|
666
|
+
if self._id:
|
|
667
|
+
ids = self._id if isinstance(self._id, list) else [self._id]
|
|
668
|
+
# actually make the request
|
|
669
|
+
response: FhirGetResponse | None
|
|
670
|
+
async for response in self._get_with_session_async(
|
|
671
|
+
ids=ids,
|
|
672
|
+
fn_handle_streaming_chunk=data_chunk_handler,
|
|
673
|
+
page_number=None,
|
|
674
|
+
id_above=None,
|
|
675
|
+
additional_parameters=None,
|
|
676
|
+
resource_type=None,
|
|
677
|
+
):
|
|
678
|
+
yield response
|
|
713
679
|
|
|
714
680
|
def get(self) -> FhirGetResponse:
|
|
715
681
|
"""
|
|
@@ -56,13 +56,10 @@ 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
|
-
use_persistent_session=self._use_persistent_session,
|
|
61
|
-
close_session_on_exit=self._close_session,
|
|
62
59
|
) as client:
|
|
63
60
|
response: RetryableAioHttpResponse = await client.delete(url=full_uri.tostr(), headers=headers)
|
|
64
61
|
request_id = response.response_headers.get("X-Request-ID", None)
|
|
65
|
-
self._internal_logger.
|
|
62
|
+
self._internal_logger.info(f"X-Request-ID={request_id}")
|
|
66
63
|
if response.status == 200:
|
|
67
64
|
if self._logger:
|
|
68
65
|
self._logger.info(f"Successfully deleted: {full_uri}")
|
|
@@ -131,7 +128,7 @@ class FhirDeleteMixin(FhirClientProtocol):
|
|
|
131
128
|
) as client:
|
|
132
129
|
response: RetryableAioHttpResponse = await client.delete(url=full_url, headers=headers)
|
|
133
130
|
request_id = response.response_headers.get("X-Request-ID", None)
|
|
134
|
-
self._internal_logger.
|
|
131
|
+
self._internal_logger.info(f"X-Request-ID={request_id}")
|
|
135
132
|
if response.status == 200:
|
|
136
133
|
if self._logger:
|
|
137
134
|
self._logger.info(f"Successfully deleted: {full_uri}")
|
|
@@ -181,9 +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
|
-
use_persistent_session=self._use_persistent_session,
|
|
186
|
-
close_session_on_exit=self._close_session,
|
|
187
184
|
) as client:
|
|
188
185
|
# should we check if it exists and do a POST then?
|
|
189
186
|
response: RetryableAioHttpResponse = await client.post(
|
|
@@ -193,7 +190,7 @@ class FhirMergeMixin(FhirClientProtocol):
|
|
|
193
190
|
)
|
|
194
191
|
response_status = response.status
|
|
195
192
|
request_id = response.response_headers.get("X-Request-ID", None)
|
|
196
|
-
self._internal_logger.
|
|
193
|
+
self._internal_logger.info(f"X-Request-ID={request_id}")
|
|
197
194
|
if response and response.status == 200:
|
|
198
195
|
response_text = await response.get_text_async()
|
|
199
196
|
if response_text:
|
|
@@ -124,9 +124,6 @@ class FhirMergeResourcesMixin(FhirClientProtocol):
|
|
|
124
124
|
log_all_url_results=self._log_all_response_urls,
|
|
125
125
|
access_token=self._access_token,
|
|
126
126
|
access_token_expiry_date=self._access_token_expiry_date,
|
|
127
|
-
persistent_session=self._persistent_session,
|
|
128
|
-
use_persistent_session=self._use_persistent_session,
|
|
129
|
-
close_session_on_exit=self._close_session,
|
|
130
127
|
) as client:
|
|
131
128
|
# should we check if it exists and do a POST then?
|
|
132
129
|
response: RetryableAioHttpResponse = await client.post(
|
|
@@ -136,7 +133,7 @@ class FhirMergeResourcesMixin(FhirClientProtocol):
|
|
|
136
133
|
)
|
|
137
134
|
response_status = response.status
|
|
138
135
|
request_id = response.response_headers.get("X-Request-ID", None)
|
|
139
|
-
self._internal_logger.
|
|
136
|
+
self._internal_logger.info(f"X-Request-ID={request_id}")
|
|
140
137
|
if response and response.status == 200:
|
|
141
138
|
response_text = await response.get_text_async()
|
|
142
139
|
if response_text:
|
|
@@ -343,9 +340,6 @@ class FhirMergeResourcesMixin(FhirClientProtocol):
|
|
|
343
340
|
log_all_url_results=self._log_all_response_urls,
|
|
344
341
|
access_token=self._access_token,
|
|
345
342
|
access_token_expiry_date=self._access_token_expiry_date,
|
|
346
|
-
close_session_on_exit=self._close_session,
|
|
347
|
-
persistent_session=self._persistent_session,
|
|
348
|
-
use_persistent_session=self._use_persistent_session,
|
|
349
343
|
) as client:
|
|
350
344
|
# should we check if it exists and do a POST then?
|
|
351
345
|
response: RetryableAioHttpResponse = await client.post(
|
|
@@ -355,7 +349,7 @@ class FhirMergeResourcesMixin(FhirClientProtocol):
|
|
|
355
349
|
)
|
|
356
350
|
response_status = response.status
|
|
357
351
|
request_id = response.response_headers.get("X-Request-ID", None)
|
|
358
|
-
self._internal_logger.
|
|
352
|
+
self._internal_logger.info(f"X-Request-ID={request_id}")
|
|
359
353
|
if response and response.status == 200:
|
|
360
354
|
response_text = await response.get_text_async()
|
|
361
355
|
if response_text:
|
|
@@ -72,9 +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
|
-
use_persistent_session=self._use_persistent_session,
|
|
77
|
-
close_session_on_exit=self._close_session,
|
|
78
75
|
) as client:
|
|
79
76
|
response: RetryableAioHttpResponse = await client.patch(
|
|
80
77
|
url=full_uri.url, json=deserialized_data, headers=headers
|
|
@@ -82,7 +79,7 @@ class FhirPatchMixin(FhirClientProtocol):
|
|
|
82
79
|
response_status = response.status
|
|
83
80
|
response_text = await response.get_text_async()
|
|
84
81
|
request_id = response.response_headers.get("X-Request-ID", None)
|
|
85
|
-
self._internal_logger.
|
|
82
|
+
self._internal_logger.info(f"X-Request-ID={request_id}")
|
|
86
83
|
|
|
87
84
|
if response_status == 200:
|
|
88
85
|
if self._logger:
|
|
@@ -106,13 +106,10 @@ 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
|
-
use_persistent_session=self._use_persistent_session,
|
|
111
|
-
close_session_on_exit=self._close_session,
|
|
112
109
|
) as client:
|
|
113
110
|
response = await client.put(url=full_uri.url, data=json_data, headers=headers)
|
|
114
111
|
request_id = response.response_headers.get("X-Request-ID", None)
|
|
115
|
-
self._internal_logger.
|
|
112
|
+
self._internal_logger.info(f"X-Request-ID={request_id}")
|
|
116
113
|
if response.status == 200:
|
|
117
114
|
if self._logger:
|
|
118
115
|
self._logger.info(f"Successfully updated: {full_uri}")
|
|
@@ -3,6 +3,7 @@ from abc import ABC
|
|
|
3
3
|
from collections.abc import AsyncGenerator
|
|
4
4
|
from datetime import UTC, datetime
|
|
5
5
|
from logging import Logger
|
|
6
|
+
import logging
|
|
6
7
|
from typing import Any, cast
|
|
7
8
|
from urllib.parse import quote
|
|
8
9
|
|
|
@@ -43,6 +44,7 @@ from helix_fhir_client_sdk.utilities.cache.request_cache import RequestCache
|
|
|
43
44
|
from helix_fhir_client_sdk.utilities.cache.request_cache_entry import RequestCacheEntry
|
|
44
45
|
from helix_fhir_client_sdk.utilities.fhir_scope_parser import FhirScopeParser
|
|
45
46
|
from helix_fhir_client_sdk.utilities.hash_util import ResourceHash
|
|
47
|
+
from helix_fhir_client_sdk.utilities.logging_decorators import log_execution_time, log_execution_time_asyncgen
|
|
46
48
|
|
|
47
49
|
|
|
48
50
|
class SimulatedGraphProcessorMixin(ABC, FhirClientProtocol):
|
|
@@ -57,6 +59,7 @@ class SimulatedGraphProcessorMixin(ABC, FhirClientProtocol):
|
|
|
57
59
|
"""
|
|
58
60
|
|
|
59
61
|
# noinspection PyPep8Naming,PyUnusedLocal
|
|
62
|
+
@log_execution_time_asyncgen
|
|
60
63
|
async def process_simulate_graph_async(
|
|
61
64
|
self,
|
|
62
65
|
*,
|
|
@@ -247,26 +250,30 @@ class SimulatedGraphProcessorMixin(ABC, FhirClientProtocol):
|
|
|
247
250
|
|
|
248
251
|
# Update parent link map for next iteration
|
|
249
252
|
parent_link_map = new_parent_link_map
|
|
250
|
-
|
|
253
|
+
logging.info(f"# Combine and process responses")
|
|
251
254
|
# Combine and process responses
|
|
252
|
-
parent_response = cast(FhirGetBundleResponse, parent_response.extend(child_responses))
|
|
253
255
|
|
|
256
|
+
parent_response = cast(FhirGetBundleResponse, parent_response.extend(child_responses))
|
|
257
|
+
logging.info(f"# if sort_resources:")
|
|
254
258
|
# Optional resource sorting
|
|
255
259
|
if sort_resources:
|
|
256
260
|
parent_response = parent_response.sort_resources()
|
|
257
|
-
|
|
261
|
+
logging.info(f"# full_response: FhirGetResponse")
|
|
258
262
|
# Prepare final response based on bundling preferences
|
|
259
263
|
full_response: FhirGetResponse
|
|
260
264
|
if separate_bundle_resources:
|
|
265
|
+
logging.info(f"# if separate_bundle_resources:")
|
|
261
266
|
full_response = FhirGetListByResourceTypeResponse.from_response(other_response=parent_response)
|
|
262
267
|
elif expand_fhir_bundle:
|
|
268
|
+
logging.info(f"# elif expand_fhir_bundle:")
|
|
263
269
|
full_response = FhirGetListResponse.from_response(other_response=parent_response)
|
|
264
270
|
else:
|
|
271
|
+
logging.info(f"# else:")
|
|
265
272
|
full_response = parent_response
|
|
266
|
-
|
|
273
|
+
logging.info(f"full_response.url = url or parent_response.url")
|
|
267
274
|
# Set response URL
|
|
268
275
|
full_response.url = url or parent_response.url
|
|
269
|
-
|
|
276
|
+
logging.info(f"# Log cache performance")
|
|
270
277
|
# Log cache performance
|
|
271
278
|
if logger:
|
|
272
279
|
logger.info(
|
|
@@ -287,6 +294,7 @@ class SimulatedGraphProcessorMixin(ABC, FhirClientProtocol):
|
|
|
287
294
|
self.create_http_session = original_create_http_session # type: ignore[method-assign]
|
|
288
295
|
|
|
289
296
|
# noinspection PyUnusedLocal
|
|
297
|
+
@log_execution_time
|
|
290
298
|
async def process_link_async_parallel_function(
|
|
291
299
|
self,
|
|
292
300
|
context: ParallelFunctionContext,
|
|
@@ -381,6 +389,7 @@ class SimulatedGraphProcessorMixin(ABC, FhirClientProtocol):
|
|
|
381
389
|
# Return the list of retrieved responses
|
|
382
390
|
return result
|
|
383
391
|
|
|
392
|
+
@log_execution_time_asyncgen
|
|
384
393
|
async def _process_link_async(
|
|
385
394
|
self,
|
|
386
395
|
*,
|
|
@@ -465,6 +474,7 @@ class SimulatedGraphProcessorMixin(ABC, FhirClientProtocol):
|
|
|
465
474
|
yield target_response
|
|
466
475
|
|
|
467
476
|
# noinspection PyUnusedLocal
|
|
477
|
+
@log_execution_time
|
|
468
478
|
async def process_target_async_parallel_function(
|
|
469
479
|
self,
|
|
470
480
|
context: ParallelFunctionContext,
|
|
@@ -536,6 +546,7 @@ class SimulatedGraphProcessorMixin(ABC, FhirClientProtocol):
|
|
|
536
546
|
# Return the list of retrieved responses
|
|
537
547
|
return result
|
|
538
548
|
|
|
549
|
+
@log_execution_time
|
|
539
550
|
async def _process_child_group(
|
|
540
551
|
self,
|
|
541
552
|
*,
|
|
@@ -617,6 +628,7 @@ class SimulatedGraphProcessorMixin(ABC, FhirClientProtocol):
|
|
|
617
628
|
# Return the retrieved child resources
|
|
618
629
|
return child_response
|
|
619
630
|
|
|
631
|
+
@log_execution_time_asyncgen
|
|
620
632
|
async def _process_target_async(
|
|
621
633
|
self,
|
|
622
634
|
*,
|
|
@@ -852,6 +864,7 @@ class SimulatedGraphProcessorMixin(ABC, FhirClientProtocol):
|
|
|
852
864
|
if target.link:
|
|
853
865
|
parent_link_map.append((target.link, children))
|
|
854
866
|
|
|
867
|
+
@log_execution_time
|
|
855
868
|
async def _get_resources_by_id_one_by_one_async(
|
|
856
869
|
self,
|
|
857
870
|
*,
|
|
@@ -928,6 +941,7 @@ class SimulatedGraphProcessorMixin(ABC, FhirClientProtocol):
|
|
|
928
941
|
|
|
929
942
|
return result
|
|
930
943
|
|
|
944
|
+
@log_execution_time
|
|
931
945
|
async def _get_resources_by_parameters_async(
|
|
932
946
|
self,
|
|
933
947
|
*,
|
|
@@ -1153,6 +1167,7 @@ class SimulatedGraphProcessorMixin(ABC, FhirClientProtocol):
|
|
|
1153
1167
|
return bundle_response, cache.cache_hits
|
|
1154
1168
|
|
|
1155
1169
|
# noinspection PyPep8Naming
|
|
1170
|
+
@log_execution_time
|
|
1156
1171
|
async def simulate_graph_async(
|
|
1157
1172
|
self,
|
|
1158
1173
|
*,
|
|
@@ -1233,6 +1248,7 @@ class SimulatedGraphProcessorMixin(ABC, FhirClientProtocol):
|
|
|
1233
1248
|
return result
|
|
1234
1249
|
|
|
1235
1250
|
# noinspection PyPep8Naming
|
|
1251
|
+
@log_execution_time_asyncgen
|
|
1236
1252
|
async def simulate_graph_streaming_async(
|
|
1237
1253
|
self,
|
|
1238
1254
|
*,
|
|
@@ -49,6 +49,9 @@ class RequestQueueMixin(ABC, FhirClientProtocol):
|
|
|
49
49
|
self._max_concurrent_requests_semaphore = Semaphore(max_concurrent_requests)
|
|
50
50
|
return self
|
|
51
51
|
|
|
52
|
+
from helix_fhir_client_sdk.utilities.logging_decorators import log_execution_time_asyncgen
|
|
53
|
+
|
|
54
|
+
@log_execution_time_asyncgen
|
|
52
55
|
async def _get_with_session_async(
|
|
53
56
|
self,
|
|
54
57
|
page_number: int | None,
|
|
@@ -74,15 +77,6 @@ class RequestQueueMixin(ABC, FhirClientProtocol):
|
|
|
74
77
|
request_id: str | None = None
|
|
75
78
|
total_results = 0 # total number of resources returned so far
|
|
76
79
|
|
|
77
|
-
limit_count: int | None = self._limit
|
|
78
|
-
|
|
79
|
-
# if _count parameter is present in additional_parameters then set limit_count to it
|
|
80
|
-
if additional_parameters:
|
|
81
|
-
for param in additional_parameters:
|
|
82
|
-
if self._limit is None:
|
|
83
|
-
if param.startswith("_count="):
|
|
84
|
-
limit_count = int(param.split("=")[1])
|
|
85
|
-
|
|
86
80
|
# create url and query to request from FHIR server
|
|
87
81
|
resources_json: str = ""
|
|
88
82
|
full_url = await self.build_url(
|
|
@@ -131,8 +125,6 @@ class RequestQueueMixin(ABC, FhirClientProtocol):
|
|
|
131
125
|
access_token=self._access_token,
|
|
132
126
|
access_token_expiry_date=self._access_token_expiry_date,
|
|
133
127
|
close_session_on_exit=self._close_session,
|
|
134
|
-
persistent_session=self._persistent_session,
|
|
135
|
-
use_persistent_session=self._use_persistent_session,
|
|
136
128
|
) as client:
|
|
137
129
|
while next_url:
|
|
138
130
|
# set access token in request if present
|
|
@@ -177,7 +169,7 @@ class RequestQueueMixin(ABC, FhirClientProtocol):
|
|
|
177
169
|
)
|
|
178
170
|
|
|
179
171
|
request_id = response.response_headers.get("X-Request-ID", None)
|
|
180
|
-
self._internal_logger.
|
|
172
|
+
self._internal_logger.info(f"X-Request-ID={request_id}")
|
|
181
173
|
|
|
182
174
|
async for r in FhirResponseProcessor.handle_response(
|
|
183
175
|
internal_logger=self._internal_logger,
|
|
@@ -207,9 +199,9 @@ class RequestQueueMixin(ABC, FhirClientProtocol):
|
|
|
207
199
|
total_results += resource_count
|
|
208
200
|
|
|
209
201
|
# Stop if limit reached
|
|
210
|
-
if
|
|
202
|
+
if self._limit and total_results >= self._limit:
|
|
211
203
|
self._internal_logger.info(
|
|
212
|
-
f"Reached limit={
|
|
204
|
+
f"Reached limit={self._limit} after collecting {total_results} "
|
|
213
205
|
f"resources, stopping pagination"
|
|
214
206
|
)
|
|
215
207
|
return
|
|
@@ -301,9 +293,6 @@ class RequestQueueMixin(ABC, FhirClientProtocol):
|
|
|
301
293
|
log_all_url_results=self._log_all_response_urls,
|
|
302
294
|
access_token=self._access_token,
|
|
303
295
|
access_token_expiry_date=self._access_token_expiry_date,
|
|
304
|
-
close_session_on_exit=self._close_session,
|
|
305
|
-
persistent_session=self._persistent_session,
|
|
306
|
-
use_persistent_session=self._use_persistent_session,
|
|
307
296
|
) as client:
|
|
308
297
|
while next_url:
|
|
309
298
|
# set access token in request if present
|
|
@@ -348,7 +337,7 @@ class RequestQueueMixin(ABC, FhirClientProtocol):
|
|
|
348
337
|
)
|
|
349
338
|
|
|
350
339
|
request_id = response.response_headers.get("X-Request-ID", None)
|
|
351
|
-
self._internal_logger.
|
|
340
|
+
self._internal_logger.info(f"X-Request-ID={request_id}")
|
|
352
341
|
|
|
353
342
|
if response.status == 200:
|
|
354
343
|
response_next_url = None
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import dataclasses
|
|
2
2
|
from typing import Any
|
|
3
3
|
|
|
4
|
+
from helix_fhir_client_sdk.utilities.logging_decorators import log_execution_time
|
|
5
|
+
|
|
4
6
|
|
|
5
7
|
@dataclasses.dataclass(slots=True)
|
|
6
8
|
class BundleExpanderResult:
|
|
@@ -10,6 +12,7 @@ class BundleExpanderResult:
|
|
|
10
12
|
|
|
11
13
|
class BundleExpander:
|
|
12
14
|
@staticmethod
|
|
15
|
+
@log_execution_time
|
|
13
16
|
async def expand_bundle_async(
|
|
14
17
|
*,
|
|
15
18
|
bundle: dict[str, Any],
|
|
@@ -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
|
-
_use_persistent_session: bool = False
|
|
94
92
|
_close_session: bool = True
|
|
95
93
|
|
|
96
94
|
_use_post_for_search: bool = False
|
|
@@ -124,7 +122,7 @@ class FhirClientProtocol(Protocol):
|
|
|
124
122
|
|
|
125
123
|
_log_all_response_urls: bool
|
|
126
124
|
|
|
127
|
-
_storage_mode: CompressedDictStorageMode
|
|
125
|
+
_storage_mode: CompressedDictStorageMode = CompressedDictStorageMode.raw()
|
|
128
126
|
""" storage mode to store the responses """
|
|
129
127
|
|
|
130
128
|
_create_operation_outcome_for_error: bool | None
|