beamlit 0.0.34rc71__py3-none-any.whl → 0.0.34rc73__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.
Files changed (32) hide show
  1. beamlit/authentication/clientcredentials.py +5 -3
  2. beamlit/authentication/device_mode.py +4 -4
  3. beamlit/models/__init__.py +40 -2
  4. beamlit/models/agent.py +4 -13
  5. beamlit/models/core_event.py +9 -0
  6. beamlit/models/function.py +4 -13
  7. beamlit/models/histogram_bucket.py +79 -0
  8. beamlit/models/histogram_stats.py +88 -0
  9. beamlit/models/latency_metric.py +82 -3
  10. beamlit/models/metric.py +4 -4
  11. beamlit/models/metrics.py +56 -21
  12. beamlit/models/metrics_models.py +45 -0
  13. beamlit/models/metrics_request_total_per_code.py +45 -0
  14. beamlit/models/metrics_rps_per_code.py +45 -0
  15. beamlit/models/model.py +4 -13
  16. beamlit/models/request_duration_over_time_metric.py +97 -0
  17. beamlit/models/request_duration_over_time_metrics.py +74 -0
  18. beamlit/models/request_total_by_origin_metric.py +103 -0
  19. beamlit/models/request_total_by_origin_metric_request_total_by_origin.py +45 -0
  20. beamlit/models/request_total_by_origin_metric_request_total_by_origin_and_code.py +45 -0
  21. beamlit/models/request_total_metric.py +40 -13
  22. beamlit/models/request_total_metric_request_total_per_code.py +45 -0
  23. beamlit/models/request_total_metric_rps_per_code.py +45 -0
  24. beamlit/models/resource_environment_metrics.py +112 -12
  25. beamlit/models/resource_environment_metrics_request_total_per_code.py +45 -0
  26. beamlit/models/resource_environment_metrics_rps_per_code.py +45 -0
  27. beamlit/models/token_rate_metric.py +88 -0
  28. beamlit/models/token_rate_metrics.py +106 -0
  29. beamlit/models/token_total_metric.py +106 -0
  30. {beamlit-0.0.34rc71.dist-info → beamlit-0.0.34rc73.dist-info}/METADATA +1 -1
  31. {beamlit-0.0.34rc71.dist-info → beamlit-0.0.34rc73.dist-info}/RECORD +32 -15
  32. {beamlit-0.0.34rc71.dist-info → beamlit-0.0.34rc73.dist-info}/WHEEL +0 -0
beamlit/models/metrics.py CHANGED
@@ -1,10 +1,16 @@
1
- from typing import Any, TypeVar, Union
1
+ from typing import TYPE_CHECKING, Any, TypeVar, Union, cast
2
2
 
3
3
  from attrs import define as _attrs_define
4
4
  from attrs import field as _attrs_field
5
5
 
6
6
  from ..types import UNSET, Unset
7
7
 
8
+ if TYPE_CHECKING:
9
+ from ..models.metrics_models import MetricsModels
10
+ from ..models.metrics_request_total_per_code import MetricsRequestTotalPerCode
11
+ from ..models.metrics_rps_per_code import MetricsRpsPerCode
12
+
13
+
8
14
  T = TypeVar("T", bound="Metrics")
9
15
 
10
16
 
@@ -15,22 +21,24 @@ class Metrics:
15
21
  Attributes:
16
22
  agents (Union[Unset, Any]): Metrics for agents
17
23
  functions (Union[Unset, Any]): Metrics for functions
