diff --git a/src/ikea_api/core.py b/src/ikea_api/core.py index c7d7e803..695b9312 100644 --- a/src/ikea_api/core.py +++ b/src/ikea_api/core.py @@ -57,11 +57,11 @@ def Cart(self): self._cart = Cart(self._token) return self._cart - def OrderCapture(self, zip_code: str): + def OrderCapture(self, zip_code: str, state_code: str | None = None): """Get available delivery services. Object is callable.""" from ikea_api.endpoints import OrderCapture - return OrderCapture(self._token, zip_code)() + return OrderCapture(self._token, zip_code, state_code)() @property def Purchases(self): diff --git a/src/ikea_api/endpoints/order_capture/__init__.py b/src/ikea_api/endpoints/order_capture/__init__.py index 92fa2475..b80228cf 100644 --- a/src/ikea_api/endpoints/order_capture/__init__.py +++ b/src/ikea_api/endpoints/order_capture/__init__.py @@ -10,7 +10,7 @@ class OrderCapture(API): - def __init__(self, token: str, zip_code: str | int): + def __init__(self, token: str, zip_code: str | int, state_code: str | None = None): super().__init__(token, "https://ordercapture.ikea.ru/ordercaptureapi/ru") if Constants.COUNTRY_CODE != "ru": @@ -23,6 +23,9 @@ def __init__(self, token: str, zip_code: str | int): validate_zip_code(zip_code) self._zip_code = zip_code + validate_state_code(state_code) + self._state_code = state_code + self._session.headers["X-Client-Id"] = Secrets.purchases_x_client_id def __call__(self) -> list[dict[str, Any]]: @@ -76,10 +79,12 @@ def _get_checkout(self): raise IkeaApiError("No resourceId for checkout") def _get_delivery_area(self, checkout: str | None): - """Generate delivery area for checkout from zip code""" + """Generate delivery area for checkout from Zip Code and State Code""" + data = {"enableRangeOfDays": False, "zipCode": self._zip_code} + if self._state_code is not None: + data["stateCode"] = self._state_code response = self._call_api( - endpoint=f"{self._endpoint}/checkouts/{checkout}/delivery-areas", - data={"zipCode": self._zip_code, "enableRangeOfDays": False}, + f"{self._endpoint}/checkouts/{checkout}/delivery-areas", data=data ) if "resourceId" in response: @@ -102,3 +107,9 @@ def get_delivery_services(self): def validate_zip_code(zip_code: str | int): if len(re.findall(r"[^0-9]", str(zip_code))) > 0: raise ValueError(f"Invalid zip code: {zip_code}") + + +def validate_state_code(state_code: str | None): + if state_code is not None: + if len(state_code) != 2 or len(re.findall(r"[^A-z]+", state_code)) > 0: + raise ValueError(f"Invalid state code: {state_code}")