hiddenlayer-sdk 2.0.6__tar.gz → 2.0.8__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.
Files changed (134) hide show
  1. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/PKG-INFO +1 -1
  2. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/__init__.py +6 -2
  3. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/api/model_supply_chain_api.py +6 -6
  4. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/file_details_v3.py +2 -2
  5. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/services/model_scan.py +24 -8
  6. hiddenlayer_sdk-2.0.8/hiddenlayer/sdk/version.py +1 -0
  7. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer_sdk.egg-info/PKG-INFO +1 -1
  8. hiddenlayer_sdk-2.0.6/hiddenlayer/sdk/version.py +0 -1
  9. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/LICENSE +0 -0
  10. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/README.md +0 -0
  11. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/__init__.py +0 -0
  12. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/constants.py +0 -0
  13. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/exceptions.py +0 -0
  14. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/models.py +0 -0
  15. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/__init__.py +0 -0
  16. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/api/__init__.py +0 -0
  17. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/api/aidr_predictive_api.py +0 -0
  18. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/api/health_api.py +0 -0
  19. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/api/model_api.py +0 -0
  20. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/api/readiness_api.py +0 -0
  21. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/api/sensor_api.py +0 -0
  22. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/api_client.py +0 -0
  23. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/api_response.py +0 -0
  24. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/configuration.py +0 -0
  25. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/exceptions.py +0 -0
  26. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/__init__.py +0 -0
  27. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/address.py +0 -0
  28. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/artifact.py +0 -0
  29. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/artifact_change.py +0 -0
  30. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/artifact_content.py +0 -0
  31. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/artifact_location.py +0 -0
  32. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/attachment.py +0 -0
  33. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/begin_multi_file_upload200_response.py +0 -0
  34. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/begin_multipart_file_upload200_response.py +0 -0
  35. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/begin_multipart_file_upload200_response_parts_inner.py +0 -0
  36. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/code_flow.py +0 -0
  37. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/configuration_override.py +0 -0
  38. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/conversion.py +0 -0
  39. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/create_sensor_request.py +0 -0
  40. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/edge.py +0 -0
  41. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/edge_traversal.py +0 -0
  42. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/errors_inner.py +0 -0
  43. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/exception.py +0 -0
  44. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/external_properties.py +0 -0
  45. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/external_property_file_reference.py +0 -0
  46. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/external_property_file_references.py +0 -0
  47. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/file_result_v3.py +0 -0
  48. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/file_scan_report_v3.py +0 -0
  49. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/file_scan_reports_v3.py +0 -0
  50. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/fix.py +0 -0
  51. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/get_condensed_model_scan_reports200_response.py +0 -0
  52. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/graph.py +0 -0
  53. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/graph_traversal.py +0 -0
  54. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/inventory_v3.py +0 -0
  55. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/invocation.py +0 -0
  56. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/location.py +0 -0
  57. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/location_inner.py +0 -0
  58. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/location_relationship.py +0 -0
  59. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/logical_location.py +0 -0
  60. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/message.py +0 -0
  61. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/mitre_atlas_inner.py +0 -0
  62. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/model.py +0 -0
  63. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/model_inventory_info.py +0 -0
  64. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/model_version.py +0 -0
  65. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/multi_file_upload_request_v3.py +0 -0
  66. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/multiformat_message_string.py +0 -0
  67. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/node.py +0 -0
  68. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/notification.py +0 -0
  69. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/notify_model_scan_completed200_response.py +0 -0
  70. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/paged_response_with_total.py +0 -0
  71. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/pagination_v3.py +0 -0
  72. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/physical_location.py +0 -0
  73. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/problem_details.py +0 -0
  74. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/property_bag.py +0 -0
  75. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/rectangle.py +0 -0
  76. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/region.py +0 -0
  77. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/replacement.py +0 -0
  78. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/reporting_configuration.py +0 -0
  79. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/reporting_descriptor.py +0 -0
  80. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/reporting_descriptor_reference.py +0 -0
  81. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/reporting_descriptor_relationship.py +0 -0
  82. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/result.py +0 -0
  83. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/result_provenance.py +0 -0
  84. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/rule_details_inner.py +0 -0
  85. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/run.py +0 -0
  86. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/run_automation_details.py +0 -0
  87. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/sarif210.py +0 -0
  88. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/scan_create_request.py +0 -0
  89. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/scan_detection_v3.py +0 -0
  90. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/scan_detection_v31.py +0 -0
  91. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/scan_header_v3.py +0 -0
  92. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/scan_job.py +0 -0
  93. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/scan_job_access.py +0 -0
  94. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/scan_model_details_v3.py +0 -0
  95. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/scan_model_details_v31.py +0 -0
  96. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/scan_model_ids_v3.py +0 -0
  97. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/scan_report_v3.py +0 -0
  98. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/scan_results_map_v3.py +0 -0
  99. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/scan_results_v3.py +0 -0
  100. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/security_posture.py +0 -0
  101. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/sensor.py +0 -0
  102. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/sensor_query_response.py +0 -0
  103. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/sensor_sor_model_card_query_response.py +0 -0
  104. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/sensor_sor_model_card_response.py +0 -0
  105. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/sensor_sor_query_filter.py +0 -0
  106. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/sensor_sor_query_request.py +0 -0
  107. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/special_locations.py +0 -0
  108. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/stack.py +0 -0
  109. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/stack_frame.py +0 -0
  110. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/submission_response.py +0 -0
  111. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/submission_v2.py +0 -0
  112. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/suppression.py +0 -0
  113. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/thread_flow.py +0 -0
  114. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/thread_flow_location.py +0 -0
  115. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/tool.py +0 -0
  116. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/tool_component.py +0 -0
  117. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/tool_component_reference.py +0 -0
  118. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/translation_metadata.py +0 -0
  119. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/validation_error_model.py +0 -0
  120. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/version_control_details.py +0 -0
  121. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/web_request.py +0 -0
  122. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/models/web_response.py +0 -0
  123. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/rest/rest.py +0 -0
  124. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/services/__init__.py +0 -0
  125. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/services/aidr_predictive.py +0 -0
  126. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer/sdk/utils.py +0 -0
  127. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer_sdk.egg-info/SOURCES.txt +0 -0
  128. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer_sdk.egg-info/dependency_links.txt +0 -0
  129. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer_sdk.egg-info/requires.txt +0 -0
  130. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/hiddenlayer_sdk.egg-info/top_level.txt +0 -0
  131. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/pyproject.toml +0 -0
  132. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/setup.cfg +0 -0
  133. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/tests/test_hiddenlayer.py +0 -0
  134. {hiddenlayer_sdk-2.0.6 → hiddenlayer_sdk-2.0.8}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hiddenlayer-sdk