18
- inference_global (Union[Unset, Any]): Historical requests for all resources globally
19
- models (Union[Unset, Any]): Metrics for models
20
- request_total (Union[Unset, Any]): Number of requests for all resources globally
21
- request_total_per_code (Union[Unset, Any]): Number of requests for all resources globally per code
22
- rps (Union[Unset, Any]): Number of requests per second for all resources globally
23
- rps_per_code (Union[Unset, Any]): Number of requests per second for all resources globally per code
24
+ inference_global (Union[Unset, list[Any]]): Historical requests for all resources globally
25
+ models (Union[Unset, MetricsModels]): Metrics for models
26
+ request_total (Union[Unset, float]): Number of requests for all resources globally
27
+ request_total_per_code (Union[Unset, MetricsRequestTotalPerCode]): Number of requests for all resources globally
28
+ per code
29
+ rps (Union[Unset, float]): Number of requests per second for all resources globally
30
+ rps_per_code (Union[Unset, MetricsRpsPerCode]): Number of requests per second for all resources globally per
31
+ code
24
32
  """
25
33
 
26
34
  agents: Union[Unset, Any] = UNSET
27
35
  functions: Union[Unset, Any] = UNSET
28
- inference_global: Union[Unset, Any] = UNSET
29
- models: Union[Unset, Any] = UNSET
30
- request_total: Union[Unset, Any] = UNSET
31
- request_total_per_code: Union[Unset, Any] = UNSET
32
- rps: Union[Unset, Any] = UNSET
33
- rps_per_code: Union[Unset, Any] = UNSET
36
+ inference_global: Union[Unset, list[Any]] = UNSET
37
+ models: Union[Unset, "MetricsModels"] = UNSET
38
+ request_total: Union[Unset, float] = UNSET
39
+ request_total_per_code: Union[Unset, "MetricsRequestTotalPerCode"] = UNSET
40
+ rps: Union[Unset, float] = UNSET
41
+ rps_per_code: Union[Unset, "MetricsRpsPerCode"] = UNSET
34
42
  additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
35
43
 
36
44
  def to_dict(self) -> dict[str, Any]:
@@ -38,17 +46,25 @@ class Metrics:
38
46
 
39
47
  functions = self.functions
40
48
 
41
- inference_global = self.inference_global
49
+ inference_global: Union[Unset, list[Any]] = UNSET
50
+ if not isinstance(self.inference_global, Unset):
51
+ inference_global = self.inference_global
42
52
 
43
- models = self.models
53
+ models: Union[Unset, dict[str, Any]] = UNSET
54
+ if self.models and not isinstance(self.models, Unset):
55
+ models = self.models.to_dict()
44
56
 
45
57
  request_total = self.request_total
46
58
 
47
- request_total_per_code = self.request_total_per_code
59
+ request_total_per_code: Union[Unset, dict[str, Any]] = UNSET
60
+ if self.request_total_per_code and not isinstance(self.request_total_per_code, Unset):
61
+ request_total_per_code = self.request_total_per_code.to_dict()
48
62
 
49
63
  rps = self.rps
50
64
 
51
- rps_per_code = self.rps_per_code
65
+ rps_per_code: Union[Unset, dict[str, Any]] = UNSET
66
+ if self.rps_per_code and not isinstance(self.rps_per_code, Unset):
67
+ rps_per_code = self.rps_per_code.to_dict()
52
68
 
53
69
  field_dict: dict[str, Any] = {}
54
70
  field_dict.update(self.additional_properties)
@@ -74,6 +90,10 @@ class Metrics:
74
90
 
75
91
  @classmethod
76
92
  def from_dict(cls: type[T], src_dict: dict[str, Any]) -> T:
93
+ from ..models.metrics_models import MetricsModels
94
+ from ..models.metrics_request_total_per_code import MetricsRequestTotalPerCode
95
+ from ..models.metrics_rps_per_code import MetricsRpsPerCode
96
+
77
97
  if not src_dict:
78
98
  return None
79
99
  d = src_dict.copy()
@@ -81,17 +101,32 @@ class Metrics:
81
101
 
82
102
  functions = d.pop("functions", UNSET)
83
103
 
84
- inference_global = d.pop("inferenceGlobal", UNSET)
104
+ inference_global = cast(list[Any], d.pop("inferenceGlobal", UNSET))
85
105
 
86
- models = d.pop("models", UNSET)
106
+ _models = d.pop("models", UNSET)
107
+ models: Union[Unset, MetricsModels]
108
+ if isinstance(_models, Unset):
109
+ models = UNSET
110
+ else:
111
+ models = MetricsModels.from_dict(_models)
87
112
 
88
113
  request_total = d.pop("requestTotal", UNSET)
89
114
 
90
- request_total_per_code = d.pop("requestTotalPerCode", UNSET)
115
+ _request_total_per_code = d.pop("requestTotalPerCode", UNSET)
116
+ request_total_per_code: Union[Unset, MetricsRequestTotalPerCode]
117
+ if isinstance(_request_total_per_code, Unset):
118
+ request_total_per_code = UNSET
119
+ else:
120
+ request_total_per_code = MetricsRequestTotalPerCode.from_dict(_request_total_per_code)
91
121
 
92
122
  rps = d.pop("rps", UNSET)
93
123
 
94
- rps_per_code = d.pop("rpsPerCode", UNSET)
124
+ _rps_per_code = d.pop("rpsPerCode", UNSET)
125
+ rps_per_code: Union[Unset, MetricsRpsPerCode]
126
+ if isinstance(_rps_per_code, Unset):
127
+ rps_per_code = UNSET
128
+ else:
129
+ rps_per_code = MetricsRpsPerCode.from_dict(_rps_per_code)
95
130
 
96
131
  metrics = cls(
97
132
  agents=agents,
@@ -0,0 +1,45 @@
1
+ from typing import Any, TypeVar
2
+
3
+ from attrs import define as _attrs_define
4
+ from attrs import field as _attrs_field
5
+
6
+ T = TypeVar("T", bound="MetricsModels")
7
+
8
+
9
+ @_attrs_define
10
+ class MetricsModels:
11
+ """Metrics for models"""
12
+
13
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
14
+
15
+ def to_dict(self) -> dict[str, Any]:
16
+ field_dict: dict[str, Any] = {}
17
+ field_dict.update(self.additional_properties)
18
+
19
+ return field_dict
20
+
21
+ @classmethod
22
+ def from_dict(cls: type[T], src_dict: dict[str, Any]) -> T:
23
+ if not src_dict:
24
+ return None
25
+ d = src_dict.copy()
26
+ metrics_models = cls()
27
+
28
+ metrics_models.additional_properties = d
29
+ return metrics_models
30
+
31
+ @property
32
+ def additional_keys(self) -> list[str]:
33
+ return list(self.additional_properties.keys())
34
+
35
+ def __getitem__(self, key: str) -> Any:
36
+ return self.additional_properties[key]
37
+
38
+ def __setitem__(self, key: str, value: Any) -> None:
39
+ self.additional_properties[key] = value
40
+
41
+ def __delitem__(self, key: str) -> None:
42
+ del self.additional_properties[key]
43
+
44
+ def __contains__(self, key: str) -> bool:
45
+ return key in self.additional_properties
@@ -0,0 +1,45 @@
1
+ from typing import Any, TypeVar
2
+
3
+ from attrs import define as _attrs_define
4
+ from attrs import field as _attrs_field
5
+
6
+ T = TypeVar("T", bound="MetricsRequestTotalPerCode")
7
+
8
+
9
+ @_attrs_define
10
+ class MetricsRequestTotalPerCode:
11
+ """Number of requests for all resources globally per code"""
12
+
13
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
14
+
15
+ def to_dict(self) -> dict[str, Any]:
16
+ field_dict: dict[str, Any] = {}
17
+ field_dict.update(self.additional_properties)
18
+
19
+ return field_dict
20
+
21
+ @classmethod
22
+ def from_dict(cls: type[T], src_dict: dict[str, Any]) -> T:
23
+ if not src_dict:
24
+ return None
25
+ d = src_dict.copy()
26
+ metrics_request_total_per_code = cls()
27
+
28
+ metrics_request_total_per_code.additional_properties = d
29
+ return metrics_request_total_per_code
30
+
31
+ @property
32
+ def additional_keys(self) -> list[str]:
33
+ return list(self.additional_properties.keys())
34
+
35
+ def __getitem__(self, key: str) -> Any:
36
+ return self.additional_properties[key]
37
+
38
+ def __setitem__(self, key: str, value: Any) -> None:
39
+ self.additional_properties[key] = value
40
+
41
+ def __delitem__(self, key: str) -> None:
42
+ del self.additional_properties[key]
43
+
44
+ def __contains__(self, key: str) -> bool:
45
+ return key in self.additional_properties
@@ -0,0 +1,45 @@
1
+ from typing import Any, TypeVar
2
+
3
+ from attrs import define as _attrs_define
4
+ from attrs import field as _attrs_field
5
+
6
+ T = TypeVar("T", bound="MetricsRpsPerCode")
7
+
8
+
9
+ @_attrs_define
10
+ class MetricsRpsPerCode:
11
+ """Number of requests per second for all resources globally per code"""
12
+
13
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
14
+
15
+ def to_dict(self) -> dict[str, Any]:
16
+ field_dict: dict[str, Any] = {}
17
+ field_dict.update(self.additional_properties)
18
+
19
+ return field_dict
20
+
21
+ @classmethod
22
+ def from_dict(cls: type[T], src_dict: dict[str, Any]) -> T:
23
+ if not src_dict:
24
+ return None
25
+ d = src_dict.copy()
26
+ metrics_rps_per_code = cls()
27
+
28
+ metrics_rps_per_code.additional_properties = d
29
+ return metrics_rps_per_code
30
+
31
+ @property
32
+ def additional_keys(self) -> list[str]:
33
+ return list(self.additional_properties.keys())
34
+
35
+ def __getitem__(self, key: str) -> Any:
36
+ return self.additional_properties[key]
37
+
38
+ def __setitem__(self, key: str, value: Any) -> None:
39
+ self.additional_properties[key] = value
40
+
41
+ def __delitem__(self, key: str) -> None:
42
+ del self.additional_properties[key]
43
+
44
+ def __contains__(self, key: str) -> bool:
45
+ return key in self.additional_properties
beamlit/models/model.py CHANGED
@@ -7,7 +7,6 @@ from ..types import UNSET, Unset
7
7
 
8
8
  if TYPE_CHECKING:
9
9
  from ..models.core_event import CoreEvent
10
- from ..models.core_status import CoreStatus
11
10
  from ..models.environment_metadata import EnvironmentMetadata
12
11
  from ..models.model_spec import ModelSpec
13
12
 
@@ -23,13 +22,13 @@ class Model:
23
22
  events (Union[Unset, list['CoreEvent']]): Core events
24
23
  metadata (Union[Unset, EnvironmentMetadata]): Environment metadata
25
24
  spec (Union[Unset, ModelSpec]): Model specification
26
- status (Union[Unset, CoreStatus]): Core status
25
+ status (Union[Unset, str]): Model status
27
26
  """
