robosystems-client 0.2.5__py3-none-any.whl → 0.2.7__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.

Potentially problematic release.


This version of robosystems-client might be problematic. Click here for more details.

Files changed (51) hide show
  1. robosystems_client/api/agent/auto_select_agent.py +164 -32
  2. robosystems_client/api/backup/create_backup.py +72 -0
  3. robosystems_client/api/backup/get_backup_download_url.py +12 -28
  4. robosystems_client/api/backup/restore_backup.py +92 -0
  5. robosystems_client/api/graph_limits/get_graph_limits.py +12 -14
  6. robosystems_client/api/graphs/create_graph.py +136 -36
  7. robosystems_client/api/graphs/get_available_graph_tiers.py +281 -0
  8. robosystems_client/api/query/execute_cypher_query.py +13 -11
  9. robosystems_client/api/service_offerings/get_service_offerings.py +13 -11
  10. robosystems_client/models/__init__.py +66 -8
  11. robosystems_client/models/agent_response.py +1 -1
  12. robosystems_client/models/available_graph_tiers_response.py +74 -0
  13. robosystems_client/models/backup_download_url_response.py +92 -0
  14. robosystems_client/models/backup_limits.py +76 -0
  15. robosystems_client/models/batch_agent_request.py +1 -1
  16. robosystems_client/models/batch_agent_response.py +2 -2
  17. robosystems_client/models/copy_operation_limits.py +100 -0
  18. robosystems_client/models/create_graph_request.py +16 -17
  19. robosystems_client/models/credit_limits.py +84 -0
  20. robosystems_client/models/custom_schema_definition.py +14 -10
  21. robosystems_client/models/execute_cypher_query_response_200.py +135 -0
  22. robosystems_client/models/{get_graph_limits_response_getgraphlimits.py → execute_cypher_query_response_200_data_item.py} +5 -5
  23. robosystems_client/models/graph_limits_response.py +174 -0
  24. robosystems_client/models/graph_subscription_tier.py +220 -0
  25. robosystems_client/models/graph_subscriptions.py +100 -0
  26. robosystems_client/models/graph_tier_backup.py +76 -0
  27. robosystems_client/models/graph_tier_copy_operations.py +92 -0
  28. robosystems_client/models/graph_tier_info.py +192 -0
  29. robosystems_client/models/graph_tier_instance.py +76 -0
  30. robosystems_client/models/graph_tier_limits.py +106 -0
  31. robosystems_client/models/initial_entity_data.py +15 -12
  32. robosystems_client/models/offering_repository_plan.py +148 -0
  33. robosystems_client/models/offering_repository_plan_rate_limits_type_0.py +61 -0
  34. robosystems_client/models/operation_costs.py +100 -0
  35. robosystems_client/models/operation_costs_ai_operations.py +44 -0
  36. robosystems_client/models/operation_costs_token_pricing.py +59 -0
  37. robosystems_client/models/query_limits.py +84 -0
  38. robosystems_client/models/rate_limits.py +76 -0
  39. robosystems_client/models/repository_info.py +114 -0
  40. robosystems_client/models/repository_subscriptions.py +90 -0
  41. robosystems_client/models/service_offering_summary.py +84 -0
  42. robosystems_client/models/service_offerings_response.py +98 -0
  43. robosystems_client/models/storage_info.py +76 -0
  44. robosystems_client/models/{get_backup_download_url_response_getbackupdownloadurl.py → storage_info_included_per_tier.py} +9 -9
  45. robosystems_client/models/storage_info_overage_pricing.py +44 -0
  46. robosystems_client/models/storage_limits.py +90 -0
  47. robosystems_client/models/token_pricing.py +68 -0
  48. {robosystems_client-0.2.5.dist-info → robosystems_client-0.2.7.dist-info}/METADATA +1 -1
  49. {robosystems_client-0.2.5.dist-info → robosystems_client-0.2.7.dist-info}/RECORD +51 -21
  50. {robosystems_client-0.2.5.dist-info → robosystems_client-0.2.7.dist-info}/WHEEL +0 -0
  51. {robosystems_client-0.2.5.dist-info → robosystems_client-0.2.7.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,192 @@
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.graph_tier_instance import GraphTierInstance
11
+ from ..models.graph_tier_limits import GraphTierLimits
12
+
13
+
14
+ T = TypeVar("T", bound="GraphTierInfo")
15
+
16
+
17
+ @_attrs_define
18
+ class GraphTierInfo:
19
+ """Complete information about a graph database tier.
20
+
21
+ Attributes:
22
+ tier (str): Tier identifier
23
+ name (str): Tier name
24
+ display_name (str): Display name for UI
25
+ description (str): Tier description
26
+ backend (str): Database backend (kuzu or neo4j)
27
+ enabled (bool): Whether tier is available
28
+ max_subgraphs (Union[None, int]): Maximum subgraphs allowed
29
+ storage_limit_gb (int): Storage limit in GB
30
+ monthly_credits (int): Monthly AI credits
31
+ api_rate_multiplier (float): API rate limit multiplier
32
+ features (list[str]): List of tier features
33
+ instance (GraphTierInstance): Instance specifications for a tier.
34
+ limits (GraphTierLimits): Resource limits for a tier.
35
+ monthly_price (Union[None, Unset, float]): Monthly price in USD
36
+ """
37
+
38
+ tier: str
39
+ name: str
40
+ display_name: str
41
+ description: str
42
+ backend: str
43
+ enabled: bool
44
+ max_subgraphs: Union[None, int]
45
+ storage_limit_gb: int
46
+ monthly_credits: int
47
+ api_rate_multiplier: float
48
+ features: list[str]
49
+ instance: "GraphTierInstance"
50
+ limits: "GraphTierLimits"
51
+ monthly_price: Union[None, Unset, float] = UNSET
52
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
53
+
54
+ def to_dict(self) -> dict[str, Any]:
55
+ tier = self.tier
56
+
57
+ name = self.name
58
+
59
+ display_name = self.display_name
60
+
61
+ description = self.description
62
+
63
+ backend = self.backend
64
+
65
+ enabled = self.enabled
66
+
67
+ max_subgraphs: Union[None, int]
68
+ max_subgraphs = self.max_subgraphs
69
+
70
+ storage_limit_gb = self.storage_limit_gb
71
+
72
+ monthly_credits = self.monthly_credits
73
+
74
+ api_rate_multiplier = self.api_rate_multiplier
75
+
76
+ features = self.features
77
+
78
+ instance = self.instance.to_dict()
79
+
80
+ limits = self.limits.to_dict()
81
+
82
+ monthly_price: Union[None, Unset, float]
83
+ if isinstance(self.monthly_price, Unset):
84
+ monthly_price = UNSET
85
+ else:
86
+ monthly_price = self.monthly_price
87
+
88
+ field_dict: dict[str, Any] = {}
89
+ field_dict.update(self.additional_properties)
90
+ field_dict.update(
91
+ {
92
+ "tier": tier,
93
+ "name": name,
94
+ "display_name": display_name,
95
+ "description": description,
96
+ "backend": backend,
97
+ "enabled": enabled,
98
+ "max_subgraphs": max_subgraphs,
99
+ "storage_limit_gb": storage_limit_gb,
100
+ "monthly_credits": monthly_credits,
101
+ "api_rate_multiplier": api_rate_multiplier,
102
+ "features": features,
103
+ "instance": instance,
104
+ "limits": limits,
105
+ }
106
+ )
107
+ if monthly_price is not UNSET:
108
+ field_dict["monthly_price"] = monthly_price
109
+
110
+ return field_dict
111
+
112
+ @classmethod
113
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
114
+ from ..models.graph_tier_instance import GraphTierInstance
115
+ from ..models.graph_tier_limits import GraphTierLimits
116
+
117
+ d = dict(src_dict)
118
+ tier = d.pop("tier")
119
+
120
+ name = d.pop("name")
121
+
122
+ display_name = d.pop("display_name")
123
+
124
+ description = d.pop("description")
125
+
126
+ backend = d.pop("backend")
127
+
128
+ enabled = d.pop("enabled")
129
+
130
+ def _parse_max_subgraphs(data: object) -> Union[None, int]:
131
+ if data is None:
132
+ return data
133
+ return cast(Union[None, int], data)
134
+
135
+ max_subgraphs = _parse_max_subgraphs(d.pop("max_subgraphs"))
136
+
137
+ storage_limit_gb = d.pop("storage_limit_gb")
138
+
139
+ monthly_credits = d.pop("monthly_credits")
140
+
141
+ api_rate_multiplier = d.pop("api_rate_multiplier")
142
+
143
+ features = cast(list[str], d.pop("features"))
144
+
145
+ instance = GraphTierInstance.from_dict(d.pop("instance"))
146
+
147
+ limits = GraphTierLimits.from_dict(d.pop("limits"))
148
+
149
+ def _parse_monthly_price(data: object) -> Union[None, Unset, float]:
150
+ if data is None:
151
+ return data
152
+ if isinstance(data, Unset):
153
+ return data
154
+ return cast(Union[None, Unset, float], data)
155
+
156
+ monthly_price = _parse_monthly_price(d.pop("monthly_price", UNSET))
157
+
158
+ graph_tier_info = cls(
159
+ tier=tier,
160
+ name=name,
161
+ display_name=display_name,
162
+ description=description,
163
+ backend=backend,
164
+ enabled=enabled,
165
+ max_subgraphs=max_subgraphs,
166
+ storage_limit_gb=storage_limit_gb,
167
+ monthly_credits=monthly_credits,
168
+ api_rate_multiplier=api_rate_multiplier,
169
+ features=features,
170
+ instance=instance,
171
+ limits=limits,
172
+ monthly_price=monthly_price,
173
+ )
174
+
175
+ graph_tier_info.additional_properties = d
176
+ return graph_tier_info
177
+
178
+ @property
179
+ def additional_keys(self) -> list[str]:
180
+ return list(self.additional_properties.keys())
181
+
182
+ def __getitem__(self, key: str) -> Any:
183
+ return self.additional_properties[key]
184
+
185
+ def __setitem__(self, key: str, value: Any) -> None:
186
+ self.additional_properties[key] = value
187
+
188
+ def __delitem__(self, key: str) -> None:
189
+ del self.additional_properties[key]
190
+
191
+ def __contains__(self, key: str) -> bool:
192
+ return key in self.additional_properties
@@ -0,0 +1,76 @@
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="GraphTierInstance")
8
+
9
+
10
+ @_attrs_define
11
+ class GraphTierInstance:
12
+ """Instance specifications for a tier.
13
+
14
+ Attributes:
15
+ type_ (str): Instance type identifier
16
+ memory_mb (int): Memory in megabytes
17
+ databases_per_instance (int): Databases per instance
18
+ """
19
+
20
+ type_: str
21
+ memory_mb: int
22
+ databases_per_instance: int
23
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
24
+
25
+ def to_dict(self) -> dict[str, Any]:
26
+ type_ = self.type_
27
+
28
+ memory_mb = self.memory_mb
29
+
30
+ databases_per_instance = self.databases_per_instance
31
+
32
+ field_dict: dict[str, Any] = {}
33
+ field_dict.update(self.additional_properties)
34
+ field_dict.update(
35
+ {
36
+ "type": type_,
37
+ "memory_mb": memory_mb,
38
+ "databases_per_instance": databases_per_instance,
39
+ }
40
+ )
41
+
42
+ return field_dict
43
+
44
+ @classmethod
45
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
46
+ d = dict(src_dict)
47
+ type_ = d.pop("type")
48
+
49
+ memory_mb = d.pop("memory_mb")
50
+
51
+ databases_per_instance = d.pop("databases_per_instance")
52
+
53
+ graph_tier_instance = cls(
54
+ type_=type_,
55
+ memory_mb=memory_mb,
56
+ databases_per_instance=databases_per_instance,
57
+ )
58
+
59
+ graph_tier_instance.additional_properties = d
60
+ return graph_tier_instance
61
+
62
+ @property
63
+ def additional_keys(self) -> list[str]:
64
+ return list(self.additional_properties.keys())
65
+
66
+ def __getitem__(self, key: str) -> Any:
67
+ return self.additional_properties[key]
68
+
69
+ def __setitem__(self, key: str, value: Any) -> None:
70
+ self.additional_properties[key] = value
71
+
72
+ def __delitem__(self, key: str) -> None:
73
+ del self.additional_properties[key]
74
+
75
+ def __contains__(self, key: str) -> bool:
76
+ return key in self.additional_properties
@@ -0,0 +1,106 @@
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
+ if TYPE_CHECKING:
8
+ from ..models.graph_tier_backup import GraphTierBackup
9
+ from ..models.graph_tier_copy_operations import GraphTierCopyOperations
10
+
11
+
12
+ T = TypeVar("T", bound="GraphTierLimits")
13
+
14
+
15
+ @_attrs_define
16
+ class GraphTierLimits:
17
+ """Resource limits for a tier.
18
+
19
+ Attributes:
20
+ storage_gb (int): Storage limit in GB
21
+ monthly_credits (int): Monthly credit allocation
22
+ max_subgraphs (Union[None, int]): Maximum subgraphs (null for unlimited)
23
+ copy_operations (GraphTierCopyOperations): Copy operation limits for a tier.
24
+ backup (GraphTierBackup): Backup configuration for a tier.
25
+ """
26
+
27
+ storage_gb: int
28
+ monthly_credits: int
29
+ max_subgraphs: Union[None, int]
30
+ copy_operations: "GraphTierCopyOperations"
31
+ backup: "GraphTierBackup"
32
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
33
+
34
+ def to_dict(self) -> dict[str, Any]:
35
+ storage_gb = self.storage_gb
36
+
37
+ monthly_credits = self.monthly_credits
38
+
39
+ max_subgraphs: Union[None, int]
40
+ max_subgraphs = self.max_subgraphs
41
+
42
+ copy_operations = self.copy_operations.to_dict()
43
+
44
+ backup = self.backup.to_dict()
45
+
46
+ field_dict: dict[str, Any] = {}
47
+ field_dict.update(self.additional_properties)
48
+ field_dict.update(
49
+ {
50
+ "storage_gb": storage_gb,
51
+ "monthly_credits": monthly_credits,
52
+ "max_subgraphs": max_subgraphs,
53
+ "copy_operations": copy_operations,
54
+ "backup": backup,
55
+ }
56
+ )
57
+
58
+ return field_dict
59
+
60
+ @classmethod
61
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
62
+ from ..models.graph_tier_backup import GraphTierBackup
63
+ from ..models.graph_tier_copy_operations import GraphTierCopyOperations
64
+
65
+ d = dict(src_dict)
66
+ storage_gb = d.pop("storage_gb")
67
+
68
+ monthly_credits = d.pop("monthly_credits")
69
+
70
+ def _parse_max_subgraphs(data: object) -> Union[None, int]:
71
+ if data is None:
72
+ return data
73
+ return cast(Union[None, int], data)
74
+
75
+ max_subgraphs = _parse_max_subgraphs(d.pop("max_subgraphs"))
76
+
77
+ copy_operations = GraphTierCopyOperations.from_dict(d.pop("copy_operations"))
78
+
79
+ backup = GraphTierBackup.from_dict(d.pop("backup"))
80
+
81
+ graph_tier_limits = cls(
82
+ storage_gb=storage_gb,
83
+ monthly_credits=monthly_credits,
84
+ max_subgraphs=max_subgraphs,
85
+ copy_operations=copy_operations,
86
+ backup=backup,
87
+ )
88
+
89
+ graph_tier_limits.additional_properties = d
90
+ return graph_tier_limits
91
+
92
+ @property
93
+ def additional_keys(self) -> list[str]:
94
+ return list(self.additional_properties.keys())
95
+
96
+ def __getitem__(self, key: str) -> Any:
97
+ return self.additional_properties[key]
98
+
99
+ def __setitem__(self, key: str, value: Any) -> None:
100
+ self.additional_properties[key] = value
101
+
102
+ def __delitem__(self, key: str) -> None:
103
+ del self.additional_properties[key]
104
+
105
+ def __contains__(self, key: str) -> bool:
106
+ return key in self.additional_properties
@@ -11,18 +11,21 @@ T = TypeVar("T", bound="InitialEntityData")
11
11
 