3
- Version: 2.0.6
3
+ Version: 2.0.8
4
4
  Summary: Official HiddenLayer Python SDK
5
5
  Author-email: HiddenLayer Integrations Team <integrations@hiddenlayer.com>
6
6
  Maintainer-email: HiddenLayer Integrations Team <integrations@hiddenlayer.com>
@@ -1,5 +1,5 @@
1
1
  import os
2
- from typing import Optional
2
+ from typing import Callable, Optional
3
3
 
4
4
  import requests
5
5
  from requests.auth import HTTPBasicAuth
@@ -36,6 +36,7 @@ class HiddenlayerServiceClient:
36
36
  ):
37
37
  self.host = host.strip()
38
38
  self.is_saas = is_saas(host)
39
+ refresh_jwt_func: Optional[Callable[[], str]] = None
39
40
 
40
41
  if self.is_saas:
41
42
  if not api_id:
@@ -50,13 +51,16 @@ class HiddenlayerServiceClient:
50
51
 
51
52
  jwt_token = self._get_jwt(api_id=api_id, api_key=api_key)
52
53
  self._config = Configuration(host=self.host, access_token=jwt_token)
54
+ refresh_jwt_func = lambda: self._get_jwt(api_id=api_id, api_key=api_key)
53
55
 
54
56
  else:
55
57
  self._config = Configuration(host=self.host)
56
58
 
57
59
  self._api_client = ApiClient(configuration=self._config)
58
60
  self._aidr_predictive = AIDRPredictive(self._api_client)
59
- self._model_scan = ModelScanAPI(self._api_client)
61
+ self._model_scan = ModelScanAPI(
62
+ self._api_client, refresh_token_func=refresh_jwt_func
63
+ )
60
64
 
61
65
  def _get_jwt(self, *, api_id: str, api_key: str) -> str:
62
66
  "Get the JWT token to auth to the Hiddenlayer API."
@@ -2392,7 +2392,7 @@ class ModelSupplyChainApi:
2392
2392
  @validate_call
