hiddenlayer-sdk 3.0.0__tar.gz → 3.1.0__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.
- hiddenlayer_sdk-3.1.0/.release-please-manifest.json +3 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/CHANGELOG.md +40 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/PKG-INFO +117 -27
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/README.md +114 -24
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/api.md +2 -9
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/pyproject.toml +7 -3
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/requirements-dev.lock +1 -1
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/requirements.lock +1 -1
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_version.py +1 -1
- hiddenlayer_sdk-3.1.0/src/hiddenlayer/lib/__init__.py +12 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/lib/model_scan.py +7 -18
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/resources/models/cards.py +32 -2
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/resources/scans/jobs.py +10 -6
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/resources/scans/upload/upload.py +4 -2
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/interaction_analyze_response.py +37 -3
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/models/card_list_params.py +5 -1
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/models/card_list_response.py +6 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/scans/job_list_params.py +2 -2
- hiddenlayer_sdk-3.1.0/src/hiddenlayer/types/scans/job_list_response.py +153 -0
- hiddenlayer_sdk-3.1.0/src/hiddenlayer/types/scans/job_request_params.py +85 -0
- hiddenlayer_sdk-3.1.0/src/hiddenlayer/types/scans/scan_job.py +86 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/scans/scan_report.py +41 -85
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/scans/upload/file_complete_response.py +1 -3
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/scans/upload_complete_all_response.py +1 -3
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/scans/upload_start_params.py +1 -1
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/scans/upload_start_response.py +1 -3
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/api_resources/models/test_cards.py +2 -2
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/api_resources/scans/test_jobs.py +28 -18
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/api_resources/scans/test_results.py +2 -2
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/api_resources/scans/test_upload.py +6 -6
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/api_resources/scans/upload/test_file.py +4 -4
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/api_resources/test_interactions.py +2 -2
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/api_resources/test_models.py +4 -4
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/api_resources/test_prompt_analyzer.py +2 -2
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/api_resources/test_sensors.py +10 -10
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/test_client.py +70 -24
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/test_model_scan.py +20 -48
- hiddenlayer_sdk-3.0.0/.release-please-manifest.json +0 -3
- hiddenlayer_sdk-3.0.0/src/hiddenlayer/lib/__init__.py +0 -6
- hiddenlayer_sdk-3.0.0/src/hiddenlayer/types/scans/job_list_response.py +0 -22
- hiddenlayer_sdk-3.0.0/src/hiddenlayer/types/scans/job_request_params.py +0 -49
- hiddenlayer_sdk-3.0.0/src/hiddenlayer/types/scans/scan_job.py +0 -46
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/.gitignore +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/CODE_OF_CONDUCT.md +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/CONTRIBUTING.md +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/LICENSE +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/SECURITY.md +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/bin/check-release-environment +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/bin/publish-jfrog +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/bin/publish-pypi +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/examples/.keep +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/examples/demo.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/noxfile.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/release-please-config.json +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/__init__.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_base_client.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_client.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_compat.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_constants.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_exceptions.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_files.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_models.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_oauth2.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_qs.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_resource.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_response.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_streaming.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_types.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_utils/__init__.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_utils/_compat.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_utils/_datetime_parse.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_utils/_logs.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_utils/_proxy.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_utils/_reflection.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_utils/_resources_proxy.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_utils/_streams.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_utils/_sync.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_utils/_transform.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_utils/_typing.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/_utils/_utils.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/lib/.keep +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/lib/community_scan.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/lib/scan_utils.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/pagination.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/py.typed +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/resources/__init__.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/resources/interactions.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/resources/models/__init__.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/resources/models/models.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/resources/prompt_analyzer.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/resources/scans/__init__.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/resources/scans/results.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/resources/scans/scans.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/resources/scans/upload/__init__.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/resources/scans/upload/file.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/resources/sensors.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/__init__.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/interaction_analyze_params.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/model_retrieve_response.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/models/__init__.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/prompt_analyzer_create_params.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/prompt_analyzer_create_response.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/scans/__init__.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/scans/job_retrieve_params.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/scans/result_sarif_response.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/scans/upload/__init__.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/scans/upload/file_add_response.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/sensor_create_params.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/sensor_create_response.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/sensor_query_params.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/sensor_query_response.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/sensor_retrieve_response.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/sensor_update_params.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/src/hiddenlayer/types/sensor_update_response.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/__init__.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/api_resources/__init__.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/api_resources/models/__init__.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/api_resources/scans/__init__.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/api_resources/scans/upload/__init__.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/conftest.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/sample_file.txt +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/test_community_scan.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/test_deepcopy.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/test_extract_files.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/test_files.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/test_models.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/test_qs.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/test_required_args.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/test_response.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/test_streaming.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/test_transform.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/test_utils/test_datetime_parse.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/test_utils/test_proxy.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/test_utils/test_typing.py +0 -0
- {hiddenlayer_sdk-3.0.0 → hiddenlayer_sdk-3.1.0}/tests/utils.py +0 -0
|
@@ -1,5 +1,45 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.1.0 (2025-10-22)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v3.0.1...v3.1.0](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/compare/v3.0.1...v3.1.0)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* **api:** api update ([f9b04a6](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/f9b04a6f32744afdfafa6bac6dc8e6cc514ad735))
|
|
10
|
+
* **api:** api update ([cac77ff](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/cac77ffde9e844dbaa0089e33d365fb6f01ad060))
|
|
11
|
+
* **api:** api update ([a5f4aa4](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/a5f4aa47ae06afd63a0a5f476023492e23b01d87))
|
|
12
|
+
* **api:** api update ([f8ea9b3](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/f8ea9b34e18900b9955ce810e396a9050a5a3683))
|
|
13
|
+
* **api:** api update ([a09c23c](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/a09c23c700f049b0b20a50bd7b09737981eebe4d))
|
|
14
|
+
* **api:** api update ([144ea2b](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/144ea2b7fb99d892088bc72a725fd8a0fecb0382))
|
|
15
|
+
* **api:** api update ([495bc26](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/495bc26f2f5aee49e6ac239011a1e9666f9c8e58))
|
|
16
|
+
* **api:** api update ([82bcadd](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/82bcaddd193d4ad155eb2651cb190a4a200800e1))
|
|
17
|
+
* **api:** api update ([da69d10](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/da69d104dc5f408a04d46c0266973fe404665cf8))
|
|
18
|
+
* **api:** api update ([75a179e](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/75a179e93a759b83194806b4c561ad4035ae2714))
|
|
19
|
+
* **api:** api update ([56ec98d](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/56ec98d2485b1ebb16a832d4eac125d05a7a1993))
|
|
20
|
+
* **api:** manual updates ([7e16b74](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/7e16b749a22db9414de5faf17067f15cf37ff78a))
|
|
21
|
+
* **api:** manual updates ([4a1d8af](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/4a1d8af69e44413809219221e5a3ff3b102a7637))
|
|
22
|
+
* **api:** restore ScanReport ([5bba48d](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/5bba48def63831679f3f33475b9ed423c9726bbf))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Bug Fixes
|
|
26
|
+
|
|
27
|
+
* **compat:** compat with `pydantic<2.8.0` when using additional fields ([a055406](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/a055406b415d42d8b99284a200eaf0af694e14c3))
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
### Chores
|
|
31
|
+
|
|
32
|
+
* bump `httpx-aiohttp` version to 0.1.9 ([01ab00d](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/01ab00ddaf35da51b7c4a546c37f7d092357ffe4))
|
|
33
|
+
* **internal:** detect missing future annotations with ruff ([e087ecc](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/e087ecc97867d858d138af0ebb7dfd7e919c14bb))
|
|
34
|
+
|
|
35
|
+
## 3.0.1 (2025-09-23)
|
|
36
|
+
|
|
37
|
+
Full Changelog: [v3.0.0...v3.0.1](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/compare/v3.0.0...v3.0.1)
|
|
38
|
+
|
|
39
|
+
### Features
|
|
40
|
+
|
|
41
|
+
* **api:** manual updates ([2be2f2c](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/2be2f2c124d8ac9b9d22c675c165be496c1793ba))
|
|
42
|
+
|
|
3
43
|
## 3.0.0 (2025-09-23)
|
|
4
44
|
|
|
5
45
|
Full Changelog: [v0.1.0-alpha.33...v3.0.0](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/compare/v0.1.0-alpha.33...v3.0.0)
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: hiddenlayer-sdk
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.1.0
|
|
4
4
|
Summary: The official Python library for the hiddenlayer API
|
|
5
5
|
Project-URL: Homepage, https://github.com/hiddenlayerai/hiddenlayer-sdk-python
|
|
6
6
|
Project-URL: Repository, https://github.com/hiddenlayerai/hiddenlayer-sdk-python
|
|
7
|
-
Author-email: HiddenLayer <
|
|
7
|
+
Author-email: HiddenLayer <sdks@hiddenlayer.com>
|
|
8
8
|
License: Apache-2.0
|
|
9
9
|
Classifier: Intended Audience :: Developers
|
|
10
10
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
@@ -33,7 +33,7 @@ Requires-Dist: types-requests>=2.32.0.20241016
|
|
|
33
33
|
Requires-Dist: typing-extensions<5,>=4.10
|
|
34
34
|
Provides-Extra: aiohttp
|
|
35
35
|
Requires-Dist: aiohttp; extra == 'aiohttp'
|
|
36
|
-
Requires-Dist: httpx-aiohttp>=0.1.
|
|
36
|
+
Requires-Dist: httpx-aiohttp>=0.1.9; extra == 'aiohttp'
|
|
37
37
|
Description-Content-Type: text/markdown
|
|
38
38
|
|
|
39
39
|
# HiddenLayer Python API library
|
|
@@ -70,10 +70,21 @@ client = HiddenLayer(
|
|
|
70
70
|
environment="prod-eu",
|
|
71
71
|
)
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
response = client.interactions.analyze(
|
|
74
|
+
metadata={
|
|
75
|
+
"model": "REPLACE_ME",
|
|
76
|
+
"requester_id": "REPLACE_ME",
|
|
77
|
+
},
|
|
78
|
+
input={
|
|
79
|
+
"messages": [
|
|
80
|
+
{
|
|
81
|
+
"role": "user",
|
|
82
|
+
"content": "REPLACE_ME",
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
},
|
|
75
86
|
)
|
|
76
|
-
print(
|
|
87
|
+
print(response.analysis)
|
|
77
88
|
```
|
|
78
89
|
|
|
79
90
|
While you can provide a `bearer_token` keyword argument,
|
|
@@ -96,10 +107,21 @@ client = AsyncHiddenLayer(
|
|
|
96
107
|
|
|
97
108
|
|
|
98
109
|
async def main() -> None:
|
|
99
|
-
|
|
100
|
-
|
|
110
|
+
response = await client.interactions.analyze(
|
|
111
|
+
metadata={
|
|
112
|
+
"model": "REPLACE_ME",
|
|
113
|
+
"requester_id": "REPLACE_ME",
|
|
114
|
+
},
|
|
115
|
+
input={
|
|
116
|
+
"messages": [
|
|
117
|
+
{
|
|
118
|
+
"role": "user",
|
|
119
|
+
"content": "REPLACE_ME",
|
|
120
|
+
}
|
|
121
|
+
]
|
|
122
|
+
},
|
|
101
123
|
)
|
|
102
|
-
print(
|
|
124
|
+
print(response.analysis)
|
|
103
125
|
|
|
104
126
|
|
|
105
127
|
asyncio.run(main())
|
|
@@ -130,10 +152,21 @@ async def main() -> None:
|
|
|
130
152
|
async with AsyncHiddenLayer(
|
|
131
153
|
http_client=DefaultAioHttpClient(),
|
|
132
154
|
) as client:
|
|
133
|
-
|
|
134
|
-
|
|
155
|
+
response = await client.interactions.analyze(
|
|
156
|
+
metadata={
|
|
157
|
+
"model": "REPLACE_ME",
|
|
158
|
+
"requester_id": "REPLACE_ME",
|
|
159
|
+
},
|
|
160
|
+
input={
|
|
161
|
+
"messages": [
|
|
162
|
+
{
|
|
163
|
+
"role": "user",
|
|
164
|
+
"content": "REPLACE_ME",
|
|
165
|
+
}
|
|
166
|
+
]
|
|
167
|
+
},
|
|
135
168
|
)
|
|
136
|
-
print(
|
|
169
|
+
print(response.analysis)
|
|
137
170
|
|
|
138
171
|
|
|
139
172
|
asyncio.run(main())
|
|
@@ -157,10 +190,14 @@ from hiddenlayer import HiddenLayer
|
|
|
157
190
|
|
|
158
191
|
client = HiddenLayer()
|
|
159
192
|
|
|
160
|
-
|
|
161
|
-
|
|
193
|
+
response = client.interactions.analyze(
|
|
194
|
+
metadata={
|
|
195
|
+
"model": "gpt-5",
|
|
196
|
+
"requester_id": "user-1234",
|
|
197
|
+
"provider": "openai",
|
|
198
|
+
},
|
|
162
199
|
)
|
|
163
|
-
print(
|
|
200
|
+
print(response.metadata)
|
|
164
201
|
```
|
|
165
202
|
|
|
166
203
|
## Handling errors
|
|
@@ -179,8 +216,19 @@ from hiddenlayer import HiddenLayer
|
|
|
179
216
|
client = HiddenLayer()
|
|
180
217
|
|
|
181
218
|
try:
|
|
182
|
-
client.
|
|
183
|
-
|
|
219
|
+
client.interactions.analyze(
|
|
220
|
+
metadata={
|
|
221
|
+
"model": "REPLACE_ME",
|
|
222
|
+
"requester_id": "REPLACE_ME",
|
|
223
|
+
},
|
|
224
|
+
input={
|
|
225
|
+
"messages": [
|
|
226
|
+
{
|
|
227
|
+
"role": "user",
|
|
228
|
+
"content": "REPLACE_ME",
|
|
229
|
+
}
|
|
230
|
+
]
|
|
231
|
+
},
|
|
184
232
|
)
|
|
185
233
|
except hiddenlayer.APIConnectionError as e:
|
|
186
234
|
print("The server could not be reached")
|
|
@@ -224,8 +272,19 @@ client = HiddenLayer(
|
|
|
224
272
|
)
|
|
225
273
|
|
|
226
274
|
# Or, configure per-request:
|
|
227
|
-
client.with_options(max_retries=5).
|
|
228
|
-
|
|
275
|
+
client.with_options(max_retries=5).interactions.analyze(
|
|
276
|
+
metadata={
|
|
277
|
+
"model": "REPLACE_ME",
|
|
278
|
+
"requester_id": "REPLACE_ME",
|
|
279
|
+
},
|
|
280
|
+
input={
|
|
281
|
+
"messages": [
|
|
282
|
+
{
|
|
283
|
+
"role": "user",
|
|
284
|
+
"content": "REPLACE_ME",
|
|
285
|
+
}
|
|
286
|
+
]
|
|
287
|
+
},
|
|
229
288
|
)
|
|
230
289
|
```
|
|
231
290
|
|
|
@@ -249,8 +308,19 @@ client = HiddenLayer(
|
|
|
249
308
|
)
|
|
250
309
|
|
|
251
310
|
# Override per-request:
|
|
252
|
-
client.with_options(timeout=5.0).
|
|
253
|
-
|
|
311
|
+
client.with_options(timeout=5.0).interactions.analyze(
|
|
312
|
+
metadata={
|
|
313
|
+
"model": "REPLACE_ME",
|
|
314
|
+
"requester_id": "REPLACE_ME",
|
|
315
|
+
},
|
|
316
|
+
input={
|
|
317
|
+
"messages": [
|
|
318
|
+
{
|
|
319
|
+
"role": "user",
|
|
320
|
+
"content": "REPLACE_ME",
|
|
321
|
+
}
|
|
322
|
+
]
|
|
323
|
+
},
|
|
254
324
|
)
|
|
255
325
|
```
|
|
256
326
|
|
|
@@ -292,13 +362,22 @@ The "raw" Response object can be accessed by prefixing `.with_raw_response.` to
|
|
|
292
362
|
from hiddenlayer import HiddenLayer
|
|
293
363
|
|
|
294
364
|
client = HiddenLayer()
|
|
295
|
-
response = client.
|
|
296
|
-
|
|
365
|
+
response = client.interactions.with_raw_response.analyze(
|
|
366
|
+
metadata={
|
|
367
|
+
"model": "REPLACE_ME",
|
|
368
|
+
"requester_id": "REPLACE_ME",
|
|
369
|
+
},
|
|
370
|
+
input={
|
|
371
|
+
"messages": [{
|
|
372
|
+
"role": "user",
|
|
373
|
+
"content": "REPLACE_ME",
|
|
374
|
+
}]
|
|
375
|
+
},
|
|
297
376
|
)
|
|
298
377
|
print(response.headers.get('X-My-Header'))
|
|
299
378
|
|
|
300
|
-
|
|
301
|
-
print(
|
|
379
|
+
interaction = response.parse() # get the object that `interactions.analyze()` would have returned
|
|
380
|
+
print(interaction.analysis)
|
|
302
381
|
```
|
|
303
382
|
|
|
304
383
|
These methods return an [`APIResponse`](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/tree/main/src/hiddenlayer/_response.py) object.
|
|
@@ -312,8 +391,19 @@ The above interface eagerly reads the full response body when you make the reque
|
|
|
312
391
|
To stream the response body, use `.with_streaming_response` instead, which requires a context manager and only reads the response body once you call `.read()`, `.text()`, `.json()`, `.iter_bytes()`, `.iter_text()`, `.iter_lines()` or `.parse()`. In the async client, these are async methods.
|
|
313
392
|
|
|
314
393
|
```python
|
|
315
|
-
with client.
|
|
316
|
-
|
|
394
|
+
with client.interactions.with_streaming_response.analyze(
|
|
395
|
+
metadata={
|
|
396
|
+
"model": "REPLACE_ME",
|
|
397
|
+
"requester_id": "REPLACE_ME",
|
|
398
|
+
},
|
|
399
|
+
input={
|
|
400
|
+
"messages": [
|
|
401
|
+
{
|
|
402
|
+
"role": "user",
|
|
403
|
+
"content": "REPLACE_ME",
|
|
404
|
+
}
|
|
405
|
+
]
|
|
406
|
+
},
|
|
317
407
|
) as response:
|
|
318
408
|
print(response.headers.get("X-My-Header"))
|
|
319
409
|
|
|
@@ -32,10 +32,21 @@ client = HiddenLayer(
|
|
|
32
32
|
environment="prod-eu",
|
|
33
33
|
)
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
response = client.interactions.analyze(
|
|
36
|
+
metadata={
|
|
37
|
+
"model": "REPLACE_ME",
|
|
38
|
+
"requester_id": "REPLACE_ME",
|
|
39
|
+
},
|
|
40
|
+
input={
|
|
41
|
+
"messages": [
|
|
42
|
+
{
|
|
43
|
+
"role": "user",
|
|
44
|
+
"content": "REPLACE_ME",
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
},
|
|
37
48
|
)
|
|
38
|
-
print(
|
|
49
|
+
print(response.analysis)
|
|
39
50
|
```
|
|
40
51
|
|
|
41
52
|
While you can provide a `bearer_token` keyword argument,
|
|
@@ -58,10 +69,21 @@ client = AsyncHiddenLayer(
|
|
|
58
69
|
|
|
59
70
|
|
|
60
71
|
async def main() -> None:
|
|
61
|
-
|
|
62
|
-
|
|
72
|
+
response = await client.interactions.analyze(
|
|
73
|
+
metadata={
|
|
74
|
+
"model": "REPLACE_ME",
|
|
75
|
+
"requester_id": "REPLACE_ME",
|
|
76
|
+
},
|
|
77
|
+
input={
|
|
78
|
+
"messages": [
|
|
79
|
+
{
|
|
80
|
+
"role": "user",
|
|
81
|
+
"content": "REPLACE_ME",
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
},
|
|
63
85
|
)
|
|
64
|
-
print(
|
|
86
|
+
print(response.analysis)
|
|
65
87
|
|
|
66
88
|
|
|
67
89
|
asyncio.run(main())
|
|
@@ -92,10 +114,21 @@ async def main() -> None:
|
|
|
92
114
|
async with AsyncHiddenLayer(
|
|
93
115
|
http_client=DefaultAioHttpClient(),
|
|
94
116
|
) as client:
|
|
95
|
-
|
|
96
|
-
|
|
117
|
+
response = await client.interactions.analyze(
|
|
118
|
+
metadata={
|
|
119
|
+
"model": "REPLACE_ME",
|
|
120
|
+
"requester_id": "REPLACE_ME",
|
|
121
|
+
},
|
|
122
|
+
input={
|
|
123
|
+
"messages": [
|
|
124
|
+
{
|
|
125
|
+
"role": "user",
|
|
126
|
+
"content": "REPLACE_ME",
|
|
127
|
+
}
|
|
128
|
+
]
|
|
129
|
+
},
|
|
97
130
|
)
|
|
98
|
-
print(
|
|
131
|
+
print(response.analysis)
|
|
99
132
|
|
|
100
133
|
|
|
101
134
|
asyncio.run(main())
|
|
@@ -119,10 +152,14 @@ from hiddenlayer import HiddenLayer
|
|
|
119
152
|
|
|
120
153
|
client = HiddenLayer()
|
|
121
154
|
|
|
122
|
-
|
|
123
|
-
|
|
155
|
+
response = client.interactions.analyze(
|
|
156
|
+
metadata={
|
|
157
|
+
"model": "gpt-5",
|
|
158
|
+
"requester_id": "user-1234",
|
|
159
|
+
"provider": "openai",
|
|
160
|
+
},
|
|
124
161
|
)
|
|
125
|
-
print(
|
|
162
|
+
print(response.metadata)
|
|
126
163
|
```
|
|
127
164
|
|
|
128
165
|
## Handling errors
|
|
@@ -141,8 +178,19 @@ from hiddenlayer import HiddenLayer
|
|
|
141
178
|
client = HiddenLayer()
|
|
142
179
|
|
|
143
180
|
try:
|
|
144
|
-
client.
|
|
145
|
-
|
|
181
|
+
client.interactions.analyze(
|
|
182
|
+
metadata={
|
|
183
|
+
"model": "REPLACE_ME",
|
|
184
|
+
"requester_id": "REPLACE_ME",
|
|
185
|
+
},
|
|
186
|
+
input={
|
|
187
|
+
"messages": [
|
|
188
|
+
{
|
|
189
|
+
"role": "user",
|
|
190
|
+
"content": "REPLACE_ME",
|
|
191
|
+
}
|
|
192
|
+
]
|
|
193
|
+
},
|
|
146
194
|
)
|
|
147
195
|
except hiddenlayer.APIConnectionError as e:
|
|
148
196
|
print("The server could not be reached")
|
|
@@ -186,8 +234,19 @@ client = HiddenLayer(
|
|
|
186
234
|
)
|
|
187
235
|
|
|
188
236
|
# Or, configure per-request:
|
|
189
|
-
client.with_options(max_retries=5).
|
|
190
|
-
|
|
237
|
+
client.with_options(max_retries=5).interactions.analyze(
|
|
238
|
+
metadata={
|
|
239
|
+
"model": "REPLACE_ME",
|
|
240
|
+
"requester_id": "REPLACE_ME",
|
|
241
|
+
},
|
|
242
|
+
input={
|
|
243
|
+
"messages": [
|
|
244
|
+
{
|
|
245
|
+
"role": "user",
|
|
246
|
+
"content": "REPLACE_ME",
|
|
247
|
+
}
|
|
248
|
+
]
|
|
249
|
+
},
|
|
191
250
|
)
|
|
192
251
|
```
|
|
193
252
|
|
|
@@ -211,8 +270,19 @@ client = HiddenLayer(
|
|
|
211
270
|
)
|
|
212
271
|
|
|
213
272
|
# Override per-request:
|
|
214
|
-
client.with_options(timeout=5.0).
|
|
215
|
-
|
|
273
|
+
client.with_options(timeout=5.0).interactions.analyze(
|
|
274
|
+
metadata={
|
|
275
|
+
"model": "REPLACE_ME",
|
|
276
|
+
"requester_id": "REPLACE_ME",
|
|
277
|
+
},
|
|
278
|
+
input={
|
|
279
|
+
"messages": [
|
|
280
|
+
{
|
|
281
|
+
"role": "user",
|
|
282
|
+
"content": "REPLACE_ME",
|
|
283
|
+
}
|
|
284
|
+
]
|
|
285
|
+
},
|
|
216
286
|
)
|
|
217
287
|
```
|
|
218
288
|
|
|
@@ -254,13 +324,22 @@ The "raw" Response object can be accessed by prefixing `.with_raw_response.` to
|
|
|
254
324
|
from hiddenlayer import HiddenLayer
|
|
255
325
|
|
|
256
326
|
client = HiddenLayer()
|
|
257
|
-
response = client.
|
|
258
|
-
|
|
327
|
+
response = client.interactions.with_raw_response.analyze(
|
|
328
|
+
metadata={
|
|
329
|
+
"model": "REPLACE_ME",
|
|
330
|
+
"requester_id": "REPLACE_ME",
|
|
331
|
+
},
|
|
332
|
+
input={
|
|
333
|
+
"messages": [{
|
|
334
|
+
"role": "user",
|
|
335
|
+
"content": "REPLACE_ME",
|
|
336
|
+
}]
|
|
337
|
+
},
|
|
259
338
|
)
|
|
260
339
|
print(response.headers.get('X-My-Header'))
|
|
261
340
|
|
|
262
|
-
|
|
263
|
-
print(
|
|
341
|
+
interaction = response.parse() # get the object that `interactions.analyze()` would have returned
|
|
342
|
+
print(interaction.analysis)
|
|
264
343
|
```
|
|
265
344
|
|
|
266
345
|
These methods return an [`APIResponse`](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/tree/main/src/hiddenlayer/_response.py) object.
|
|
@@ -274,8 +353,19 @@ The above interface eagerly reads the full response body when you make the reque
|
|
|
274
353
|
To stream the response body, use `.with_streaming_response` instead, which requires a context manager and only reads the response body once you call `.read()`, `.text()`, `.json()`, `.iter_bytes()`, `.iter_text()`, `.iter_lines()` or `.parse()`. In the async client, these are async methods.
|
|
275
354
|
|
|
276
355
|
```python
|
|
277
|
-
with client.
|
|
278
|
-
|
|
356
|
+
with client.interactions.with_streaming_response.analyze(
|
|
357
|
+
metadata={
|
|
358
|
+
"model": "REPLACE_ME",
|
|
359
|
+
"requester_id": "REPLACE_ME",
|
|
360
|
+
},
|
|
361
|
+
input={
|
|
362
|
+
"messages": [
|
|
363
|
+
{
|
|
364
|
+
"role": "user",
|
|
365
|
+
"content": "REPLACE_ME",
|
|
366
|
+
}
|
|
367
|
+
]
|
|
368
|
+
},
|
|
279
369
|
) as response:
|
|
280
370
|
print(response.headers.get("X-My-Header"))
|
|
281
371
|
|
|
@@ -80,7 +80,7 @@ Methods:
|
|
|
80
80
|
Types:
|
|
81
81
|
|
|
82
82
|
```python
|
|
83
|
-
from hiddenlayer.types.scans import
|
|
83
|
+
from hiddenlayer.types.scans import ScanReport, ResultSarifResponse
|
|
84
84
|
```
|
|
85
85
|
|
|
86
86
|
Methods:
|
|
@@ -92,14 +92,7 @@ Methods:
|
|
|
92
92
|
Types:
|
|
93
93
|
|
|
94
94
|
```python
|
|
95
|
-
from hiddenlayer.types.scans import
|
|
96
|
-
ScanJob,
|
|
97
|
-
ScanReport,
|
|
98
|
-
JobListResponse,
|
|
99
|
-
JobListParams,
|
|
100
|
-
JobRequestParams,
|
|
101
|
-
JobRetrieveParams,
|
|
102
|
-
)
|
|
95
|
+
from hiddenlayer.types.scans import JobListResponse, ScanJob, ScanReport
|
|
103
96
|
```
|
|
104
97
|
|
|
105
98
|
Methods:
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "hiddenlayer-sdk"
|
|
3
|
-
version = "3.
|
|
3
|
+
version = "3.1.0"
|
|
4
4
|
description = "The official Python library for the hiddenlayer API"
|
|
5
5
|
dynamic = ["readme"]
|
|
6
6
|
license = {text = "Apache-2.0"}
|
|
7
7
|
authors = [
|
|
8
|
-
{ name = "HiddenLayer", email = "
|
|
8
|
+
{ name = "HiddenLayer", email = "sdks@hiddenlayer.com" },
|
|
9
9
|
]
|
|
10
10
|
dependencies = [
|
|
11
11
|
"httpx>=0.23.0, <1",
|
|
@@ -42,7 +42,7 @@ Homepage = "https://github.com/hiddenlayerai/hiddenlayer-sdk-python"
|
|
|
42
42
|
Repository = "https://github.com/hiddenlayerai/hiddenlayer-sdk-python"
|
|
43
43
|
|
|
44
44
|
[project.optional-dependencies]
|
|
45
|
-
aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.
|
|
45
|
+
aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.9"]
|
|
46
46
|
|
|
47
47
|
[tool.rye]
|
|
48
48
|
managed = true
|
|
@@ -229,6 +229,8 @@ select = [
|
|
|
229
229
|
"B",
|
|
230
230
|
# remove unused imports
|
|
231
231
|
"F401",
|
|
232
|
+
# check for missing future annotations
|
|
233
|
+
"FA102",
|
|
232
234
|
# bare except statements
|
|
233
235
|
"E722",
|
|
234
236
|
# unused arguments
|
|
@@ -251,6 +253,8 @@ unfixable = [
|
|
|
251
253
|
"T203",
|
|
252
254
|
]
|
|
253
255
|
|
|
256
|
+
extend-safe-fixes = ["FA102"]
|
|
257
|
+
|
|
254
258
|
[tool.ruff.lint.flake8-tidy-imports.banned-api]
|
|
255
259
|
"functools.lru_cache".msg = "This function does not retain type information for the wrapped function's arguments; The `lru_cache` function from `_utils` should be used instead"
|
|
256
260
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Custom extensions for HiddenLayer SDK
|
|
2
|
+
|
|
3
|
+
from .model_scan import ModelScanner, AsyncModelScanner
|
|
4
|
+
from .community_scan import CommunityScanner, CommunityScanSource, AsyncCommunityScanner
|
|
5
|
+
|
|
6
|
+
__all__ = [
|
|
7
|
+
"CommunityScanner",
|
|
8
|
+
"AsyncCommunityScanner",
|
|
9
|
+
"ModelScanner",
|
|
10
|
+
"AsyncModelScanner",
|
|
11
|
+
"CommunityScanSource",
|
|
12
|
+
]
|
|
@@ -12,8 +12,6 @@ from fnmatch import fnmatch
|
|
|
12
12
|
from pathlib import Path
|
|
13
13
|
from typing_extensions import TYPE_CHECKING
|
|
14
14
|
|
|
15
|
-
import httpx
|
|
16
|
-
|
|
17
15
|
from .scan_utils import get_scan_results, wait_for_scan_results, get_scan_results_async, wait_for_scan_results_async
|
|
18
16
|
|
|
19
17
|
logger = logging.getLogger(__name__)
|
|
@@ -135,8 +133,6 @@ class ModelScanner:
|
|
|
135
133
|
)
|
|
136
134
|
|
|
137
135
|
scan_id = upload_response.scan_id
|
|
138
|
-
if scan_id is None:
|
|
139
|
-
raise ValueError("scan_id must have a value")
|
|
140
136
|
|
|
141
137
|
# Upload the file
|
|
142
138
|
self._scan_file(scan_id=scan_id, file_path=file_path)
|
|
@@ -189,8 +185,6 @@ class ModelScanner:
|
|
|
189
185
|
)
|
|
190
186
|
|
|
191
187
|
scan_id = upload_response.scan_id
|
|
192
|
-
if scan_id is None:
|
|
193
|
-
raise ValueError("scan_id must have a value")
|
|
194
188
|
|
|
195
189
|
# Prepare file patterns
|
|
196
190
|
ignore_file_patterns = EXCLUDE_FILE_TYPES + ignore_file_patterns if ignore_file_patterns else EXCLUDE_FILE_TYPES
|
|
@@ -445,7 +439,7 @@ class ModelScanner:
|
|
|
445
439
|
if part.upload_url is None:
|
|
446
440
|
raise Exception("part.upload_url must not be None")
|
|
447
441
|
|
|
448
|
-
response =
|
|
442
|
+
response = self._client._client.put(
|
|
449
443
|
part.upload_url,
|
|
450
444
|
content=part_data,
|
|
451
445
|
headers={"Content-Type": "application/octet-stream"},
|
|
@@ -491,8 +485,6 @@ class AsyncModelScanner:
|
|
|
491
485
|
)
|
|
492
486
|
|
|
493
487
|
scan_id = upload_response.scan_id
|
|
494
|
-
if scan_id is None:
|
|
495
|
-
raise ValueError("scan_id must have a value")
|
|
496
488
|
|
|
497
489
|
# Upload the file
|
|
498
490
|
await self._scan_file(scan_id=scan_id, file_path=file_path)
|
|
@@ -536,8 +528,6 @@ class AsyncModelScanner:
|
|
|
536
528
|
)
|
|
537
529
|
|
|
538
530
|
scan_id = upload_response.scan_id
|
|
539
|
-
if scan_id is None:
|
|
540
|
-
raise ValueError("scan_id must have a value")
|
|
541
531
|
|
|
542
532
|
# Prepare file patterns
|
|
543
533
|
ignore_file_patterns = EXCLUDE_FILE_TYPES + ignore_file_patterns if ignore_file_patterns else EXCLUDE_FILE_TYPES
|
|
@@ -740,13 +730,12 @@ class AsyncModelScanner:
|
|
|
740
730
|
if part.upload_url is None:
|
|
741
731
|
raise Exception("part.upload_url must not be None")
|
|
742
732
|
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
response.raise_for_status()
|
|
733
|
+
response = await self._client._client.put(
|
|
734
|
+
part.upload_url,
|
|
735
|
+
content=part_data,
|
|
736
|
+
headers={"Content-Type": "application/octet-stream"},
|
|
737
|
+
)
|
|
738
|
+
response.raise_for_status()
|
|
750
739
|
|
|
751
740
|
# Complete the file upload
|
|
752
741
|
await self._client.scans.upload.file.complete(file_id=upload.upload_id, scan_id=scan_id)
|