hiddenlayer-sdk 0.1.1__py3-none-any.whl → 1.0.0__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (113) hide show
  1. hiddenlayer/sdk/models.py +45 -8
  2. hiddenlayer/sdk/rest/__init__.py +80 -3
  3. hiddenlayer/sdk/rest/api/__init__.py +3 -0
  4. hiddenlayer/sdk/rest/api/aidr_predictive_api.py +1 -1
  5. hiddenlayer/sdk/rest/api/health_api.py +272 -0
  6. hiddenlayer/sdk/rest/api/model_scan_api.py +1 -1
  7. hiddenlayer/sdk/rest/api/model_supply_chain_api.py +2927 -0
  8. hiddenlayer/sdk/rest/api/readiness_api.py +272 -0
  9. hiddenlayer/sdk/rest/api/sensor_api.py +345 -16
  10. hiddenlayer/sdk/rest/api_client.py +1 -1
  11. hiddenlayer/sdk/rest/configuration.py +4 -4
  12. hiddenlayer/sdk/rest/exceptions.py +1 -1
  13. hiddenlayer/sdk/rest/models/__init__.py +77 -3
  14. hiddenlayer/sdk/rest/models/address.py +110 -0
  15. hiddenlayer/sdk/rest/models/artifact.py +155 -0
  16. hiddenlayer/sdk/rest/models/artifact_change.py +108 -0
  17. hiddenlayer/sdk/rest/models/artifact_content.py +101 -0
  18. hiddenlayer/sdk/rest/models/artifact_location.py +109 -0
  19. hiddenlayer/sdk/rest/models/attachment.py +129 -0
  20. hiddenlayer/sdk/rest/models/code_flow.py +113 -0
  21. hiddenlayer/sdk/rest/models/configuration_override.py +108 -0
  22. hiddenlayer/sdk/rest/models/conversion.py +114 -0
  23. hiddenlayer/sdk/rest/models/create_sensor_request.py +1 -1
  24. hiddenlayer/sdk/rest/models/detections.py +101 -0
  25. hiddenlayer/sdk/rest/models/edge.py +108 -0
  26. hiddenlayer/sdk/rest/models/edge_traversal.py +122 -0
  27. hiddenlayer/sdk/rest/models/exception.py +113 -0
  28. hiddenlayer/sdk/rest/models/external_properties.py +273 -0
  29. hiddenlayer/sdk/rest/models/external_property_file_reference.py +102 -0
  30. hiddenlayer/sdk/rest/models/external_property_file_references.py +240 -0
  31. hiddenlayer/sdk/rest/models/file_details_v3.py +140 -0
  32. hiddenlayer/sdk/rest/models/file_results_inner.py +121 -0
  33. hiddenlayer/sdk/rest/models/file_scan_report_v3.py +95 -0
  34. hiddenlayer/sdk/rest/models/fix.py +113 -0
  35. hiddenlayer/sdk/rest/models/get_multipart_upload_response.py +1 -1
  36. hiddenlayer/sdk/rest/models/graph.py +123 -0
  37. hiddenlayer/sdk/rest/models/graph_traversal.py +97 -0
  38. hiddenlayer/sdk/rest/models/invocation.py +199 -0
  39. hiddenlayer/sdk/rest/models/location.py +146 -0
  40. hiddenlayer/sdk/rest/models/{validation_error_model_loc_inner.py → location_inner.py} +7 -7
  41. hiddenlayer/sdk/rest/models/location_relationship.py +107 -0
  42. hiddenlayer/sdk/rest/models/logical_location.py +104 -0
  43. hiddenlayer/sdk/rest/models/message.py +92 -0
  44. hiddenlayer/sdk/rest/models/mitre_atlas_inner.py +110 -0
  45. hiddenlayer/sdk/rest/models/model.py +1 -1
  46. hiddenlayer/sdk/rest/models/model_inventory_info.py +99 -0
  47. hiddenlayer/sdk/rest/models/model_query_response.py +1 -1
  48. hiddenlayer/sdk/rest/models/model_scan_api_v3_scan_model_version_id_patch200_response.py +87 -0
  49. hiddenlayer/sdk/rest/models/model_scan_api_v3_scan_query200_response.py +102 -0
  50. hiddenlayer/sdk/rest/models/multiformat_message_string.py +95 -0
  51. hiddenlayer/sdk/rest/models/multipart_upload_part.py +1 -1
  52. hiddenlayer/sdk/rest/models/node.py +122 -0
  53. hiddenlayer/sdk/rest/models/notification.py +157 -0
  54. hiddenlayer/sdk/rest/models/paged_response_with_total.py +94 -0
  55. hiddenlayer/sdk/rest/models/physical_location.py +94 -0
  56. hiddenlayer/sdk/rest/models/property_bag.py +101 -0
  57. hiddenlayer/sdk/rest/models/rectangle.py +110 -0
  58. hiddenlayer/sdk/rest/models/region.py +127 -0
  59. hiddenlayer/sdk/rest/models/replacement.py +103 -0
  60. hiddenlayer/sdk/rest/models/reporting_configuration.py +113 -0
  61. hiddenlayer/sdk/rest/models/reporting_descriptor.py +162 -0
  62. hiddenlayer/sdk/rest/models/reporting_descriptor_reference.py +103 -0
  63. hiddenlayer/sdk/rest/models/reporting_descriptor_relationship.py +115 -0
  64. hiddenlayer/sdk/rest/models/result.py +312 -0
  65. hiddenlayer/sdk/rest/models/result_provenance.py +133 -0
  66. hiddenlayer/sdk/rest/models/rule_details_inner.py +102 -0
  67. hiddenlayer/sdk/rest/models/run.py +318 -0
  68. hiddenlayer/sdk/rest/models/run_automation_details.py +129 -0
  69. hiddenlayer/sdk/rest/models/sarif210.py +123 -0
  70. hiddenlayer/sdk/rest/models/scan_create_request.py +87 -0
  71. hiddenlayer/sdk/rest/models/scan_detection_v3.py +156 -0
  72. hiddenlayer/sdk/rest/models/scan_header_v3.py +129 -0
  73. hiddenlayer/sdk/rest/models/scan_job.py +109 -0
  74. hiddenlayer/sdk/rest/models/scan_job_inventory.py +137 -0
  75. hiddenlayer/sdk/rest/models/scan_model_details_v3.py +95 -0
  76. hiddenlayer/sdk/rest/models/scan_model_ids_v3.py +89 -0
  77. hiddenlayer/sdk/rest/models/scan_model_request.py +1 -1
  78. hiddenlayer/sdk/rest/models/scan_report_v3.py +139 -0
  79. hiddenlayer/sdk/rest/models/{file_info.py → scan_results.py} +14 -6
  80. hiddenlayer/sdk/rest/models/scan_results_v2.py +30 -10
  81. hiddenlayer/sdk/rest/models/security_posture.py +89 -0
  82. hiddenlayer/sdk/rest/models/sensor_sor_model_card_query_response.py +101 -0
  83. hiddenlayer/sdk/rest/models/sensor_sor_model_card_response.py +127 -0
  84. hiddenlayer/sdk/rest/models/sensor_sor_query_filter.py +1 -1
  85. hiddenlayer/sdk/rest/models/sensor_sor_query_request.py +1 -1
  86. hiddenlayer/sdk/rest/models/special_locations.py +97 -0
  87. hiddenlayer/sdk/rest/models/stack.py +113 -0
  88. hiddenlayer/sdk/rest/models/stack_frame.py +104 -0
  89. hiddenlayer/sdk/rest/models/submission_response.py +1 -1
  90. hiddenlayer/sdk/rest/models/submission_v2.py +1 -1
  91. hiddenlayer/sdk/rest/models/suppression.py +133 -0
  92. hiddenlayer/sdk/rest/models/thread_flow.py +144 -0
  93. hiddenlayer/sdk/rest/models/thread_flow_location.py +166 -0
  94. hiddenlayer/sdk/rest/models/tool.py +107 -0
  95. hiddenlayer/sdk/rest/models/tool_component.py +251 -0
  96. hiddenlayer/sdk/rest/models/tool_component_reference.py +108 -0
  97. hiddenlayer/sdk/rest/models/translation_metadata.py +110 -0
  98. hiddenlayer/sdk/rest/models/validation_error_model.py +4 -4
  99. hiddenlayer/sdk/rest/models/version_control_details.py +108 -0
  100. hiddenlayer/sdk/rest/models/web_request.py +112 -0
  101. hiddenlayer/sdk/rest/models/web_response.py +112 -0
  102. hiddenlayer/sdk/rest/rest.py +1 -1
  103. hiddenlayer/sdk/services/model.py +5 -2
  104. hiddenlayer/sdk/services/model_scan.py +153 -105
  105. hiddenlayer/sdk/version.py +1 -1
  106. {hiddenlayer_sdk-0.1.1.dist-info → hiddenlayer_sdk-1.0.0.dist-info}/METADATA +39 -20
  107. hiddenlayer_sdk-1.0.0.dist-info/RECORD +118 -0
  108. {hiddenlayer_sdk-0.1.1.dist-info → hiddenlayer_sdk-1.0.0.dist-info}/WHEEL +1 -1
  109. hiddenlayer/sdk/enterprise/__init__.py +0 -0
  110. hiddenlayer/sdk/enterprise/enterprise_model_scan_api.py +0 -55
  111. hiddenlayer_sdk-0.1.1.dist-info/RECORD +0 -43
  112. {hiddenlayer_sdk-0.1.1.dist-info → hiddenlayer_sdk-1.0.0.dist-info}/LICENSE +0 -0
  113. {hiddenlayer_sdk-0.1.1.dist-info → hiddenlayer_sdk-1.0.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,89 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ HiddenLayer ModelScan V2
5
+
6
+ HiddenLayer ModelScan API for scanning of models
7
+
8
+ The version of the OpenAPI document: 1
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictStr
21
+ from typing import Any, ClassVar, Dict, List
22
+ from typing import Optional, Set
23
+ from typing_extensions import Self
24
+
25
+ class ScanModelIdsV3(BaseModel):
26
+ """
27
+ ScanModelIdsV3
28
+ """ # noqa: E501
29
+ model_id: StrictStr = Field(description="Unique identifier for the model")
30
+ model_version_id: StrictStr = Field(description="unique identifier for the model version")
31
+ __properties: ClassVar[List[str]] = ["model_id", "model_version_id"]
32
+
33
+ model_config = ConfigDict(
34
+ populate_by_name=True,
35
+ validate_assignment=True,
36
+ protected_namespaces=(),
37
+ )
38
+
39
+
40
+ def to_str(self) -> str:
41
+ """Returns the string representation of the model using alias"""
42
+ return pprint.pformat(self.model_dump(by_alias=True))
43
+
44
+ def to_json(self) -> str:
45
+ """Returns the JSON representation of the model using alias"""
46
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
47
+ return json.dumps(self.to_dict())
48
+
49
+ @classmethod
50
+ def from_json(cls, json_str: str) -> Optional[Self]:
51
+ """Create an instance of ScanModelIdsV3 from a JSON string"""
52
+ return cls.from_dict(json.loads(json_str))
53
+
54
+ def to_dict(self) -> Dict[str, Any]:
55
+ """Return the dictionary representation of the model using alias.
56
+
57
+ This has the following differences from calling pydantic's
58
+ `self.model_dump(by_alias=True)`:
59
+
60
+ * `None` is only added to the output dict for nullable fields that
61
+ were set at model initialization. Other fields with value `None`
62
+ are ignored.
63
+ """
64
+ excluded_fields: Set[str] = set([
65
+ ])
66
+
67
+ _dict = self.model_dump(
68
+ by_alias=True,
69
+ exclude=excluded_fields,
70
+ exclude_none=True,
71
+ )
72
+ return _dict
73
+
74
+ @classmethod
75
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
76
+ """Create an instance of ScanModelIdsV3 from a dict"""
77
+ if obj is None:
78
+ return None
79
+
80
+ if not isinstance(obj, dict):
81
+ return cls.model_validate(obj)
82
+
83
+ _obj = cls.model_validate({
84
+ "model_id": obj.get("model_id"),
85
+ "model_version_id": obj.get("model_version_id")
86
+ })
87
+ return _obj
88
+
89
+
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
2
 
3
3
  """
4
- HiddenLayer ModelScan
4
+ HiddenLayer ModelScan V2
5
5
 
6
6
  HiddenLayer ModelScan API for scanning of models
7
7
 
@@ -0,0 +1,139 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ HiddenLayer ModelScan V2
5
+
6
+ HiddenLayer ModelScan API for scanning of models
7
+
8
+ The version of the OpenAPI document: 1
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from datetime import datetime
21
+ from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr, field_validator
22
+ from typing import Any, ClassVar, Dict, List, Optional
23
+ from hiddenlayer.sdk.rest.models.file_results_inner import FileResultsInner
24
+ from hiddenlayer.sdk.rest.models.model_inventory_info import ModelInventoryInfo
25
+ from typing import Optional, Set
26
+ from typing_extensions import Self
27
+
28
+ class ScanReportV3(BaseModel):
29
+ """
30
+ ScanReportV3
31
+ """ # noqa: E501
32
+ file_count: StrictInt = Field(description="number of files scanned")
33
+ files_with_detections_count: StrictInt = Field(description="number of files with detections found")
34
+ detection_count: StrictInt = Field(description="number of detections found")
35
+ detection_categories: Optional[List[StrictStr]] = Field(default=None, description="list of detection categories found")
36
+ inventory: ModelInventoryInfo
37
+ version: StrictStr = Field(description="scanner version")
38
+ scan_id: StrictStr = Field(description="unique identifier for the scan")
39
+ start_time: datetime = Field(description="time the scan started")
40
+ end_time: Optional[datetime] = Field(default=None, description="time the scan ended")
41
+ status: StrictStr = Field(description="status of the scan")
42
+ severity: Optional[StrictStr] = Field(default=None, description="detection severity")
43
+ file_results: Optional[List[FileResultsInner]] = None
44
+ __properties: ClassVar[List[str]] = ["file_count", "files_with_detections_count", "detection_count", "detection_categories", "inventory", "version", "scan_id", "start_time", "end_time", "status", "severity", "file_results"]
45
+
46
+ @field_validator('status')
47
+ def status_validate_enum(cls, value):
48
+ """Validates the enum"""
49
+ if value not in set(['pending', 'running', 'done', 'failed', 'canceled']):
50
+ raise ValueError("must be one of enum values ('pending', 'running', 'done', 'failed', 'canceled')")
51
+ return value
52
+
53
+ @field_validator('severity')
54
+ def severity_validate_enum(cls, value):
55
+ """Validates the enum"""
56
+ if value is None:
57
+ return value
58
+
59
+ if value not in set(['low', 'medium', 'high', 'critical', 'safe', 'unknown']):
60
+ raise ValueError("must be one of enum values ('low', 'medium', 'high', 'critical', 'safe', 'unknown')")
61
+ return value
62
+
63
+ model_config = ConfigDict(
64
+ populate_by_name=True,
65
+ validate_assignment=True,
66
+ protected_namespaces=(),
67
+ )
68
+
69
+
70
+ def to_str(self) -> str:
71
+ """Returns the string representation of the model using alias"""
72
+ return pprint.pformat(self.model_dump(by_alias=True))
73
+
74
+ def to_json(self) -> str:
75
+ """Returns the JSON representation of the model using alias"""
76
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
77
+ return json.dumps(self.to_dict())
78
+
79
+ @classmethod
80
+ def from_json(cls, json_str: str) -> Optional[Self]:
81
+ """Create an instance of ScanReportV3 from a JSON string"""
82
+ return cls.from_dict(json.loads(json_str))
83
+
84
+ def to_dict(self) -> Dict[str, Any]:
85
+ """Return the dictionary representation of the model using alias.
86
+
87
+ This has the following differences from calling pydantic's
88
+ `self.model_dump(by_alias=True)`:
89
+
90
+ * `None` is only added to the output dict for nullable fields that
91
+ were set at model initialization. Other fields with value `None`
92
+ are ignored.
93
+ """
94
+ excluded_fields: Set[str] = set([
95
+ ])
96
+
97
+ _dict = self.model_dump(
98
+ by_alias=True,
99
+ exclude=excluded_fields,
100
+ exclude_none=True,
101
+ )
102
+ # override the default output from pydantic by calling `to_dict()` of inventory
103
+ if self.inventory:
104
+ _dict['inventory'] = self.inventory.to_dict()
105
+ # override the default output from pydantic by calling `to_dict()` of each item in file_results (list)
106
+ _items = []
107
+ if self.file_results:
108
+ for _item in self.file_results:
109
+ if _item:
110
+ _items.append(_item.to_dict())
111
+ _dict['file_results'] = _items
112
+ return _dict
113
+
114
+ @classmethod
115
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
116
+ """Create an instance of ScanReportV3 from a dict"""
117
+ if obj is None:
118
+ return None
119
+
120
+ if not isinstance(obj, dict):
121
+ return cls.model_validate(obj)
122
+
123
+ _obj = cls.model_validate({
124
+ "file_count": obj.get("file_count"),
125
+ "files_with_detections_count": obj.get("files_with_detections_count"),
126
+ "detection_count": obj.get("detection_count"),
127
+ "detection_categories": obj.get("detection_categories"),
128
+ "inventory": ModelInventoryInfo.from_dict(obj["inventory"]) if obj.get("inventory") is not None else None,
129
+ "version": obj.get("version"),
130
+ "scan_id": obj.get("scan_id"),
131
+ "start_time": obj.get("start_time"),
132
+ "end_time": obj.get("end_time"),
133
+ "status": obj.get("status"),
134
+ "severity": obj.get("severity"),
135
+ "file_results": [FileResultsInner.from_dict(_item) for _item in obj["file_results"]] if obj.get("file_results") is not None else None
136
+ })
137
+ return _obj
138
+
139
+
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
2
 
3
3
  """
4
- HiddenLayer ModelScan
4
+ HiddenLayer ModelScan V2
5
5
 
6
6
  HiddenLayer ModelScan API for scanning of models
7
7
 
@@ -22,18 +22,22 @@ from typing import Any, ClassVar, Dict, List, Optional
22
22
  from typing import Optional, Set
23
23
  from typing_extensions import Self
24
24
 
25
- class FileInfo(BaseModel):
25
+ class ScanResults(BaseModel):
26
26
  """
27
- FileInfo
27
+ ScanResults
28
28
  """ # noqa: E501
29
29
  md5: Optional[StrictStr] = None
30
+ rds_encoding: Optional[StrictStr] = None
31
+ rds_min_reader_version: Optional[StrictStr] = None
32
+ rds_version: Optional[StrictStr] = None
33
+ rds_writer_version: Optional[StrictStr] = None
30
34
  sha256: Optional[StrictStr] = None
31
35
  type: Optional[StrictStr] = None
32
36
  subtype: Optional[List[StrictStr]] = None
33
37
  tlsh: Optional[StrictStr] = None
34
38
  pickle_modules: Optional[List[StrictStr]] = None
35
39
  additional_properties: Dict[str, Any] = {}
36
- __properties: ClassVar[List[str]] = ["md5", "sha256", "type", "subtype", "tlsh", "pickle_modules"]
40
+ __properties: ClassVar[List[str]] = ["md5", "rds_encoding", "rds_min_reader_version", "rds_version", "rds_writer_version", "sha256", "type", "subtype", "tlsh", "pickle_modules"]
37
41
 
38
42
  model_config = ConfigDict(
39
43
  populate_by_name=True,
@@ -53,7 +57,7 @@ class FileInfo(BaseModel):
53
57
 
54
58
  @classmethod
55
59
  def from_json(cls, json_str: str) -> Optional[Self]:
56
- """Create an instance of FileInfo from a JSON string"""
60
+ """Create an instance of ScanResults from a JSON string"""
57
61
  return cls.from_dict(json.loads(json_str))
58
62
 
59
63
  def to_dict(self) -> Dict[str, Any]:
@@ -85,7 +89,7 @@ class FileInfo(BaseModel):
85
89
 
86
90
  @classmethod
87
91
  def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
88
- """Create an instance of FileInfo from a dict"""
92
+ """Create an instance of ScanResults from a dict"""
89
93
  if obj is None:
90
94
  return None
91
95
 
@@ -94,6 +98,10 @@ class FileInfo(BaseModel):
94
98
 
95
99
  _obj = cls.model_validate({
96
100
  "md5": obj.get("md5"),
101
+ "rds_encoding": obj.get("rds_encoding"),
102
+ "rds_min_reader_version": obj.get("rds_min_reader_version"),
103
+ "rds_version": obj.get("rds_version"),
104
+ "rds_writer_version": obj.get("rds_writer_version"),
97
105
  "sha256": obj.get("sha256"),
98
106
  "type": obj.get("type"),
99
107
  "subtype": obj.get("subtype"),
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
2
 
3
3
  """
4
- HiddenLayer ModelScan
4
+ HiddenLayer ModelScan V2
5
5
 
6
6
  HiddenLayer ModelScan API for scanning of models
7
7
 
@@ -18,8 +18,9 @@ import re # noqa: F401
18
18
  import json
19
19
 
20
20
  from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr, field_validator
21
- from typing import Any, ClassVar, Dict, List
22
- from hiddenlayer.sdk.rest.models.file_info import FileInfo
21
+ from typing import Any, ClassVar, Dict, List, Optional
22
+ from hiddenlayer.sdk.rest.models.detections import Detections
23
+ from hiddenlayer.sdk.rest.models.scan_results import ScanResults
23
24
  from typing import Optional, Set
24
25
  from typing_extensions import Self
25
26
 
@@ -31,15 +32,26 @@ class ScanResultsV2(BaseModel):
31
32
  status: StrictStr
32
33
  start_time: StrictInt
33
34
  end_time: StrictInt
34
- results: FileInfo
35
- detections: List[Dict[str, Any]]
36
- __properties: ClassVar[List[str]] = ["scan_id", "status", "start_time", "end_time", "results", "detections"]
35
+ results: Optional[ScanResults] = None
36
+ severity: Optional[StrictStr] = None
37
+ detections: List[Detections]
38
+ __properties: ClassVar[List[str]] = ["scan_id", "status", "start_time", "end_time", "results", "severity", "detections"]
37
39
 
38
40
  @field_validator('status')
39
41
  def status_validate_enum(cls, value):
40
42
  """Validates the enum"""
41
- if value not in set(['done', 'accepted', 'failed', 'pending', 'created', 'retry']):
42
- raise ValueError("must be one of enum values ('done', 'accepted', 'failed', 'pending', 'created', 'retry')")
43
+ if value not in set(['done', 'accepted', 'failed', 'pending', 'created', 'retry', 'unknown']):
44
+ raise ValueError("must be one of enum values ('done', 'accepted', 'failed', 'pending', 'created', 'retry', 'unknown')")
45
+ return value
46
+
47
+ @field_validator('severity')
48
+ def severity_validate_enum(cls, value):
49
+ """Validates the enum"""
50
+ if value is None:
51
+ return value
52
+
53
+ if value not in set(['UNKNOWN', 'SAFE', 'SUSPICIOUS', 'MALICIOUS']):
54
+ raise ValueError("must be one of enum values ('UNKNOWN', 'SAFE', 'SUSPICIOUS', 'MALICIOUS')")
43
55
  return value
44
56
 
45
57
  model_config = ConfigDict(
@@ -84,6 +96,13 @@ class ScanResultsV2(BaseModel):
84
96
  # override the default output from pydantic by calling `to_dict()` of results
85
97
  if self.results:
86
98
  _dict['results'] = self.results.to_dict()
99
+ # override the default output from pydantic by calling `to_dict()` of each item in detections (list)
100
+ _items = []
101
+ if self.detections:
102
+ for _item in self.detections:
103
+ if _item:
104
+ _items.append(_item.to_dict())
105
+ _dict['detections'] = _items
87
106
  return _dict
88
107
 
89
108
  @classmethod
@@ -100,8 +119,9 @@ class ScanResultsV2(BaseModel):
100
119
  "status": obj.get("status"),
101
120
  "start_time": obj.get("start_time"),
102
121
  "end_time": obj.get("end_time"),
103
- "results": FileInfo.from_dict(obj["results"]) if obj.get("results") is not None else None,
104
- "detections": obj.get("detections")
122
+ "results": ScanResults.from_dict(obj["results"]) if obj.get("results") is not None else None,
123
+ "severity": obj.get("severity"),
124
+ "detections": [Detections.from_dict(_item) for _item in obj["detections"]] if obj.get("detections") is not None else None
105
125
  })
106
126
  return _obj
107
127
 
@@ -0,0 +1,89 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ HiddenLayer ModelScan V2
5
+
6
+ HiddenLayer ModelScan API for scanning of models
7
+
8
+ The version of the OpenAPI document: 1
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, StrictBool
21
+ from typing import Any, ClassVar, Dict, List, Optional
22
+ from typing import Optional, Set
23
+ from typing_extensions import Self
24
+
25
+ class SecurityPosture(BaseModel):
26
+ """
27
+ SecurityPosture
28
+ """ # noqa: E501
29
+ model_scan: Optional[StrictBool] = None
30
+ attack_monitoring: Optional[StrictBool] = None
31
+ __properties: ClassVar[List[str]] = ["model_scan", "attack_monitoring"]
32
+
33
+ model_config = ConfigDict(
34
+ populate_by_name=True,
35
+ validate_assignment=True,
36
+ protected_namespaces=(),
37
+ )
38
+
39
+
40
+ def to_str(self) -> str:
41
+ """Returns the string representation of the model using alias"""
42
+ return pprint.pformat(self.model_dump(by_alias=True))
43
+
44
+ def to_json(self) -> str:
45
+ """Returns the JSON representation of the model using alias"""
46
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
47
+ return json.dumps(self.to_dict())
48
+
49
+ @classmethod
50
+ def from_json(cls, json_str: str) -> Optional[Self]:
51
+ """Create an instance of SecurityPosture from a JSON string"""
52
+ return cls.from_dict(json.loads(json_str))
53
+
54
+ def to_dict(self) -> Dict[str, Any]:
55
+ """Return the dictionary representation of the model using alias.
56
+
57
+ This has the following differences from calling pydantic's
58
+ `self.model_dump(by_alias=True)`:
59
+
60
+ * `None` is only added to the output dict for nullable fields that
61
+ were set at model initialization. Other fields with value `None`
62
+ are ignored.
63
+ """
64
+ excluded_fields: Set[str] = set([
65
+ ])
66
+
67
+ _dict = self.model_dump(
68
+ by_alias=True,
69
+ exclude=excluded_fields,
70
+ exclude_none=True,
71
+ )
72
+ return _dict
73
+
74
+ @classmethod
75
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
76
+ """Create an instance of SecurityPosture from a dict"""
77
+ if obj is None:
78
+ return None
79
+
80
+ if not isinstance(obj, dict):
81
+ return cls.model_validate(obj)
82
+
83
+ _obj = cls.model_validate({
84
+ "model_scan": obj.get("model_scan"),
85
+ "attack_monitoring": obj.get("attack_monitoring")
86
+ })
87
+ return _obj
88
+
89
+
@@ -0,0 +1,101 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ HiddenLayer ModelScan V2
5
+
6
+ HiddenLayer ModelScan API for scanning of models
7
+
8
+ The version of the OpenAPI document: 1
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, StrictInt
21
+ from typing import Any, ClassVar, Dict, List
22
+ from hiddenlayer.sdk.rest.models.sensor_sor_model_card_response import SensorSORModelCardResponse
23
+ from typing import Optional, Set
24
+ from typing_extensions import Self
25
+
26
+ class SensorSORModelCardQueryResponse(BaseModel):
27
+ """
28
+ SensorSORModelCardQueryResponse
29
+ """ # noqa: E501
30
+ total_count: StrictInt
31
+ page_size: StrictInt
32
+ page_number: StrictInt
33
+ results: List[SensorSORModelCardResponse]
34
+ __properties: ClassVar[List[str]] = ["total_count", "page_size", "page_number", "results"]
35
+
36
+ model_config = ConfigDict(
37
+ populate_by_name=True,
38
+ validate_assignment=True,
39
+ protected_namespaces=(),
40
+ )
41
+
42
+
43
+ def to_str(self) -> str:
44
+ """Returns the string representation of the model using alias"""
45
+ return pprint.pformat(self.model_dump(by_alias=True))
46
+
47
+ def to_json(self) -> str:
48
+ """Returns the JSON representation of the model using alias"""
49
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
50
+ return json.dumps(self.to_dict())
51
+
52
+ @classmethod
53
+ def from_json(cls, json_str: str) -> Optional[Self]:
54
+ """Create an instance of SensorSORModelCardQueryResponse from a JSON string"""
55
+ return cls.from_dict(json.loads(json_str))
56
+
57
+ def to_dict(self) -> Dict[str, Any]:
58
+ """Return the dictionary representation of the model using alias.
59
+
60
+ This has the following differences from calling pydantic's
61
+ `self.model_dump(by_alias=True)`:
62
+
63
+ * `None` is only added to the output dict for nullable fields that
64
+ were set at model initialization. Other fields with value `None`
65
+ are ignored.
66
+ """
67
+ excluded_fields: Set[str] = set([
68
+ ])
69
+
70
+ _dict = self.model_dump(
71
+ by_alias=True,
72
+ exclude=excluded_fields,
73
+ exclude_none=True,
74
+ )
75
+ # override the default output from pydantic by calling `to_dict()` of each item in results (list)
76
+ _items = []
77
+ if self.results:
78
+ for _item in self.results:
79
+ if _item:
80
+ _items.append(_item.to_dict())
81
+ _dict['results'] = _items
82
+ return _dict
83
+
84
+ @classmethod
85
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
86
+ """Create an instance of SensorSORModelCardQueryResponse from a dict"""
87
+ if obj is None:
88
+ return None
89
+
90
+ if not isinstance(obj, dict):
91
+ return cls.model_validate(obj)
92
+
93
+ _obj = cls.model_validate({
94
+ "total_count": obj.get("total_count"),
95
+ "page_size": obj.get("page_size"),
96
+ "page_number": obj.get("page_number"),
97
+ "results": [SensorSORModelCardResponse.from_dict(_item) for _item in obj["results"]] if obj.get("results") is not None else None
98
+ })
99
+ return _obj
100
+
101
+