Skip to content

Commit 3366563

Browse files
committed
wip(upload): debug upload issues
1 parent abe4618 commit 3366563

File tree

3 files changed

+59
-133
lines changed

3 files changed

+59
-133
lines changed

src/basalam_sdk/base_client.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -103,26 +103,26 @@ async def request(
103103
Make an async request to the API.
104104
"""
105105
url = urljoin(self.base_url, path)
106-
106+
107107
# Build headers: start with config headers, add auth headers if needed, then custom headers
108108
request_headers = self.config.get_headers().copy()
109-
109+
110110
if require_auth:
111111
auth_headers = await self.auth.get_auth_headers()
112112
request_headers.update(auth_headers)
113-
113+
114114
if headers:
115115
request_headers.update(headers)
116116

117117
async with httpx.AsyncClient(
118-
headers=request_headers,
119118
timeout=self.config.timeout,
120119
follow_redirects=True,
121120
) as client:
122121
try:
123122
response = await client.request(
124123
method=method,
125124
url=url,
125+
headers=request_headers,
126126
params=params,
127127
data=data,
128128
json=json_data,
@@ -154,26 +154,26 @@ def request_sync(
154154
Make a synchronous request to the API.
155155
"""
156156
url = urljoin(self.base_url, path)
157-
157+
158158
# Build headers: start with config headers, add auth headers if needed, then custom headers
159159
request_headers = self.config.get_headers().copy()
160-
160+
161161
if require_auth:
162162
auth_headers = self.auth.get_auth_headers_sync()
163163
request_headers.update(auth_headers)
164-
164+
165165
if headers:
166166
request_headers.update(headers)
167167

168168
with httpx.Client(
169-
headers=request_headers,
170169
timeout=self.config.timeout,
171170
follow_redirects=True,
172171
) as client:
173172
try:
174173
response = client.request(
175174
method=method,
176175
url=url,
176+
headers=request_headers,
177177
params=params,
178178
data=data,
179179
json=json_data,

tests/test_upload_client.py

Lines changed: 40 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from basalam_sdk import BasalamClient
99
from basalam_sdk.auth import ClientCredentials
1010
from basalam_sdk.config import BasalamConfig, Environment
11-
from basalam_sdk.upload.models import UserUploadFileTypeEnum
11+
from basalam_sdk.upload.models import UserUploadFileTypeEnum, UploadFileRequest
1212

1313
# Test client credentials
1414
TEST_CLIENT_ID = ""
@@ -30,20 +30,6 @@ def basalam_client():
3030
return BasalamClient(auth=auth, config=config)
3131

3232

33-
def create_test_file():
34-
"""Create a test file for upload testing."""
35-
# Read the real PNG file from tests folder
36-
import os
37-
test_file_path = os.path.join(os.path.dirname(__file__), "test1.png")
38-
with open(test_file_path, "rb") as f:
39-
file_content = f.read()
40-
41-
file_obj = io.BytesIO(file_content)
42-
file_obj.name = "test1.png"
43-
file_obj.seek(0) # Ensure we're at the beginning
44-
return file_obj
45-
46-
4733
# -------------------------------------------------------------------------
4834
# Upload endpoints tests
4935
# -------------------------------------------------------------------------
@@ -52,18 +38,18 @@ def create_test_file():
5238
async def test_upload_file_async(basalam_client):
5339
"""Test upload_file async method."""
5440
try:
55-
test_file = create_test_file()
56-
result = await basalam_client.upload.upload_file(
57-
file=test_file,
58-
file_type=UserUploadFileTypeEnum.CHAT_FILE.value,
59-
custom_unique_name="test-file-async",
60-
expire_minutes=60
61-
)
62-
print(f"upload_file async result: {result}")
63-
assert result is not None
64-
assert hasattr(result, 'id')
65-
assert hasattr(result, 'file_name')
66-
assert hasattr(result, 'urls')
41+
with open('test1.png', "rb") as file_data:
42+
result = await basalam_client.upload.upload_file(
43+
file=file_data,
44+
file_type="product.photo",
45+
custom_unique_name="test-file-async",
46+
expire_minutes=60
47+
)
48+
print(f"upload_file async result: {result}")
49+
assert result is not None
50+
assert hasattr(result, 'id')
51+
assert hasattr(result, 'file_name')
52+
assert hasattr(result, 'urls')
6753
except Exception as e:
6854
print(f"upload_file async error: {e}")
6955
# Don't fail the test for API errors, just log them
@@ -73,18 +59,18 @@ async def test_upload_file_async(basalam_client):
7359
def test_upload_file_sync(basalam_client):
7460
"""Test upload_file_sync method."""
7561
try:
76-
test_file = create_test_file()
77-
result = basalam_client.upload.upload_file_sync(
78-
file=test_file,
79-
file_type='product.photo',
80-
custom_unique_name="test-file-sync",
81-
expire_minutes=60
82-
)
83-
print(f"upload_file_sync result: {result}")
84-
assert result is not None
85-
assert hasattr(result, 'id')
86-
assert hasattr(result, 'file_name')
87-
assert hasattr(result, 'urls')
62+
with open('test1.png', "rb") as file_data:
63+
result = basalam_client.upload.upload_file_sync(
64+
file=file_data,
65+
file_type='product.photo',
66+
custom_unique_name="test-file-sync",
67+
expire_minutes=60
68+
)
69+
print(f"upload_file_sync result: {result}")
70+
assert result is not None
71+
assert hasattr(result, 'id')
72+
assert hasattr(result, 'file_name')
73+
assert hasattr(result, 'urls')
8874
except Exception as e:
8975
print(f"upload_file_sync error: {e}")
9076
# Don't fail the test for API errors, just log them
@@ -95,16 +81,16 @@ def test_upload_file_sync(basalam_client):
9581
async def test_upload_file_minimal_params_async(basalam_client):
9682
"""Test upload_file async method with minimal parameters."""
9783
try:
98-
test_file = create_test_file()
99-
result = await basalam_client.upload.upload_file(
100-
file=test_file,
101-
file_type=UserUploadFileTypeEnum.CHAT_PHOTO
102-
)
103-
print(f"upload_file minimal params async result: {result}")
104-
assert result is not None
105-
assert hasattr(result, 'id')
106-
assert hasattr(result, 'file_name')
107-
assert hasattr(result, 'urls')
84+
with open('test1.png', "rb") as file_data:
85+
result = await basalam_client.upload.upload_file(
86+
file=file_data,
87+
file_type=UserUploadFileTypeEnum.CHAT_PHOTO
88+
)
89+
print(f"upload_file minimal params async result: {result}")
90+
assert result is not None
91+
assert hasattr(result, 'id')
92+
assert hasattr(result, 'file_name')
93+
assert hasattr(result, 'urls')
10894
except Exception as e:
10995
print(f"upload_file minimal params async error: {e}")
11096
# Don't fail the test for API errors, just log them
@@ -114,11 +100,11 @@ async def test_upload_file_minimal_params_async(basalam_client):
114100
def test_upload_file_minimal_params_sync(basalam_client):
115101
"""Test upload_file_sync method with minimal parameters."""
116102
try:
117-
test_file = create_test_file()
118-
result = basalam_client.upload.upload_file_sync(
119-
file=test_file,
120-
file_type=UserUploadFileTypeEnum.CHAT_PHOTO
121-
)
103+
with open('test1.png', "rb") as file_data:
104+
result = basalam_client.upload.upload_file_sync(
105+
file=file_data,
106+
file_type=UserUploadFileTypeEnum.CHAT_PHOTO
107+
)
122108
print(f"upload_file minimal params sync result: {result}")
123109
assert result is not None
124110
assert hasattr(result, 'id')
@@ -128,56 +114,3 @@ def test_upload_file_minimal_params_sync(basalam_client):
128114
print(f"upload_file minimal params sync error: {e}")
129115
# Don't fail the test for API errors, just log them
130116
assert True
131-
132-
133-
@pytest.mark.asyncio
134-
async def test_upload_file_different_types_async(basalam_client):
135-
"""Test upload_file async method with different file types."""
136-
file_types_to_test = [
137-
UserUploadFileTypeEnum.PRODUCT_PHOTO,
138-
UserUploadFileTypeEnum.USER_AVATAR,
139-
UserUploadFileTypeEnum.CHAT_VIDEO,
140-
UserUploadFileTypeEnum.VENDOR_LOGO
141-
]
142-
143-
for file_type in file_types_to_test:
144-
try:
145-
test_file = create_test_file()
146-
result = await basalam_client.upload.upload_file(
147-
file=test_file,
148-
file_type=file_type,
149-
custom_unique_name=f"test-{file_type.value.replace('.', '-')}"
150-
)
151-
print(f"upload_file {file_type.value} async result: {result}")
152-
assert result is not None
153-
assert hasattr(result, 'id')
154-
except Exception as e:
155-
print(f"upload_file {file_type.value} async error: {e}")
156-
# Don't fail the test for API errors, just log them
157-
assert True
158-
159-
160-
def test_upload_file_different_types_sync(basalam_client):
161-
"""Test upload_file_sync method with different file types."""
162-
file_types_to_test = [
163-
UserUploadFileTypeEnum.PRODUCT_VIDEO,
164-
UserUploadFileTypeEnum.USER_COVER,
165-
UserUploadFileTypeEnum.CHAT_VOICE,
166-
UserUploadFileTypeEnum.VENDOR_COVER
167-
]
168-
169-
for file_type in file_types_to_test:
170-
try:
171-
test_file = create_test_file()
172-
result = basalam_client.upload.upload_file_sync(
173-
file=test_file,
174-
file_type=file_type,
175-
custom_unique_name=f"test-{file_type.value.replace('.', '-')}"
176-
)
177-
print(f"upload_file {file_type.value} sync result: {result}")
178-
assert result is not None
179-
assert hasattr(result, 'id')
180-
except Exception as e:
181-
print(f"upload_file {file_type.value} sync error: {e}")
182-
# Don't fail the test for API errors, just log them
183-
assert True

tests/upload-test.py

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,48 @@
1-
import requests
1+
import httpx
22
from pydantic import BaseModel
3-
from enum import Enum
4-
from typing import List, Optional, Union, Dict
3+
from typing import Optional
54

65
# === Configuration ===
76
API_URL = "https://uploadio.basalam.com/v3/files"
7+
# if you use ClientCredentials token for this, it will give you 500!!, if you use personal token, it will pass
88
AUTH_TOKEN = "Bearer"
99
FILE_PATH = "test1.png"
1010
FILE_TYPE = "product.photo"
1111
CUSTOM_UNIQUE_NAME = "sample-image-name"
12-
EXPIRE_MINUTES = "60"
12+
EXPIRE_MINUTES = 60
1313

1414

1515
class UploadFileRequest(BaseModel):
16-
"""Upload file request model matching OpenAPI Body_create_file_v3_files_post schema."""
1716
file_type: str
1817
custom_unique_name: Optional[str] = None
1918
expire_minutes: Optional[int] = None
2019

2120

2221
# === File Upload ===
2322
with open(FILE_PATH, "rb") as file_data:
24-
files = {
25-
"file": file_data,
26-
}
27-
28-
# data = {
29-
# "file_type": FILE_TYPE,
30-
# "custom_unique_name": CUSTOM_UNIQUE_NAME,
31-
# "expire_minutes": EXPIRE_MINUTES,
32-
# }
3323
request = UploadFileRequest(
3424
file_type=FILE_TYPE,
3525
custom_unique_name=CUSTOM_UNIQUE_NAME,
3626
expire_minutes=EXPIRE_MINUTES
3727
)
3828

39-
# Convert to form data, excluding None values
29+
# Create the files and data separately
30+
files = {
31+
"file": (file_data)
32+
}
4033
data = request.model_dump(exclude_none=True, mode='json')
4134

42-
print(">>>", data)
4335
headers = {
4436
"Authorization": AUTH_TOKEN,
4537
}
4638

4739
print("Sending upload request...")
4840

49-
response = requests.post(API_URL, headers=headers, files=files, data=data)
41+
print('sinaaaaaaaaaaaa', 'post',API_URL, headers, data, files)
42+
with httpx.Client(timeout=60.0) as client:
43+
response = client.request('post',API_URL, headers=headers, data=data, files=files)
5044

5145
print("Status code:", response.status_code)
52-
5346
try:
5447
print("Response:", response.json())
5548
except Exception:

0 commit comments

Comments
 (0)