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