12
12
  @_attrs_define
13
13
  class InitialEntityData:
14
- """Initial entity data for graph creation.
15
-
16
- Attributes:
17
- name (str): Entity name
18
- uri (str): Entity website or URI
19
- cik (Union[None, Unset, str]): CIK number for SEC filings
20
- sic (Union[None, Unset, str]): SIC code
21
- sic_description (Union[None, Unset, str]): SIC description
22
- category (Union[None, Unset, str]): Business category
23
- state_of_incorporation (Union[None, Unset, str]): State of incorporation
24
- fiscal_year_end (Union[None, Unset, str]): Fiscal year end (MMDD)
25
- ein (Union[None, Unset, str]): Employer Identification Number
14
+ """Initial entity data for entity-focused graph creation.
15
+
16
+ When creating an entity graph with an initial entity node, this model defines
17
+ the entity's identifying information and metadata.
18
+
19
+ Attributes:
20
+ name (str): Entity name
21
+ uri (str): Entity website or URI
22
+ cik (Union[None, Unset, str]): CIK number for SEC filings
23
+ sic (Union[None, Unset, str]): SIC code
24
+ sic_description (Union[None, Unset, str]): SIC description
25
+ category (Union[None, Unset, str]): Business category
26
+ state_of_incorporation (Union[None, Unset, str]): State of incorporation
27
+ fiscal_year_end (Union[None, Unset, str]): Fiscal year end (MMDD)
28
+ ein (Union[None, Unset, str]): Employer Identification Number
26
29
  """
27
30
 
28
31
  name: str
@@ -0,0 +1,148 @@
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.offering_repository_plan_rate_limits_type_0 import (
11
+ OfferingRepositoryPlanRateLimitsType0,
12
+ )
13
+
14
+
15
+ T = TypeVar("T", bound="OfferingRepositoryPlan")
16
+
17
+
18
+ @_attrs_define
19
+ class OfferingRepositoryPlan:
20
+ """Information about a repository plan.
21
+
22
+ Attributes:
23
+ plan (str): Plan identifier
24
+ name (str): Plan name
25
+ monthly_price (float): Monthly price in USD
26
+ monthly_credits (int): Monthly credit allocation
27
+ access_level (str): Access level
28
+ features (list[str]): List of features
29
+ rate_limits (Union['OfferingRepositoryPlanRateLimitsType0', None, Unset]): Rate limits for this plan
30
+ """
31
+
32
+ plan: str
33
+ name: str
34
+ monthly_price: float
35
+ monthly_credits: int
36
+ access_level: str
37
+ features: list[str]
38
+ rate_limits: Union["OfferingRepositoryPlanRateLimitsType0", None, Unset] = UNSET
39
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
40
+
41
+ def to_dict(self) -> dict[str, Any]:
42
+ from ..models.offering_repository_plan_rate_limits_type_0 import (
43
+ OfferingRepositoryPlanRateLimitsType0,
44
+ )
45
+
46
+ plan = self.plan
47
+
48
+ name = self.name
49
+
50
+ monthly_price = self.monthly_price
51
+
52
+ monthly_credits = self.monthly_credits
53
+
54
+ access_level = self.access_level
55
+
56
+ features = self.features
57
+
58
+ rate_limits: Union[None, Unset, dict[str, Any]]
59
+ if isinstance(self.rate_limits, Unset):
60
+ rate_limits = UNSET
61
+ elif isinstance(self.rate_limits, OfferingRepositoryPlanRateLimitsType0):
62
+ rate_limits = self.rate_limits.to_dict()
63
+ else:
64
+ rate_limits = self.rate_limits
65
+
66
+ field_dict: dict[str, Any] = {}
67
+ field_dict.update(self.additional_properties)
68
+ field_dict.update(
69
+ {
70
+ "plan": plan,
71
+ "name": name,
72
+ "monthly_price": monthly_price,
73
+ "monthly_credits": monthly_credits,
74
+ "access_level": access_level,
75
+ "features": features,
76
+ }
77
+ )
78
+ if rate_limits is not UNSET:
79
+ field_dict["rate_limits"] = rate_limits
80
+
81
+ return field_dict
82
+
83
+ @classmethod
84
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
85
+ from ..models.offering_repository_plan_rate_limits_type_0 import (
86
+ OfferingRepositoryPlanRateLimitsType0,
87
+ )
88
+
89
+ d = dict(src_dict)
90
+ plan = d.pop("plan")
91
+
92
+ name = d.pop("name")
93
+
94
+ monthly_price = d.pop("monthly_price")
95
+
96
+ monthly_credits = d.pop("monthly_credits")
97
+
98
+ access_level = d.pop("access_level")
99
+
100
+ features = cast(list[str], d.pop("features"))
101
+
102
+ def _parse_rate_limits(
103
+ data: object,
104
+ ) -> Union["OfferingRepositoryPlanRateLimitsType0", None, Unset]:
105
+ if data is None:
106
+ return data
107
+ if isinstance(data, Unset):
108
+ return data
109
+ try:
110
+ if not isinstance(data, dict):
111
+ raise TypeError()
112
+ rate_limits_type_0 = OfferingRepositoryPlanRateLimitsType0.from_dict(data)
113
+
114
+ return rate_limits_type_0
115
+ except: # noqa: E722
116
+ pass
117
+ return cast(Union["OfferingRepositoryPlanRateLimitsType0", None, Unset], data)
118
+
119
+ rate_limits = _parse_rate_limits(d.pop("rate_limits", UNSET))
120
+
121
+ offering_repository_plan = cls(
122
+ plan=plan,
123
+ name=name,
124
+ monthly_price=monthly_price,
125
+ monthly_credits=monthly_credits,
126
+ access_level=access_level,
127
+ features=features,
128
+ rate_limits=rate_limits,
129
+ )
130
+
131
+ offering_repository_plan.additional_properties = d
132
+ return offering_repository_plan
133
+
134
+ @property
135
+ def additional_keys(self) -> list[str]:
136
+ return list(self.additional_properties.keys())
137
+
138
+ def __getitem__(self, key: str) -> Any:
139
+ return self.additional_properties[key]
140
+
141
+ def __setitem__(self, key: str, value: Any) -> None:
142
+ self.additional_properties[key] = value
143
+
144
+ def __delitem__(self, key: str) -> None:
145
+ del self.additional_properties[key]
146
+
147
+ def __contains__(self, key: str) -> bool:
148
+ return key in self.additional_properties
@@ -0,0 +1,61 @@
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
+ T = TypeVar("T", bound="OfferingRepositoryPlanRateLimitsType0")
8
+
9
+
10
+ @_attrs_define
11
+ class OfferingRepositoryPlanRateLimitsType0:
12
+ """ """
13
+
14
+ additional_properties: dict[str, Union[None, int]] = _attrs_field(
15
+ init=False, factory=dict
16
+ )
17
+
18
+ def to_dict(self) -> dict[str, Any]:
19
+ field_dict: dict[str, Any] = {}
20
+ for prop_name, prop in self.additional_properties.items():
21
+ field_dict[prop_name] = prop
22
+
23
+ return field_dict
24
+
25
+ @classmethod
26
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
27
+ d = dict(src_dict)
28
+ offering_repository_plan_rate_limits_type_0 = cls()
29
+
30
+ additional_properties = {}
31
+ for prop_name, prop_dict in d.items():
32
+
33
+ def _parse_additional_property(data: object) -> Union[None, int]:
34
+ if data is None:
35
+ return data
36
+ return cast(Union[None, int], data)
37
+
38
+ additional_property = _parse_additional_property(prop_dict)
39
+
40
+ additional_properties[prop_name] = additional_property
41
+
42
+ offering_repository_plan_rate_limits_type_0.additional_properties = (
43
+ additional_properties
44
+ )
45
+ return offering_repository_plan_rate_limits_type_0
46
+
47
+ @property
48
+ def additional_keys(self) -> list[str]:
49
+ return list(self.additional_properties.keys())
50
+
51
+ def __getitem__(self, key: str) -> Union[None, int]:
52
+ return self.additional_properties[key]
53
+
54
+ def __setitem__(self, key: str, value: Union[None, int]) -> None:
55
+ self.additional_properties[key] = value
56
+
57
+ def __delitem__(self, key: str) -> None:
58
+ del self.additional_properties[key]
59
+
60
+ def __contains__(self, key: str) -> bool:
61
+ return key in self.additional_properties