scale-gp-beta 0.1.0a22__tar.gz → 0.1.0a23__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.
- scale_gp_beta-0.1.0a23/.release-please-manifest.json +3 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/CHANGELOG.md +26 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/PKG-INFO +3 -3
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/README.md +2 -2
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/pyproject.toml +1 -1
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/_version.py +1 -1
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/lib/tracing/span.py +79 -16
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/lib/tracing/trace.py +81 -41
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/lib/tracing/tracing.py +1 -1
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/conftest.py +2 -0
- {scale_gp_beta-0.1.0a22/tests/lib → scale_gp_beta-0.1.0a23/tests/lib/tracing}/test_span.py +4 -4
- {scale_gp_beta-0.1.0a22/tests/lib → scale_gp_beta-0.1.0a23/tests/lib/tracing}/test_trace.py +53 -7
- {scale_gp_beta-0.1.0a22/tests/lib → scale_gp_beta-0.1.0a23/tests/lib/tracing}/test_tracing.py +2 -2
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/test_client.py +62 -45
- scale_gp_beta-0.1.0a22/.release-please-manifest.json +0 -3
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/.gitignore +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/CONTRIBUTING.md +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/LICENSE +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/SECURITY.md +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/api.md +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/bin/check-release-environment +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/bin/publish-pypi +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/examples/.keep +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/examples/tracing/0_primitives_fibonacci.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/examples/tracing/1_explicit_use_case.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/examples/tracing/2_direct_upload.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/mypy.ini +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/noxfile.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/release-please-config.json +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/requirements-dev.lock +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/requirements.lock +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp/lib/.keep +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/__init__.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/_base_client.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/_client.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/_compat.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/_constants.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/_exceptions.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/_files.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/_models.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/_qs.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/_resource.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/_response.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/_streaming.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/_types.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/_utils/__init__.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/_utils/_logs.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/_utils/_proxy.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/_utils/_reflection.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/_utils/_resources_proxy.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/_utils/_streams.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/_utils/_sync.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/_utils/_transform.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/_utils/_typing.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/_utils/_utils.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/lib/.keep +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/lib/tracing/__init__.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/lib/tracing/exceptions.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/lib/tracing/scope.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/lib/tracing/trace_exporter.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/lib/tracing/trace_queue_manager.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/lib/tracing/types.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/lib/tracing/util.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/pagination.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/py.typed +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/resources/__init__.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/resources/chat/__init__.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/resources/chat/chat.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/resources/chat/completions.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/resources/completions.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/resources/dataset_items.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/resources/datasets.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/resources/evaluation_items.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/resources/evaluations.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/resources/files/__init__.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/resources/files/content.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/resources/files/files.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/resources/inference.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/resources/models.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/resources/spans.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/__init__.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/chat/__init__.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/chat/chat_completion.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/chat/chat_completion_chunk.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/chat/completion_create_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/chat/completion_create_response.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/chat/completion_models_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/chat/completion_models_response.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/chat/model_definition.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/completion.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/completion_create_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/component.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/component_param.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/container.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/container_param.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/dataset.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/dataset_create_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/dataset_delete_response.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/dataset_item.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/dataset_item_batch_create_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/dataset_item_batch_create_response.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/dataset_item_delete_response.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/dataset_item_list_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/dataset_item_retrieve_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/dataset_item_update_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/dataset_list_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/dataset_retrieve_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/dataset_update_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/evaluation.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/evaluation_create_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/evaluation_delete_response.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/evaluation_item.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/evaluation_item_list_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/evaluation_item_retrieve_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/evaluation_list_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/evaluation_retrieve_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/evaluation_task.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/evaluation_task_param.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/evaluation_update_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/file.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/file_create_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/file_delete_response.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/file_list.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/file_list_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/file_update_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/files/__init__.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/inference_create_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/inference_create_response.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/inference_model.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/inference_model_list.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/inference_response.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/inference_response_chunk.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/item_locator.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/item_locator_template.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/model_create_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/model_delete_response.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/model_list_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/model_update_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/span.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/span_batch_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/span_batch_response.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/span_create_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/span_search_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/span_search_response.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/span_update_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/span_upsert_batch_params.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/scale_gp_beta/types/span_upsert_batch_response.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/src/sgp_dev/lib/.keep +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/__init__.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/api_resources/__init__.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/api_resources/chat/__init__.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/api_resources/chat/test_completions.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/api_resources/files/__init__.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/api_resources/files/test_content.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/api_resources/test_completions.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/api_resources/test_dataset_items.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/api_resources/test_datasets.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/api_resources/test_evaluation_items.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/api_resources/test_evaluations.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/api_resources/test_files.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/api_resources/test_inference.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/api_resources/test_models.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/api_resources/test_spans.py +0 -0
- {scale_gp_beta-0.1.0a22/tests/lib → scale_gp_beta-0.1.0a23/tests/lib/tracing}/test_trace_exporter.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/sample_file.txt +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/test_deepcopy.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/test_extract_files.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/test_files.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/test_models.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/test_qs.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/test_required_args.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/test_response.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/test_streaming.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/test_transform.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/test_utils/test_proxy.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/test_utils/test_typing.py +0 -0
- {scale_gp_beta-0.1.0a22 → scale_gp_beta-0.1.0a23}/tests/utils.py +0 -0
|
@@ -1,5 +1,31 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.0-alpha.23 (2025-06-20)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v0.1.0-alpha.22...v0.1.0-alpha.23](https://github.com/scaleapi/sgp-python-beta/compare/v0.1.0-alpha.22...v0.1.0-alpha.23)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* Added set_error() to trace and span. ([#114](https://github.com/scaleapi/sgp-python-beta/issues/114)) ([2f08610](https://github.com/scaleapi/sgp-python-beta/commit/2f086103d8eed97a27f744e803717527ef64875c))
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
* **tests:** fix: tests which call HTTP endpoints directly with the example parameters ([2a67032](https://github.com/scaleapi/sgp-python-beta/commit/2a6703258180ed241018002e3092d90d7974da56))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Chores
|
|
18
|
+
|
|
19
|
+
* **ci:** enable for pull requests ([05e2eb0](https://github.com/scaleapi/sgp-python-beta/commit/05e2eb00b7d50d7c4d46d488f5b64cb9d2dcbb0d))
|
|
20
|
+
* **internal:** codegen related update ([9ae2242](https://github.com/scaleapi/sgp-python-beta/commit/9ae2242e355b8f1cfbaa28eab55d4b9ef7776833))
|
|
21
|
+
* **internal:** update conftest.py ([357f5ed](https://github.com/scaleapi/sgp-python-beta/commit/357f5ed5a3447bc889e5260911d8b4200c5f982f))
|
|
22
|
+
* **tests:** add tests for httpx client instantiation & proxies ([6ae6d18](https://github.com/scaleapi/sgp-python-beta/commit/6ae6d18ff82de7bec888e6617fdf9f54be0f4aa6))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Documentation
|
|
26
|
+
|
|
27
|
+
* **client:** fix httpx.Timeout documentation reference ([dc2482b](https://github.com/scaleapi/sgp-python-beta/commit/dc2482bf483a51b0178db63d1a4dd24ed97e351b))
|
|
28
|
+
|
|
3
29
|
## 0.1.0-alpha.22 (2025-06-16)
|
|
4
30
|
|
|
5
31
|
Full Changelog: [v0.1.0-alpha.21...v0.1.0-alpha.22](https://github.com/scaleapi/sgp-python-beta/compare/v0.1.0-alpha.21...v0.1.0-alpha.22)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: scale-gp-beta
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.0a23
|
|
4
4
|
Summary: The official Python library for the Scale GP API
|
|
5
5
|
Project-URL: Homepage, https://github.com/scaleapi/sgp-python-beta
|
|
6
6
|
Project-URL: Repository, https://github.com/scaleapi/sgp-python-beta
|
|
@@ -31,7 +31,7 @@ Description-Content-Type: text/markdown
|
|
|
31
31
|
|
|
32
32
|
# Scale GP Python API library
|
|
33
33
|
|
|
34
|
-
[](https://pypi.org/project/scale-gp-beta/)
|
|
34
|
+
[>)](https://pypi.org/project/scale-gp-beta/)
|
|
35
35
|
|
|
36
36
|
The Scale GP Python library provides convenient access to the Scale GP REST API from any Python 3.8+
|
|
37
37
|
application. The library includes type definitions for all request params and response fields,
|
|
@@ -578,7 +578,7 @@ client.with_options(max_retries=5).chat.completions.create(
|
|
|
578
578
|
### Timeouts
|
|
579
579
|
|
|
580
580
|
By default requests time out after 1 minute. You can configure this with a `timeout` option,
|
|
581
|
-
which accepts a float or an [`httpx.Timeout`](https://www.python-httpx.org/advanced/#fine-tuning-the-configuration) object:
|
|
581
|
+
which accepts a float or an [`httpx.Timeout`](https://www.python-httpx.org/advanced/timeouts/#fine-tuning-the-configuration) object:
|
|
582
582
|
|
|
583
583
|
```python
|
|
584
584
|
from scale_gp_beta import SGPClient
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Scale GP Python API library
|
|
2
2
|
|
|
3
|
-
[](https://pypi.org/project/scale-gp-beta/)
|
|
3
|
+
[>)](https://pypi.org/project/scale-gp-beta/)
|
|
4
4
|
|
|
5
5
|
The Scale GP Python library provides convenient access to the Scale GP REST API from any Python 3.8+
|
|
6
6
|
application. The library includes type definitions for all request params and response fields,
|
|
@@ -547,7 +547,7 @@ client.with_options(max_retries=5).chat.completions.create(
|
|
|
547
547
|
### Timeouts
|
|
548
548
|
|
|
549
549
|
By default requests time out after 1 minute. You can configure this with a `timeout` option,
|
|
550
|
-
which accepts a float or an [`httpx.Timeout`](https://www.python-httpx.org/advanced/#fine-tuning-the-configuration) object:
|
|
550
|
+
which accepts a float or an [`httpx.Timeout`](https://www.python-httpx.org/advanced/timeouts/#fine-tuning-the-configuration) object:
|
|
551
551
|
|
|
552
552
|
```python
|
|
553
553
|
from scale_gp_beta import SGPClient
|
|
@@ -59,18 +59,18 @@ class BaseSpan:
|
|
|
59
59
|
metadata: Optional[SpanMetadataParam] = None,
|
|
60
60
|
span_type: SpanTypeLiterals = "STANDALONE"
|
|
61
61
|
):
|
|
62
|
-
self.
|
|
63
|
-
self.
|
|
64
|
-
self.
|
|
65
|
-
self.
|
|
66
|
-
self.
|
|
62
|
+
self._name = name
|
|
63
|
+
self._trace_id: str = trace_id or "no_trace_id"
|
|
64
|
+
self._group_id = group_id
|
|
65
|
+
self._span_id: str = span_id or generate_span_id()
|
|
66
|
+
self._parent_span_id = parent_span_id
|
|
67
67
|
self.start_time: Optional[str] = None
|
|
68
68
|
self.end_time: Optional[str] = None
|
|
69
|
-
self.
|
|
70
|
-
self.
|
|
71
|
-
self.
|
|
72
|
-
self.
|
|
73
|
-
self.
|
|
69
|
+
self._input: SpanInputParam = input or {}
|
|
70
|
+
self._output: SpanOutputParam = output or {}
|
|
71
|
+
self._metadata: SpanMetadataParam = metadata or {}
|
|
72
|
+
self._span_type: SpanTypeLiterals = span_type
|
|
73
|
+
self._status: SpanStatusLiterals = "SUCCESS"
|
|
74
74
|
self._queue_manager = queue_manager
|
|
75
75
|
|
|
76
76
|
self._contextvar_token: Optional[contextvars.Token[Optional[BaseSpan]]] = None
|
|
@@ -84,6 +84,73 @@ class BaseSpan:
|
|
|
84
84
|
def flush(self, blocking: bool = True) -> None:
|
|
85
85
|
pass
|
|
86
86
|
|
|
87
|
+
@property
|
|
88
|
+
def name(self) -> str:
|
|
89
|
+
return self._name
|
|
90
|
+
|
|
91
|
+
@property
|
|
92
|
+
def trace_id(self) -> str:
|
|
93
|
+
return self._trace_id
|
|
94
|
+
|
|
95
|
+
@property
|
|
96
|
+
def group_id(self) -> Optional[str]:
|
|
97
|
+
return self._group_id
|
|
98
|
+
|
|
99
|
+
@property
|
|
100
|
+
def span_id(self) -> str:
|
|
101
|
+
return self._span_id
|
|
102
|
+
|
|
103
|
+
@property
|
|
104
|
+
def parent_span_id(self) -> Optional[str]:
|
|
105
|
+
return self._parent_span_id
|
|
106
|
+
|
|
107
|
+
@property
|
|
108
|
+
def status(self) -> SpanStatusLiterals:
|
|
109
|
+
return self._status
|
|
110
|
+
|
|
111
|
+
@property
|
|
112
|
+
def span_type(self) -> SpanTypeLiterals:
|
|
113
|
+
return self._span_type
|
|
114
|
+
|
|
115
|
+
# with setters
|
|
116
|
+
@property
|
|
117
|
+
def metadata(self) -> SpanMetadataParam:
|
|
118
|
+
return self._metadata
|
|
119
|
+
|
|
120
|
+
@metadata.setter
|
|
121
|
+
def metadata(self, value: SpanMetadataParam) -> None:
|
|
122
|
+
self._metadata = value
|
|
123
|
+
|
|
124
|
+
@property
|
|
125
|
+
def input(self) -> SpanInputParam:
|
|
126
|
+
return self._input
|
|
127
|
+
|
|
128
|
+
@input.setter
|
|
129
|
+
def input(self, value: SpanInputParam) -> None:
|
|
130
|
+
self._input = value
|
|
131
|
+
|
|
132
|
+
@property
|
|
133
|
+
def output(self) -> SpanOutputParam:
|
|
134
|
+
return self._output
|
|
135
|
+
|
|
136
|
+
@output.setter
|
|
137
|
+
def output(self, value: SpanOutputParam) -> None:
|
|
138
|
+
self._output = value
|
|
139
|
+
|
|
140
|
+
def set_error(
|
|
141
|
+
self,
|
|
142
|
+
error_type: Optional[str] = None,
|
|
143
|
+
error_message: Optional[str] = None,
|
|
144
|
+
exception: Optional[BaseException] = None,
|
|
145
|
+
) -> None:
|
|
146
|
+
# Naively record details in metadata for now, note that error capture only supported in context manager
|
|
147
|
+
exception_type = type(exception).__name__ if exception else None
|
|
148
|
+
exception_message = str(exception) if exception else None
|
|
149
|
+
self._status = "ERROR"
|
|
150
|
+
self.metadata["error"] = True
|
|
151
|
+
self.metadata["error_type"] = error_type or exception_type
|
|
152
|
+
self.metadata["error_message"] = error_message or exception_message
|
|
153
|
+
|
|
87
154
|
def __enter__(self) -> BaseSpan:
|
|
88
155
|
self.start()
|
|
89
156
|
return self
|
|
@@ -94,13 +161,9 @@ class BaseSpan:
|
|
|
94
161
|
exc_val: Optional[BaseException],
|
|
95
162
|
exc_tb: Optional[TracebackType]
|
|
96
163
|
) -> None:
|
|
97
|
-
# Naively record details in metadata for now, note that error capture only supported in context manager
|
|
98
164
|
# TODO: support error observations when using direct span.start() and span.end()
|
|
99
165
|
if exc_type is not None:
|
|
100
|
-
self.
|
|
101
|
-
self.metadata["error.type"] = exc_type.__name__
|
|
102
|
-
self.metadata["error.message"] = str(exc_val)
|
|
103
|
-
self.status = "ERROR"
|
|
166
|
+
self.set_error(exception=exc_val)
|
|
104
167
|
self.end()
|
|
105
168
|
|
|
106
169
|
def to_request_params(self) -> SpanCreateRequest:
|
|
@@ -203,7 +266,7 @@ class Span(BaseSpan):
|
|
|
203
266
|
):
|
|
204
267
|
super().__init__(name, trace_id, queue_manager, span_id, parent_span_id, group_id, input, output, metadata, span_type)
|
|
205
268
|
self._queue_manager: TraceQueueManager = queue_manager
|
|
206
|
-
self.
|
|
269
|
+
self._trace_id: str = trace_id
|
|
207
270
|
|
|
208
271
|
@override
|
|
209
272
|
def flush(self, blocking: bool = True) -> None:
|
|
@@ -4,23 +4,30 @@ from types import TracebackType
|
|
|
4
4
|
from typing import Type, Optional
|
|
5
5
|
from typing_extensions import override
|
|
6
6
|
|
|
7
|
-
from .span import Span, NoOpSpan
|
|
7
|
+
from .span import Span, BaseSpan, NoOpSpan
|
|
8
8
|
from .util import generate_trace_id
|
|
9
9
|
from .scope import Scope
|
|
10
|
-
from .types import SpanInputParam, SpanOutputParam, SpanTypeLiterals, SpanMetadataParam
|
|
10
|
+
from .types import SpanInputParam, SpanOutputParam, SpanTypeLiterals, SpanMetadataParam, SpanStatusLiterals
|
|
11
11
|
from .trace_queue_manager import TraceQueueManager
|
|
12
12
|
|
|
13
13
|
log: logging.Logger = logging.getLogger(__name__)
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class BaseTrace:
|
|
17
|
-
def __init__(
|
|
18
|
-
|
|
17
|
+
def __init__(
|
|
18
|
+
self,
|
|
19
|
+
queue_manager: Optional[TraceQueueManager],
|
|
20
|
+
root_span: BaseSpan,
|
|
21
|
+
trace_id: str
|
|
22
|
+
) -> None:
|
|
23
|
+
self._trace_id = trace_id
|
|
19
24
|
self.queue_manager = queue_manager
|
|
20
25
|
|
|
21
26
|
self._in_progress = False
|
|
22
27
|
self._contextvar_token: Optional[contextvars.Token[Optional[BaseTrace]]] = None
|
|
23
28
|
|
|
29
|
+
self.root_span = root_span
|
|
30
|
+
|
|
24
31
|
def start(self) -> None:
|
|
25
32
|
pass
|
|
26
33
|
|
|
@@ -30,8 +37,62 @@ class BaseTrace:
|
|
|
30
37
|
def flush(self, blocking: bool = True) -> None:
|
|
31
38
|
pass
|
|
32
39
|
|
|
40
|
+
@property
|
|
41
|
+
def metadata(self) -> SpanMetadataParam:
|
|
42
|
+
return self.root_span.metadata
|
|
43
|
+
|
|
44
|
+
@metadata.setter
|
|
45
|
+
def metadata(self, value: SpanMetadataParam) -> None:
|
|
46
|
+
self.root_span.metadata = value
|
|
47
|
+
|
|
48
|
+
@property
|
|
49
|
+
def input(self) -> SpanInputParam:
|
|
50
|
+
return self.root_span.input
|
|
51
|
+
|
|
52
|
+
@input.setter
|
|
53
|
+
def input(self, value: SpanInputParam) -> None:
|
|
54
|
+
self.root_span.input = value
|
|
55
|
+
|
|
56
|
+
@property
|
|
57
|
+
def output(self) -> SpanOutputParam:
|
|
58
|
+
return self.root_span.output
|
|
59
|
+
|
|
60
|
+
@output.setter
|
|
61
|
+
def output(self, value: SpanOutputParam) -> None:
|
|
62
|
+
self.root_span.output = value
|
|
63
|
+
|
|
64
|
+
# no setters
|
|
65
|
+
@property
|
|
66
|
+
def name(self) -> Optional[str]:
|
|
67
|
+
return self.root_span.name
|
|
68
|
+
|
|
69
|
+
@property
|
|
70
|
+
def span_id(self) -> Optional[str]:
|
|
71
|
+
return self.root_span.span_id
|
|
72
|
+
|
|
73
|
+
@property
|
|
74
|
+
def trace_id(self) -> Optional[str]:
|
|
75
|
+
return self._trace_id
|
|
76
|
+
|
|
77
|
+
@property
|
|
33
78
|
def group_id(self) -> Optional[str]:
|
|
34
|
-
return
|
|
79
|
+
return self.root_span.group_id
|
|
80
|
+
|
|
81
|
+
@property
|
|
82
|
+
def span_type(self) -> SpanTypeLiterals:
|
|
83
|
+
return self.root_span.span_type
|
|
84
|
+
|
|
85
|
+
@property
|
|
86
|
+
def status(self) -> SpanStatusLiterals:
|
|
87
|
+
return self.root_span.status
|
|
88
|
+
|
|
89
|
+
def set_error(
|
|
90
|
+
self,
|
|
91
|
+
error_type: Optional[str] = None,
|
|
92
|
+
error_message: Optional[str] = None,
|
|
93
|
+
exception: Optional[BaseException] = None,
|
|
94
|
+
) -> None:
|
|
95
|
+
self.root_span.set_error(error_type=error_type, error_message=error_message, exception=exception)
|
|
35
96
|
|
|
36
97
|
def __enter__(self) -> "BaseTrace":
|
|
37
98
|
self.start()
|
|
@@ -47,7 +108,12 @@ class BaseTrace:
|
|
|
47
108
|
|
|
48
109
|
@override
|
|
49
110
|
def __repr__(self) -> str:
|
|
50
|
-
return
|
|
111
|
+
return (
|
|
112
|
+
f"{self.__class__.__name__}("
|
|
113
|
+
f"trace_id='{self.trace_id}', "
|
|
114
|
+
f"root_span='{repr(self.root_span)}', "
|
|
115
|
+
")"
|
|
116
|
+
)
|
|
51
117
|
|
|
52
118
|
@override
|
|
53
119
|
def __str__(self) -> str:
|
|
@@ -67,12 +133,11 @@ class NoOpTrace(BaseTrace):
|
|
|
67
133
|
output: Optional[SpanOutputParam] = None,
|
|
68
134
|
metadata: Optional[SpanMetadataParam] = None,
|
|
69
135
|
):
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
self.root_span = NoOpSpan(
|
|
136
|
+
trace_id = trace_id or generate_trace_id()
|
|
137
|
+
root_span = NoOpSpan(
|
|
73
138
|
name=name,
|
|
74
139
|
span_id=span_id,
|
|
75
|
-
trace_id=
|
|
140
|
+
trace_id=trace_id,
|
|
76
141
|
group_id=group_id,
|
|
77
142
|
queue_manager=queue_manager,
|
|
78
143
|
metadata=metadata,
|
|
@@ -80,15 +145,7 @@ class NoOpTrace(BaseTrace):
|
|
|
80
145
|
input=input,
|
|
81
146
|
output=output,
|
|
82
147
|
)
|
|
83
|
-
|
|
84
|
-
@override
|
|
85
|
-
def __repr__(self) -> str:
|
|
86
|
-
return (
|
|
87
|
-
f"{self.__class__.__name__}("
|
|
88
|
-
f"trace_id='{self.trace_id}', "
|
|
89
|
-
f"root_span='{repr(self.root_span)}', "
|
|
90
|
-
")"
|
|
91
|
-
)
|
|
148
|
+
super().__init__(queue_manager, root_span, trace_id)
|
|
92
149
|
|
|
93
150
|
@override
|
|
94
151
|
def start(self) -> None:
|
|
@@ -98,10 +155,6 @@ class NoOpTrace(BaseTrace):
|
|
|
98
155
|
def end(self) -> None:
|
|
99
156
|
self.root_span.end()
|
|
100
157
|
|
|
101
|
-
@override
|
|
102
|
-
def group_id(self) -> Optional[str]:
|
|
103
|
-
return self.root_span.group_id
|
|
104
|
-
|
|
105
158
|
|
|
106
159
|
class Trace(BaseTrace):
|
|
107
160
|
def __init__(
|
|
@@ -116,13 +169,11 @@ class Trace(BaseTrace):
|
|
|
116
169
|
output: Optional[SpanOutputParam] = None,
|
|
117
170
|
metadata: Optional[SpanMetadataParam] = None,
|
|
118
171
|
):
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
self.root_span = Span(
|
|
172
|
+
trace_id = trace_id or generate_trace_id()
|
|
173
|
+
root_span = Span(
|
|
123
174
|
name=name,
|
|
124
175
|
span_id=span_id,
|
|
125
|
-
trace_id=
|
|
176
|
+
trace_id=trace_id,
|
|
126
177
|
group_id=group_id,
|
|
127
178
|
queue_manager=queue_manager,
|
|
128
179
|
metadata=metadata,
|
|
@@ -130,6 +181,8 @@ class Trace(BaseTrace):
|
|
|
130
181
|
input=input,
|
|
131
182
|
output=output,
|
|
132
183
|
)
|
|
184
|
+
super().__init__(queue_manager, root_span, trace_id)
|
|
185
|
+
self.queue_manager: TraceQueueManager = queue_manager
|
|
133
186
|
|
|
134
187
|
@override
|
|
135
188
|
def start(self) -> None:
|
|
@@ -162,16 +215,3 @@ class Trace(BaseTrace):
|
|
|
162
215
|
@override
|
|
163
216
|
def flush(self, blocking: bool = True) -> None:
|
|
164
217
|
self.root_span.flush(blocking=blocking)
|
|
165
|
-
|
|
166
|
-
@override
|
|
167
|
-
def group_id(self) -> Optional[str]:
|
|
168
|
-
return self.root_span.group_id
|
|
169
|
-
|
|
170
|
-
@override
|
|
171
|
-
def __repr__(self) -> str:
|
|
172
|
-
return (
|
|
173
|
-
f"{self.__class__.__name__}("
|
|
174
|
-
f"trace_id='{self.trace_id}', "
|
|
175
|
-
f"root_span='{repr(self.root_span)}', "
|
|
176
|
-
")"
|
|
177
|
-
)
|
|
@@ -182,7 +182,7 @@ def create_span(
|
|
|
182
182
|
|
|
183
183
|
scoped_trace = current_trace()
|
|
184
184
|
scoped_trace_id = scoped_trace.trace_id if scoped_trace else None
|
|
185
|
-
scoped_group_id = scoped_trace.group_id
|
|
185
|
+
scoped_group_id = scoped_trace.group_id if scoped_trace else None
|
|
186
186
|
scoped_span = current_span()
|
|
187
187
|
scoped_span_id = scoped_span.span_id if scoped_span else None
|
|
188
188
|
|
|
@@ -82,8 +82,8 @@ class TestBaseSpan:
|
|
|
82
82
|
|
|
83
83
|
assert span.metadata is not None
|
|
84
84
|
assert span.metadata["error"] is True
|
|
85
|
-
assert span.metadata["
|
|
86
|
-
assert span.metadata["
|
|
85
|
+
assert span.metadata["error_type"] == "ValueError"
|
|
86
|
+
assert span.metadata["error_message"] == "Test error"
|
|
87
87
|
assert span.start_time == "start-ts"
|
|
88
88
|
assert span.end_time == "end-ts"
|
|
89
89
|
assert span.status == "ERROR"
|
|
@@ -325,6 +325,6 @@ class TestSpan:
|
|
|
325
325
|
# NOTE: will likely change this functionality soon
|
|
326
326
|
assert span.metadata is not None
|
|
327
327
|
assert span.metadata["error"] is True
|
|
328
|
-
assert span.metadata["
|
|
329
|
-
assert span.metadata["
|
|
328
|
+
assert span.metadata["error_type"] == "RuntimeError"
|
|
329
|
+
assert span.metadata["error_message"] == "Operational error"
|
|
330
330
|
assert span.status == "ERROR"
|
|
@@ -6,6 +6,7 @@ from unittest.mock import Mock, MagicMock, patch
|
|
|
6
6
|
import pytest
|
|
7
7
|
from pytest import MonkeyPatch, LogCaptureFixture
|
|
8
8
|
|
|
9
|
+
from scale_gp_beta.lib.tracing.span import NoOpSpan
|
|
9
10
|
from scale_gp_beta.lib.tracing.trace import Trace, BaseTrace, NoOpTrace
|
|
10
11
|
from scale_gp_beta.lib.tracing.trace_queue_manager import TraceQueueManager
|
|
11
12
|
|
|
@@ -52,23 +53,21 @@ def patched_trace_utils(monkeypatch: MonkeyPatch) -> Dict[str, Mock]:
|
|
|
52
53
|
|
|
53
54
|
|
|
54
55
|
class TestBaseTrace:
|
|
55
|
-
def test_initialization_defaults(self, mock_queue_manager: Mock
|
|
56
|
-
trace = BaseTrace(queue_manager=mock_queue_manager)
|
|
56
|
+
def test_initialization_defaults(self, mock_queue_manager: Mock) -> None:
|
|
57
|
+
trace = BaseTrace(queue_manager=mock_queue_manager, trace_id="test-trace-id", root_span=NoOpSpan("test-root"))
|
|
57
58
|
assert trace.trace_id == "test-trace-id"
|
|
58
59
|
assert trace.queue_manager == mock_queue_manager
|
|
59
60
|
assert trace._in_progress is False
|
|
60
61
|
assert trace._contextvar_token is None
|
|
61
|
-
patched_trace_utils["generate_trace_id"].assert_called_once()
|
|
62
|
-
|
|
63
62
|
|
|
64
63
|
def test_initialization_with_custom_trace_id(self, mock_queue_manager: Mock) -> None:
|
|
65
64
|
custom_id = "my-custom-trace-id"
|
|
66
|
-
trace = BaseTrace(queue_manager=mock_queue_manager, trace_id=custom_id)
|
|
65
|
+
trace = BaseTrace(queue_manager=mock_queue_manager, trace_id=custom_id, root_span=NoOpSpan("test-root"))
|
|
67
66
|
assert trace.trace_id == custom_id
|
|
68
67
|
assert trace.queue_manager == mock_queue_manager
|
|
69
68
|
|
|
70
69
|
def test_context_manager_calls_start_end(self, mock_queue_manager: Mock) -> None:
|
|
71
|
-
trace = BaseTrace(queue_manager=mock_queue_manager)
|
|
70
|
+
trace = BaseTrace(queue_manager=mock_queue_manager, trace_id="test-trace", root_span=NoOpSpan("test-root"))
|
|
72
71
|
trace.start = Mock()
|
|
73
72
|
trace.end = Mock()
|
|
74
73
|
|
|
@@ -79,7 +78,7 @@ class TestBaseTrace:
|
|
|
79
78
|
trace.end.assert_called_once()
|
|
80
79
|
|
|
81
80
|
def test_context_manager_propagates_exception(self, mock_queue_manager: Mock) -> None:
|
|
82
|
-
trace = BaseTrace(queue_manager=mock_queue_manager)
|
|
81
|
+
trace = BaseTrace(queue_manager=mock_queue_manager, trace_id="test-trace", root_span=NoOpSpan("test-root"))
|
|
83
82
|
trace.end = Mock()
|
|
84
83
|
|
|
85
84
|
with pytest.raises(ValueError, match="Test error in trace"):
|
|
@@ -255,3 +254,50 @@ class TestTrace:
|
|
|
255
254
|
mock_scope_reset_current_trace.assert_called_once_with(expected_token)
|
|
256
255
|
mock_scope_reset_current_span.assert_called_once_with(expected_span_token)
|
|
257
256
|
assert trace._contextvar_token is None
|
|
257
|
+
|
|
258
|
+
def test_updating_trace_status(
|
|
259
|
+
self,
|
|
260
|
+
mock_queue_manager: Mock,
|
|
261
|
+
patched_trace_utils: Dict[str, Mock] # noqa: ARG002
|
|
262
|
+
) -> None:
|
|
263
|
+
trace = Trace(queue_manager=mock_queue_manager, name="request_123")
|
|
264
|
+
with pytest.raises(AttributeError):
|
|
265
|
+
trace.status = "ERROR" # type: ignore[attr-defined]
|
|
266
|
+
assert trace.root_span.status == "SUCCESS"
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
def test_setting_trace_metadata(
|
|
270
|
+
self,
|
|
271
|
+
mock_queue_manager: Mock,
|
|
272
|
+
patched_trace_utils: Dict[str, Mock] # noqa: ARG002
|
|
273
|
+
) -> None:
|
|
274
|
+
trace = Trace(queue_manager=mock_queue_manager, name="request_123")
|
|
275
|
+
trace.metadata = {"foo": "bar"}
|
|
276
|
+
trace.metadata["other"] = "baz"
|
|
277
|
+
assert trace.root_span.metadata == {"foo": "bar", "other": "baz"}
|
|
278
|
+
|
|
279
|
+
def test_setting_trace_input(
|
|
280
|
+
self,
|
|
281
|
+
mock_queue_manager: Mock,
|
|
282
|
+
patched_trace_utils: Dict[str, Mock] # noqa: ARG002
|
|
283
|
+
) -> None:
|
|
284
|
+
trace = Trace(queue_manager=mock_queue_manager, name="request_123")
|
|
285
|
+
trace.input = {"foo": "bar"}
|
|
286
|
+
assert trace.root_span.input == {"foo": "bar"}
|
|
287
|
+
|
|
288
|
+
def test_setting_trace_output(
|
|
289
|
+
self,
|
|
290
|
+
mock_queue_manager: Mock,
|
|
291
|
+
patched_trace_utils: Dict[str, Mock] # noqa: ARG002
|
|
292
|
+
) -> None:
|
|
293
|
+
trace = Trace(queue_manager=mock_queue_manager, name="request_123")
|
|
294
|
+
trace.output = {"foo": "bar"}
|
|
295
|
+
assert trace.root_span.output == {"foo": "bar"}
|
|
296
|
+
|
|
297
|
+
def test_set_error(self, mock_queue_manager: Mock) -> None:
|
|
298
|
+
trace = Trace(queue_manager=mock_queue_manager, name="request_123")
|
|
299
|
+
e = AttributeError("this is a test")
|
|
300
|
+
assert trace.metadata == {}
|
|
301
|
+
trace.set_error(exception=e)
|
|
302
|
+
|
|
303
|
+
assert trace.metadata == {"error": True, "error_message": "this is a test", "error_type": "AttributeError"}
|
{scale_gp_beta-0.1.0a22/tests/lib → scale_gp_beta-0.1.0a23/tests/lib/tracing}/test_tracing.py
RENAMED
|
@@ -321,7 +321,7 @@ class TestCreateSpan:
|
|
|
321
321
|
name="span_uses_scope_trace",
|
|
322
322
|
span_id=None,
|
|
323
323
|
parent_span_id=None,
|
|
324
|
-
group_id=mock_active_trace_instance.group_id
|
|
324
|
+
group_id=mock_active_trace_instance.group_id,
|
|
325
325
|
trace_id=mock_active_trace_instance.trace_id,
|
|
326
326
|
input={}, output={}, metadata={},
|
|
327
327
|
queue_manager=mock_queue_manager_instance,
|
|
@@ -355,7 +355,7 @@ class TestCreateSpan:
|
|
|
355
355
|
span_id=None,
|
|
356
356
|
parent_span_id=mock_active_span_instance.span_id,
|
|
357
357
|
trace_id=mock_active_trace_instance.trace_id,
|
|
358
|
-
group_id=mock_active_trace_instance.group_id
|
|
358
|
+
group_id=mock_active_trace_instance.group_id,
|
|
359
359
|
input={}, output={}, metadata={},
|
|
360
360
|
queue_manager=mock_queue_manager_instance,
|
|
361
361
|
span_type="STANDALONE"
|