2393
2393
  def get_scan_results1(
2394
2394
  self,
2395
- scan_id: Optional[StrictStr] = None,
2395
+ scan_id: StrictStr,
2396
2396
  cursor: Optional[StrictStr] = None,
2397
2397
  page_size: Optional[Annotated[int, Field(strict=True, ge=1)]] = None,
2398
2398
  _request_timeout: Union[
@@ -2411,7 +2411,7 @@ class ModelSupplyChainApi:
2411
2411
  """Retrieve Model Scan Results
2412
2412
 
2413
2413
 
2414
- :param scan_id:
2414
+ :param scan_id: (required)
2415
2415
  :type scan_id: str
2416
2416
  :param cursor:
2417
2417
  :type cursor: str
@@ -2469,7 +2469,7 @@ class ModelSupplyChainApi:
2469
2469
  @validate_call
2470
2470
  def get_scan_results1_with_http_info(
2471
2471
  self,
2472
- scan_id: Optional[StrictStr] = None,
2472
+ scan_id: StrictStr,
2473
2473
  cursor: Optional[StrictStr] = None,
2474
2474
  page_size: Optional[Annotated[int, Field(strict=True, ge=1)]] = None,
2475
2475
  _request_timeout: Union[
@@ -2488,7 +2488,7 @@ class ModelSupplyChainApi:
2488
2488
  """Retrieve Model Scan Results
2489
2489
 
2490
2490
 
2491
- :param scan_id:
2491
+ :param scan_id: (required)
2492
2492
  :type scan_id: str
2493
2493
  :param cursor:
2494
2494
  :type cursor: str
@@ -2546,7 +2546,7 @@ class ModelSupplyChainApi:
2546
2546
  @validate_call
2547
2547
  def get_scan_results1_without_preload_content(
2548
2548
  self,
2549
- scan_id: Optional[StrictStr] = None,
2549
+ scan_id: StrictStr,
2550
2550
  cursor: Optional[StrictStr] = None,
2551
2551
  page_size: Optional[Annotated[int, Field(strict=True, ge=1)]] = None,
2552
2552
  _request_timeout: Union[
@@ -2565,7 +2565,7 @@ class ModelSupplyChainApi:
2565
2565
  """Retrieve Model Scan Results
2566
2566
 
2567
2567
 
2568
- :param scan_id:
2568
+ :param scan_id: (required)
2569
2569
  :type scan_id: str
2570
2570
  :param cursor:
2571
2571
  :type cursor: str
@@ -50,8 +50,8 @@ class FileDetailsV3(BaseModel):
50
50
  @field_validator('sha256')
51
51
  def sha256_validate_regular_expression(cls, value):
52
52
  """Validates the regular expression"""
53
- if not re.match(r"^[a-fA-F0-9]{64}$", value):
54
- raise ValueError(r"must validate the regular expression /^[a-fA-F0-9]{64}$/")
53
+ if not re.match(r"^$|^[a-fA-F0-9]{64}$", value):
54
+ raise ValueError(r"must validate the regular expression /^$|^[a-fA-F0-9]{64}$/")
55
55
  return value
56
56
 
57
57
  @field_validator('tlsh')
@@ -4,13 +4,13 @@ import tempfile
4
4
  import time
5
5
  import zipfile
6
6
  from pathlib import Path
7
- from typing import List, Optional, Union
7
+ from typing import Callable, List, Optional, Union
8
8
 
9
9
  from hiddenlayer.sdk.constants import CommunityScanSource, ScanStatus
10
10
  from hiddenlayer.sdk.models import EmptyScanResults, ScanResults
11
11
  from hiddenlayer.sdk.rest.api import ModelSupplyChainApi
12
12
  from hiddenlayer.sdk.rest.api_client import ApiClient
13
- from hiddenlayer.sdk.rest.exceptions import NotFoundException
13
+ from hiddenlayer.sdk.rest.exceptions import NotFoundException, UnauthorizedException
14
14
  from hiddenlayer.sdk.rest.models import (
15
15
  MultiFileUploadRequestV3,
16
16
  ScanJob,
@@ -32,9 +32,14 @@ EXCLUDE_FILE_TYPES = [
32
32
 
33
33
 
34
34
  class ModelScanAPI:
35
- def __init__(self, api_client: ApiClient) -> None:
35
+ def __init__(
36
+ self,
37
+ api_client: ApiClient,
38
+ refresh_token_func: Optional[Callable[[], str]] = None,
39
+ ) -> None:
36
40
  self._api_client = api_client
37
41
  self._model_supply_chain_api = ModelSupplyChainApi(api_client=api_client)
42
+ self._refresh_token_func = refresh_token_func
38
43
 
39
44
  def community_scan(
40
45
  self,
@@ -328,11 +333,21 @@ class ModelScanAPI:
328
333
 
329
334
  :returns: Scan results.
330
335
  """
331
-
332
- try:
333
- scan_report = self._model_supply_chain_api.get_scan_results(scan_id)
334
- except NotFoundException:
335
- return EmptyScanResults()
336
+ retry = False
337
+ while True:
338
+ try:
339
+ scan_report = self._model_supply_chain_api.get_scan_results(scan_id)
340
+ break
341
+ except NotFoundException:
342
+ return EmptyScanResults()
343
+ except UnauthorizedException as e:
344
+ if not retry and self._refresh_token_func:
345
+ new_token = self._refresh_token_func()
346
+ self._api_client.configuration.access_token = new_token
347
+ self._api_client = ApiClient(self._api_client.configuration)
348
+ retry = True
349
+ else:
350
+ raise e
336
351
 
337
352
  return ScanResults.from_scanreportv3(scan_report_v3=scan_report)
338
353
 
@@ -461,6 +476,7 @@ class ModelScanAPI:
461
476
  delay = base_delay * 2**retries + random.uniform(
462
477
  0, 1
463
478
  ) # exponential back off retry
479
+ delay = min(delay, 30)
464
480
  time.sleep(delay)
465
481
  scan_results = self.get_scan_results(scan_id=scan_id)
466
482
  print(f"scan status: {scan_results.status}")
@@ -0,0 +1 @@
1
+ VERSION = "2.0.8"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hiddenlayer-sdk
3
- Version: 2.0.6
3
+ Version: 2.0.8
4
4
  Summary: Official HiddenLayer Python SDK
5
5
  Author-email: HiddenLayer Integrations Team <integrations@hiddenlayer.com>
6
6
  Maintainer-email: HiddenLayer Integrations Team <integrations@hiddenlayer.com>
@@ -1 +0,0 @@
1
- VERSION = "2.0.6"
File without changes