Skip to content

Commit 2b7e6d4

Browse files
committed
fix: fix query params implementation
1 parent 86ba765 commit 2b7e6d4

File tree

3 files changed

+33
-20
lines changed

3 files changed

+33
-20
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,8 @@ https://ik.imagekit.io/your_imagekit_id/endpoint/default-image.jpg?tr=f-jpg%2Cpr
162162
image_url = imagekit.url({
163163
"path": "/default-image",
164164
"query_parameters": {
165-
"v": "123"
165+
"p1": "123",
166+
"p2": "345"
166167
},
167168
"transformation": [{
168169
"height": "300",

imagekitio/url.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ def build_url(self, options: dict) -> str:
5050
raise ValueError(ERRORS.INVALID_TRANSFORMATION_POSITION.value)
5151

5252
if src or (
53-
options.get("transformation_position") == QUERY_TRANSFORMATION_POSITION
53+
options.get(
54+
"transformation_position") == QUERY_TRANSFORMATION_POSITION
5455
):
5556
src_param_used_for_url = True
5657
else:
@@ -86,7 +87,8 @@ def build_url(self, options: dict) -> str:
8687
result_url_dict["path"] = parsed_url.path
8788
src_param_used_for_url = True
8889
query_params = options.get("query_parameters", {})
89-
transformation_str = self.transformation_to_str(options.get("transformation"))
90+
transformation_str = self.transformation_to_str(
91+
options.get("transformation"))
9092
if transformation_str:
9193
if (
9294
transformation_position == Default.QUERY_TRANSFORMATION_POSITION.value
@@ -114,7 +116,8 @@ def build_url(self, options: dict) -> str:
114116
expiry_timestamp = self.get_signature_timestamp(expire_seconds)
115117

116118
# Temporary variable to generate the URL signature
117-
modified_result_url_dict = self.prepare_dict_for_unparse(result_url_dict)
119+
modified_result_url_dict = self.prepare_dict_for_unparse(
120+
result_url_dict)
118121
intermediate_url = urlunparse(
119122
modified_result_url_dict.get(f, "") for f in ParseResult._fields
120123
)
@@ -139,6 +142,7 @@ def build_url(self, options: dict) -> str:
139142
generated_url = urlunparse(
140143
result_url_dict.get(f, "") for f in ParseResult._fields
141144
)
145+
142146
if result_url_dict["query"]:
143147
generated_url = (
144148
generated_url + "&ik-sdk-version=" + Default.SDK_VERSION.value
@@ -147,6 +151,16 @@ def build_url(self, options: dict) -> str:
147151
generated_url = (
148152
generated_url + "?ik-sdk-version=" + Default.SDK_VERSION.value
149153
)
154+
155+
extra_query_parameters = options.get("query_parameters")
156+
if extra_query_parameters is not None:
157+
extra_query_parameters_str = "&".join(
158+
str(k) + "=" + str(v) for k, v in extra_query_parameters.items()
159+
)
160+
generated_url = (
161+
generated_url + "&" + extra_query_parameters_str
162+
)
163+
150164
return generated_url
151165

152166
@staticmethod
@@ -188,7 +202,7 @@ def get_signature(private_key, url, url_endpoint, expiry_timestamp) -> str:
188202
expiry_timestamp = DEFAULT_TIMESTAMP
189203

190204
replaced_url = url.replace(url_endpoint, "") + str(expiry_timestamp)
191-
205+
192206
signature = hmac.new(
193207
key=private_key.encode(), msg=replaced_url.encode(), digestmod=hashlib.sha1
194208
)
@@ -243,6 +257,7 @@ def transformation_to_str(transformation):
243257
)
244258
)
245259

246-
parsed_transforms.append(TRANSFORM_DELIMITER.join(parsed_transform_step))
260+
parsed_transforms.append(
261+
TRANSFORM_DELIMITER.join(parsed_transform_step))
247262

248263
return CHAIN_TRANSFORM_DELIMITER.join(parsed_transforms)

tests/test_generate_url.py

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,10 @@ def test_overriding_url_endpoint_without_slash_generation_consists_new_url(self)
9393
def test_generate_url_query_parameters(self):
9494
options = {
9595
"path": "/default-image.jpg",
96-
"query_parameters" : [
97-
{
98-
"param1" : "value1"
99-
}
100-
],
96+
"query_parameters": {
97+
"param1": "value1",
98+
"param2": "value2"
99+
},
101100
"transformation": [
102101
{
103102
"height": "300",
@@ -108,9 +107,9 @@ def test_generate_url_query_parameters(self):
108107
url = self.client.url(options)
109108
self.assertEqual(
110109
url,
111-
"https://test-domain.com/test-endpoint/tr:h-300,w-400/default-image.jpg?param1=value1&ik-sdk-version={}".format(
110+
"https://test-domain.com/test-endpoint/tr:h-300,w-400/default-image.jpg?ik-sdk-version={}".format(
112111
Default.SDK_VERSION.value
113-
),
112+
) + "&param1=value1&param2=value2",
114113
)
115114

116115
def test_generate_url_with_src(self):
@@ -138,11 +137,9 @@ def test_generate_url_with_src(self):
138137
def test_generate_url_with_src_with_query_params_double(self):
139138
options = {
140139
"src": "https://ik.imagekit.io/ldt7znpgpjs/test_YhNhoRxWt.jpg?queryparam1=value1",
141-
"query_parameters" : [
142-
{
143-
"param1" : "value1"
144-
}
145-
],
140+
"query_parameters": {
141+
"param1": "value1"
142+
},
146143
"transformation": [
147144
{
148145
"height": "300",
@@ -158,9 +155,9 @@ def test_generate_url_with_src_with_query_params_double(self):
158155
# @TODO - adjust value of param1=value1 in test case but it should be there
159156
self.assertEqual(
160157
url,
161-
"https://ik.imagekit.io/ldt7znpgpjs/test_YhNhoRxWt.jpg?queryparam1=value1&param1=value1&tr=h-300,w-400,f-jpg,pr-true,e-contrast-1:rt-90&ik-sdk-version={}".format(
158+
"https://ik.imagekit.io/ldt7znpgpjs/test_YhNhoRxWt.jpg?queryparam1=value1&tr=h-300,w-400,f-jpg,pr-true,e-contrast-1:rt-90&ik-sdk-version={}".format(
162159
Default.SDK_VERSION.value
163-
),
160+
) + "&param1=value1",
164161
)
165162

166163
def test_generate_url_with_path_and_signed(self):

0 commit comments

Comments
 (0)