embed-client 4.0.22__tar.gz → 4.0.23__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.
- {embed_client-4.0.22/embed_client.egg-info → embed_client-4.0.23}/PKG-INFO +1 -1
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/__init__.py +1 -1
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/embedding_client.py +102 -4
- {embed_client-4.0.22 → embed_client-4.0.23/embed_client.egg-info}/PKG-INFO +1 -1
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client.egg-info/SOURCES.txt +1 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/pyproject.toml +1 -1
- embed_client-4.0.23/tests/test_wait_for_job_ws_fallback.py +113 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/CONFIGURATION.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/LICENSE +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/MANIFEST.in +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/README.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/basic_auth.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/http.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/http_8001_test.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/http_correct.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/http_simple.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/http_test.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/http_token.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/http_token_correct.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/http_token_roles.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/http_token_roles_token_roles.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/http_token_token_roles.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/https.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/https_8001_test.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/https_api_test.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/https_simple.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/https_test.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/https_token.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/https_token_8001.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/https_token_roles.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/https_token_roles_token_roles.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/https_token_token_roles.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/jwt.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/mtls.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/mtls_8001.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/mtls_8001_test.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/mtls_correct.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/mtls_roles.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/mtls_roles_token_roles.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/mtls_test.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/mtls_token_roles.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/mtls_via_adapter.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/roles.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/test_http_simple.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/test_http_token.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/test_http_token_roles.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/test_https_simple.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/test_https_token.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/test_https_token_roles.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/test_mtls_roles.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/test_mtls_simple.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/test_server_http.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/test_server_https.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/configs/test_server_mtls.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/BUGREPORT_queue_manager_daemonic.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/IDENTIFIER_ANALYSIS_REPORT.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/PROPOSAL_SERVER_REQUEST_COALESCING.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/PROPOSAL_TWO_CHANNEL_OR_PUSH.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/SERVER_MODES_AND_CLIENT.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/api_format.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/client_integration_guide.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/coverage_report.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/error_500_analysis.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/error_handling_complete.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/error_handling_issue.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/_template/README.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/_template/example_global_step/example_tactical_step/example_atomic_step.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/_template/example_global_step/example_tactical_step/spec.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/_template/example_global_step/spec.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/_template/spec.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/baseline_audit_and_contract_capture/migration_baseline_deliverable/ATOMIC_STEPS_INDEX.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/baseline_audit_and_contract_capture/migration_baseline_deliverable/freeze-migration-baseline-evidence-links.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/baseline_audit_and_contract_capture/migration_baseline_deliverable/spec.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/baseline_audit_and_contract_capture/spec.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/spec.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/steps/ATOMIC_STEPS_INDEX.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/steps/DN-AT-01.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/steps/DN-AT-02.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/steps/DN-AT-03.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/steps/DN-AT-04.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/steps/DN-AT-05.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/steps/DN-AT-06.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/steps/DN-AT-07.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/steps/DN-AT-08.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/steps/DN-AT-09.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/steps/DN-AT-10.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/steps/DN-AT-11.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/steps/DN-AT-12.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/steps/DN-AT-13.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/steps/DN-AT-14.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/steps/DN-AT-15.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/steps/DN-AT-16.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/steps/DN-AT-17.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/steps/DN-AT-18.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/steps/DN-AT-19.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/steps/DN-AT-20.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/steps/DN-AT-21.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/documentation_normalization/steps/DN-AT-22.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/plan.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/production_migration_and_legacy_removal/canonical_client_migration/ATOMIC_STEPS_INDEX.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/production_migration_and_legacy_removal/canonical_client_migration/PARALLEL_WAVES.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/production_migration_and_legacy_removal/canonical_client_migration/atomic-01-port-constants-and-exceptions.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/production_migration_and_legacy_removal/canonical_client_migration/atomic-02-port-embedding-client-helpers-and-status-store.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/production_migration_and_legacy_removal/canonical_client_migration/atomic-03-port-embedding-client-core.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/production_migration_and_legacy_removal/canonical_client_migration/atomic-04-package-init-version-and-canonical-exports.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/production_migration_and_legacy_removal/canonical_client_migration/atomic-05-remove-legacy-async-stack-and-adapter-transport.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/production_migration_and_legacy_removal/canonical_client_migration/atomic-06-remove-testing-client-and-duplicate-helpers.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/production_migration_and_legacy_removal/canonical_client_migration/atomic-07-rewire-cli-factory-and-minimal-entry-points.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/production_migration_and_legacy_removal/canonical_client_migration/spec.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/production_migration_and_legacy_removal/spec.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/release_validation_and_pypi_publication/README.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/release_validation_and_pypi_publication/rv_automated_security_matrix/spec.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/release_validation_and_pypi_publication/rv_canonical_mtls_real_server_gate/spec.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/release_validation_and_pypi_publication/rv_localhost_vectorization/spec.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/release_validation_and_pypi_publication/rv_packaging_and_prereqs/spec.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/release_validation_and_pypi_publication/rv_pypi_publication/spec.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/release_validation_and_pypi_publication/rv_surviving_examples_executable/spec.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/release_validation_and_pypi_publication/spec.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/release_validation_and_pypi_publication/steps/ATOMIC_STEPS_INDEX.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/release_validation_and_pypi_publication/steps/placeholder-corrective-rv01-security-matrix.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/release_validation_and_pypi_publication/steps/placeholder-corrective-rv02-vectorization.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/release_validation_and_pypi_publication/steps/placeholder-corrective-rv03-broken-example.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/release_validation_and_pypi_publication/steps/placeholder-corrective-rv04-canonical-gate.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/release_validation_and_pypi_publication/steps/placeholder-corrective-rv05-packaging.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/release_validation_and_pypi_publication/steps/placeholder-corrective-rv06-duplicate-version-or-auth.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/release_validation_and_pypi_publication/steps/rv01-execute-automated-security-matrix.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/release_validation_and_pypi_publication/steps/rv02-execute-localhost-vectorization-mtls-8001.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/release_validation_and_pypi_publication/steps/rv03-execute-surviving-examples-sweep.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/release_validation_and_pypi_publication/steps/rv04-execute-canonical-mtls-real-server-gate.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/release_validation_and_pypi_publication/steps/rv04-supplementary-pytest-canonical-example-contract.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/release_validation_and_pypi_publication/steps/rv05-build-artifacts-twine-version-gate.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/release_validation_and_pypi_publication/steps/rv06-pypi-upload.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/spec.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/tests_scripts_and_dependency_cleanup/spec.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/tests_scripts_and_dependency_cleanup/steps/ATOMIC_STEPS_INDEX.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/tests_scripts_and_dependency_cleanup/steps/align-package-version-with-pyproject-metadata.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/tests_scripts_and_dependency_cleanup/steps/canonical-localhost-8001-mtls-example-and-execution-tests.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/tests_scripts_and_dependency_cleanup/steps/consolidate-pytest-configuration-single-source.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/tests_scripts_and_dependency_cleanup/steps/consolidate-redundant-coverage-test-modules.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/tests_scripts_and_dependency_cleanup/steps/delete-or-replace-skipped-auth-and-ssl-test-modules.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/tests_scripts_and_dependency_cleanup/steps/extract-async-client-adapter-tests-remove-legacy-aiohttp.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/tests_scripts_and_dependency_cleanup/steps/fix-or-remove-embed-client-auth-examples.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/tests_scripts_and_dependency_cleanup/steps/normalize-pyproject-runtime-deps-and-optional-extras.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/tests_scripts_and_dependency_cleanup/steps/replace-hardcoded-venv-site-packages-in-scripts-and-tests.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/tests_scripts_and_dependency_cleanup/tasks/tsc_linter_exclusions_and_migration_inventory.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/tech_spec/branches/documentation_normalization/README.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/tech_spec/branches/documentation_normalization/tasks/doc_alignment_verification_and_closure.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/tech_spec/branches/documentation_normalization/tasks/doc_guides_examples_canonical_mtls.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/tech_spec/branches/documentation_normalization/tasks/doc_legacy_tree_prune_and_governance.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/docs/tech_spec/branches/documentation_normalization/tasks/doc_root_metadata_and_pypi_surface.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/__main__.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/adapter_config_factory.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/adapter_config_normalizer.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/adapter_generator_bridge.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/auth.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/cli.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/cli_core.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/client_factory.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/client_factory_examples.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/client_factory_helpers.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/config.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/config_defaults.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/config_examples.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/config_generator.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/config_generator_cli.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/config_presets.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/config_validator.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/config_validator_cli.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/constants.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/demo_cli.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/demo_security_cli.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/embed_file_output_validate.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/embed_file_status_store.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/embedding_client_helpers.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/example_async_usage.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/example_async_usage_demo.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/example_async_usage_ru.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/example_async_usage_ru_demo.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/exceptions.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/identifier_types.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/json_embed_file_preflight.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/local_json_embed_file.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/md_embed_file_prep.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/response_normalizer.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/response_parsers.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/security_cli.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/security_cli_core.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/ssl_examples.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client/ssl_manager.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client.egg-info/dependency_links.txt +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client.egg-info/entry_points.txt +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client.egg-info/requires.txt +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/embed_client.egg-info/top_level.txt +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/examples/README.md +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/examples/__init__.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/examples/async_testing_client_example.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/examples/canonical_mtls_localhost_8001.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/examples/configs/http_simple.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/examples/configs/https_token.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/examples/configs/mtls_roles.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/examples/data/embed_file_json_array_sample.json +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/examples/embed_file_json_local.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/examples/security_examples.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/examples/security_examples_ru.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/setup.cfg +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_adapter_integration.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_adapter_phase1.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_adapter_phase2.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_all_security_modes.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_async_client_adapter.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_async_client_real.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_async_client_real_fixtures.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_async_client_stress.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_async_client_stress_new.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_async_client_stress_updated.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_auth_manager.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_canonical_mtls_example.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_cli_embed_file_json.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_cli_exit_codes_insecure.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_client_factory.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_client_factory_convenience.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_client_factory_integration.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_config.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_embed_file_aggregation_method.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_embed_file_output_validate.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_embed_immediate_mode.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_example_async_usage.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_json_embed_file_preflight.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_local_json_embed_file.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_md_embed_file_prep.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_security_matrix.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_ssl_manager.py +0 -0
- {embed_client-4.0.22 → embed_client-4.0.23}/tests/test_with_auth.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: embed-client
|
|
3
|
-
Version: 4.0.
|
|
3
|
+
Version: 4.0.23
|
|
4
4
|
Summary: Async client for the Embedding Service API. Canonical class: EmbeddingClient (JSON-RPC via mcp-proxy-adapter >=8.10).
|
|
5
5
|
Author-email: Vasiliy Zdanovskiy <vasilyvz@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -31,6 +31,31 @@ from embed_client.exceptions import EmbedAPIError, EmbedClientError, EmbedError
|
|
|
31
31
|
|
|
32
32
|
logger = logging.getLogger(__name__)
|
|
33
33
|
|
|
34
|
+
try: # mcp-proxy-adapter >= 8.10 raises this when /ws closes mid-wait
|
|
35
|
+
from mcp_proxy_adapter.client.jsonrpc_client.exceptions import (
|
|
36
|
+
ClientWebSocketClosedError as _AdapterWsClosedError,
|
|
37
|
+
)
|
|
38
|
+
except ImportError: # pragma: no cover - older adapter builds
|
|
39
|
+
_AdapterWsClosedError = None # type: ignore[assignment,misc]
|
|
40
|
+
|
|
41
|
+
# Terminal queue states reported by queue_get_job_status / embed_job_status.
|
|
42
|
+
_POLL_COMPLETED_STATES = ("completed", "success")
|
|
43
|
+
_POLL_FAILED_STATES = ("failed", "error")
|
|
44
|
+
_POLL_STOPPED_STATES = ("stopped", "cancelled", "canceled")
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _is_ws_closed_before_terminal(exc: BaseException) -> bool:
|
|
48
|
+
"""Whether *exc* means the /ws stream closed before a terminal job event.
|
|
49
|
+
|
|
50
|
+
The job itself is unaffected by a dropped stream: the server keeps
|
|
51
|
+
executing it and ``queue_get_job_status`` still reports its terminal
|
|
52
|
+
state. A heartbeat miss while the server is busy closes the stream
|
|
53
|
+
without any job having failed.
|
|
54
|
+
"""
|
|
55
|
+
if _AdapterWsClosedError is not None and isinstance(exc, _AdapterWsClosedError):
|
|
56
|
+
return True
|
|
57
|
+
return "websocket closed" in str(exc).lower()
|
|
58
|
+
|
|
34
59
|
|
|
35
60
|
def _client_has_async_method(client: Any, name: str) -> bool:
|
|
36
61
|
fn = getattr(client, name, None)
|
|
@@ -757,6 +782,7 @@ class EmbeddingClient:
|
|
|
757
782
|
"""
|
|
758
783
|
if _client_has_async_method(self.client, "wait_for_job"):
|
|
759
784
|
t_arg = float(timeout) if timeout > 0 else 0.0
|
|
785
|
+
started = asyncio.get_running_loop().time()
|
|
760
786
|
try:
|
|
761
787
|
raw = await self.client.wait_for_job(job_id, timeout=t_arg)
|
|
762
788
|
except asyncio.TimeoutError as e:
|
|
@@ -765,13 +791,78 @@ class EmbeddingClient:
|
|
|
765
791
|
else:
|
|
766
792
|
msg = f"Job {job_id} WebSocket wait timed out"
|
|
767
793
|
raise TimeoutError(msg) from e
|
|
768
|
-
except
|
|
769
|
-
|
|
794
|
+
except Exception as e: # noqa: BLE001 - classified below
|
|
795
|
+
if not _is_ws_closed_before_terminal(e):
|
|
796
|
+
if isinstance(e, RuntimeError):
|
|
797
|
+
raise EmbedClientError(f"WebSocket error: {e}") from e
|
|
798
|
+
raise
|
|
799
|
+
return await self._poll_terminal_after_ws_close(
|
|
800
|
+
job_id, t_arg, started, e, poll_interval=poll_interval
|
|
801
|
+
)
|
|
770
802
|
return _normalize_terminal_job_payload(raw)
|
|
771
803
|
return await wait_for_job_poll(
|
|
772
804
|
self.job_status, job_id, timeout=timeout, poll_interval=poll_interval
|
|
773
805
|
)
|
|
774
806
|
|
|
807
|
+
async def _poll_terminal_after_ws_close(
|
|
808
|
+
self,
|
|
809
|
+
job_id: str,
|
|
810
|
+
timeout: float,
|
|
811
|
+
started: float,
|
|
812
|
+
cause: BaseException,
|
|
813
|
+
poll_interval: float = 1.0,
|
|
814
|
+
) -> Dict[str, Any]:
|
|
815
|
+
"""Finish a wait whose /ws stream closed before the terminal event.
|
|
816
|
+
|
|
817
|
+
Polls :meth:`job_status` (``queue_get_job_status``) for the rest of the
|
|
818
|
+
caller's *timeout* and returns exactly what the WebSocket path would
|
|
819
|
+
have returned: the terminal status is wrapped as the equivalent
|
|
820
|
+
``job_completed`` / ``job_failed`` event and passed through the same
|
|
821
|
+
normalizer, so a failed command inside a completed envelope is still
|
|
822
|
+
reported as a failure. ``timeout`` 0 means no deadline, as on the WS path.
|
|
823
|
+
"""
|
|
824
|
+
loop = asyncio.get_running_loop()
|
|
825
|
+
deadline = None if timeout <= 0 else started + timeout
|
|
826
|
+
logger.warning(
|
|
827
|
+
"WebSocket closed before a terminal event for job %s (%s); "
|
|
828
|
+
"polling queue_get_job_status for its terminal state",
|
|
829
|
+
job_id,
|
|
830
|
+
cause,
|
|
831
|
+
)
|
|
832
|
+
interval = poll_interval if poll_interval and poll_interval > 0 else 1.0
|
|
833
|
+
while True:
|
|
834
|
+
status = await self.job_status(job_id)
|
|
835
|
+
if isinstance(status, dict):
|
|
836
|
+
if status.get("exists") is False:
|
|
837
|
+
raise EmbedClientError(f"Job {job_id} not found") from cause
|
|
838
|
+
state = str(status.get("status") or "").lower()
|
|
839
|
+
if state in _POLL_COMPLETED_STATES:
|
|
840
|
+
return _normalize_terminal_job_payload(
|
|
841
|
+
{
|
|
842
|
+
"event": "job_completed",
|
|
843
|
+
"job_id": job_id,
|
|
844
|
+
"result": status.get("result") or {},
|
|
845
|
+
}
|
|
846
|
+
)
|
|
847
|
+
if state in _POLL_FAILED_STATES:
|
|
848
|
+
return _normalize_terminal_job_payload(
|
|
849
|
+
{
|
|
850
|
+
"event": "job_failed",
|
|
851
|
+
"job_id": job_id,
|
|
852
|
+
"error": status.get("error")
|
|
853
|
+
or status.get("description")
|
|
854
|
+
or status.get("message")
|
|
855
|
+
or "Unknown error",
|
|
856
|
+
}
|
|
857
|
+
)
|
|
858
|
+
if state in _POLL_STOPPED_STATES:
|
|
859
|
+
raise EmbedClientError(f"Job {job_id} was stopped") from cause
|
|
860
|
+
if deadline is not None and loop.time() >= deadline:
|
|
861
|
+
raise TimeoutError(
|
|
862
|
+
f"Job {job_id} did not complete within {timeout} seconds"
|
|
863
|
+
) from cause
|
|
864
|
+
await asyncio.sleep(interval)
|
|
865
|
+
|
|
775
866
|
async def _embed_via_execute_async(
|
|
776
867
|
self, params: Dict[str, Any], timeout: int = 60
|
|
777
868
|
) -> Dict[str, Any]:
|
|
@@ -833,6 +924,7 @@ class EmbeddingClient:
|
|
|
833
924
|
"""
|
|
834
925
|
if _client_has_async_method(self.client, "wait_for_job"):
|
|
835
926
|
t_arg = float(timeout) if timeout > 0 else 0.0
|
|
927
|
+
started = asyncio.get_running_loop().time()
|
|
836
928
|
|
|
837
929
|
async def _on_event(msg: Dict[str, Any]) -> None:
|
|
838
930
|
if on_ws_event is not None:
|
|
@@ -850,8 +942,14 @@ class EmbeddingClient:
|
|
|
850
942
|
else:
|
|
851
943
|
msg = f"Job {job_id} WebSocket wait timed out"
|
|
852
944
|
raise TimeoutError(msg) from e
|
|
853
|
-
except
|
|
854
|
-
|
|
945
|
+
except Exception as e: # noqa: BLE001 - classified below
|
|
946
|
+
if not _is_ws_closed_before_terminal(e):
|
|
947
|
+
if isinstance(e, RuntimeError):
|
|
948
|
+
raise EmbedClientError(f"WebSocket error: {e}") from e
|
|
949
|
+
raise
|
|
950
|
+
return await self._poll_terminal_after_ws_close(
|
|
951
|
+
job_id, t_arg, started, e
|
|
952
|
+
)
|
|
855
953
|
return _normalize_terminal_job_payload(payload)
|
|
856
954
|
|
|
857
955
|
timeout_sec = float(timeout) if timeout > 0 else 60.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: embed-client
|
|
3
|
-
Version: 4.0.
|
|
3
|
+
Version: 4.0.23
|
|
4
4
|
Summary: Async client for the Embedding Service API. Canonical class: EmbeddingClient (JSON-RPC via mcp-proxy-adapter >=8.10).
|
|
5
5
|
Author-email: Vasiliy Zdanovskiy <vasilyvz@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "embed-client"
|
|
7
|
-
version = "4.0.
|
|
7
|
+
version = "4.0.23"
|
|
8
8
|
description = """Async client for the Embedding Service API. Canonical class: EmbeddingClient (JSON-RPC via mcp-proxy-adapter >=8.10).
|
|
9
9
|
|
|
10
10
|
Public API highlights:
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"""
|
|
2
|
+
wait_for_job: a /ws stream that closes before the terminal event falls back to
|
|
3
|
+
queue_get_job_status polling and returns the same normalized result.
|
|
4
|
+
|
|
5
|
+
Live evidence (embed 4.0.22, 2026-09-24): jobs completed on the server while the
|
|
6
|
+
client's WebSocket wait raised "WebSocket closed before a job terminal event"
|
|
7
|
+
because the busy server missed the 30 s heartbeat.
|
|
8
|
+
|
|
9
|
+
Author: Vasiliy Zdanovskiy
|
|
10
|
+
email: vasilyvz@gmail.com
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
import asyncio
|
|
14
|
+
from typing import Any, Dict, List
|
|
15
|
+
|
|
16
|
+
import pytest
|
|
17
|
+
from mcp_proxy_adapter.client.jsonrpc_client.exceptions import (
|
|
18
|
+
ClientWebSocketClosedError,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
from embed_client.embedding_client import EmbeddingClient
|
|
22
|
+
from embed_client.exceptions import EmbedClientError
|
|
23
|
+
|
|
24
|
+
_ROW = {"body": "x", "embedding": [0.1, 0.2], "tokens": ["x"], "bm25_tokens": ["x"], "error": None}
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _completed_status(success: bool = True) -> Dict[str, Any]:
|
|
28
|
+
inner: Dict[str, Any]
|
|
29
|
+
if success:
|
|
30
|
+
inner = {"success": True, "data": {"results": [_ROW], "model": "m", "dimension": 2}}
|
|
31
|
+
else:
|
|
32
|
+
inner = {"success": False, "error": {"message": "Worker unreachable", "code": -32603}}
|
|
33
|
+
return {
|
|
34
|
+
"job_id": "j1",
|
|
35
|
+
"status": "completed",
|
|
36
|
+
"result": {"job_id": "j1", "command": "embed_thin", "result": inner},
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class _FakeTransport:
|
|
41
|
+
"""Adapter client double: WS wait closes, status polls follow a script."""
|
|
42
|
+
|
|
43
|
+
def __init__(self, statuses: List[Dict[str, Any]], ws_error: Exception) -> None:
|
|
44
|
+
self._statuses = list(statuses)
|
|
45
|
+
self._ws_error = ws_error
|
|
46
|
+
self.status_calls = 0
|
|
47
|
+
|
|
48
|
+
async def wait_for_job(self, job_id: str, timeout: float = 0.0, on_event: Any = None) -> Dict[str, Any]:
|
|
49
|
+
raise self._ws_error
|
|
50
|
+
|
|
51
|
+
async def jsonrpc_call(self, method: str, params: Dict[str, Any]) -> Dict[str, Any]:
|
|
52
|
+
assert method == "queue_get_job_status"
|
|
53
|
+
self.status_calls += 1
|
|
54
|
+
status = self._statuses.pop(0) if len(self._statuses) > 1 else self._statuses[0]
|
|
55
|
+
return {"jsonrpc": "2.0", "id": 1, "result": {"success": True, "data": status}}
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _client(transport: _FakeTransport) -> EmbeddingClient:
|
|
59
|
+
client = EmbeddingClient.__new__(EmbeddingClient)
|
|
60
|
+
client.client = transport # type: ignore[attr-defined]
|
|
61
|
+
return client
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def _ws_closed() -> ClientWebSocketClosedError:
|
|
65
|
+
return ClientWebSocketClosedError(
|
|
66
|
+
"WebSocket closed before a job terminal event",
|
|
67
|
+
operation="websocket.wait_for_job",
|
|
68
|
+
url="wss://example/ws",
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def test_ws_close_falls_back_to_polling_and_returns_normalized_result() -> None:
|
|
73
|
+
transport = _FakeTransport(
|
|
74
|
+
[{"job_id": "j1", "status": "running"}, _completed_status()], _ws_closed()
|
|
75
|
+
)
|
|
76
|
+
result = asyncio.run(_client(transport).wait_for_job("j1", timeout=10, poll_interval=0.01))
|
|
77
|
+
assert result["results"] == [_ROW]
|
|
78
|
+
assert result["model"] == "m"
|
|
79
|
+
assert result["dimension"] == 2
|
|
80
|
+
assert transport.status_calls == 2
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def test_ws_close_then_failed_command_inside_completed_envelope_raises() -> None:
|
|
84
|
+
transport = _FakeTransport([_completed_status(success=False)], _ws_closed())
|
|
85
|
+
with pytest.raises(EmbedClientError, match="Worker unreachable"):
|
|
86
|
+
asyncio.run(_client(transport).wait_for_job("j1", timeout=10, poll_interval=0.01))
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def test_ws_close_then_failed_job_raises_job_failed() -> None:
|
|
90
|
+
transport = _FakeTransport(
|
|
91
|
+
[{"job_id": "j1", "status": "failed", "error": "boom"}], _ws_closed()
|
|
92
|
+
)
|
|
93
|
+
with pytest.raises(EmbedClientError, match="Job failed: boom"):
|
|
94
|
+
asyncio.run(_client(transport).wait_for_job("j1", timeout=10, poll_interval=0.01))
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def test_ws_close_poll_respects_the_callers_timeout() -> None:
|
|
98
|
+
transport = _FakeTransport([{"job_id": "j1", "status": "running"}], _ws_closed())
|
|
99
|
+
with pytest.raises(TimeoutError, match="did not complete within"):
|
|
100
|
+
asyncio.run(_client(transport).wait_for_job("j1", timeout=0.2, poll_interval=0.05))
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def test_other_ws_errors_are_not_masked_by_the_fallback() -> None:
|
|
104
|
+
transport = _FakeTransport([_completed_status()], RuntimeError("TLS handshake failed"))
|
|
105
|
+
with pytest.raises(EmbedClientError, match="WebSocket error: TLS handshake failed"):
|
|
106
|
+
asyncio.run(_client(transport).wait_for_job("j1", timeout=10, poll_interval=0.01))
|
|
107
|
+
assert transport.status_calls == 0
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def test_adapter_ws_path_used_by_embed_file_also_falls_back() -> None:
|
|
111
|
+
transport = _FakeTransport([_completed_status()], _ws_closed())
|
|
112
|
+
result = asyncio.run(_client(transport)._wait_for_job_via_adapter_ws("j1", timeout=10))
|
|
113
|
+
assert result["results"] == [_ROW]
|
|
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
|
|
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
|
{embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/_template/example_global_step/spec.md
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
|
{embed_client-4.0.22 → embed_client-4.0.23}/docs/specs/server_client_convergence_and_release/plan.md
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
|