Skip to content

Commit 17919e0

Browse files
Generate edge
1 parent 875e273 commit 17919e0

18 files changed

Lines changed: 386 additions & 54 deletions

services/edge/oas_commit

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
95de5cba3201a683657cb472d5fa30aa768f19cc
1+
8f43ed707da765654e4427642c9d978f80d504e1

services/edge/src/stackit/edge/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
"Instance",
3434
"InstanceList",
3535
"Kubeconfig",
36+
"KubernetesReleaseList",
3637
"Plan",
3738
"PlanList",
3839
"Token",
@@ -64,6 +65,9 @@
6465
from stackit.edge.models.instance import Instance as Instance
6566
from stackit.edge.models.instance_list import InstanceList as InstanceList
6667
from stackit.edge.models.kubeconfig import Kubeconfig as Kubeconfig
68+
from stackit.edge.models.kubernetes_release_list import (
69+
KubernetesReleaseList as KubernetesReleaseList,
70+
)
6771
from stackit.edge.models.plan import Plan as Plan
6872
from stackit.edge.models.plan_list import PlanList as PlanList
6973
from stackit.edge.models.token import Token as Token

services/edge/src/stackit/edge/api/default_api.py

Lines changed: 235 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
from stackit.edge.models.instance import Instance
3131
from stackit.edge.models.instance_list import InstanceList
3232
from stackit.edge.models.kubeconfig import Kubeconfig
33+
from stackit.edge.models.kubernetes_release_list import KubernetesReleaseList
3334
from stackit.edge.models.plan_list import PlanList
3435
from stackit.edge.models.token import Token
3536
from stackit.edge.models.update_instance_by_name_payload import (
@@ -2627,6 +2628,240 @@ def _get_token_by_instance_name_serialize(
26272628
_request_auth=_request_auth,
26282629
)
26292630

2631+
@validate_call
2632+
def list_compatible_kubernetes_releases(
2633+
self,
2634+
talos_version: Annotated[StrictStr, Field(description="The name of the Talos release.")],
2635+
_request_timeout: Union[
2636+
None,
2637+
Annotated[StrictFloat, Field(gt=0)],
2638+
Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]],
2639+
] = None,
2640+
_request_auth: Optional[Dict[StrictStr, Any]] = None,
2641+
_content_type: Optional[StrictStr] = None,
2642+
_headers: Optional[Dict[StrictStr, Any]] = None,
2643+
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2644+
) -> KubernetesReleaseList:
2645+
"""list_compatible_kubernetes_releases
2646+
2647+
2648+
:param talos_version: The name of the Talos release. (required)
2649+
:type talos_version: str
2650+
:param _request_timeout: timeout setting for this request. If one
2651+
number provided, it will be total request
2652+
timeout. It can also be a pair (tuple) of
2653+
(connection, read) timeouts.
2654+
:type _request_timeout: int, tuple(int, int), optional
2655+
:param _request_auth: set to override the auth_settings for an a single
2656+
request; this effectively ignores the
2657+
authentication in the spec for a single request.
2658+
:type _request_auth: dict, optional
2659+
:param _content_type: force content-type for the request.
2660+
:type _content_type: str, Optional
2661+
:param _headers: set to override the headers for a single
2662+
request; this effectively ignores the headers
2663+
in the spec for a single request.
2664+
:type _headers: dict, optional
2665+
:param _host_index: set to override the host_index for a single
2666+
request; this effectively ignores the host_index
2667+
in the spec for a single request.
2668+
:type _host_index: int, optional
2669+
:return: Returns the result object.
2670+
""" # noqa: E501
2671+
2672+
_param = self._list_compatible_kubernetes_releases_serialize(
2673+
talos_version=talos_version,
2674+
_request_auth=_request_auth,
2675+
_content_type=_content_type,
2676+
_headers=_headers,
2677+
_host_index=_host_index,
2678+
)
2679+
2680+
_response_types_map: Dict[str, Optional[str]] = {
2681+
"200": "KubernetesReleaseList",
2682+
"400": "BadRequest",
2683+
"404": None,
2684+
"500": None,
2685+
}
2686+
response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout)
2687+
response_data.read()
2688+
return self.api_client.response_deserialize(
2689+
response_data=response_data,
2690+
response_types_map=_response_types_map,
2691+
).data
2692+
2693+
@validate_call
2694+
def list_compatible_kubernetes_releases_with_http_info(
2695+
self,
2696+
talos_version: Annotated[StrictStr, Field(description="The name of the Talos release.")],
2697+
_request_timeout: Union[
2698+
None,
2699+
Annotated[StrictFloat, Field(gt=0)],
2700+
Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]],
2701+
] = None,
2702+
_request_auth: Optional[Dict[StrictStr, Any]] = None,
2703+
_content_type: Optional[StrictStr] = None,
2704+
_headers: Optional[Dict[StrictStr, Any]] = None,
2705+
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2706+
) -> ApiResponse[KubernetesReleaseList]:
2707+
"""list_compatible_kubernetes_releases
2708+
2709+
2710+
:param talos_version: The name of the Talos release. (required)
2711+
:type talos_version: str
2712+
:param _request_timeout: timeout setting for this request. If one
2713+
number provided, it will be total request
2714+
timeout. It can also be a pair (tuple) of
2715+
(connection, read) timeouts.
2716+
:type _request_timeout: int, tuple(int, int), optional
2717+
:param _request_auth: set to override the auth_settings for an a single
2718+
request; this effectively ignores the
2719+
authentication in the spec for a single request.
2720+
:type _request_auth: dict, optional
2721+
:param _content_type: force content-type for the request.
2722+
:type _content_type: str, Optional
2723+
:param _headers: set to override the headers for a single
2724+
request; this effectively ignores the headers
2725+
in the spec for a single request.
2726+
:type _headers: dict, optional
2727+
:param _host_index: set to override the host_index for a single
2728+
request; this effectively ignores the host_index
2729+
in the spec for a single request.
2730+
:type _host_index: int, optional
2731+
:return: Returns the result object.
2732+
""" # noqa: E501
2733+
2734+
_param = self._list_compatible_kubernetes_releases_serialize(
2735+
talos_version=talos_version,
2736+
_request_auth=_request_auth,
2737+
_content_type=_content_type,
2738+
_headers=_headers,
2739+
_host_index=_host_index,
2740+
)
2741+
2742+
_response_types_map: Dict[str, Optional[str]] = {
2743+
"200": "KubernetesReleaseList",
2744+
"400": "BadRequest",
2745+
"404": None,
2746+
"500": None,
2747+
}
2748+
response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout)
2749+
response_data.read()
2750+
return self.api_client.response_deserialize(
2751+
response_data=response_data,
2752+
response_types_map=_response_types_map,
2753+
)
2754+
2755+
@validate_call
2756+
def list_compatible_kubernetes_releases_without_preload_content(
2757+
self,
2758+
talos_version: Annotated[StrictStr, Field(description="The name of the Talos release.")],
2759+
_request_timeout: Union[
2760+
None,
2761+
Annotated[StrictFloat, Field(gt=0)],
2762+
Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]],
2763+
] = None,
2764+
_request_auth: Optional[Dict[StrictStr, Any]] = None,
2765+
_content_type: Optional[StrictStr] = None,
2766+
_headers: Optional[Dict[StrictStr, Any]] = None,
2767+
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2768+
) -> RESTResponseType:
2769+
"""list_compatible_kubernetes_releases
2770+
2771+
2772+
:param talos_version: The name of the Talos release. (required)
2773+
:type talos_version: str
2774+
:param _request_timeout: timeout setting for this request. If one
2775+
number provided, it will be total request
2776+
timeout. It can also be a pair (tuple) of
2777+
(connection, read) timeouts.
2778+
:type _request_timeout: int, tuple(int, int), optional
2779+
:param _request_auth: set to override the auth_settings for an a single
2780+
request; this effectively ignores the
2781+
authentication in the spec for a single request.
2782+
:type _request_auth: dict, optional
2783+
:param _content_type: force content-type for the request.
2784+
:type _content_type: str, Optional
2785+
:param _headers: set to override the headers for a single
2786+
request; this effectively ignores the headers
2787+
in the spec for a single request.
2788+
:type _headers: dict, optional
2789+
:param _host_index: set to override the host_index for a single
2790+
request; this effectively ignores the host_index
2791+
in the spec for a single request.
2792+
:type _host_index: int, optional
2793+
:return: Returns the result object.
2794+
""" # noqa: E501
2795+
2796+
_param = self._list_compatible_kubernetes_releases_serialize(
2797+
talos_version=talos_version,
2798+
_request_auth=_request_auth,
2799+
_content_type=_content_type,
2800+
_headers=_headers,
2801+
_host_index=_host_index,
2802+
)
2803+
2804+
_response_types_map: Dict[str, Optional[str]] = {
2805+
"200": "KubernetesReleaseList",
2806+
"400": "BadRequest",
2807+
"404": None,
2808+
"500": None,
2809+
}
2810+
response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout)
2811+
return response_data.response
2812+
2813+
def _list_compatible_kubernetes_releases_serialize(
2814+
self,
2815+
talos_version,
2816+
_request_auth,
2817+
_content_type,
2818+
_headers,
2819+
_host_index,
2820+
) -> RequestSerialized:
2821+
2822+
_host = None
2823+
2824+
_collection_formats: Dict[str, str] = {}
2825+
2826+
_path_params: Dict[str, str] = {}
2827+
_query_params: List[Tuple[str, str]] = []
2828+
_header_params: Dict[str, Optional[str]] = _headers or {}
2829+
_form_params: List[Tuple[str, str]] = []
2830+
_files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {}
2831+
_body_params: Optional[bytes] = None
2832+
2833+
# process the path parameters
2834+
# process the query parameters
2835+
if talos_version is not None:
2836+
2837+
_query_params.append(("talosVersion", talos_version))
2838+
2839+
# process the header parameters
2840+
# process the form parameters
2841+
# process the body parameter
2842+
2843+
# set the HTTP header `Accept`
2844+
if "Accept" not in _header_params:
2845+
_header_params["Accept"] = self.api_client.select_header_accept(["application/json"])
2846+
2847+
# authentication setting
2848+
_auth_settings: List[str] = []
2849+
2850+
return self.api_client.param_serialize(
2851+
method="GET",
2852+
resource_path="/v1beta1/listcompatiblekubernetesreleases",
2853+
path_params=_path_params,
2854+
query_params=_query_params,
2855+
header_params=_header_params,
2856+
body=_body_params,
2857+
post_params=_form_params,
2858+
files=_files,
2859+
auth_settings=_auth_settings,
2860+
collection_formats=_collection_formats,
2861+
_host=_host,
2862+
_request_auth=_request_auth,
2863+
)
2864+
26302865
@validate_call
26312866
def list_instances(
26322867
self,

services/edge/src/stackit/edge/api_client.py

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ class ApiClient:
6666
"date": datetime.date,
6767
"datetime": datetime.datetime,
6868
"decimal": decimal.Decimal,
69+
"UUID": uuid.UUID,
6970
"object": object,
7071
}
7172
_pool = None
@@ -265,7 +266,7 @@ def response_deserialize(
265266
response_text = None
266267
return_data = None
267268
try:
268-
if response_type == "bytearray":
269+
if response_type in ("bytearray", "bytes"):
269270
return_data = response_data.data
270271
elif response_type == "file":
271272
return_data = self.__deserialize_file(response_data)
@@ -326,25 +327,20 @@ def sanitize_for_serialization(self, obj):
326327
return obj.isoformat()
327328
elif isinstance(obj, decimal.Decimal):
328329
return str(obj)
329-
330330
elif isinstance(obj, dict):
331-
obj_dict = obj
331+
return {key: self.sanitize_for_serialization(val) for key, val in obj.items()}
332+
333+
# Convert model obj to dict except
334+
# attributes `openapi_types`, `attribute_map`
335+
# and attributes which value is not None.
336+
# Convert attribute name to json key in
337+
# model definition for request.
338+
if hasattr(obj, "to_dict") and callable(getattr(obj, "to_dict")): # noqa: B009
339+
obj_dict = obj.to_dict()
332340
else:
333-
# Convert model obj to dict except
334-
# attributes `openapi_types`, `attribute_map`
335-
# and attributes which value is not None.
336-
# Convert attribute name to json key in
337-
# model definition for request.
338-
if hasattr(obj, "to_dict") and callable(getattr(obj, "to_dict")): # noqa: B009
339-
obj_dict = obj.to_dict()
340-
else:
341-
obj_dict = obj.__dict__
342-
343-
if isinstance(obj_dict, list):
344-
# here we handle instances that can either be a list or something else, and only became a real list by calling to_dict() # noqa: E501
345-
return self.sanitize_for_serialization(obj_dict)
341+
obj_dict = obj.__dict__
346342

347-
return {key: self.sanitize_for_serialization(val) for key, val in obj_dict.items()}
343+
return self.sanitize_for_serialization(obj_dict)
348344

349345
def deserialize(self, response_text: str, response_type: str, content_type: Optional[str]):
350346
"""Deserializes response into an object.
@@ -417,6 +413,8 @@ def __deserialize(self, data, klass):
417413
return self.__deserialize_datetime(data)
418414
elif klass is decimal.Decimal:
419415
return decimal.Decimal(data)
416+
elif klass is uuid.UUID:
417+
return uuid.UUID(data)
420418
elif issubclass(klass, Enum):
421419
return self.__deserialize_enum(data, klass)
422420
else:

services/edge/src/stackit/edge/models/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from stackit.edge.models.instance import Instance
1919
from stackit.edge.models.instance_list import InstanceList
2020
from stackit.edge.models.kubeconfig import Kubeconfig
21+
from stackit.edge.models.kubernetes_release_list import KubernetesReleaseList
2122
from stackit.edge.models.plan import Plan
2223
from stackit.edge.models.plan_list import PlanList
2324
from stackit.edge.models.token import Token

services/edge/src/stackit/edge/models/bad_request.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from typing import Any, ClassVar, Dict, List, Optional, Set
1919

2020
from pydantic import BaseModel, ConfigDict, StrictStr
21+
from pydantic_core import to_jsonable_python
2122
from typing_extensions import Self
2223

2324

@@ -31,7 +32,8 @@ class BadRequest(BaseModel):
3132
__properties: ClassVar[List[str]] = ["code", "message"]
3233

3334
model_config = ConfigDict(
34-
populate_by_name=True,
35+
validate_by_name=True,
36+
validate_by_alias=True,
3537
validate_assignment=True,
3638
protected_namespaces=(),
3739
)
@@ -42,8 +44,7 @@ def to_str(self) -> str:
4244

4345
def to_json(self) -> str:
4446
"""Returns the JSON representation of the model using alias"""
45-
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
46-
return json.dumps(self.to_dict())
47+
return json.dumps(to_jsonable_python(self.to_dict()))
4748

4849
@classmethod
4950
def from_json(cls, json_str: str) -> Optional[Self]:

services/edge/src/stackit/edge/models/create_instance_payload.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from uuid import UUID
2020

2121
from pydantic import BaseModel, ConfigDict, Field
22+
from pydantic_core import to_jsonable_python
2223
from typing_extensions import Annotated, Self
2324

2425

@@ -37,7 +38,8 @@ class CreateInstancePayload(BaseModel):
3738
__properties: ClassVar[List[str]] = ["description", "displayName", "planId"]
3839

3940
model_config = ConfigDict(
40-
populate_by_name=True,
41+
validate_by_name=True,
42+
validate_by_alias=True,
4143
validate_assignment=True,
4244
protected_namespaces=(),
4345
)
@@ -48,8 +50,7 @@ def to_str(self) -> str:
4850

4951
def to_json(self) -> str:
5052
"""Returns the JSON representation of the model using alias"""
51-
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
52-
return json.dumps(self.to_dict())
53+
return json.dumps(to_jsonable_python(self.to_dict()))
5354

5455
@classmethod
5556
def from_json(cls, json_str: str) -> Optional[Self]:

0 commit comments

Comments
 (0)