payi 0.1.0a63__tar.gz → 0.1.0a64__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.
Potentially problematic release.
This version of payi might be problematic. Click here for more details.
- payi-0.1.0a64/.release-please-manifest.json +3 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/CHANGELOG.md +8 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/PKG-INFO +1 -1
- {payi-0.1.0a63 → payi-0.1.0a64}/pyproject.toml +1 -1
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/_utils/_transform.py +22 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/_version.py +1 -1
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/lib/helpers.py +3 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/lib/instrument.py +138 -163
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/test_transform.py +12 -0
- payi-0.1.0a63/.release-please-manifest.json +0 -3
- {payi-0.1.0a63 → payi-0.1.0a64}/.gitignore +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/CONTRIBUTING.md +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/LICENSE +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/README.md +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/SECURITY.md +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/api.md +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/bin/check-release-environment +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/bin/publish-pypi +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/examples/.keep +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/mypy.ini +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/noxfile.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/release-please-config.json +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/requirements-dev.lock +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/requirements.lock +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/_base_client.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/_client.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/_compat.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/_constants.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/_exceptions.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/_files.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/_models.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/_qs.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/_resource.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/_streaming.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/_types.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/_utils/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/_utils/_logs.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/_utils/_proxy.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/_utils/_reflection.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/_utils/_streams.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/_utils/_sync.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/_utils/_typing.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/_utils/_utils.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/lib/.keep +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/lib/AnthropicInstrumentor.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/lib/BedrockInstrumentor.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/lib/OpenAIInstrumentor.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/lib/Stopwatch.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/pagination.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/py.typed +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/categories/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/categories/categories.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/categories/resources.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/experiences/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/experiences/experiences.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/experiences/properties.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/experiences/types/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/experiences/types/limit_config.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/experiences/types/types.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/ingest.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/limits/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/limits/limits.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/limits/tags.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/requests/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/requests/properties.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/requests/requests.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/requests/result.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/use_cases/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/use_cases/definitions/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/use_cases/definitions/definitions.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/use_cases/definitions/kpis.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/use_cases/definitions/limit_config.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/use_cases/definitions/version.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/use_cases/kpis.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/use_cases/properties.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/resources/use_cases/use_cases.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/bulk_ingest_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/categories/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/categories/resource_create_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/categories/resource_list_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/category_delete_resource_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/category_delete_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/category_list_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/category_list_resources_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/category_resource_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/category_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/cost_data.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/cost_details.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/default_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/experience_instance_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/experiences/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/experiences/experience_type.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/experiences/property_create_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/experiences/type_create_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/experiences/type_list_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/experiences/type_update_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/experiences/types/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/experiences/types/limit_config_create_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/ingest_bulk_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/ingest_event_param.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/ingest_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/ingest_units_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/limit_create_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/limit_history_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/limit_list_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/limit_list_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/limit_reset_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/limit_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/limit_update_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/limits/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/limits/limit_tags.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/limits/tag_create_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/limits/tag_create_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/limits/tag_delete_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/limits/tag_list_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/limits/tag_remove_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/limits/tag_remove_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/limits/tag_update_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/limits/tag_update_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/pay_i_common_models_api_router_header_info_param.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/requests/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/requests/property_create_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/requests/request_result.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/requests_data.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/shared/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/shared/evaluation_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/shared/pay_i_common_models_budget_management_cost_details_base.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/shared/pay_i_common_models_budget_management_create_limit_base.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/shared/properties_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/shared_params/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/shared_params/pay_i_common_models_budget_management_create_limit_base.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/total_cost_data.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/use_case_instance_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/use_cases/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/use_cases/definition_create_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/use_cases/definition_list_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/use_cases/definition_update_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/use_cases/definitions/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/use_cases/definitions/kpi_create_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/use_cases/definitions/kpi_create_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/use_cases/definitions/kpi_delete_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/use_cases/definitions/kpi_list_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/use_cases/definitions/kpi_list_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/use_cases/definitions/kpi_retrieve_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/use_cases/definitions/kpi_update_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/use_cases/definitions/kpi_update_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/use_cases/definitions/limit_config_create_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/use_cases/kpi_create_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/use_cases/kpi_list_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/use_cases/kpi_list_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/use_cases/kpi_update_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/use_cases/property_create_params.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/src/payi/types/use_cases/use_case_definition.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/categories/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/categories/test_resources.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/experiences/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/experiences/test_properties.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/experiences/test_types.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/experiences/types/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/experiences/types/test_limit_config.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/limits/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/limits/test_tags.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/requests/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/requests/test_properties.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/requests/test_result.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/test_categories.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/test_experiences.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/test_ingest.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/test_limits.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/test_use_cases.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/use_cases/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/use_cases/definitions/__init__.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/use_cases/definitions/test_kpis.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/use_cases/definitions/test_limit_config.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/use_cases/definitions/test_version.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/use_cases/test_definitions.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/use_cases/test_kpis.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/api_resources/use_cases/test_properties.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/conftest.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/sample_file.txt +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/test_client.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/test_deepcopy.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/test_extract_files.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/test_files.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/test_models.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/test_qs.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/test_required_args.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/test_response.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/test_streaming.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/test_utils/test_proxy.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/test_utils/test_typing.py +0 -0
- {payi-0.1.0a63 → payi-0.1.0a64}/tests/utils.py +0 -0
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.0-alpha.64 (2025-04-09)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v0.1.0-alpha.63...v0.1.0-alpha.64](https://github.com/Pay-i/pay-i-python/compare/v0.1.0-alpha.63...v0.1.0-alpha.64)
|
|
6
|
+
|
|
7
|
+
### Chores
|
|
8
|
+
|
|
9
|
+
* **internal:** slight transform perf improvement ([#283](https://github.com/Pay-i/pay-i-python/issues/283)) ([4b3f9e6](https://github.com/Pay-i/pay-i-python/commit/4b3f9e60fbecf99f8ddffed5903f916f3d5445c5))
|
|
10
|
+
|
|
3
11
|
## 0.1.0-alpha.63 (2025-04-08)
|
|
4
12
|
|
|
5
13
|
Full Changelog: [v0.1.0-alpha.62...v0.1.0-alpha.63](https://github.com/Pay-i/pay-i-python/compare/v0.1.0-alpha.62...v0.1.0-alpha.63)
|
|
@@ -142,6 +142,10 @@ def _maybe_transform_key(key: str, type_: type) -> str:
|
|
|
142
142
|
return key
|
|
143
143
|
|
|
144
144
|
|
|
145
|
+
def _no_transform_needed(annotation: type) -> bool:
|
|
146
|
+
return annotation == float or annotation == int
|
|
147
|
+
|
|
148
|
+
|
|
145
149
|
def _transform_recursive(
|
|
146
150
|
data: object,
|
|
147
151
|
*,
|
|
@@ -184,6 +188,15 @@ def _transform_recursive(
|
|
|
184
188
|
return cast(object, data)
|
|
185
189
|
|
|
186
190
|
inner_type = extract_type_arg(stripped_type, 0)
|
|
191
|
+
if _no_transform_needed(inner_type):
|
|
192
|
+
# for some types there is no need to transform anything, so we can get a small
|
|
193
|
+
# perf boost from skipping that work.
|
|
194
|
+
#
|
|
195
|
+
# but we still need to convert to a list to ensure the data is json-serializable
|
|
196
|
+
if is_list(data):
|
|
197
|
+
return data
|
|
198
|
+
return list(data)
|
|
199
|
+
|
|
187
200
|
return [_transform_recursive(d, annotation=annotation, inner_type=inner_type) for d in data]
|
|
188
201
|
|
|
189
202
|
if is_union_type(stripped_type):
|
|
@@ -332,6 +345,15 @@ async def _async_transform_recursive(
|
|
|
332
345
|
return cast(object, data)
|
|
333
346
|
|
|
334
347
|
inner_type = extract_type_arg(stripped_type, 0)
|
|
348
|
+
if _no_transform_needed(inner_type):
|
|
349
|
+
# for some types there is no need to transform anything, so we can get a small
|
|
350
|
+
# perf boost from skipping that work.
|
|
351
|
+
#
|
|
352
|
+
# but we still need to convert to a list to ensure the data is json-serializable
|
|
353
|
+
if is_list(data):
|
|
354
|
+
return data
|
|
355
|
+
return list(data)
|
|
356
|
+
|
|
335
357
|
return [await _async_transform_recursive(d, annotation=annotation, inner_type=inner_type) for d in data]
|
|
336
358
|
|
|
337
359
|
if is_union_type(stripped_type):
|
|
@@ -49,6 +49,7 @@ def create_headers(
|
|
|
49
49
|
use_case_id: Union[str, None] = None,
|
|
50
50
|
use_case_name: Union[str, None] = None,
|
|
51
51
|
use_case_version: Union[int, None] = None,
|
|
52
|
+
route_as_resource: Union[str, None] = None,
|
|
52
53
|
) -> Dict[str, str]:
|
|
53
54
|
headers: Dict[str, str] = {}
|
|
54
55
|
|
|
@@ -68,6 +69,8 @@ def create_headers(
|
|
|
68
69
|
headers.update({ PayiHeaderNames.use_case_name: use_case_name})
|
|
69
70
|
if use_case_version:
|
|
70
71
|
headers.update({ PayiHeaderNames.use_case_version: str(use_case_version)})
|
|
72
|
+
if route_as_resource:
|
|
73
|
+
headers.update({ PayiHeaderNames.route_as_resource: route_as_resource})
|
|
71
74
|
return headers
|
|
72
75
|
|
|
73
76
|
def _resolve_payi_base_url(payi_base_url: Union[str, None]) -> str:
|
|
@@ -23,8 +23,8 @@ from .Stopwatch import Stopwatch
|
|
|
23
23
|
|
|
24
24
|
class PayiInstrumentConfig(TypedDict, total=False):
|
|
25
25
|
proxy: bool
|
|
26
|
+
global_instrumentation_enabled: bool
|
|
26
27
|
limit_ids: Optional["list[str]"]
|
|
27
|
-
request_tags: Optional["list[str]"]
|
|
28
28
|
experience_name: Optional[str]
|
|
29
29
|
experience_id: Optional[str]
|
|
30
30
|
use_case_name: Optional[str]
|
|
@@ -40,18 +40,8 @@ class _Context(TypedDict, total=False):
|
|
|
40
40
|
use_case_id: Optional[str]
|
|
41
41
|
use_case_version: Optional[int]
|
|
42
42
|
limit_ids: Optional['list[str]']
|
|
43
|
-
request_tags: Optional['list[str]']
|
|
44
43
|
user_id: Optional[str]
|
|
45
44
|
|
|
46
|
-
class _ParentState(TypedDict, total=False):
|
|
47
|
-
experience_name: Optional[str]
|
|
48
|
-
experience_id: Optional[str]
|
|
49
|
-
use_case_name: Optional[str]
|
|
50
|
-
use_case_id: Optional[str]
|
|
51
|
-
use_case_version: Optional[int]
|
|
52
|
-
limit_ids: Optional['list[str]']
|
|
53
|
-
request_tags: Optional['list[str]']
|
|
54
|
-
|
|
55
45
|
class _IsStreaming(Enum):
|
|
56
46
|
false = 0
|
|
57
47
|
true = 1
|
|
@@ -86,11 +76,23 @@ class _PayiInstrumentor:
|
|
|
86
76
|
else:
|
|
87
77
|
self._instrument_specific(instruments)
|
|
88
78
|
|
|
89
|
-
|
|
79
|
+
global_instrumentation_enabled = global_config.pop("global_instrumentation_enabled", True) if global_config else True
|
|
80
|
+
|
|
81
|
+
if global_instrumentation_enabled:
|
|
82
|
+
if global_config is None:
|
|
83
|
+
global_config = {}
|
|
84
|
+
if "proxy" not in global_config:
|
|
85
|
+
global_config["proxy"] = False
|
|
86
|
+
|
|
87
|
+
# Use default clients if not provided for global ingest instrumentation
|
|
88
|
+
if not self._payi and not self._apayi and global_config.get("proxy") == False:
|
|
89
|
+
self._payi = Payi()
|
|
90
|
+
self._apayi = AsyncPayi()
|
|
91
|
+
|
|
90
92
|
context: _Context = {}
|
|
91
93
|
self._context_stack.append(context)
|
|
92
94
|
# init_context will update the currrent context stack location
|
|
93
|
-
self._init_context(context=context,
|
|
95
|
+
self._init_context(context=context, parentContext={}, **global_config) # type: ignore
|
|
94
96
|
|
|
95
97
|
def _instrument_all(self) -> None:
|
|
96
98
|
self._instrument_openai()
|
|
@@ -252,31 +254,24 @@ class _PayiInstrumentor:
|
|
|
252
254
|
|
|
253
255
|
def _setup_call_func(
|
|
254
256
|
self
|
|
255
|
-
) -> 'tuple[_Context,
|
|
257
|
+
) -> 'tuple[_Context, _Context]':
|
|
256
258
|
context: _Context = {}
|
|
257
|
-
|
|
259
|
+
parentContext: _Context = {}
|
|
258
260
|
|
|
259
261
|
if len(self._context_stack) > 0:
|
|
260
262
|
# copy current context into the upcoming context
|
|
261
263
|
context = self._context_stack[-1].copy()
|
|
262
264
|
context.pop("proxy")
|
|
263
|
-
|
|
264
|
-
parentState["experience_id"] = context.get("experience_id", None)
|
|
265
|
-
parentState["use_case_name"] = context.get("use_case_name", None)
|
|
266
|
-
parentState["use_case_id"] = context.get("use_case_id", None)
|
|
267
|
-
parentState["use_case_version"] = context.get("use_case_version", None)
|
|
268
|
-
parentState["limit_ids"] = context.get("limit_ids", None)
|
|
269
|
-
parentState["request_tags"] = context.get("request_tags", None)
|
|
265
|
+
parentContext = {**context}
|
|
270
266
|
|
|
271
|
-
return (context,
|
|
267
|
+
return (context, parentContext)
|
|
272
268
|
|
|
273
269
|
def _init_context(
|
|
274
270
|
self,
|
|
275
271
|
context: _Context,
|
|
276
|
-
|
|
272
|
+
parentContext: _Context,
|
|
277
273
|
proxy: bool,
|
|
278
274
|
limit_ids: Optional["list[str]"] = None,
|
|
279
|
-
request_tags: Optional["list[str]"] = None,
|
|
280
275
|
experience_name: Optional[str] = None,
|
|
281
276
|
experience_id: Optional[str] = None,
|
|
282
277
|
use_case_name: Optional[str]= None,
|
|
@@ -286,56 +281,72 @@ class _PayiInstrumentor:
|
|
|
286
281
|
) -> None:
|
|
287
282
|
context["proxy"] = proxy
|
|
288
283
|
|
|
289
|
-
|
|
284
|
+
parent_experience_name = parentContext.get("experience_name", None)
|
|
285
|
+
parent_experience_id = parentContext.get("experience_id", None)
|
|
290
286
|
|
|
291
|
-
|
|
292
|
-
if not experience_name:
|
|
287
|
+
if experience_name is None:
|
|
293
288
|
# If no experience_name specified, use previous values
|
|
294
|
-
context["experience_name"] =
|
|
295
|
-
context["experience_id"] =
|
|
289
|
+
context["experience_name"] = parent_experience_name
|
|
290
|
+
context["experience_id"] = parent_experience_id
|
|
291
|
+
elif len(experience_name) == 0:
|
|
292
|
+
# Empty string explicitly blocks inheriting from the parent state
|
|
293
|
+
context["experience_name"] = None
|
|
294
|
+
context["experience_id"] = None
|
|
296
295
|
else:
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
# If experience_name is specified
|
|
301
|
-
if experience_name == previous_experience_name:
|
|
296
|
+
# Check if experience_name is the same as the previous one
|
|
297
|
+
if experience_name == parent_experience_name:
|
|
302
298
|
# Same experience name, use previous ID unless new one specified
|
|
303
299
|
context["experience_name"] = experience_name
|
|
304
|
-
context["experience_id"] = experience_id if experience_id else
|
|
300
|
+
context["experience_id"] = experience_id if experience_id else parent_experience_id
|
|
305
301
|
else:
|
|
306
302
|
# Different experience name, use specified ID or generate one
|
|
307
303
|
context["experience_name"] = experience_name
|
|
308
304
|
context["experience_id"] = experience_id if experience_id else str(uuid.uuid4())
|
|
309
305
|
|
|
310
|
-
|
|
311
|
-
|
|
306
|
+
parent_use_case_name = parentContext.get("use_case_name", None)
|
|
307
|
+
parent_use_case_id = parentContext.get("use_case_id", None)
|
|
308
|
+
parent_use_case_version = parentContext.get("use_case_version", None)
|
|
309
|
+
|
|
310
|
+
if use_case_name is None:
|
|
312
311
|
# If no use_case_name specified, use previous values
|
|
313
|
-
context["use_case_name"] =
|
|
314
|
-
context["use_case_id"] =
|
|
315
|
-
context["use_case_version"] =
|
|
312
|
+
context["use_case_name"] = parent_use_case_name
|
|
313
|
+
context["use_case_id"] = parent_use_case_id
|
|
314
|
+
context["use_case_version"] = parent_use_case_version
|
|
315
|
+
elif len(use_case_name) == 0:
|
|
316
|
+
# Empty string explicitly blocks inheriting from the parent state
|
|
317
|
+
context["use_case_name"] = None
|
|
318
|
+
context["use_case_id"] = None
|
|
319
|
+
context["use_case_version"] = None
|
|
316
320
|
else:
|
|
317
|
-
|
|
318
|
-
previous_use_case_id = parentState.get("use_case_id", None)
|
|
319
|
-
previous_use_case_version = parentState.get("use_case_version", None)
|
|
320
|
-
|
|
321
|
-
# If use_case_name is specified
|
|
322
|
-
if use_case_name == previous_use_case_name:
|
|
321
|
+
if use_case_name == parent_use_case_name:
|
|
323
322
|
# Same use case name, use previous ID unless new one specified
|
|
324
323
|
context["use_case_name"] = use_case_name
|
|
325
|
-
context["use_case_id"] = use_case_id if use_case_id else
|
|
326
|
-
context["use_case_version"] = use_case_version if use_case_version else
|
|
324
|
+
context["use_case_id"] = use_case_id if use_case_id else parent_use_case_id
|
|
325
|
+
context["use_case_version"] = use_case_version if use_case_version else parent_use_case_version
|
|
327
326
|
else:
|
|
328
|
-
# Different
|
|
327
|
+
# Different use case name, use specified ID or generate one
|
|
329
328
|
context["use_case_name"] = use_case_name
|
|
330
329
|
context["use_case_id"] = use_case_id if use_case_id else str(uuid.uuid4())
|
|
331
|
-
context["use_case_version"] = use_case_version
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
if limit_ids:
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
330
|
+
context["use_case_version"] = use_case_version if use_case_version else None
|
|
331
|
+
|
|
332
|
+
parent_limit_ids = parentContext.get("limit_ids", None)
|
|
333
|
+
if limit_ids is None:
|
|
334
|
+
# use the parent limit_ids if it exists
|
|
335
|
+
context["limit_ids"] = parent_limit_ids
|
|
336
|
+
elif len(limit_ids) == 0:
|
|
337
|
+
# caller passing an empty array explicitly blocks inheriting from the parent state
|
|
338
|
+
context["limit_ids"] = None
|
|
339
|
+
else:
|
|
340
|
+
# union of new and parent lists if the parent context contains limit ids
|
|
341
|
+
context["limit_ids"] = list(set(limit_ids) | set(parent_limit_ids)) if parent_limit_ids else limit_ids
|
|
342
|
+
|
|
343
|
+
if user_id is None:
|
|
344
|
+
# use the parent user_id if it exists
|
|
345
|
+
context["user_id"] = parentContext.get("user_id", None)
|
|
346
|
+
elif len(user_id) == 0:
|
|
347
|
+
# caller passing an empty string explicitly blocks inheriting from the parent state
|
|
348
|
+
context["user_id"] = None
|
|
349
|
+
else:
|
|
339
350
|
context["user_id"] = user_id
|
|
340
351
|
|
|
341
352
|
self.set_context(context)
|
|
@@ -345,7 +356,6 @@ class _PayiInstrumentor:
|
|
|
345
356
|
func: Any,
|
|
346
357
|
proxy: bool,
|
|
347
358
|
limit_ids: Optional["list[str]"],
|
|
348
|
-
request_tags: Optional["list[str]"],
|
|
349
359
|
experience_name: Optional[str],
|
|
350
360
|
experience_id: Optional[str],
|
|
351
361
|
use_case_name: Optional[str],
|
|
@@ -355,15 +365,14 @@ class _PayiInstrumentor:
|
|
|
355
365
|
*args: Any,
|
|
356
366
|
**kwargs: Any,
|
|
357
367
|
) -> Any:
|
|
358
|
-
context,
|
|
368
|
+
context, parentContext = self._setup_call_func()
|
|
359
369
|
|
|
360
370
|
with self:
|
|
361
371
|
self._init_context(
|
|
362
372
|
context,
|
|
363
|
-
|
|
373
|
+
parentContext,
|
|
364
374
|
proxy,
|
|
365
375
|
limit_ids,
|
|
366
|
-
request_tags,
|
|
367
376
|
experience_name,
|
|
368
377
|
experience_id,
|
|
369
378
|
use_case_name,
|
|
@@ -377,7 +386,6 @@ class _PayiInstrumentor:
|
|
|
377
386
|
func: Any,
|
|
378
387
|
proxy: bool,
|
|
379
388
|
limit_ids: Optional["list[str]"],
|
|
380
|
-
request_tags: Optional["list[str]"],
|
|
381
389
|
experience_name: Optional[str],
|
|
382
390
|
experience_id: Optional[str],
|
|
383
391
|
use_case_name: Optional[str],
|
|
@@ -387,15 +395,14 @@ class _PayiInstrumentor:
|
|
|
387
395
|
*args: Any,
|
|
388
396
|
**kwargs: Any,
|
|
389
397
|
) -> Any:
|
|
390
|
-
context,
|
|
398
|
+
context, parentContext = self._setup_call_func()
|
|
391
399
|
|
|
392
400
|
with self:
|
|
393
401
|
self._init_context(
|
|
394
402
|
context,
|
|
395
|
-
|
|
403
|
+
parentContext,
|
|
396
404
|
proxy,
|
|
397
405
|
limit_ids,
|
|
398
|
-
request_tags,
|
|
399
406
|
experience_name,
|
|
400
407
|
experience_id,
|
|
401
408
|
use_case_name,
|
|
@@ -496,7 +503,7 @@ class _PayiInstrumentor:
|
|
|
496
503
|
|
|
497
504
|
# after _udpate_headers, all metadata to add to ingest is in extra_headers, keyed by the xproxy-xxx header name
|
|
498
505
|
extra_headers = kwargs.get("extra_headers", {})
|
|
499
|
-
self.
|
|
506
|
+
self._update_extra_headers(context, extra_headers)
|
|
500
507
|
|
|
501
508
|
if context.get("proxy", True):
|
|
502
509
|
if "extra_headers" not in kwargs:
|
|
@@ -620,7 +627,7 @@ class _PayiInstrumentor:
|
|
|
620
627
|
|
|
621
628
|
# after _udpate_headers, all metadata to add to ingest is in extra_headers, keyed by the xproxy-xxx header name
|
|
622
629
|
extra_headers = kwargs.get("extra_headers", {})
|
|
623
|
-
self.
|
|
630
|
+
self._update_extra_headers(context, extra_headers)
|
|
624
631
|
|
|
625
632
|
if context.get("proxy", True):
|
|
626
633
|
if "extra_headers" not in kwargs:
|
|
@@ -731,88 +738,74 @@ class _PayiInstrumentor:
|
|
|
731
738
|
return response
|
|
732
739
|
|
|
733
740
|
@staticmethod
|
|
734
|
-
def
|
|
741
|
+
def _update_extra_headers(
|
|
735
742
|
context: _Context,
|
|
736
743
|
extra_headers: "dict[str, str]",
|
|
737
744
|
) -> None:
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
745
|
+
context_limit_ids: Optional[list[str]] = context.get("limit_ids")
|
|
746
|
+
context_experience_name: Optional[str] = context.get("experience_name")
|
|
747
|
+
context_experience_id: Optional[str] = context.get("experience_id")
|
|
748
|
+
context_use_case_name: Optional[str] = context.get("use_case_name")
|
|
749
|
+
context_use_case_id: Optional[str] = context.get("use_case_id")
|
|
750
|
+
context_use_case_version: Optional[int] = context.get("use_case_version")
|
|
751
|
+
context_user_id: Optional[str] = context.get("user_id")
|
|
752
|
+
|
|
753
|
+
# headers_limit_ids = extra_headers.get(PayiHeaderNames.limit_ids, None)
|
|
754
|
+
|
|
755
|
+
# If the caller specifies limit_ids in extra_headers, it takes precedence over the decorator
|
|
756
|
+
if PayiHeaderNames.limit_ids in extra_headers:
|
|
757
|
+
headers_limit_ids = extra_headers.get(PayiHeaderNames.limit_ids)
|
|
758
|
+
|
|
759
|
+
if headers_limit_ids is None or len(headers_limit_ids) == 0:
|
|
760
|
+
# headers_limit_ids is empty, remove it from extra_headers
|
|
761
|
+
extra_headers.pop(PayiHeaderNames.limit_ids, None)
|
|
762
|
+
else:
|
|
763
|
+
# leave the value in extra_headers
|
|
764
|
+
...
|
|
765
|
+
elif context_limit_ids:
|
|
766
|
+
extra_headers[PayiHeaderNames.limit_ids] = ",".join(context_limit_ids)
|
|
767
|
+
|
|
768
|
+
if PayiHeaderNames.user_id in extra_headers:
|
|
769
|
+
headers_user_id = extra_headers.get(PayiHeaderNames.user_id, None)
|
|
770
|
+
if headers_user_id is None or len(headers_user_id) == 0:
|
|
771
|
+
# headers_user_id is empty, remove it from extra_headers
|
|
772
|
+
extra_headers.pop(PayiHeaderNames.user_id, None)
|
|
753
773
|
else:
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
if
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
extra_headers
|
|
774
|
+
# leave the value in extra_headers
|
|
775
|
+
...
|
|
776
|
+
elif context_user_id:
|
|
777
|
+
extra_headers[PayiHeaderNames.user_id] = context_user_id
|
|
778
|
+
|
|
779
|
+
if PayiHeaderNames.use_case_name in extra_headers:
|
|
780
|
+
headers_use_case_name = extra_headers.get(PayiHeaderNames.use_case_name, None)
|
|
781
|
+
if headers_use_case_name is None or len(headers_use_case_name) == 0:
|
|
782
|
+
# headers_use_case_name is empty, remove all use case related headers
|
|
783
|
+
extra_headers.pop(PayiHeaderNames.use_case_name, None)
|
|
784
|
+
extra_headers.pop(PayiHeaderNames.use_case_id, None)
|
|
785
|
+
extra_headers.pop(PayiHeaderNames.use_case_version, None)
|
|
764
786
|
else:
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
extra_headers
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
elif
|
|
784
|
-
|
|
785
|
-
if
|
|
786
|
-
extra_headers[PayiHeaderNames.
|
|
787
|
-
|
|
788
|
-
else:
|
|
789
|
-
# use the inner experience name and id as-is
|
|
790
|
-
...
|
|
791
|
-
|
|
792
|
-
# inner extra_headers use_casee_name and use_case_id take precedence over outer decorator use_case_name and use_case_id
|
|
793
|
-
# if either inner value is specified, ignore outer decorator values
|
|
794
|
-
if PayiHeaderNames.use_case_name not in extra_headers and PayiHeaderNames.use_case_id not in extra_headers:
|
|
795
|
-
|
|
796
|
-
# use decorator values
|
|
797
|
-
if use_case_name is not None:
|
|
798
|
-
extra_headers[PayiHeaderNames.use_case_name] = use_case_name
|
|
799
|
-
if use_case_id is not None:
|
|
800
|
-
extra_headers[PayiHeaderNames.use_case_id] = use_case_id
|
|
801
|
-
if use_case_version is not None:
|
|
802
|
-
extra_headers[PayiHeaderNames.use_case_version] = str(use_case_version)
|
|
803
|
-
|
|
804
|
-
elif PayiHeaderNames.use_case_id in extra_headers and PayiHeaderNames.use_case_name not in extra_headers:
|
|
805
|
-
# use the decorator experience name and the inner experience id
|
|
806
|
-
if use_case_name is not None:
|
|
807
|
-
extra_headers[PayiHeaderNames.use_case_name] = use_case_name
|
|
808
|
-
|
|
809
|
-
# use the decorator experience version and the inner experience id
|
|
810
|
-
if use_case_version is not None:
|
|
811
|
-
extra_headers[PayiHeaderNames.use_case_version] = str(use_case_version) # TODO use case
|
|
812
|
-
|
|
813
|
-
else:
|
|
814
|
-
# use the inner experience name and id as-is
|
|
815
|
-
...
|
|
787
|
+
# leave the value in extra_headers
|
|
788
|
+
...
|
|
789
|
+
elif context_use_case_name:
|
|
790
|
+
extra_headers[PayiHeaderNames.use_case_name] = context_use_case_name
|
|
791
|
+
if context_use_case_id is not None:
|
|
792
|
+
extra_headers[PayiHeaderNames.use_case_id] = context_use_case_id
|
|
793
|
+
if context_use_case_version is not None:
|
|
794
|
+
extra_headers[PayiHeaderNames.use_case_version] = str(context_use_case_version)
|
|
795
|
+
|
|
796
|
+
if PayiHeaderNames.experience_name in extra_headers:
|
|
797
|
+
headers_experience_name = extra_headers.get(PayiHeaderNames.experience_name, None)
|
|
798
|
+
if headers_experience_name is None or len(headers_experience_name) == 0:
|
|
799
|
+
# headers_experience_name is empty, remove all experience related headers
|
|
800
|
+
extra_headers.pop(PayiHeaderNames.experience_name, None)
|
|
801
|
+
extra_headers.pop(PayiHeaderNames.experience_id, None)
|
|
802
|
+
else:
|
|
803
|
+
# leave the value in extra_headers
|
|
804
|
+
...
|
|
805
|
+
elif context_experience_name is not None:
|
|
806
|
+
extra_headers[PayiHeaderNames.experience_name] = context_experience_name
|
|
807
|
+
if context_experience_id is not None:
|
|
808
|
+
extra_headers[PayiHeaderNames.experience_id] = context_experience_id
|
|
816
809
|
|
|
817
810
|
@staticmethod
|
|
818
811
|
def update_for_vision(input: int, units: 'dict[str, Units]') -> int:
|
|
@@ -1023,18 +1016,6 @@ def payi_instrument(
|
|
|
1023
1016
|
elif isinstance(p, AsyncPayi): # type: ignore
|
|
1024
1017
|
apayi_param = p
|
|
1025
1018
|
|
|
1026
|
-
global_context_ingest: Optional[bool] = None
|
|
1027
|
-
|
|
1028
|
-
if config is not None:
|
|
1029
|
-
if "proxy" not in config:
|
|
1030
|
-
config["proxy"] = False
|
|
1031
|
-
global_context_ingest = config.get("proxy") == False
|
|
1032
|
-
|
|
1033
|
-
# Use default clients if not provided for global ingest instrumentation
|
|
1034
|
-
if not payi_param and not apayi_param and global_context_ingest:
|
|
1035
|
-
payi_param = Payi()
|
|
1036
|
-
apayi_param = AsyncPayi()
|
|
1037
|
-
|
|
1038
1019
|
# allow for both payi and apayi to be None for the @proxy case
|
|
1039
1020
|
_instrumentor = _PayiInstrumentor(
|
|
1040
1021
|
payi=payi_param,
|
|
@@ -1047,7 +1028,6 @@ def payi_instrument(
|
|
|
1047
1028
|
|
|
1048
1029
|
def ingest(
|
|
1049
1030
|
limit_ids: Optional["list[str]"] = None,
|
|
1050
|
-
request_tags: Optional["list[str]"] = None,
|
|
1051
1031
|
experience_name: Optional[str] = None,
|
|
1052
1032
|
experience_id: Optional[str] = None,
|
|
1053
1033
|
use_case_name: Optional[str] = None,
|
|
@@ -1066,7 +1046,6 @@ def ingest(
|
|
|
1066
1046
|
func,
|
|
1067
1047
|
False,
|
|
1068
1048
|
limit_ids,
|
|
1069
|
-
request_tags,
|
|
1070
1049
|
experience_name,
|
|
1071
1050
|
experience_id,
|
|
1072
1051
|
use_case_name,
|
|
@@ -1085,7 +1064,6 @@ def ingest(
|
|
|
1085
1064
|
func,
|
|
1086
1065
|
False,
|
|
1087
1066
|
limit_ids,
|
|
1088
|
-
request_tags,
|
|
1089
1067
|
experience_name,
|
|
1090
1068
|
experience_id,
|
|
1091
1069
|
use_case_name,
|
|
@@ -1100,7 +1078,6 @@ def ingest(
|
|
|
1100
1078
|
|
|
1101
1079
|
def proxy(
|
|
1102
1080
|
limit_ids: Optional["list[str]"] = None,
|
|
1103
|
-
request_tags: Optional["list[str]"] = None,
|
|
1104
1081
|
experience_name: Optional[str] = None,
|
|
1105
1082
|
experience_id: Optional[str] = None,
|
|
1106
1083
|
use_case_id: Optional[str] = None,
|
|
@@ -1118,7 +1095,6 @@ def proxy(
|
|
|
1118
1095
|
func,
|
|
1119
1096
|
True,
|
|
1120
1097
|
limit_ids,
|
|
1121
|
-
request_tags,
|
|
1122
1098
|
experience_name,
|
|
1123
1099
|
experience_id,
|
|
1124
1100
|
use_case_name,
|
|
@@ -1138,7 +1114,6 @@ def proxy(
|
|
|
1138
1114
|
func,
|
|
1139
1115
|
True,
|
|
1140
1116
|
limit_ids,
|
|
1141
|
-
request_tags,
|
|
1142
1117
|
experience_name,
|
|
1143
1118
|
experience_id,
|
|
1144
1119
|
use_case_name,
|
|
@@ -432,3 +432,15 @@ async def test_base64_file_input(use_async: bool) -> None:
|
|
|
432
432
|
assert await transform({"foo": io.BytesIO(b"Hello, world!")}, TypedDictBase64Input, use_async) == {
|
|
433
433
|
"foo": "SGVsbG8sIHdvcmxkIQ=="
|
|
434
434
|
} # type: ignore[comparison-overlap]
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
@parametrize
|
|
438
|
+
@pytest.mark.asyncio
|
|
439
|
+
async def test_transform_skipping(use_async: bool) -> None:
|
|
440
|
+
# lists of ints are left as-is
|
|
441
|
+
data = [1, 2, 3]
|
|
442
|
+
assert await transform(data, List[int], use_async) is data
|
|
443
|
+
|
|
444
|
+
# iterables of ints are converted to a list
|
|
445
|
+
data = iter([1, 2, 3])
|
|
446
|
+
assert await transform(data, Iterable[int], use_async) == [1, 2, 3]
|
|
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
|