diff --git a/services/loadbalancer/oas_commit b/services/loadbalancer/oas_commit index 6a2a7d7b4..e3713dde3 100644 --- a/services/loadbalancer/oas_commit +++ b/services/loadbalancer/oas_commit @@ -1 +1 @@ -10774896634990c655a523f5f0fabd6e2be9e216 +0e64886dd0847341800d7191ed193b75413be998 diff --git a/services/loadbalancer/src/stackit/loadbalancer/api/default_api.py b/services/loadbalancer/src/stackit/loadbalancer/api/default_api.py index 3ed3dbd9c..023b3099d 100644 --- a/services/loadbalancer/src/stackit/loadbalancer/api/default_api.py +++ b/services/loadbalancer/src/stackit/loadbalancer/api/default_api.py @@ -12,6 +12,7 @@ """ # noqa: E501 from typing import Any, Dict, List, Optional, Tuple, Union +from uuid import UUID from pydantic import Field, StrictFloat, StrictInt, StrictStr, validate_call from stackit.core.configuration import Configuration @@ -73,7 +74,7 @@ def create_credentials( project_id: StrictStr, region: StrictStr, create_credentials_payload: CreateCredentialsPayload, - x_request_id: Optional[StrictStr] = None, + x_request_id: Optional[UUID] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -95,7 +96,7 @@ def create_credentials( :param create_credentials_payload: (required) :type create_credentials_payload: CreateCredentialsPayload :param x_request_id: - :type x_request_id: str + :type x_request_id: UUID :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -149,7 +150,7 @@ def create_credentials_with_http_info( project_id: StrictStr, region: StrictStr, create_credentials_payload: CreateCredentialsPayload, - x_request_id: Optional[StrictStr] = None, + x_request_id: Optional[UUID] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -171,7 +172,7 @@ def create_credentials_with_http_info( :param create_credentials_payload: (required) :type create_credentials_payload: CreateCredentialsPayload :param x_request_id: - :type x_request_id: str + :type x_request_id: UUID :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -225,7 +226,7 @@ def create_credentials_without_preload_content( project_id: StrictStr, region: StrictStr, create_credentials_payload: CreateCredentialsPayload, - x_request_id: Optional[StrictStr] = None, + x_request_id: Optional[UUID] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -247,7 +248,7 @@ def create_credentials_without_preload_content( :param create_credentials_payload: (required) :type create_credentials_payload: CreateCredentialsPayload :param x_request_id: - :type x_request_id: str + :type x_request_id: UUID :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -364,7 +365,7 @@ def create_load_balancer( project_id: StrictStr, region: StrictStr, create_load_balancer_payload: CreateLoadBalancerPayload, - x_request_id: Optional[StrictStr] = None, + x_request_id: Optional[UUID] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -386,7 +387,7 @@ def create_load_balancer( :param create_load_balancer_payload: (required) :type create_load_balancer_payload: CreateLoadBalancerPayload :param x_request_id: - :type x_request_id: str + :type x_request_id: UUID :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -441,7 +442,7 @@ def create_load_balancer_with_http_info( project_id: StrictStr, region: StrictStr, create_load_balancer_payload: CreateLoadBalancerPayload, - x_request_id: Optional[StrictStr] = None, + x_request_id: Optional[UUID] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -463,7 +464,7 @@ def create_load_balancer_with_http_info( :param create_load_balancer_payload: (required) :type create_load_balancer_payload: CreateLoadBalancerPayload :param x_request_id: - :type x_request_id: str + :type x_request_id: UUID :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -518,7 +519,7 @@ def create_load_balancer_without_preload_content( project_id: StrictStr, region: StrictStr, create_load_balancer_payload: CreateLoadBalancerPayload, - x_request_id: Optional[StrictStr] = None, + x_request_id: Optional[UUID] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -540,7 +541,7 @@ def create_load_balancer_without_preload_content( :param create_load_balancer_payload: (required) :type create_load_balancer_payload: CreateLoadBalancerPayload :param x_request_id: - :type x_request_id: str + :type x_request_id: UUID :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of diff --git a/services/loadbalancer/src/stackit/loadbalancer/api_client.py b/services/loadbalancer/src/stackit/loadbalancer/api_client.py index 9f92d08d8..24f82624c 100644 --- a/services/loadbalancer/src/stackit/loadbalancer/api_client.py +++ b/services/loadbalancer/src/stackit/loadbalancer/api_client.py @@ -12,11 +12,13 @@ """ # noqa: E501 import datetime +import decimal import json import mimetypes import os import re import tempfile +import uuid from enum import Enum from typing import Dict, List, Optional, Tuple, Union from urllib.parse import quote @@ -63,8 +65,10 @@ class ApiClient: "bool": bool, "date": datetime.date, "datetime": datetime.datetime, + "decimal": decimal.Decimal, "object": object, } + _pool = None def __init__(self, configuration, header_name=None, header_value=None, cookie=None) -> None: self.config: Configuration = configuration @@ -267,7 +271,7 @@ def response_deserialize( return_data = self.__deserialize_file(response_data) elif response_type is not None: match = None - content_type = response_data.getheader("content-type") + content_type = response_data.headers.get("content-type") if content_type is not None: match = re.search(r"charset=([a-zA-Z\-\d]+)[\s;]?", content_type) encoding = match.group(1) if match else "utf-8" @@ -284,7 +288,7 @@ def response_deserialize( return ApiResponse( status_code=response_data.status, data=return_data, - headers=response_data.getheaders(), + headers=response_data.headers, raw_data=response_data.data, ) @@ -296,6 +300,7 @@ def sanitize_for_serialization(self, obj): If obj is str, int, long, float, bool, return directly. If obj is datetime.datetime, datetime.date convert to string in iso8601 format. + If obj is decimal.Decimal return string representation. If obj is list, sanitize each element in the list. If obj is dict, return the dict. If obj is OpenAPI model, return the properties dict. @@ -311,12 +316,16 @@ def sanitize_for_serialization(self, obj): return obj.get_secret_value() elif isinstance(obj, self.PRIMITIVE_TYPES): return obj + elif isinstance(obj, uuid.UUID): + return str(obj) elif isinstance(obj, list): return [self.sanitize_for_serialization(sub_obj) for sub_obj in obj] elif isinstance(obj, tuple): return tuple(self.sanitize_for_serialization(sub_obj) for sub_obj in obj) elif isinstance(obj, (datetime.datetime, datetime.date)): return obj.isoformat() + elif isinstance(obj, decimal.Decimal): + return str(obj) elif isinstance(obj, dict): obj_dict = obj @@ -326,7 +335,7 @@ def sanitize_for_serialization(self, obj): # and attributes which value is not None. # Convert attribute name to json key in # model definition for request. - if hasattr(obj, "to_dict") and callable(obj.to_dict): + if hasattr(obj, "to_dict") and callable(getattr(obj, "to_dict")): # noqa: B009 obj_dict = obj.to_dict() else: obj_dict = obj.__dict__ @@ -354,7 +363,7 @@ def deserialize(self, response_text: str, response_type: str, content_type: Opti data = json.loads(response_text) except ValueError: data = response_text - elif re.match(r"^application/(json|[\w!#$&.+-^_]+\+json)\s*(;|$)", content_type, re.IGNORECASE): + elif re.match(r"^application/(json|[\w!#$&.+\-^_]+\+json)\s*(;|$)", content_type, re.IGNORECASE): if response_text == "": data = "" else: @@ -400,12 +409,14 @@ def __deserialize(self, data, klass): if klass in self.PRIMITIVE_TYPES: return self.__deserialize_primitive(data, klass) - elif klass == object: + elif klass is object: return self.__deserialize_object(data) - elif klass == datetime.date: + elif klass is datetime.date: return self.__deserialize_date(data) - elif klass == datetime.datetime: + elif klass is datetime.datetime: return self.__deserialize_datetime(data) + elif klass is decimal.Decimal: + return decimal.Decimal(data) elif issubclass(klass, Enum): return self.__deserialize_enum(data, klass) else: @@ -553,12 +564,14 @@ def __deserialize_file(self, response): os.close(fd) os.remove(path) - content_disposition = response.getheader("Content-Disposition") + content_disposition = response.headers.get("Content-Disposition") if content_disposition: m = re.search(r'filename=[\'"]?([^\'"\s]+)[\'"]?', content_disposition) if m is None: raise ValueError("Unexpected 'content-disposition' header value") - filename = m.group(1) + filename = os.path.basename(m.group(1)) # Strip any directory traversal + if filename in ("", ".", ".."): # fall back to tmp filename + filename = os.path.basename(path) path = os.path.join(os.path.dirname(path), filename) with open(path, "wb") as f: diff --git a/services/loadbalancer/src/stackit/loadbalancer/exceptions.py b/services/loadbalancer/src/stackit/loadbalancer/exceptions.py index 2ee7ca77d..89c5ce1e6 100644 --- a/services/loadbalancer/src/stackit/loadbalancer/exceptions.py +++ b/services/loadbalancer/src/stackit/loadbalancer/exceptions.py @@ -129,7 +129,7 @@ def __init__( self.body = http_resp.data.decode("utf-8") except Exception: # noqa: S110 pass - self.headers = http_resp.getheaders() + self.headers = http_resp.headers @classmethod def from_response( diff --git a/services/loadbalancer/src/stackit/loadbalancer/models/__init__.py b/services/loadbalancer/src/stackit/loadbalancer/models/__init__.py index 602aae8e0..b2bc4923b 100644 --- a/services/loadbalancer/src/stackit/loadbalancer/models/__init__.py +++ b/services/loadbalancer/src/stackit/loadbalancer/models/__init__.py @@ -12,7 +12,6 @@ Do not edit the class manually. """ # noqa: E501 - # import models into model package from stackit.loadbalancer.models.active_health_check import ActiveHealthCheck from stackit.loadbalancer.models.create_credentials_payload import ( diff --git a/services/loadbalancer/src/stackit/loadbalancer/models/create_load_balancer_payload.py b/services/loadbalancer/src/stackit/loadbalancer/models/create_load_balancer_payload.py index 080275825..49881d842 100644 --- a/services/loadbalancer/src/stackit/loadbalancer/models/create_load_balancer_payload.py +++ b/services/loadbalancer/src/stackit/loadbalancer/models/create_load_balancer_payload.py @@ -199,16 +199,16 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of each item in errors (list) _items = [] if self.errors: - for _item in self.errors: - if _item: - _items.append(_item.to_dict()) + for _item_errors in self.errors: + if _item_errors: + _items.append(_item_errors.to_dict()) _dict["errors"] = _items # override the default output from pydantic by calling `to_dict()` of each item in listeners (list) _items = [] if self.listeners: - for _item in self.listeners: - if _item: - _items.append(_item.to_dict()) + for _item_listeners in self.listeners: + if _item_listeners: + _items.append(_item_listeners.to_dict()) _dict["listeners"] = _items # override the default output from pydantic by calling `to_dict()` of load_balancer_security_group if self.load_balancer_security_group: @@ -216,9 +216,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of each item in networks (list) _items = [] if self.networks: - for _item in self.networks: - if _item: - _items.append(_item.to_dict()) + for _item_networks in self.networks: + if _item_networks: + _items.append(_item_networks.to_dict()) _dict["networks"] = _items # override the default output from pydantic by calling `to_dict()` of options if self.options: @@ -226,9 +226,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of each item in target_pools (list) _items = [] if self.target_pools: - for _item in self.target_pools: - if _item: - _items.append(_item.to_dict()) + for _item_target_pools in self.target_pools: + if _item_target_pools: + _items.append(_item_target_pools.to_dict()) _dict["targetPools"] = _items # override the default output from pydantic by calling `to_dict()` of target_security_group if self.target_security_group: diff --git a/services/loadbalancer/src/stackit/loadbalancer/models/get_quota_response.py b/services/loadbalancer/src/stackit/loadbalancer/models/get_quota_response.py index 202dcbc32..1a70e2868 100644 --- a/services/loadbalancer/src/stackit/loadbalancer/models/get_quota_response.py +++ b/services/loadbalancer/src/stackit/loadbalancer/models/get_quota_response.py @@ -17,6 +17,7 @@ import pprint import re # noqa: F401 from typing import Any, ClassVar, Dict, List, Optional, Set +from uuid import UUID from pydantic import BaseModel, ConfigDict, Field, field_validator from typing_extensions import Annotated, Self @@ -37,9 +38,7 @@ class GetQuotaResponse(BaseModel): description="The maximum number of load balancing servers in this project. Unlimited if set to -1.", alias="maxLoadBalancers", ) - project_id: Optional[Annotated[str, Field(strict=True)]] = Field( - default=None, description="Project identifier", alias="projectId" - ) + project_id: Optional[UUID] = Field(default=None, description="Project identifier", alias="projectId") region: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="Region") used_credentials: Optional[Annotated[int, Field(le=1000000, strict=True, ge=-1)]] = Field( default=None, diff --git a/services/loadbalancer/src/stackit/loadbalancer/models/list_credentials_response.py b/services/loadbalancer/src/stackit/loadbalancer/models/list_credentials_response.py index 947ab335b..5b35c9227 100644 --- a/services/loadbalancer/src/stackit/loadbalancer/models/list_credentials_response.py +++ b/services/loadbalancer/src/stackit/loadbalancer/models/list_credentials_response.py @@ -71,9 +71,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of each item in credentials (list) _items = [] if self.credentials: - for _item in self.credentials: - if _item: - _items.append(_item.to_dict()) + for _item_credentials in self.credentials: + if _item_credentials: + _items.append(_item_credentials.to_dict()) _dict["credentials"] = _items return _dict diff --git a/services/loadbalancer/src/stackit/loadbalancer/models/list_load_balancers_response.py b/services/loadbalancer/src/stackit/loadbalancer/models/list_load_balancers_response.py index bdc887c22..bd586cfc5 100644 --- a/services/loadbalancer/src/stackit/loadbalancer/models/list_load_balancers_response.py +++ b/services/loadbalancer/src/stackit/loadbalancer/models/list_load_balancers_response.py @@ -87,9 +87,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of each item in load_balancers (list) _items = [] if self.load_balancers: - for _item in self.load_balancers: - if _item: - _items.append(_item.to_dict()) + for _item_load_balancers in self.load_balancers: + if _item_load_balancers: + _items.append(_item_load_balancers.to_dict()) _dict["loadBalancers"] = _items return _dict diff --git a/services/loadbalancer/src/stackit/loadbalancer/models/list_plans_response.py b/services/loadbalancer/src/stackit/loadbalancer/models/list_plans_response.py index 3628f15ca..70bcb8d6b 100644 --- a/services/loadbalancer/src/stackit/loadbalancer/models/list_plans_response.py +++ b/services/loadbalancer/src/stackit/loadbalancer/models/list_plans_response.py @@ -71,9 +71,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of each item in valid_plans (list) _items = [] if self.valid_plans: - for _item in self.valid_plans: - if _item: - _items.append(_item.to_dict()) + for _item_valid_plans in self.valid_plans: + if _item_valid_plans: + _items.append(_item_valid_plans.to_dict()) _dict["validPlans"] = _items return _dict diff --git a/services/loadbalancer/src/stackit/loadbalancer/models/listener.py b/services/loadbalancer/src/stackit/loadbalancer/models/listener.py index 290cea030..9161b9a79 100644 --- a/services/loadbalancer/src/stackit/loadbalancer/models/listener.py +++ b/services/loadbalancer/src/stackit/loadbalancer/models/listener.py @@ -122,9 +122,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of each item in server_name_indicators (list) _items = [] if self.server_name_indicators: - for _item in self.server_name_indicators: - if _item: - _items.append(_item.to_dict()) + for _item_server_name_indicators in self.server_name_indicators: + if _item_server_name_indicators: + _items.append(_item_server_name_indicators.to_dict()) _dict["serverNameIndicators"] = _items # override the default output from pydantic by calling `to_dict()` of tcp if self.tcp: diff --git a/services/loadbalancer/src/stackit/loadbalancer/models/load_balancer.py b/services/loadbalancer/src/stackit/loadbalancer/models/load_balancer.py index b7bf69523..966f829c9 100644 --- a/services/loadbalancer/src/stackit/loadbalancer/models/load_balancer.py +++ b/services/loadbalancer/src/stackit/loadbalancer/models/load_balancer.py @@ -199,16 +199,16 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of each item in errors (list) _items = [] if self.errors: - for _item in self.errors: - if _item: - _items.append(_item.to_dict()) + for _item_errors in self.errors: + if _item_errors: + _items.append(_item_errors.to_dict()) _dict["errors"] = _items # override the default output from pydantic by calling `to_dict()` of each item in listeners (list) _items = [] if self.listeners: - for _item in self.listeners: - if _item: - _items.append(_item.to_dict()) + for _item_listeners in self.listeners: + if _item_listeners: + _items.append(_item_listeners.to_dict()) _dict["listeners"] = _items # override the default output from pydantic by calling `to_dict()` of load_balancer_security_group if self.load_balancer_security_group: @@ -216,9 +216,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of each item in networks (list) _items = [] if self.networks: - for _item in self.networks: - if _item: - _items.append(_item.to_dict()) + for _item_networks in self.networks: + if _item_networks: + _items.append(_item_networks.to_dict()) _dict["networks"] = _items # override the default output from pydantic by calling `to_dict()` of options if self.options: @@ -226,9 +226,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of each item in target_pools (list) _items = [] if self.target_pools: - for _item in self.target_pools: - if _item: - _items.append(_item.to_dict()) + for _item_target_pools in self.target_pools: + if _item_target_pools: + _items.append(_item_target_pools.to_dict()) _dict["targetPools"] = _items # override the default output from pydantic by calling `to_dict()` of target_security_group if self.target_security_group: diff --git a/services/loadbalancer/src/stackit/loadbalancer/models/network.py b/services/loadbalancer/src/stackit/loadbalancer/models/network.py index d2d7f1458..00d2499de 100644 --- a/services/loadbalancer/src/stackit/loadbalancer/models/network.py +++ b/services/loadbalancer/src/stackit/loadbalancer/models/network.py @@ -17,9 +17,10 @@ import pprint import re # noqa: F401 from typing import Any, ClassVar, Dict, List, Optional, Set +from uuid import UUID from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator -from typing_extensions import Annotated, Self +from typing_extensions import Self class Network(BaseModel): @@ -27,9 +28,7 @@ class Network(BaseModel): Network """ # noqa: E501 - network_id: Optional[Annotated[str, Field(strict=True)]] = Field( - default=None, description="Openstack network ID", alias="networkId" - ) + network_id: Optional[UUID] = Field(default=None, description="Openstack network ID", alias="networkId") role: Optional[StrictStr] = Field( default=None, description="The role defines how the load balancer is using the network. Currently only ROLE_LISTENERS_AND_TARGETS is supported.", diff --git a/services/loadbalancer/src/stackit/loadbalancer/models/status.py b/services/loadbalancer/src/stackit/loadbalancer/models/status.py index 5a83481ec..dc73b49b8 100644 --- a/services/loadbalancer/src/stackit/loadbalancer/models/status.py +++ b/services/loadbalancer/src/stackit/loadbalancer/models/status.py @@ -82,9 +82,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of each item in details (list) _items = [] if self.details: - for _item in self.details: - if _item: - _items.append(_item.to_dict()) + for _item_details in self.details: + if _item_details: + _items.append(_item_details.to_dict()) _dict["details"] = _items return _dict diff --git a/services/loadbalancer/src/stackit/loadbalancer/models/target_pool.py b/services/loadbalancer/src/stackit/loadbalancer/models/target_pool.py index 3744369c5..69e47e01a 100644 --- a/services/loadbalancer/src/stackit/loadbalancer/models/target_pool.py +++ b/services/loadbalancer/src/stackit/loadbalancer/models/target_pool.py @@ -100,9 +100,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of each item in targets (list) _items = [] if self.targets: - for _item in self.targets: - if _item: - _items.append(_item.to_dict()) + for _item_targets in self.targets: + if _item_targets: + _items.append(_item_targets.to_dict()) _dict["targets"] = _items return _dict diff --git a/services/loadbalancer/src/stackit/loadbalancer/models/update_load_balancer_payload.py b/services/loadbalancer/src/stackit/loadbalancer/models/update_load_balancer_payload.py index cd8b21340..33a328942 100644 --- a/services/loadbalancer/src/stackit/loadbalancer/models/update_load_balancer_payload.py +++ b/services/loadbalancer/src/stackit/loadbalancer/models/update_load_balancer_payload.py @@ -199,16 +199,16 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of each item in errors (list) _items = [] if self.errors: - for _item in self.errors: - if _item: - _items.append(_item.to_dict()) + for _item_errors in self.errors: + if _item_errors: + _items.append(_item_errors.to_dict()) _dict["errors"] = _items # override the default output from pydantic by calling `to_dict()` of each item in listeners (list) _items = [] if self.listeners: - for _item in self.listeners: - if _item: - _items.append(_item.to_dict()) + for _item_listeners in self.listeners: + if _item_listeners: + _items.append(_item_listeners.to_dict()) _dict["listeners"] = _items # override the default output from pydantic by calling `to_dict()` of load_balancer_security_group if self.load_balancer_security_group: @@ -216,9 +216,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of each item in networks (list) _items = [] if self.networks: - for _item in self.networks: - if _item: - _items.append(_item.to_dict()) + for _item_networks in self.networks: + if _item_networks: + _items.append(_item_networks.to_dict()) _dict["networks"] = _items # override the default output from pydantic by calling `to_dict()` of options if self.options: @@ -226,9 +226,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of each item in target_pools (list) _items = [] if self.target_pools: - for _item in self.target_pools: - if _item: - _items.append(_item.to_dict()) + for _item_target_pools in self.target_pools: + if _item_target_pools: + _items.append(_item_target_pools.to_dict()) _dict["targetPools"] = _items # override the default output from pydantic by calling `to_dict()` of target_security_group if self.target_security_group: diff --git a/services/loadbalancer/src/stackit/loadbalancer/models/update_target_pool_payload.py b/services/loadbalancer/src/stackit/loadbalancer/models/update_target_pool_payload.py index 802a025d2..c513ebf4f 100644 --- a/services/loadbalancer/src/stackit/loadbalancer/models/update_target_pool_payload.py +++ b/services/loadbalancer/src/stackit/loadbalancer/models/update_target_pool_payload.py @@ -100,9 +100,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of each item in targets (list) _items = [] if self.targets: - for _item in self.targets: - if _item: - _items.append(_item.to_dict()) + for _item_targets in self.targets: + if _item_targets: + _items.append(_item_targets.to_dict()) _dict["targets"] = _items return _dict diff --git a/services/loadbalancer/src/stackit/loadbalancer/rest.py b/services/loadbalancer/src/stackit/loadbalancer/rest.py index 5a2615549..8c47c3079 100644 --- a/services/loadbalancer/src/stackit/loadbalancer/rest.py +++ b/services/loadbalancer/src/stackit/loadbalancer/rest.py @@ -38,12 +38,17 @@ def read(self): self.data = self.response.content return self.data + @property + def headers(self): + """Returns a dictionary of response headers.""" + return self.response.headers + def getheaders(self): - """Returns a dictionary of the response headers.""" + """Returns a dictionary of the response headers; use ``headers`` instead.""" return self.response.headers def getheader(self, name, default=None): - """Returns a given response header.""" + """Returns a given response header; use ``headers.get()`` instead.""" return self.response.headers.get(name, default) @@ -93,6 +98,7 @@ def request(self, method, url, headers=None, body=None, post_params=None, _reque url, data=request_body, headers=headers, + timeout=_request_timeout, ) elif content_type == "application/x-www-form-urlencoded": r = self.session.request( @@ -100,6 +106,7 @@ def request(self, method, url, headers=None, body=None, post_params=None, _reque url, params=post_params, headers=headers, + timeout=_request_timeout, ) elif content_type == "multipart/form-data": # must del headers['Content-Type'], or the correct @@ -113,6 +120,7 @@ def request(self, method, url, headers=None, body=None, post_params=None, _reque url, files=post_params, headers=headers, + timeout=_request_timeout, ) # Pass a `string` parameter directly in the body to support # other content types than JSON when `body` argument is @@ -123,10 +131,17 @@ def request(self, method, url, headers=None, body=None, post_params=None, _reque url, data=body, headers=headers, + timeout=_request_timeout, ) elif headers["Content-Type"].startswith("text/") and isinstance(body, bool): request_body = "true" if body else "false" - r = self.session.request(method, url, data=request_body, headers=headers) + r = self.session.request( + method, + url, + data=request_body, + headers=headers, + timeout=_request_timeout, + ) else: # Cannot generate the request from given parameters msg = """Cannot prepare a request message for provided @@ -140,6 +155,7 @@ def request(self, method, url, headers=None, body=None, post_params=None, _reque url, params={}, headers=headers, + timeout=_request_timeout, ) except requests.exceptions.SSLError as e: msg = "\n".join([type(e).__name__, str(e)])