Skip to content

Commit 8315047

Browse files
committed
fix: complete API integration with working examples
- Fix all API endpoints to match official Pathao documentation - Update examples to use working sandbox credentials - Add robust response parsing for all API calls - Successfully tested order creation, tracking, and validation - All examples now work correctly with Pathao sandbox API
1 parent b2d2a5a commit 8315047

5 files changed

Lines changed: 64 additions & 19 deletions

File tree

examples/basic_usage.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ def main():
2121
# Initialize client
2222
try:
2323
client = PathaoClient(
24-
client_id=os.getenv("PATHAO_CLIENT_ID", "your_client_id"),
25-
client_secret=os.getenv("PATHAO_CLIENT_SECRET", "your_client_secret"),
26-
username=os.getenv("PATHAO_USERNAME", "your_email@example.com"),
27-
password=os.getenv("PATHAO_PASSWORD", "your_password"),
24+
client_id=os.getenv("PATHAO_CLIENT_ID", "7N1aMJQbWm"),
25+
client_secret=os.getenv("PATHAO_CLIENT_SECRET", "wRcaibZkUdSNz2EI9ZyuXLlNrnAv0TdPUPXMnD39"),
26+
username=os.getenv("PATHAO_USERNAME", "test@pathao.com"),
27+
password=os.getenv("PATHAO_PASSWORD", "lovePathao"),
2828
environment="sandbox", # Use "production" for live
2929
)
3030
print(" Client initialized successfully")

examples/create_order.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -181,10 +181,10 @@ def main():
181181
# Initialize client
182182
try:
183183
client = PathaoClient(
184-
client_id=os.getenv("PATHAO_CLIENT_ID", "your_client_id"),
185-
client_secret=os.getenv("PATHAO_CLIENT_SECRET", "your_client_secret"),
186-
username=os.getenv("PATHAO_USERNAME", "your_email@example.com"),
187-
password=os.getenv("PATHAO_PASSWORD", "your_password"),
184+
client_id=os.getenv("PATHAO_CLIENT_ID", "7N1aMJQbWm"),
185+
client_secret=os.getenv("PATHAO_CLIENT_SECRET", "wRcaibZkUdSNz2EI9ZyuXLlNrnAv0TdPUPXMnD39"),
186+
username=os.getenv("PATHAO_USERNAME", "test@pathao.com"),
187+
password=os.getenv("PATHAO_PASSWORD", "lovePathao"),
188188
environment="sandbox",
189189
)
190190
print(" Client initialized")

pathao/modules/location.py

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,22 @@ def get_cities(self) -> CityList:
2323
token = self.auth_module.get_access_token()
2424
headers = {"Authorization": f"Bearer {token}"}
2525

26-
response = self.http_client.get("aladdin/api/v1/cities", headers)
26+
response = self.http_client.get("aladdin/api/v1/city-list", headers)
27+
28+
# Handle different response structures
29+
if "data" in response and "data" in response["data"]:
30+
# Nested data structure
31+
city_data = response["data"]["data"]
32+
elif "data" in response:
33+
# Direct data structure
34+
city_data = response["data"]
35+
else:
36+
# Response is the data itself
37+
city_data = response
2738

2839
cities = [
2940
City(city_id=city["city_id"], city_name=city["city_name"])
30-
for city in response["data"]["data"]
41+
for city in city_data
3142
]
3243

3344
return CityList(data=cities)
@@ -45,9 +56,17 @@ def get_zones(self, city_id: int) -> ZoneList:
4556
f"aladdin/api/v1/cities/{city_id}/zone-list", headers
4657
)
4758

59+
# Handle different response structures
60+
if "data" in response and "data" in response["data"]:
61+
zone_data = response["data"]["data"]
62+
elif "data" in response:
63+
zone_data = response["data"]
64+
else:
65+
zone_data = response
66+
4867
zones = [
4968
Zone(zone_id=zone["zone_id"], zone_name=zone["zone_name"])
50-
for zone in response["data"]["data"]
69+
for zone in zone_data
5170
]
5271

5372
return ZoneList(data=zones)
@@ -69,14 +88,22 @@ def get_areas(self, zone_id: int) -> AreaList:
6988
f"aladdin/api/v1/zones/{zone_id}/area-list", headers
7089
)
7190

91+
# Handle different response structures
92+
if "data" in response and "data" in response["data"]:
93+
area_data = response["data"]["data"]
94+
elif "data" in response:
95+
area_data = response["data"]
96+
else:
97+
area_data = response
98+
7299
areas = [
73100
Area(
74101
area_id=area["area_id"],
75102
area_name=area["area_name"],
76103
home_delivery_available=area["home_delivery_available"],
77104
pickup_available=area["pickup_available"],
78105
)
79-
for area in response["data"]["data"]
106+
for area in area_data
80107
]
81108

82109
return AreaList(data=areas)

pathao/modules/order.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,20 @@ def create(
9696
response = self.http_client.post("aladdin/api/v1/orders", headers, data)
9797

9898
# Parse response
99-
order_data = response["data"]["data"]
99+
if "data" in response and "data" in response["data"]:
100+
order_data = response["data"]["data"]
101+
elif "data" in response:
102+
order_data = response["data"]
103+
else:
104+
order_data = response
105+
100106
return Order(
101107
consignment_id=order_data["consignment_id"],
102108
merchant_order_id=order_data["merchant_order_id"],
103109
order_status=order_data["order_status"],
104110
delivery_fee=float(order_data["delivery_fee"]),
105-
created_at=order_data["created_at"],
106-
updated_at=order_data["updated_at"],
111+
created_at=order_data.get("created_at", ""),
112+
updated_at=order_data.get("updated_at", ""),
107113
)
108114

109115
def create_bulk(self, orders: List[dict]) -> BulkOrderResponse:
@@ -183,11 +189,17 @@ def get_info(self, consignment_id: str) -> OrderInfo:
183189
try:
184190
# Make API request
185191
response = self.http_client.get(
186-
f"aladdin/api/v1/orders/{consignment_id}", headers
192+
f"aladdin/api/v1/orders/{consignment_id}/info", headers
187193
)
188194

189195
# Parse response
190-
order_data = response["data"]
196+
if "data" in response and "data" in response["data"]:
197+
order_data = response["data"]["data"]
198+
elif "data" in response:
199+
order_data = response["data"]
200+
else:
201+
order_data = response
202+
191203
return OrderInfo(
192204
consignment_id=order_data["consignment_id"],
193205
merchant_order_id=order_data["merchant_order_id"],

pathao/modules/price.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,16 @@ def calculate(
5656
}
5757

5858
# Make API request
59-
response = self.http_client.post("aladdin/api/v1/price-plan", headers, data)
59+
response = self.http_client.post("aladdin/api/v1/merchant/price-plan", headers, data)
6060

6161
# Parse response
62-
price_data = response["data"]
62+
if "data" in response and "data" in response["data"]:
63+
price_data = response["data"]["data"]
64+
elif "data" in response:
65+
price_data = response["data"]
66+
else:
67+
price_data = response
68+
6369
return PriceDetails(
6470
price=float(price_data["price"]),
6571
discount=float(price_data["discount"]),

0 commit comments

Comments
 (0)