28
27
 
29
28
  events: Union[Unset, list["CoreEvent"]] = UNSET
30
29
  metadata: Union[Unset, "EnvironmentMetadata"] = UNSET
31
30
  spec: Union[Unset, "ModelSpec"] = UNSET
32
- status: Union[Unset, "CoreStatus"] = UNSET
31
+ status: Union[Unset, str] = UNSET
33
32
  additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
34
33
 
35
34
  def to_dict(self) -> dict[str, Any]:
@@ -48,9 +47,7 @@ class Model:
48
47
  if self.spec and not isinstance(self.spec, Unset):
49
48
  spec = self.spec.to_dict()
50
49
 
51
- status: Union[Unset, dict[str, Any]] = UNSET
52
- if self.status and not isinstance(self.status, Unset):
53
- status = self.status.to_dict()
50
+ status = self.status
54
51
 
55
52
  field_dict: dict[str, Any] = {}
56
53
  field_dict.update(self.additional_properties)
@@ -69,7 +66,6 @@ class Model:
69
66
  @classmethod
70
67
  def from_dict(cls: type[T], src_dict: dict[str, Any]) -> T:
71
68
  from ..models.core_event import CoreEvent
72
- from ..models.core_status import CoreStatus
73
69
  from ..models.environment_metadata import EnvironmentMetadata
