robosystems-client 0.2.9__py3-none-any.whl → 0.2.11__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 (86) hide show
  1. robosystems_client/api/{user_subscriptions/upgrade_shared_repository_subscription.py → billing/cancel_subscription.py} +32 -60
  2. robosystems_client/api/billing/create_checkout_session.py +230 -0
  3. robosystems_client/api/{user_analytics/get_user_usage_overview.py → billing/get_billing_customer.py} +29 -21
  4. robosystems_client/api/billing/get_checkout_status.py +221 -0
  5. robosystems_client/api/{user_subscriptions/get_repository_credits.py → billing/get_subscription.py} +35 -43
  6. robosystems_client/api/{user_subscriptions/get_shared_repository_credits.py → billing/get_upcoming_invoice.py} +42 -28
  7. robosystems_client/api/{user_subscriptions/get_user_shared_subscriptions.py → billing/list_invoices.py} +44 -44
  8. robosystems_client/api/{user_limits/get_all_shared_repository_limits.py → billing/list_subscriptions.py} +38 -27
  9. robosystems_client/api/{user_subscriptions/subscribe_to_shared_repository.py → billing/update_payment_method.py} +42 -46
  10. robosystems_client/api/{user_subscriptions/cancel_shared_repository_subscription.py → subscriptions/cancel_subscription.py} +41 -25
  11. robosystems_client/api/subscriptions/create_repository_subscription.py +217 -0
  12. robosystems_client/api/subscriptions/get_graph_subscription.py +197 -0
  13. robosystems_client/api/subscriptions/upgrade_subscription.py +203 -0
  14. robosystems_client/api/usage/get_graph_usage_analytics.py +377 -0
  15. robosystems_client/api/{user_limits/get_user_usage.py → user/get_user_limits.py} +13 -9
  16. robosystems_client/models/__init__.py +42 -82
  17. robosystems_client/models/billing_customer.py +128 -0
  18. robosystems_client/models/checkout_response.py +87 -0
  19. robosystems_client/models/checkout_status_response.py +130 -0
  20. robosystems_client/models/create_checkout_request.py +88 -0
  21. robosystems_client/models/{graph_usage_response_query_statistics.py → create_checkout_request_resource_config.py} +6 -6
  22. robosystems_client/models/{credits_summary_response_credits_by_addon_type_0_item.py → create_repository_subscription_request.py} +22 -6
  23. robosystems_client/models/credit_summary.py +55 -89
  24. robosystems_client/models/{graph_usage_response_storage_usage.py → credit_summary_operation_breakdown.py} +6 -6
  25. robosystems_client/models/graph_subscription_response.py +200 -0
  26. robosystems_client/models/graph_usage_response.py +136 -39
  27. robosystems_client/models/{user_analytics_response_limits.py → graph_usage_response_recent_events_item.py} +6 -6
  28. robosystems_client/models/invoice.py +244 -0
  29. robosystems_client/models/invoice_line_item.py +118 -0
  30. robosystems_client/models/invoices_response.py +90 -0
  31. robosystems_client/models/payment_method.py +158 -0
  32. robosystems_client/models/performance_insights.py +120 -0
  33. robosystems_client/models/{graph_usage_response_recent_activity.py → performance_insights_operation_stats.py} +6 -6
  34. robosystems_client/models/{user_analytics_response_api_usage.py → performance_insights_slow_queries_item.py} +6 -6
  35. robosystems_client/models/storage_summary.py +100 -0
  36. robosystems_client/models/upcoming_invoice.py +128 -0
  37. robosystems_client/models/{get_graph_usage_details_response_getgraphusagedetails.py → update_payment_method_request.py} +22 -6
  38. robosystems_client/models/{subscription_response.py → update_payment_method_response.py} +14 -14
  39. robosystems_client/models/{tier_upgrade_request.py → upgrade_subscription_request.py} +12 -14
  40. {robosystems_client-0.2.9.dist-info → robosystems_client-0.2.11.dist-info}/METADATA +1 -1
  41. {robosystems_client-0.2.9.dist-info → robosystems_client-0.2.11.dist-info}/RECORD +53 -68
  42. robosystems_client/api/graph_analytics/get_graph_usage_stats.py +0 -289
  43. robosystems_client/api/graph_billing/get_current_graph_bill.py +0 -253
  44. robosystems_client/api/graph_billing/get_graph_billing_history.py +0 -298
  45. robosystems_client/api/graph_billing/get_graph_monthly_bill.py +0 -284
  46. robosystems_client/api/graph_billing/get_graph_usage_details.py +0 -320
  47. robosystems_client/api/user/get_all_credit_summaries.py +0 -169
  48. robosystems_client/api/user_analytics/get_detailed_user_analytics.py +0 -188
  49. robosystems_client/api/user_limits/__init__.py +0 -1
  50. robosystems_client/api/user_limits/get_shared_repository_limits.py +0 -213
  51. robosystems_client/api/user_limits/get_user_limits.py +0 -139
  52. robosystems_client/api/user_subscriptions/__init__.py +0 -1
  53. robosystems_client/models/add_on_credit_info.py +0 -119
  54. robosystems_client/models/credits_summary_response.py +0 -148
  55. robosystems_client/models/get_all_credit_summaries_response_getallcreditsummaries.py +0 -44
  56. robosystems_client/models/get_all_shared_repository_limits_response_getallsharedrepositorylimits.py +0 -46
  57. robosystems_client/models/get_current_graph_bill_response_getcurrentgraphbill.py +0 -44
  58. robosystems_client/models/get_graph_billing_history_response_getgraphbillinghistory.py +0 -44
  59. robosystems_client/models/get_graph_monthly_bill_response_getgraphmonthlybill.py +0 -44
  60. robosystems_client/models/get_shared_repository_limits_response_getsharedrepositorylimits.py +0 -44
  61. robosystems_client/models/repository_credits_response.py +0 -128
  62. robosystems_client/models/repository_plan.py +0 -10
  63. robosystems_client/models/repository_type.py +0 -10
  64. robosystems_client/models/subscription_info.py +0 -152
  65. robosystems_client/models/subscription_info_metadata.py +0 -44
  66. robosystems_client/models/subscription_request.py +0 -80
  67. robosystems_client/models/user_analytics_response.py +0 -132
  68. robosystems_client/models/user_analytics_response_graph_usage.py +0 -44
  69. robosystems_client/models/user_analytics_response_recent_activity_item.py +0 -44
  70. robosystems_client/models/user_analytics_response_user_info.py +0 -44
  71. robosystems_client/models/user_graph_summary.py +0 -134
  72. robosystems_client/models/user_subscriptions_response.py +0 -90
  73. robosystems_client/models/user_usage_summary_response.py +0 -130
  74. robosystems_client/models/user_usage_summary_response_usage_vs_limits.py +0 -44
  75. /robosystems_client/api/{graph_analytics → billing}/__init__.py +0 -0
  76. /robosystems_client/api/{graph_billing → credits_}/__init__.py +0 -0
  77. /robosystems_client/api/{graph_credits → credits_}/check_credit_balance.py +0 -0
  78. /robosystems_client/api/{graph_credits → credits_}/check_storage_limits.py +0 -0
  79. /robosystems_client/api/{graph_credits → credits_}/get_credit_summary.py +0 -0
  80. /robosystems_client/api/{graph_credits → credits_}/get_storage_usage.py +0 -0
  81. /robosystems_client/api/{graph_credits → credits_}/list_credit_transactions.py +0 -0
  82. /robosystems_client/api/{graph_credits → subscriptions}/__init__.py +0 -0
  83. /robosystems_client/api/{user_analytics → usage}/__init__.py +0 -0
  84. /robosystems_client/api/{graph_analytics → usage}/get_graph_metrics.py +0 -0
  85. {robosystems_client-0.2.9.dist-info → robosystems_client-0.2.11.dist-info}/WHEEL +0 -0
  86. {robosystems_client-0.2.9.dist-info → robosystems_client-0.2.11.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,90 @@
1
+ from collections.abc import Mapping
2
+ from typing import TYPE_CHECKING, Any, TypeVar
3
+
4
+ from attrs import define as _attrs_define
5
+ from attrs import field as _attrs_field
6
+
7
+ if TYPE_CHECKING:
8
+ from ..models.invoice import Invoice
9
+
10
+
11
+ T = TypeVar("T", bound="InvoicesResponse")
12
+
13
+
14
+ @_attrs_define
15
+ class InvoicesResponse:
16
+ """Response for invoice list.
17
+
18
+ Attributes:
19
+ invoices (list['Invoice']): List of invoices
20
+ total_count (int): Total number of invoices
21
+ has_more (bool): Whether more invoices are available
22
+ """
23
+
24
+ invoices: list["Invoice"]
25
+ total_count: int
26
+ has_more: bool
27
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
28
+
29
+ def to_dict(self) -> dict[str, Any]:
30
+ invoices = []
31
+ for invoices_item_data in self.invoices:
32
+ invoices_item = invoices_item_data.to_dict()
33
+ invoices.append(invoices_item)
34
+
35
+ total_count = self.total_count
36
+
37
+ has_more = self.has_more
38
+
39
+ field_dict: dict[str, Any] = {}
40
+ field_dict.update(self.additional_properties)
41
+ field_dict.update(
42
+ {
43
+ "invoices": invoices,
44
+ "total_count": total_count,
45
+ "has_more": has_more,
46
+ }
47
+ )
48
+
49
+ return field_dict
50
+
51
+ @classmethod
52
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
53
+ from ..models.invoice import Invoice
54
+
55
+ d = dict(src_dict)
56
+ invoices = []
57
+ _invoices = d.pop("invoices")
58
+ for invoices_item_data in _invoices:
59
+ invoices_item = Invoice.from_dict(invoices_item_data)
60
+
61
+ invoices.append(invoices_item)
62
+
63
+ total_count = d.pop("total_count")
64
+
65
+ has_more = d.pop("has_more")
66
+
67
+ invoices_response = cls(
68
+ invoices=invoices,
69
+ total_count=total_count,
70
+ has_more=has_more,
71
+ )
72
+
73
+ invoices_response.additional_properties = d
74
+ return invoices_response
75
+
76
+ @property
77
+ def additional_keys(self) -> list[str]:
78
+ return list(self.additional_properties.keys())
79
+
80
+ def __getitem__(self, key: str) -> Any:
81
+ return self.additional_properties[key]
82
+
83
+ def __setitem__(self, key: str, value: Any) -> None:
84
+ self.additional_properties[key] = value
85
+
86
+ def __delitem__(self, key: str) -> None:
87
+ del self.additional_properties[key]
88
+
89
+ def __contains__(self, key: str) -> bool:
90
+ return key in self.additional_properties
@@ -0,0 +1,158 @@
1
+ from collections.abc import Mapping
2
+ from typing import Any, TypeVar, Union, cast
3
+
4
+ from attrs import define as _attrs_define
5
+ from attrs import field as _attrs_field
6
+
7
+ from ..types import UNSET, Unset
8
+
9
+ T = TypeVar("T", bound="PaymentMethod")
10
+
11
+
12
+ @_attrs_define
13
+ class PaymentMethod:
14
+ """Payment method information.
15
+
16
+ Attributes:
17
+ id (str): Payment method ID
18
+ type_ (str): Payment method type (card, bank_account, etc.)
19
+ is_default (bool): Whether this is the default payment method
20
+ brand (Union[None, Unset, str]): Card brand (visa, mastercard, etc.)
21
+ last4 (Union[None, Unset, str]): Last 4 digits
22
+ exp_month (Union[None, Unset, int]): Expiration month
23
+ exp_year (Union[None, Unset, int]): Expiration year
24
+ """
25
+
26
+ id: str
27
+ type_: str
28
+ is_default: bool
29
+ brand: Union[None, Unset, str] = UNSET
30
+ last4: Union[None, Unset, str] = UNSET
31
+ exp_month: Union[None, Unset, int] = UNSET
32
+ exp_year: Union[None, Unset, int] = UNSET
33
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
34
+
35
+ def to_dict(self) -> dict[str, Any]:
36
+ id = self.id
37
+
38
+ type_ = self.type_
39
+
40
+ is_default = self.is_default
41
+
42
+ brand: Union[None, Unset, str]
43
+ if isinstance(self.brand, Unset):
44
+ brand = UNSET
45
+ else:
46
+ brand = self.brand
47
+
48
+ last4: Union[None, Unset, str]
49
+ if isinstance(self.last4, Unset):
50
+ last4 = UNSET
51
+ else:
52
+ last4 = self.last4
53
+
54
+ exp_month: Union[None, Unset, int]
55
+ if isinstance(self.exp_month, Unset):
56
+ exp_month = UNSET
57
+ else:
58
+ exp_month = self.exp_month
59
+
60
+ exp_year: Union[None, Unset, int]
61
+ if isinstance(self.exp_year, Unset):
62
+ exp_year = UNSET
63
+ else:
64
+ exp_year = self.exp_year
65
+
66
+ field_dict: dict[str, Any] = {}
67
+ field_dict.update(self.additional_properties)
68
+ field_dict.update(
69
+ {
70
+ "id": id,
71
+ "type": type_,
72
+ "is_default": is_default,
73
+ }
74
+ )
75
+ if brand is not UNSET:
76
+ field_dict["brand"] = brand
77
+ if last4 is not UNSET:
78
+ field_dict["last4"] = last4
79
+ if exp_month is not UNSET:
80
+ field_dict["exp_month"] = exp_month
81
+ if exp_year is not UNSET:
82
+ field_dict["exp_year"] = exp_year
83
+
84
+ return field_dict
85
+
86
+ @classmethod
87
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
88
+ d = dict(src_dict)
89
+ id = d.pop("id")
90
+
91
+ type_ = d.pop("type")
92
+
93
+ is_default = d.pop("is_default")
94
+
95
+ def _parse_brand(data: object) -> Union[None, Unset, str]:
96
+ if data is None:
97
+ return data
98
+ if isinstance(data, Unset):
99
+ return data
100
+ return cast(Union[None, Unset, str], data)
101
+
102
+ brand = _parse_brand(d.pop("brand", UNSET))
103
+
104
+ def _parse_last4(data: object) -> Union[None, Unset, str]:
105
+ if data is None:
106
+ return data
107
+ if isinstance(data, Unset):
108
+ return data
109
+ return cast(Union[None, Unset, str], data)
110
+
111
+ last4 = _parse_last4(d.pop("last4", UNSET))
112
+
113
+ def _parse_exp_month(data: object) -> Union[None, Unset, int]:
114
+ if data is None:
115
+ return data
116
+ if isinstance(data, Unset):
117
+ return data
118
+ return cast(Union[None, Unset, int], data)
119
+
120
+ exp_month = _parse_exp_month(d.pop("exp_month", UNSET))
121
+
122
+ def _parse_exp_year(data: object) -> Union[None, Unset, int]:
123
+ if data is None:
124
+ return data
125
+ if isinstance(data, Unset):
126
+ return data
127
+ return cast(Union[None, Unset, int], data)
128
+
129
+ exp_year = _parse_exp_year(d.pop("exp_year", UNSET))
130
+
131
+ payment_method = cls(
132
+ id=id,
133
+ type_=type_,
134
+ is_default=is_default,
135
+ brand=brand,
136
+ last4=last4,
137
+ exp_month=exp_month,
138
+ exp_year=exp_year,
139
+ )
140
+
141
+ payment_method.additional_properties = d
142
+ return payment_method
143
+
144
+ @property
145
+ def additional_keys(self) -> list[str]:
146
+ return list(self.additional_properties.keys())
147
+
148
+ def __getitem__(self, key: str) -> Any:
149
+ return self.additional_properties[key]
150
+
151
+ def __setitem__(self, key: str, value: Any) -> None:
152
+ self.additional_properties[key] = value
153
+
154
+ def __delitem__(self, key: str) -> None:
155
+ del self.additional_properties[key]
156
+
157
+ def __contains__(self, key: str) -> bool:
158
+ return key in self.additional_properties
@@ -0,0 +1,120 @@
1
+ from collections.abc import Mapping
2
+ from typing import TYPE_CHECKING, Any, TypeVar
3
+
4
+ from attrs import define as _attrs_define
5
+ from attrs import field as _attrs_field
6
+
7
+ if TYPE_CHECKING:
8
+ from ..models.performance_insights_operation_stats import (
9
+ PerformanceInsightsOperationStats,
10
+ )
11
+ from ..models.performance_insights_slow_queries_item import (
12
+ PerformanceInsightsSlowQueriesItem,
13
+ )
14
+
15
+
16
+ T = TypeVar("T", bound="PerformanceInsights")
17
+
18
+
19
+ @_attrs_define
20
+ class PerformanceInsights:
21
+ """Performance analytics.
22
+
23
+ Attributes:
24
+ analysis_period_days (int): Analysis period in days
25
+ total_operations (int): Total operations analyzed
26
+ operation_stats (PerformanceInsightsOperationStats): Performance stats by operation type
27
+ slow_queries (list['PerformanceInsightsSlowQueriesItem']): Top slow queries (over 5 seconds)
28
+ performance_score (int): Performance score (0-100)
29
+ """
30
+
31
+ analysis_period_days: int
32
+ total_operations: int
33
+ operation_stats: "PerformanceInsightsOperationStats"
34
+ slow_queries: list["PerformanceInsightsSlowQueriesItem"]
35
+ performance_score: int
36
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
37
+
38
+ def to_dict(self) -> dict[str, Any]:
39
+ analysis_period_days = self.analysis_period_days
40
+
41
+ total_operations = self.total_operations
42
+
43
+ operation_stats = self.operation_stats.to_dict()
44
+
45
+ slow_queries = []
46
+ for slow_queries_item_data in self.slow_queries:
47
+ slow_queries_item = slow_queries_item_data.to_dict()
48
+ slow_queries.append(slow_queries_item)
49
+
50
+ performance_score = self.performance_score
51
+
52
+ field_dict: dict[str, Any] = {}
53
+ field_dict.update(self.additional_properties)
54
+ field_dict.update(
55
+ {
56
+ "analysis_period_days": analysis_period_days,
57
+ "total_operations": total_operations,
58
+ "operation_stats": operation_stats,
59
+ "slow_queries": slow_queries,
60
+ "performance_score": performance_score,
61
+ }
62
+ )
63
+
64
+ return field_dict
65
+
66
+ @classmethod
67
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
68
+ from ..models.performance_insights_operation_stats import (
69
+ PerformanceInsightsOperationStats,
70
+ )
71
+ from ..models.performance_insights_slow_queries_item import (
72
+ PerformanceInsightsSlowQueriesItem,
73
+ )
74
+
75
+ d = dict(src_dict)
76
+ analysis_period_days = d.pop("analysis_period_days")
77
+
78
+ total_operations = d.pop("total_operations")
79
+
80
+ operation_stats = PerformanceInsightsOperationStats.from_dict(
81
+ d.pop("operation_stats")
82
+ )
83
+
84
+ slow_queries = []
85
+ _slow_queries = d.pop("slow_queries")
86
+ for slow_queries_item_data in _slow_queries:
87
+ slow_queries_item = PerformanceInsightsSlowQueriesItem.from_dict(
88
+ slow_queries_item_data
89
+ )
90
+
91
+ slow_queries.append(slow_queries_item)
92
+
93
+ performance_score = d.pop("performance_score")
94
+
95
+ performance_insights = cls(
96
+ analysis_period_days=analysis_period_days,
97
+ total_operations=total_operations,
98
+ operation_stats=operation_stats,
99
+ slow_queries=slow_queries,
100
+ performance_score=performance_score,
101
+ )
102
+
103
+ performance_insights.additional_properties = d
104
+ return performance_insights
105
+
106
+ @property
107
+ def additional_keys(self) -> list[str]:
108
+ return list(self.additional_properties.keys())
109
+
110
+ def __getitem__(self, key: str) -> Any:
111
+ return self.additional_properties[key]
112
+
113
+ def __setitem__(self, key: str, value: Any) -> None:
114
+ self.additional_properties[key] = value
115
+
116
+ def __delitem__(self, key: str) -> None:
117
+ del self.additional_properties[key]
118
+
119
+ def __contains__(self, key: str) -> bool:
120
+ return key in self.additional_properties
@@ -4,12 +4,12 @@ from typing import Any, TypeVar
4
4
  from attrs import define as _attrs_define
5
5
  from attrs import field as _attrs_field
6
6
 
7
- T = TypeVar("T", bound="GraphUsageResponseRecentActivity")
7
+ T = TypeVar("T", bound="PerformanceInsightsOperationStats")
8
8
 
9
9
 
10
10
  @_attrs_define
11
- class GraphUsageResponseRecentActivity:
12
- """Recent activity summary"""
11
+ class PerformanceInsightsOperationStats:
12
+ """Performance stats by operation type"""
13
13
 
14
14
  additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
15
15
 
@@ -22,10 +22,10 @@ class GraphUsageResponseRecentActivity:
22
22
  @classmethod
23
23
  def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
24
24
  d = dict(src_dict)
25
- graph_usage_response_recent_activity = cls()
25
+ performance_insights_operation_stats = cls()
26
26
 
27
- graph_usage_response_recent_activity.additional_properties = d
28
- return graph_usage_response_recent_activity
27
+ performance_insights_operation_stats.additional_properties = d
28
+ return performance_insights_operation_stats
29
29
 
30
30
  @property
31
31
  def additional_keys(self) -> list[str]:
@@ -4,12 +4,12 @@ from typing import Any, TypeVar
4
4
  from attrs import define as _attrs_define
5
5
  from attrs import field as _attrs_field
6
6
 
7
- T = TypeVar("T", bound="UserAnalyticsResponseApiUsage")
7
+ T = TypeVar("T", bound="PerformanceInsightsSlowQueriesItem")
8
8
 
9
9
 
10
10
  @_attrs_define
11
- class UserAnalyticsResponseApiUsage:
12
- """API usage statistics"""
11
+ class PerformanceInsightsSlowQueriesItem:
12
+ """ """
13
13
 
14
14
  additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
15
15
 
@@ -22,10 +22,10 @@ class UserAnalyticsResponseApiUsage:
22
22
  @classmethod
23
23
  def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
24
24
  d = dict(src_dict)
25
- user_analytics_response_api_usage = cls()
25
+ performance_insights_slow_queries_item = cls()
26
26
 
27
- user_analytics_response_api_usage.additional_properties = d
28
- return user_analytics_response_api_usage
27
+ performance_insights_slow_queries_item.additional_properties = d
28
+ return performance_insights_slow_queries_item
29
29
 
30
30
  @property
31
31
  def additional_keys(self) -> list[str]:
@@ -0,0 +1,100 @@
1
+ from collections.abc import Mapping
2
+ from typing import Any, TypeVar
3
+
4
+ from attrs import define as _attrs_define
5
+ from attrs import field as _attrs_field
6
+
7
+ T = TypeVar("T", bound="StorageSummary")
8
+
9
+
10
+ @_attrs_define
11
+ class StorageSummary:
12
+ """Storage usage summary.
13
+
14
+ Attributes:
15
+ graph_tier (str): Subscription tier
16
+ avg_storage_gb (float): Average storage in GB
17
+ max_storage_gb (float): Peak storage in GB
18
+ min_storage_gb (float): Minimum storage in GB
19
+ total_gb_hours (float): Total GB-hours for billing
20
+ measurement_count (int): Number of measurements taken
21
+ """
22
+
23
+ graph_tier: str
24
+ avg_storage_gb: float
25
+ max_storage_gb: float
26
+ min_storage_gb: float
27
+ total_gb_hours: float
28
+ measurement_count: int
29
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
30
+
31
+ def to_dict(self) -> dict[str, Any]:
32
+ graph_tier = self.graph_tier
33
+
34
+ avg_storage_gb = self.avg_storage_gb
35
+
36
+ max_storage_gb = self.max_storage_gb
37
+
38
+ min_storage_gb = self.min_storage_gb
39
+
40
+ total_gb_hours = self.total_gb_hours
41
+
42
+ measurement_count = self.measurement_count
43
+
44
+ field_dict: dict[str, Any] = {}
45
+ field_dict.update(self.additional_properties)
46
+ field_dict.update(
47
+ {
48
+ "graph_tier": graph_tier,
49
+ "avg_storage_gb": avg_storage_gb,
50
+ "max_storage_gb": max_storage_gb,
51
+ "min_storage_gb": min_storage_gb,
52
+ "total_gb_hours": total_gb_hours,
53
+ "measurement_count": measurement_count,
54
+ }
55
+ )
56
+
57
+ return field_dict
58
+
59
+ @classmethod
60
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
61
+ d = dict(src_dict)
62
+ graph_tier = d.pop("graph_tier")
63
+
64
+ avg_storage_gb = d.pop("avg_storage_gb")
65
+
66
+ max_storage_gb = d.pop("max_storage_gb")
67
+
68
+ min_storage_gb = d.pop("min_storage_gb")
69
+
70
+ total_gb_hours = d.pop("total_gb_hours")
71
+
72
+ measurement_count = d.pop("measurement_count")
73
+
74
+ storage_summary = cls(
75
+ graph_tier=graph_tier,
76
+ avg_storage_gb=avg_storage_gb,
77
+ max_storage_gb=max_storage_gb,
78
+ min_storage_gb=min_storage_gb,
79
+ total_gb_hours=total_gb_hours,
80
+ measurement_count=measurement_count,
81
+ )
82
+
83
+ storage_summary.additional_properties = d
84
+ return storage_summary
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,128 @@
1
+ from collections.abc import Mapping
2
+ from typing import TYPE_CHECKING, Any, TypeVar, Union, cast
3
+
4
+ from attrs import define as _attrs_define
5
+ from attrs import field as _attrs_field
6
+
7
+ from ..types import UNSET, Unset
8
+
9
+ if TYPE_CHECKING:
10
+ from ..models.invoice_line_item import InvoiceLineItem
11
+
12
+
13
+ T = TypeVar("T", bound="UpcomingInvoice")
14
+
15
+
16
+ @_attrs_define
17
+ class UpcomingInvoice:
18
+ """Upcoming invoice preview.
19
+
20
+ Attributes:
21
+ amount_due (int): Estimated amount due in cents
22
+ currency (str): Currency code
23
+ period_start (str): Billing period start
24
+ period_end (str): Billing period end
25
+ line_items (list['InvoiceLineItem']): Estimated line items
26
+ subscription_id (Union[None, Unset, str]): Associated subscription ID
27
+ """
28
+
29
+ amount_due: int
30
+ currency: str
31
+ period_start: str
32
+ period_end: str
33
+ line_items: list["InvoiceLineItem"]
34
+ subscription_id: Union[None, Unset, str] = UNSET
35
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
36
+
37
+ def to_dict(self) -> dict[str, Any]:
38
+ amount_due = self.amount_due
39
+
40
+ currency = self.currency
41
+
42
+ period_start = self.period_start
43
+
44
+ period_end = self.period_end
45
+
46
+ line_items = []
47
+ for line_items_item_data in self.line_items:
48
+ line_items_item = line_items_item_data.to_dict()
49
+ line_items.append(line_items_item)
50
+
51
+ subscription_id: Union[None, Unset, str]
52
+ if isinstance(self.subscription_id, Unset):
53
+ subscription_id = UNSET
54
+ else:
55
+ subscription_id = self.subscription_id
56
+
57
+ field_dict: dict[str, Any] = {}
58
+ field_dict.update(self.additional_properties)
59
+ field_dict.update(
60
+ {
61
+ "amount_due": amount_due,
62
+ "currency": currency,
63
+ "period_start": period_start,
64
+ "period_end": period_end,
65
+ "line_items": line_items,
66
+ }
67
+ )
68
+ if subscription_id is not UNSET:
69
+ field_dict["subscription_id"] = subscription_id
70
+
71
+ return field_dict
72
+
73
+ @classmethod
74
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
75
+ from ..models.invoice_line_item import InvoiceLineItem
76
+
77
+ d = dict(src_dict)
78
+ amount_due = d.pop("amount_due")
79
+
80
+ currency = d.pop("currency")
81
+
82
+ period_start = d.pop("period_start")
83
+
84
+ period_end = d.pop("period_end")
85
+
86
+ line_items = []
87
+ _line_items = d.pop("line_items")
88
+ for line_items_item_data in _line_items:
89
+ line_items_item = InvoiceLineItem.from_dict(line_items_item_data)
90
+
91
+ line_items.append(line_items_item)
92
+
93
+ def _parse_subscription_id(data: object) -> Union[None, Unset, str]:
94
+ if data is None:
95
+ return data
96
+ if isinstance(data, Unset):
97
+ return data
98
+ return cast(Union[None, Unset, str], data)
99
+
100
+ subscription_id = _parse_subscription_id(d.pop("subscription_id", UNSET))
101
+
102
+ upcoming_invoice = cls(
103
+ amount_due=amount_due,
104
+ currency=currency,
105
+ period_start=period_start,
106
+ period_end=period_end,
107
+ line_items=line_items,
108
+ subscription_id=subscription_id,
109
+ )
110
+
111
+ upcoming_invoice.additional_properties = d
112
+ return upcoming_invoice
113
+
114
+ @property
115
+ def additional_keys(self) -> list[str]:
116
+ return list(self.additional_properties.keys())
117
+
118
+ def __getitem__(self, key: str) -> Any:
119
+ return self.additional_properties[key]
120
+
121
+ def __setitem__(self, key: str, value: Any) -> None:
122
+ self.additional_properties[key] = value
123
+
124
+ def __delitem__(self, key: str) -> None:
125
+ del self.additional_properties[key]
126
+
127
+ def __contains__(self, key: str) -> bool:
128
+ return key in self.additional_properties