kalir-python 0.1.0__py3-none-any.whl
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.
- kalir/__init__.py +11 -0
- kalir/api/__init__.py +1 -0
- kalir/api/assets/__init__.py +1 -0
- kalir/api/assets/create_asset.py +193 -0
- kalir/api/assets/delete_asset.py +182 -0
- kalir/api/assets/get_asset.py +186 -0
- kalir/api/assets/list_assets.py +165 -0
- kalir/api/assets/update_asset.py +206 -0
- kalir/api/events/__init__.py +1 -0
- kalir/api/events/get_event.py +194 -0
- kalir/api/events/ingest_event.py +215 -0
- kalir/api/events/list_events.py +259 -0
- kalir/api/exposures/__init__.py +1 -0
- kalir/api/exposures/count_exposures.py +165 -0
- kalir/api/exposures/get_infostealer_summary.py +181 -0
- kalir/api/exposures/list_exposures.py +225 -0
- kalir/api/incidents/__init__.py +1 -0
- kalir/api/incidents/get_incident.py +194 -0
- kalir/api/incidents/list_incidents.py +265 -0
- kalir/api/incidents/update_incident_status.py +207 -0
- kalir/api/intel/__init__.py +1 -0
- kalir/api/intel/get_ransomware_stats.py +165 -0
- kalir/api/intel/list_ransomware_victims.py +165 -0
- kalir/api/mentions/__init__.py +1 -0
- kalir/api/mentions/list_mentions.py +283 -0
- kalir/api/overview/__init__.py +1 -0
- kalir/api/overview/get_overview.py +184 -0
- kalir/api/phishing/__init__.py +1 -0
- kalir/api/phishing/list_phishing.py +245 -0
- kalir/api/reports/__init__.py +1 -0
- kalir/api/reports/create_report.py +193 -0
- kalir/api/reports/download_report.py +186 -0
- kalir/api/reports/list_reports.py +165 -0
- kalir/api/rules/__init__.py +1 -0
- kalir/api/rules/create_rule.py +193 -0
- kalir/api/rules/delete_rule.py +183 -0
- kalir/api/rules/get_rule.py +187 -0
- kalir/api/rules/list_rules.py +165 -0
- kalir/api/rules/replace_rule.py +207 -0
- kalir/api/takedowns/__init__.py +1 -0
- kalir/api/takedowns/count_takedowns.py +165 -0
- kalir/api/takedowns/create_takedown.py +193 -0
- kalir/api/takedowns/delete_takedown.py +183 -0
- kalir/api/takedowns/get_takedown.py +187 -0
- kalir/api/takedowns/list_takedowns.py +165 -0
- kalir/api/takedowns/replace_takedown.py +210 -0
- kalir/api/takedowns/update_takedown.py +210 -0
- kalir/api/webhooks/__init__.py +1 -0
- kalir/api/webhooks/create_webhook.py +222 -0
- kalir/api/webhooks/delete_webhook.py +190 -0
- kalir/api/webhooks/get_webhook.py +194 -0
- kalir/api/webhooks/get_webhook_delivery.py +194 -0
- kalir/api/webhooks/list_webhook_deliveries.py +239 -0
- kalir/api/webhooks/list_webhook_event_types.py +165 -0
- kalir/api/webhooks/list_webhooks.py +172 -0
- kalir/api/webhooks/retry_webhook_delivery.py +190 -0
- kalir/api/webhooks/rotate_webhook_secret.py +202 -0
- kalir/api/webhooks/send_webhook_test.py +202 -0
- kalir/api/webhooks/update_webhook.py +229 -0
- kalir/client.py +271 -0
- kalir/errors.py +14 -0
- kalir/models/__init__.py +195 -0
- kalir/models/asset.py +162 -0
- kalir/models/asset_create.py +122 -0
- kalir/models/asset_create_asset_type.py +14 -0
- kalir/models/asset_create_metadata.py +64 -0
- kalir/models/count_exposures_response_200.py +78 -0
- kalir/models/count_takedowns_response_200.py +96 -0
- kalir/models/create_report_body.py +96 -0
- kalir/models/create_report_body_type.py +10 -0
- kalir/models/create_webhook_response_201.py +111 -0
- kalir/models/error.py +84 -0
- kalir/models/error_error.py +106 -0
- kalir/models/error_error_type.py +15 -0
- kalir/models/event.py +151 -0
- kalir/models/event_asset.py +87 -0
- kalir/models/event_ingest.py +146 -0
- kalir/models/event_ingest_asset.py +87 -0
- kalir/models/event_ingest_evidence.py +64 -0
- kalir/models/event_ingest_source.py +87 -0
- kalir/models/exposure.py +137 -0
- kalir/models/exposure_webhook_event.py +152 -0
- kalir/models/exposure_webhook_event_data.py +115 -0
- kalir/models/exposure_webhook_event_data_exposure.py +149 -0
- kalir/models/exposure_webhook_event_data_infection.py +136 -0
- kalir/models/exposure_webhook_event_type.py +8 -0
- kalir/models/get_incident_response_200.py +174 -0
- kalir/models/get_infostealer_summary_response_200.py +100 -0
- kalir/models/get_ransomware_stats_response_200.py +156 -0
- kalir/models/get_ransomware_stats_response_200_top_countries_7d_item.py +64 -0
- kalir/models/get_ransomware_stats_response_200_top_groups_7d_item.py +64 -0
- kalir/models/incident.py +170 -0
- kalir/models/incident_severity.py +10 -0
- kalir/models/incident_status.py +10 -0
- kalir/models/incident_webhook_event.py +152 -0
- kalir/models/incident_webhook_event_data.py +115 -0
- kalir/models/incident_webhook_event_data_previous.py +88 -0
- kalir/models/incident_webhook_event_type.py +9 -0
- kalir/models/infostealer_domain_summary.py +122 -0
- kalir/models/infostealer_domain_summary_snapshot.py +201 -0
- kalir/models/infostealer_domain_summary_snapshot_top_employee_urls_item.py +87 -0
- kalir/models/infostealer_domain_summary_snapshot_top_families_item.py +87 -0
- kalir/models/list_assets_response_200.py +100 -0
- kalir/models/list_events_response_200.py +109 -0
- kalir/models/list_exposures_response_200.py +127 -0
- kalir/models/list_incidents_bucket.py +10 -0
- kalir/models/list_incidents_response_200.py +149 -0
- kalir/models/list_incidents_response_200_counts.py +106 -0
- kalir/models/list_incidents_status.py +12 -0
- kalir/models/list_mentions_response_200.py +122 -0
- kalir/models/list_mentions_source.py +8 -0
- kalir/models/list_phishing_response_200.py +122 -0
- kalir/models/list_phishing_verdict.py +11 -0
- kalir/models/list_ransomware_victims_response_200.py +109 -0
- kalir/models/list_ransomware_victims_response_200_victims_item.py +64 -0
- kalir/models/list_reports_response_200.py +109 -0
- kalir/models/list_rules_response_200.py +100 -0
- kalir/models/list_takedowns_response_200.py +109 -0
- kalir/models/list_webhook_deliveries_response_200.py +122 -0
- kalir/models/list_webhook_event_types_response_200.py +100 -0
- kalir/models/list_webhook_event_types_response_200_data_item.py +87 -0
- kalir/models/list_webhooks_response_200.py +100 -0
- kalir/models/mention.py +194 -0
- kalir/models/mention_source.py +8 -0
- kalir/models/overview.py +231 -0
- kalir/models/overview_assets.py +96 -0
- kalir/models/overview_exposures.py +105 -0
- kalir/models/overview_incidents.py +114 -0
- kalir/models/overview_phishing.py +87 -0
- kalir/models/overview_risk_level.py +10 -0
- kalir/models/overview_takedowns.py +87 -0
- kalir/models/pagination.py +105 -0
- kalir/models/phishing_domain.py +186 -0
- kalir/models/phishing_domain_verdict.py +11 -0
- kalir/models/report.py +182 -0
- kalir/models/report_parameters.py +181 -0
- kalir/models/report_parameters_date_range.py +11 -0
- kalir/models/report_parameters_language.py +8 -0
- kalir/models/report_parameters_sections_item.py +15 -0
- kalir/models/report_status.py +10 -0
- kalir/models/rotate_webhook_secret_response_200.py +87 -0
- kalir/models/rule.py +174 -0
- kalir/models/rule_input.py +134 -0
- kalir/models/rule_input_actions_item.py +64 -0
- kalir/models/takedown.py +163 -0
- kalir/models/takedown_create.py +113 -0
- kalir/models/takedown_update.py +96 -0
- kalir/models/update_incident_status_body.py +90 -0
- kalir/models/update_incident_status_body_status.py +10 -0
- kalir/models/webhook_delivery.py +274 -0
- kalir/models/webhook_delivery_payload.py +64 -0
- kalir/models/webhook_delivery_status.py +9 -0
- kalir/models/webhook_endpoint.py +216 -0
- kalir/models/webhook_endpoint_input.py +124 -0
- kalir/models/webhook_endpoint_input_event_types_item.py +11 -0
- kalir/models/webhook_incident.py +232 -0
- kalir/models/webhook_incident_severity.py +10 -0
- kalir/py.typed +1 -0
- kalir/types.py +53 -0
- kalir/webhooks.py +63 -0
- kalir_python-0.1.0.dist-info/METADATA +76 -0
- kalir_python-0.1.0.dist-info/RECORD +163 -0
- kalir_python-0.1.0.dist-info/WHEEL +4 -0
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator
|
|
5
|
+
|
|
6
|
+
from attrs import define as _attrs_define
|
|
7
|
+
from attrs import field as _attrs_field
|
|
8
|
+
|
|
9
|
+
from ..types import UNSET, Unset
|
|
10
|
+
|
|
11
|
+
from ..types import UNSET, Unset
|
|
12
|
+
from typing import cast
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from ..models.event import Event
|
|
16
|
+
from ..models.incident import Incident
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
T = TypeVar("T", bound="GetIncidentResponse200")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@_attrs_define
|
|
27
|
+
class GetIncidentResponse200:
|
|
28
|
+
"""
|
|
29
|
+
Attributes:
|
|
30
|
+
incident (Incident | Unset):
|
|
31
|
+
events (list[Event] | Unset): The newest 200 events, newest first. Page through all of them with `GET
|
|
32
|
+
/v1/events/list?incident_id=`.
|
|
33
|
+
events_total (int | Unset): Total events in the incident.
|
|
34
|
+
ttfr_minutes (int | None | Unset): Minutes to first response (acknowledge).
|
|
35
|
+
mttr_minutes (int | None | Unset): Minutes to resolution.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
incident: Incident | Unset = UNSET
|
|
39
|
+
events: list[Event] | Unset = UNSET
|
|
40
|
+
events_total: int | Unset = UNSET
|
|
41
|
+
ttfr_minutes: int | None | Unset = UNSET
|
|
42
|
+
mttr_minutes: int | None | Unset = UNSET
|
|
43
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def to_dict(self) -> dict[str, Any]:
|
|
50
|
+
from ..models.event import Event # noqa: PLC0415
|
|
51
|
+
from ..models.incident import Incident # noqa: PLC0415
|
|
52
|
+
incident: dict[str, Any] | Unset = UNSET
|
|
53
|
+
if not isinstance(self.incident, Unset):
|
|
54
|
+
incident = self.incident.to_dict()
|
|
55
|
+
|
|
56
|
+
events: list[dict[str, Any]] | Unset = UNSET
|
|
57
|
+
if not isinstance(self.events, Unset):
|
|
58
|
+
events = []
|
|
59
|
+
for events_item_data in self.events:
|
|
60
|
+
events_item = events_item_data.to_dict()
|
|
61
|
+
events.append(events_item)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
events_total = self.events_total
|
|
66
|
+
|
|
67
|
+
ttfr_minutes: int | None | Unset
|
|
68
|
+
if isinstance(self.ttfr_minutes, Unset):
|
|
69
|
+
ttfr_minutes = UNSET
|
|
70
|
+
else:
|
|
71
|
+
ttfr_minutes = self.ttfr_minutes
|
|
72
|
+
|
|
73
|
+
mttr_minutes: int | None | Unset
|
|
74
|
+
if isinstance(self.mttr_minutes, Unset):
|
|
75
|
+
mttr_minutes = UNSET
|
|
76
|
+
else:
|
|
77
|
+
mttr_minutes = self.mttr_minutes
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
field_dict: dict[str, Any] = {}
|
|
81
|
+
field_dict.update(self.additional_properties)
|
|
82
|
+
field_dict.update({
|
|
83
|
+
})
|
|
84
|
+
if incident is not UNSET:
|
|
85
|
+
field_dict["incident"] = incident
|
|
86
|
+
if events is not UNSET:
|
|
87
|
+
field_dict["events"] = events
|
|
88
|
+
if events_total is not UNSET:
|
|
89
|
+
field_dict["events_total"] = events_total
|
|
90
|
+
if ttfr_minutes is not UNSET:
|
|
91
|
+
field_dict["ttfr_minutes"] = ttfr_minutes
|
|
92
|
+
if mttr_minutes is not UNSET:
|
|
93
|
+
field_dict["mttr_minutes"] = mttr_minutes
|
|
94
|
+
|
|
95
|
+
return field_dict
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
@classmethod
|
|
100
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
101
|
+
from ..models.event import Event # noqa: PLC0415
|
|
102
|
+
from ..models.incident import Incident # noqa: PLC0415
|
|
103
|
+
d = dict(src_dict)
|
|
104
|
+
_incident = d.pop("incident", UNSET)
|
|
105
|
+
incident: Incident | Unset
|
|
106
|
+
if isinstance(_incident, Unset):
|
|
107
|
+
incident = UNSET
|
|
108
|
+
else:
|
|
109
|
+
incident = Incident.from_dict(_incident)
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
_events = d.pop("events", UNSET)
|
|
115
|
+
events: list[Event] | Unset = UNSET
|
|
116
|
+
if _events is not UNSET:
|
|
117
|
+
events = []
|
|
118
|
+
for events_item_data in _events:
|
|
119
|
+
events_item = Event.from_dict(events_item_data)
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
events.append(events_item)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
events_total = d.pop("events_total", UNSET)
|
|
127
|
+
|
|
128
|
+
def _parse_ttfr_minutes(data: object) -> int | None | Unset:
|
|
129
|
+
if data is None:
|
|
130
|
+
return data
|
|
131
|
+
if isinstance(data, Unset):
|
|
132
|
+
return data
|
|
133
|
+
return cast(int | None | Unset, data)
|
|
134
|
+
|
|
135
|
+
ttfr_minutes = _parse_ttfr_minutes(d.pop("ttfr_minutes", UNSET))
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def _parse_mttr_minutes(data: object) -> int | None | Unset:
|
|
139
|
+
if data is None:
|
|
140
|
+
return data
|
|
141
|
+
if isinstance(data, Unset):
|
|
142
|
+
return data
|
|
143
|
+
return cast(int | None | Unset, data)
|
|
144
|
+
|
|
145
|
+
mttr_minutes = _parse_mttr_minutes(d.pop("mttr_minutes", UNSET))
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
get_incident_response_200 = cls(
|
|
149
|
+
incident=incident,
|
|
150
|
+
events=events,
|
|
151
|
+
events_total=events_total,
|
|
152
|
+
ttfr_minutes=ttfr_minutes,
|
|
153
|
+
mttr_minutes=mttr_minutes,
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
get_incident_response_200.additional_properties = d
|
|
158
|
+
return get_incident_response_200
|
|
159
|
+
|
|
160
|
+
@property
|
|
161
|
+
def additional_keys(self) -> list[str]:
|
|
162
|
+
return list(self.additional_properties.keys())
|
|
163
|
+
|
|
164
|
+
def __getitem__(self, key: str) -> Any:
|
|
165
|
+
return self.additional_properties[key]
|
|
166
|
+
|
|
167
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
168
|
+
self.additional_properties[key] = value
|
|
169
|
+
|
|
170
|
+
def __delitem__(self, key: str) -> None:
|
|
171
|
+
del self.additional_properties[key]
|
|
172
|
+
|
|
173
|
+
def __contains__(self, key: str) -> bool:
|
|
174
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator
|
|
5
|
+
|
|
6
|
+
from attrs import define as _attrs_define
|
|
7
|
+
from attrs import field as _attrs_field
|
|
8
|
+
|
|
9
|
+
from ..types import UNSET, Unset
|
|
10
|
+
|
|
11
|
+
from ..types import UNSET, Unset
|
|
12
|
+
from typing import cast
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from ..models.infostealer_domain_summary import InfostealerDomainSummary
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
T = TypeVar("T", bound="GetInfostealerSummaryResponse200")
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@_attrs_define
|
|
26
|
+
class GetInfostealerSummaryResponse200:
|
|
27
|
+
"""
|
|
28
|
+
Attributes:
|
|
29
|
+
domains (list[InfostealerDomainSummary] | Unset):
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
domains: list[InfostealerDomainSummary] | Unset = UNSET
|
|
33
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def to_dict(self) -> dict[str, Any]:
|
|
40
|
+
from ..models.infostealer_domain_summary import InfostealerDomainSummary # noqa: PLC0415
|
|
41
|
+
domains: list[dict[str, Any]] | Unset = UNSET
|
|
42
|
+
if not isinstance(self.domains, Unset):
|
|
43
|
+
domains = []
|
|
44
|
+
for domains_item_data in self.domains:
|
|
45
|
+
domains_item = domains_item_data.to_dict()
|
|
46
|
+
domains.append(domains_item)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
field_dict: dict[str, Any] = {}
|
|
52
|
+
field_dict.update(self.additional_properties)
|
|
53
|
+
field_dict.update({
|
|
54
|
+
})
|
|
55
|
+
if domains is not UNSET:
|
|
56
|
+
field_dict["domains"] = domains
|
|
57
|
+
|
|
58
|
+
return field_dict
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
@classmethod
|
|
63
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
64
|
+
from ..models.infostealer_domain_summary import InfostealerDomainSummary # noqa: PLC0415
|
|
65
|
+
d = dict(src_dict)
|
|
66
|
+
_domains = d.pop("domains", UNSET)
|
|
67
|
+
domains: list[InfostealerDomainSummary] | Unset = UNSET
|
|
68
|
+
if _domains is not UNSET:
|
|
69
|
+
domains = []
|
|
70
|
+
for domains_item_data in _domains:
|
|
71
|
+
domains_item = InfostealerDomainSummary.from_dict(domains_item_data)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
domains.append(domains_item)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
get_infostealer_summary_response_200 = cls(
|
|
79
|
+
domains=domains,
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
get_infostealer_summary_response_200.additional_properties = d
|
|
84
|
+
return get_infostealer_summary_response_200
|
|
85
|
+
|
|
86
|
+
@property
|
|
87
|
+
def additional_keys(self) -> list[str]:
|
|
88
|
+
return list(self.additional_properties.keys())
|
|
89
|
+
|
|
90
|
+
def __getitem__(self, key: str) -> Any:
|
|
91
|
+
return self.additional_properties[key]
|
|
92
|
+
|
|
93
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
94
|
+
self.additional_properties[key] = value
|
|
95
|
+
|
|
96
|
+
def __delitem__(self, key: str) -> None:
|
|
97
|
+
del self.additional_properties[key]
|
|
98
|
+
|
|
99
|
+
def __contains__(self, key: str) -> bool:
|
|
100
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator
|
|
5
|
+
|
|
6
|
+
from attrs import define as _attrs_define
|
|
7
|
+
from attrs import field as _attrs_field
|
|
8
|
+
|
|
9
|
+
from ..types import UNSET, Unset
|
|
10
|
+
|
|
11
|
+
from ..types import UNSET, Unset
|
|
12
|
+
from typing import cast
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from ..models.get_ransomware_stats_response_200_top_countries_7d_item import GetRansomwareStatsResponse200TopCountries7DItem
|
|
16
|
+
from ..models.get_ransomware_stats_response_200_top_groups_7d_item import GetRansomwareStatsResponse200TopGroups7DItem
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
T = TypeVar("T", bound="GetRansomwareStatsResponse200")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@_attrs_define
|
|
27
|
+
class GetRansomwareStatsResponse200:
|
|
28
|
+
"""
|
|
29
|
+
Attributes:
|
|
30
|
+
total (int | Unset):
|
|
31
|
+
last_24h (int | Unset):
|
|
32
|
+
last_7d (int | Unset):
|
|
33
|
+
top_groups_7d (list[GetRansomwareStatsResponse200TopGroups7DItem] | Unset):
|
|
34
|
+
top_countries_7d (list[GetRansomwareStatsResponse200TopCountries7DItem] | Unset):
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
total: int | Unset = UNSET
|
|
38
|
+
last_24h: int | Unset = UNSET
|
|
39
|
+
last_7d: int | Unset = UNSET
|
|
40
|
+
top_groups_7d: list[GetRansomwareStatsResponse200TopGroups7DItem] | Unset = UNSET
|
|
41
|
+
top_countries_7d: list[GetRansomwareStatsResponse200TopCountries7DItem] | Unset = UNSET
|
|
42
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def to_dict(self) -> dict[str, Any]:
|
|
49
|
+
from ..models.get_ransomware_stats_response_200_top_countries_7d_item import GetRansomwareStatsResponse200TopCountries7DItem # noqa: PLC0415
|
|
50
|
+
from ..models.get_ransomware_stats_response_200_top_groups_7d_item import GetRansomwareStatsResponse200TopGroups7DItem # noqa: PLC0415
|
|
51
|
+
total = self.total
|
|
52
|
+
|
|
53
|
+
last_24h = self.last_24h
|
|
54
|
+
|
|
55
|
+
last_7d = self.last_7d
|
|
56
|
+
|
|
57
|
+
top_groups_7d: list[dict[str, Any]] | Unset = UNSET
|
|
58
|
+
if not isinstance(self.top_groups_7d, Unset):
|
|
59
|
+
top_groups_7d = []
|
|
60
|
+
for top_groups_7d_item_data in self.top_groups_7d:
|
|
61
|
+
top_groups_7d_item = top_groups_7d_item_data.to_dict()
|
|
62
|
+
top_groups_7d.append(top_groups_7d_item)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
top_countries_7d: list[dict[str, Any]] | Unset = UNSET
|
|
67
|
+
if not isinstance(self.top_countries_7d, Unset):
|
|
68
|
+
top_countries_7d = []
|
|
69
|
+
for top_countries_7d_item_data in self.top_countries_7d:
|
|
70
|
+
top_countries_7d_item = top_countries_7d_item_data.to_dict()
|
|
71
|
+
top_countries_7d.append(top_countries_7d_item)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
field_dict: dict[str, Any] = {}
|
|
77
|
+
field_dict.update(self.additional_properties)
|
|
78
|
+
field_dict.update({
|
|
79
|
+
})
|
|
80
|
+
if total is not UNSET:
|
|
81
|
+
field_dict["total"] = total
|
|
82
|
+
if last_24h is not UNSET:
|
|
83
|
+
field_dict["last_24h"] = last_24h
|
|
84
|
+
if last_7d is not UNSET:
|
|
85
|
+
field_dict["last_7d"] = last_7d
|
|
86
|
+
if top_groups_7d is not UNSET:
|
|
87
|
+
field_dict["top_groups_7d"] = top_groups_7d
|
|
88
|
+
if top_countries_7d is not UNSET:
|
|
89
|
+
field_dict["top_countries_7d"] = top_countries_7d
|
|
90
|
+
|
|
91
|
+
return field_dict
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
@classmethod
|
|
96
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
97
|
+
from ..models.get_ransomware_stats_response_200_top_countries_7d_item import GetRansomwareStatsResponse200TopCountries7DItem # noqa: PLC0415
|
|
98
|
+
from ..models.get_ransomware_stats_response_200_top_groups_7d_item import GetRansomwareStatsResponse200TopGroups7DItem # noqa: PLC0415
|
|
99
|
+
d = dict(src_dict)
|
|
100
|
+
total = d.pop("total", UNSET)
|
|
101
|
+
|
|
102
|
+
last_24h = d.pop("last_24h", UNSET)
|
|
103
|
+
|
|
104
|
+
last_7d = d.pop("last_7d", UNSET)
|
|
105
|
+
|
|
106
|
+
_top_groups_7d = d.pop("top_groups_7d", UNSET)
|
|
107
|
+
top_groups_7d: list[GetRansomwareStatsResponse200TopGroups7DItem] | Unset = UNSET
|
|
108
|
+
if _top_groups_7d is not UNSET:
|
|
109
|
+
top_groups_7d = []
|
|
110
|
+
for top_groups_7d_item_data in _top_groups_7d:
|
|
111
|
+
top_groups_7d_item = GetRansomwareStatsResponse200TopGroups7DItem.from_dict(top_groups_7d_item_data)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
top_groups_7d.append(top_groups_7d_item)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
_top_countries_7d = d.pop("top_countries_7d", UNSET)
|
|
119
|
+
top_countries_7d: list[GetRansomwareStatsResponse200TopCountries7DItem] | Unset = UNSET
|
|
120
|
+
if _top_countries_7d is not UNSET:
|
|
121
|
+
top_countries_7d = []
|
|
122
|
+
for top_countries_7d_item_data in _top_countries_7d:
|
|
123
|
+
top_countries_7d_item = GetRansomwareStatsResponse200TopCountries7DItem.from_dict(top_countries_7d_item_data)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
top_countries_7d.append(top_countries_7d_item)
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
get_ransomware_stats_response_200 = cls(
|
|
131
|
+
total=total,
|
|
132
|
+
last_24h=last_24h,
|
|
133
|
+
last_7d=last_7d,
|
|
134
|
+
top_groups_7d=top_groups_7d,
|
|
135
|
+
top_countries_7d=top_countries_7d,
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
get_ransomware_stats_response_200.additional_properties = d
|
|
140
|
+
return get_ransomware_stats_response_200
|
|
141
|
+
|
|
142
|
+
@property
|
|
143
|
+
def additional_keys(self) -> list[str]:
|
|
144
|
+
return list(self.additional_properties.keys())
|
|
145
|
+
|
|
146
|
+
def __getitem__(self, key: str) -> Any:
|
|
147
|
+
return self.additional_properties[key]
|
|
148
|
+
|
|
149
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
150
|
+
self.additional_properties[key] = value
|
|
151
|
+
|
|
152
|
+
def __delitem__(self, key: str) -> None:
|
|
153
|
+
del self.additional_properties[key]
|
|
154
|
+
|
|
155
|
+
def __contains__(self, key: str) -> bool:
|
|
156
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator
|
|
5
|
+
|
|
6
|
+
from attrs import define as _attrs_define
|
|
7
|
+
from attrs import field as _attrs_field
|
|
8
|
+
|
|
9
|
+
from ..types import UNSET, Unset
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
T = TypeVar("T", bound="GetRansomwareStatsResponse200TopCountries7DItem")
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@_attrs_define
|
|
22
|
+
class GetRansomwareStatsResponse200TopCountries7DItem:
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def to_dict(self) -> dict[str, Any]:
|
|
32
|
+
|
|
33
|
+
field_dict: dict[str, Any] = {}
|
|
34
|
+
field_dict.update(self.additional_properties)
|
|
35
|
+
|
|
36
|
+
return field_dict
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@classmethod
|
|
41
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
42
|
+
d = dict(src_dict)
|
|
43
|
+
get_ransomware_stats_response_200_top_countries_7d_item = cls(
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
get_ransomware_stats_response_200_top_countries_7d_item.additional_properties = d
|
|
48
|
+
return get_ransomware_stats_response_200_top_countries_7d_item
|
|
49
|
+
|
|
50
|
+
@property
|
|
51
|
+
def additional_keys(self) -> list[str]:
|
|
52
|
+
return list(self.additional_properties.keys())
|
|
53
|
+
|
|
54
|
+
def __getitem__(self, key: str) -> Any:
|
|
55
|
+
return self.additional_properties[key]
|
|
56
|
+
|
|
57
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
58
|
+
self.additional_properties[key] = value
|
|
59
|
+
|
|
60
|
+
def __delitem__(self, key: str) -> None:
|
|
61
|
+
del self.additional_properties[key]
|
|
62
|
+
|
|
63
|
+
def __contains__(self, key: str) -> bool:
|
|
64
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator
|
|
5
|
+
|
|
6
|
+
from attrs import define as _attrs_define
|
|
7
|
+
from attrs import field as _attrs_field
|
|
8
|
+
|
|
9
|
+
from ..types import UNSET, Unset
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
T = TypeVar("T", bound="GetRansomwareStatsResponse200TopGroups7DItem")
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@_attrs_define
|
|
22
|
+
class GetRansomwareStatsResponse200TopGroups7DItem:
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def to_dict(self) -> dict[str, Any]:
|
|
32
|
+
|
|
33
|
+
field_dict: dict[str, Any] = {}
|
|
34
|
+
field_dict.update(self.additional_properties)
|
|
35
|
+
|
|
36
|
+
return field_dict
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@classmethod
|
|
41
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
42
|
+
d = dict(src_dict)
|
|
43
|
+
get_ransomware_stats_response_200_top_groups_7d_item = cls(
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
get_ransomware_stats_response_200_top_groups_7d_item.additional_properties = d
|
|
48
|
+
return get_ransomware_stats_response_200_top_groups_7d_item
|
|
49
|
+
|
|
50
|
+
@property
|
|
51
|
+
def additional_keys(self) -> list[str]:
|
|
52
|
+
return list(self.additional_properties.keys())
|
|
53
|
+
|
|
54
|
+
def __getitem__(self, key: str) -> Any:
|
|
55
|
+
return self.additional_properties[key]
|
|
56
|
+
|
|
57
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
58
|
+
self.additional_properties[key] = value
|
|
59
|
+
|
|
60
|
+
def __delitem__(self, key: str) -> None:
|
|
61
|
+
del self.additional_properties[key]
|
|
62
|
+
|
|
63
|
+
def __contains__(self, key: str) -> bool:
|
|
64
|
+
return key in self.additional_properties
|