74
70
  from ..models.model_spec import ModelSpec
75
71
 
@@ -97,12 +93,7 @@ class Model:
97
93
  else:
98
94
  spec = ModelSpec.from_dict(_spec)
99
95
 
100
- _status = d.pop("status", UNSET)
101
- status: Union[Unset, CoreStatus]
102
- if isinstance(_status, Unset):
103
- status = UNSET
104
- else:
105
- status = CoreStatus.from_dict(_status)
96
+ status = d.pop("status", UNSET)
106
97
 
107
98
  model = cls(
108
99
  events=events,
@@ -0,0 +1,97 @@
1
+ from typing import Any, TypeVar, Union
2
+
3
+ from attrs import define as _attrs_define
4
+ from attrs import field as _attrs_field
5
+
6
+ from ..types import UNSET, Unset
7
+
8
+ T = TypeVar("T", bound="RequestDurationOverTimeMetric")
9
+
10
+
11
+ @_attrs_define
12
+ class RequestDurationOverTimeMetric:
13
+ """Request duration over time metric
14
+
15
+ Attributes:
16
+ average (Union[Unset, float]): Average request duration
17
+ p50 (Union[Unset, float]): P50 request duration
18
+ p90 (Union[Unset, float]): P90 request duration
19
+ p99 (Union[Unset, float]): P99 request duration
20
+ timestamp (Union[Unset, str]): Timestamp
21
+ """
22
+
23
+ average: Union[Unset, float] = UNSET
24
+ p50: Union[Unset, float] = UNSET
25
+ p90: Union[Unset, float] = UNSET
26
+ p99: Union[Unset, float] = UNSET
27
+ timestamp: Union[Unset, str] = UNSET
28
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
29
+
30
+ def to_dict(self) -> dict[str, Any]:
31
+ average = self.average
32
+
33
+ p50 = self.p50
34
+
35
+ p90 = self.p90
36
+
37
+ p99 = self.p99
38
+
39
+ timestamp = self.timestamp
40
+
41
+ field_dict: dict[str, Any] = {}
42
+ field_dict.update(self.additional_properties)
43
+ field_dict.update({})
44
+ if average is not UNSET:
45
+ field_dict["average"] = average
46
+ if p50 is not UNSET:
47
+ field_dict["p50"] = p50
48
+ if p90 is not UNSET:
49
+ field_dict["p90"] = p90
50
+ if p99 is not UNSET:
51
+ field_dict["p99"] = p99
52
+ if timestamp is not UNSET:
53
+ field_dict["timestamp"] = timestamp
54
+
55
+ return field_dict
56
+
57
+ @classmethod
58
+ def from_dict(cls: type[T], src_dict: dict[str, Any]) -> T:
59
+ if not src_dict:
60
+ return None
61
+ d = src_dict.copy()
62
+ average = d.pop("average", UNSET)
63
+
64
+ p50 = d.pop("p50", UNSET)
65
+
66
+ p90 = d.pop("p90", UNSET)
67
+
68
+ p99 = d.pop("p99", UNSET)
69
+
70
+ timestamp = d.pop("timestamp", UNSET)
71
+
72
+ request_duration_over_time_metric = cls(
73
+ average=average,
74
+ p50=p50,
75
+ p90=p90,
76
+ p99=p99,
77
+ timestamp=timestamp,
78
+ )
79
+
80
+ request_duration_over_time_metric.additional_properties = d
81
+ return request_duration_over_time_metric
82
+
83
+ @property
84
+ def additional_keys(self) -> list[str]:
85
+ return list(self.additional_properties.keys())
86
+
87
+ def __getitem__(self, key: str) -> Any:
88
+ return self.additional_properties[key]
89
+
90
+ def __setitem__(self, key: str, value: Any) -> None:
91
+ self.additional_properties[key] = value
92
+
93
+ def __delitem__(self, key: str) -> None:
94
+ del self.additional_properties[key]
95
+
96
+ def __contains__(self, key: str) -> bool:
97
+ return key in self.additional_properties
@@ -0,0 +1,74 @@
1
+ from typing import TYPE_CHECKING, Any, TypeVar, Union
2
+
3
+ from attrs import define as _attrs_define
4
+ from attrs import field as _attrs_field
5
+
6
+ from ..types import UNSET, Unset
7
+
8
+ if TYPE_CHECKING:
9
+ from ..models.request_duration_over_time_metric import RequestDurationOverTimeMetric
10
+
11
+
12
+ T = TypeVar("T", bound="RequestDurationOverTimeMetrics")
13
+
14
+
15
+ @_attrs_define
16
+ class RequestDurationOverTimeMetrics:
17
+ """Request duration over time metrics
18
+
19
+ Attributes:
20
+ request_duration_over_time (Union[Unset, RequestDurationOverTimeMetric]): Request duration over time metric
21
+ """
22
+
23
+ request_duration_over_time: Union[Unset, "RequestDurationOverTimeMetric"] = UNSET
24
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
25
+
26
+ def to_dict(self) -> dict[str, Any]:
27
+ request_duration_over_time: Union[Unset, dict[str, Any]] = UNSET
28
+ if self.request_duration_over_time and not isinstance(self.request_duration_over_time, Unset):
29
+ request_duration_over_time = self.request_duration_over_time.to_dict()
30
+
31
+ field_dict: dict[str, Any] = {}
32
+ field_dict.update(self.additional_properties)
33
+ field_dict.update({})
34
+ if request_duration_over_time is not UNSET:
35
+ field_dict["requestDurationOverTime"] = request_duration_over_time
36
+
37
+ return field_dict
38
+
39
+ @classmethod
40
+ def from_dict(cls: type[T], src_dict: dict[str, Any]) -> T:
41
+ from ..models.request_duration_over_time_metric import RequestDurationOverTimeMetric
42
+
43
+ if not src_dict:
44
+ return None
45
+ d = src_dict.copy()
46
+ _request_duration_over_time = d.pop("requestDurationOverTime", UNSET)
47
+ request_duration_over_time: Union[Unset, RequestDurationOverTimeMetric]
48
+ if isinstance(_request_duration_over_time, Unset):
49
+ request_duration_over_time = UNSET
50
+ else:
51
+ request_duration_over_time = RequestDurationOverTimeMetric.from_dict(_request_duration_over_time)
52
+
53
+ request_duration_over_time_metrics = cls(
54
+ request_duration_over_time=request_duration_over_time,
55
+ )
56
+
57
+ request_duration_over_time_metrics.additional_properties = d
58
+ return request_duration_over_time_metrics
59
+
60
+ @property
61
+ def additional_keys(self) -> list[str]:
62
+ return list(self.additional_properties.keys())
63
+
64
+ def __getitem__(self, key: str) -> Any:
65
+ return self.additional_properties[key]
66
+
67
+ def __setitem__(self, key: str, value: Any) -> None:
68
+ self.additional_properties[key] = value
69
+
70
+ def __delitem__(self, key: str) -> None:
71
+ del self.additional_properties[key]
72
+
73
+ def __contains__(self, key: str) -> bool:
74
+ return key in self.additional_properties
@@ -0,0 +1,103 @@
1
+ from typing import TYPE_CHECKING, Any, TypeVar, Union
2
+
3
+ from attrs import define as _attrs_define
4
+ from attrs import field as _attrs_field
5
+
6
+ from ..types import UNSET, Unset
7
+
8
+ if TYPE_CHECKING:
9
+ from ..models.request_total_by_origin_metric_request_total_by_origin import (
10
+ RequestTotalByOriginMetricRequestTotalByOrigin,
11
+ )
12
+ from ..models.request_total_by_origin_metric_request_total_by_origin_and_code import (
13
+ RequestTotalByOriginMetricRequestTotalByOriginAndCode,
14
+ )
15
+
16
+
17
+ T = TypeVar("T", bound="RequestTotalByOriginMetric")
18
+
19
+
20
+ @_attrs_define
21
+ class RequestTotalByOriginMetric:
22
+ """Request total by origin metric
23
+
24
+ Attributes:
25
+ request_total_by_origin (Union[Unset, RequestTotalByOriginMetricRequestTotalByOrigin]): Request total by origin
26
+ request_total_by_origin_and_code (Union[Unset, RequestTotalByOriginMetricRequestTotalByOriginAndCode]): Request
27
+ total by origin and code
28
+ """
29
+
30
+ request_total_by_origin: Union[Unset, "RequestTotalByOriginMetricRequestTotalByOrigin"] = UNSET
31
+ request_total_by_origin_and_code: Union[Unset, "RequestTotalByOriginMetricRequestTotalByOriginAndCode"] = UNSET
32
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
33
+
34
+ def to_dict(self) -> dict[str, Any]:
35
+ request_total_by_origin: Union[Unset, dict[str, Any]] = UNSET
36
+ if self.request_total_by_origin and not isinstance(self.request_total_by_origin, Unset):
37
+ request_total_by_origin = self.request_total_by_origin.to_dict()
38
+
39
+ request_total_by_origin_and_code: Union[Unset, dict[str, Any]] = UNSET
40
+ if self.request_total_by_origin_and_code and not isinstance(self.request_total_by_origin_and_code, Unset):
41
+ request_total_by_origin_and_code = self.request_total_by_origin_and_code.to_dict()
42
+
43
+ field_dict: dict[str, Any] = {}
44
+ field_dict.update(self.additional_properties)
45
+ field_dict.update({})
46
+ if request_total_by_origin is not UNSET:
47
+ field_dict["requestTotalByOrigin"] = request_total_by_origin
48
+ if request_total_by_origin_and_code is not UNSET:
49
+ field_dict["requestTotalByOriginAndCode"] = request_total_by_origin_and_code
50
+
51
+ return field_dict
52
+
53
+ @classmethod
54
+ def from_dict(cls: type[T], src_dict: dict[str, Any]) -> T:
55
+ from ..models.request_total_by_origin_metric_request_total_by_origin import (
56
+ RequestTotalByOriginMetricRequestTotalByOrigin,
57
+ )
58
+ from ..models.request_total_by_origin_metric_request_total_by_origin_and_code import (
59
+ RequestTotalByOriginMetricRequestTotalByOriginAndCode,
60
+ )
61
+
62
+ if not src_dict:
63
+ return None
64
+ d = src_dict.copy()
65
+ _request_total_by_origin = d.pop("requestTotalByOrigin", UNSET)
66
+ request_total_by_origin: Union[Unset, RequestTotalByOriginMetricRequestTotalByOrigin]
67
+ if isinstance(_request_total_by_origin, Unset):
68
+ request_total_by_origin = UNSET
69
+ else:
70
+ request_total_by_origin = RequestTotalByOriginMetricRequestTotalByOrigin.from_dict(_request_total_by_origin)
71
+
72
+ _request_total_by_origin_and_code = d.pop("requestTotalByOriginAndCode", UNSET)
73
+ request_total_by_origin_and_code: Union[Unset, RequestTotalByOriginMetricRequestTotalByOriginAndCode]
74
+ if isinstance(_request_total_by_origin_and_code, Unset):
75
+ request_total_by_origin_and_code = UNSET
76
+ else:
77
+ request_total_by_origin_and_code = RequestTotalByOriginMetricRequestTotalByOriginAndCode.from_dict(
78
+ _request_total_by_origin_and_code
79
+ )
80
+
81
+ request_total_by_origin_metric = cls(
82
+ request_total_by_origin=request_total_by_origin,
83
+ request_total_by_origin_and_code=request_total_by_origin_and_code,
84
+ )
85
+
86
+ request_total_by_origin_metric.additional_properties = d
87
+ return request_total_by_origin_metric
88
+
89
+ @property
90
+ def additional_keys(self) -> list[str]:
91
+ return list(self.additional_properties.keys())
92
+
93
+ def __getitem__(self, key: str) -> Any:
94
+ return self.additional_properties[key]
95
+
96
+ def __setitem__(self, key: str, value: Any) -> None:
97
+ self.additional_properties[key] = value
98
+
99
+ def __delitem__(self, key: str) -> None:
100
+ del self.additional_properties[key]
101
+
102
+ def __contains__(self, key: str) -> bool:
103
+ return key in self.additional_properties
@@ -0,0 +1,45 @@
1
+ from typing import Any, TypeVar
2
+
3
+ from attrs import define as _attrs_define
4
+ from attrs import field as _attrs_field
5
+
6
+ T = TypeVar("T", bound="RequestTotalByOriginMetricRequestTotalByOrigin")
7
+
8
+
9
+ @_attrs_define
10
+ class RequestTotalByOriginMetricRequestTotalByOrigin:
11
+ """Request total by origin"""
12
+
13
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
14
+
15
+ def to_dict(self) -> dict[str, Any]:
16
+ field_dict: dict[str, Any] = {}
17
+ field_dict.update(self.additional_properties)
18
+
19
+ return field_dict
20
+
21
+ @classmethod
22
+ def from_dict(cls: type[T], src_dict: dict[str, Any]) -> T:
23
+ if not src_dict:
24
+ return None
25
+ d = src_dict.copy()
26
+ request_total_by_origin_metric_request_total_by_origin = cls()
27
+
28
+ request_total_by_origin_metric_request_total_by_origin.additional_properties = d
29
+ return request_total_by_origin_metric_request_total_by_origin
30
+
31
+ @property
32
+ def additional_keys(self) -> list[str]:
33
+ return list(self.additional_properties.keys())
34
+
35
+ def __getitem__(self, key: str) -> Any:
36
+ return self.additional_properties[key]
37
+
38
+ def __setitem__(self, key: str, value: Any) -> None:
39
+ self.additional_properties[key] = value
40
+
41
+ def __delitem__(self, key: str) -> None:
42
+ del self.additional_properties[key]
43
+
44
+ def __contains__(self, key: str) -> bool:
45
+ return key in self.additional_properties