Skip to content

Commit 7bc42cc

Browse files
committed
Fix bools in url query params globally
1 parent 48d6f43 commit 7bc42cc

File tree

3 files changed

+65
-5
lines changed

3 files changed

+65
-5
lines changed

generate.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ sed -i 's/if _preload_content/abcdefvrc\n\n if _preload_content/g' ./vrch
2121
sed -i '/abcdefvrc/r patches/cookiejar_extract.py' ./vrchatapi/rest.py
2222
sed -i 's/ abcdefvrc//g' ./vrchatapi/rest.py
2323

24+
# Fix bools with url query params
25+
patch ./vrchatapi/api_client.py < ./patches/bool_query_param.patch
26+
2427
# Fix description, keywords, etc...
2528
# Echo to trim whitespace
2629
VERSION=`echo $(cat setup.py | grep "The version of the OpenAPI document" | cut -d ":" -f 2)`

patches/bool_query_param.patch

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
diff --git a/vrchatapi/api_client.py b/vrchatapi/api_client.py
2+
index 20deb6c..02c7e54 100644
3+
--- a/vrchatapi/api_client.py
4+
+++ b/vrchatapi/api_client.py
5+
@@ -160,7 +160,7 @@ class ApiClient(object):
6+
7+
# query parameters
8+
if query_params:
9+
- query_params = self.sanitize_for_serialization(query_params)
10+
+ query_params = self.sanitize_for_serialization(query_params, True)
11+
query_params = self.parameters_to_tuples(query_params,
12+
collection_formats)
13+
14+
@@ -255,7 +255,7 @@ class ApiClient(object):
15+
return new_params
16+
17+
@classmethod
18+
- def sanitize_for_serialization(cls, obj):
19+
+ def sanitize_for_serialization(cls, obj, query=False):
20+
"""Prepares data for transmission before it is sent with the rest client
21+
If obj is None, return None.
22+
If obj is str, int, long, float, bool, return directly.
23+
@@ -265,6 +265,7 @@ class ApiClient(object):
24+
If obj is dict, return the dict.
25+
If obj is OpenAPI model, return the properties dict.
26+
If obj is io.IOBase, return the bytes
27+
+ If obj is bool and query is true, return str
28+
:param obj: The data to serialize.
29+
:return: The serialized form of data.
30+
"""
31+
@@ -272,6 +273,8 @@ class ApiClient(object):
32+
return {
33+
key: cls.sanitize_for_serialization(val) for key, val in model_to_dict(obj, serialize=True).items()
34+
}
35+
+ elif isinstance(obj, bool) and query:
36+
+ return str(obj).lower()
37+
elif isinstance(obj, io.IOBase):
38+
return cls.get_file_data_and_close_file(obj)
39+
elif isinstance(obj, (str, int, float, none_type, bool)):
40+
@@ -279,11 +282,11 @@ class ApiClient(object):
41+
elif isinstance(obj, (datetime, date)):
42+
return obj.isoformat()
43+
elif isinstance(obj, ModelSimple):
44+
- return cls.sanitize_for_serialization(obj.value)
45+
+ return cls.sanitize_for_serialization(obj.value, query)
46+
elif isinstance(obj, (list, tuple)):
47+
- return [cls.sanitize_for_serialization(item) for item in obj]
48+
+ return [cls.sanitize_for_serialization(item, query) for item in obj]
49+
if isinstance(obj, dict):
50+
- return {key: cls.sanitize_for_serialization(val) for key, val in obj.items()}
51+
+ return {key: cls.sanitize_for_serialization(val, query) for key, val in obj.items()}
52+
raise ApiValueError('Unable to prepare type {} for serialization'.format(obj.__class__.__name__))
53+
54+
def deserialize(self, response, response_type, _check_type):

vrchatapi/api_client.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ def __call_api(
160160

161161
# query parameters
162162
if query_params:
163-
query_params = self.sanitize_for_serialization(query_params)
163+
query_params = self.sanitize_for_serialization(query_params, True)
164164
query_params = self.parameters_to_tuples(query_params,
165165
collection_formats)
166166

@@ -255,7 +255,7 @@ def parameters_to_multipart(self, params, collection_types):
255255
return new_params
256256

257257
@classmethod
258-
def sanitize_for_serialization(cls, obj):
258+
def sanitize_for_serialization(cls, obj, query=False):
259259
"""Prepares data for transmission before it is sent with the rest client
260260
If obj is None, return None.
261261
If obj is str, int, long, float, bool, return directly.
@@ -265,25 +265,28 @@ def sanitize_for_serialization(cls, obj):
265265
If obj is dict, return the dict.
266266
If obj is OpenAPI model, return the properties dict.
267267
If obj is io.IOBase, return the bytes
268+
If obj is bool and query is true, return str
268269
:param obj: The data to serialize.
269270
:return: The serialized form of data.
270271
"""
271272
if isinstance(obj, (ModelNormal, ModelComposed)):
272273
return {
273274
key: cls.sanitize_for_serialization(val) for key, val in model_to_dict(obj, serialize=True).items()
274275
}
276+
elif isinstance(obj, bool) and query:
277+
return str(obj).lower()
275278
elif isinstance(obj, io.IOBase):
276279
return cls.get_file_data_and_close_file(obj)
277280
elif isinstance(obj, (str, int, float, none_type, bool)):
278281
return obj
279282
elif isinstance(obj, (datetime, date)):
280283
return obj.isoformat()
281284
elif isinstance(obj, ModelSimple):
282-
return cls.sanitize_for_serialization(obj.value)
285+
return cls.sanitize_for_serialization(obj.value, query)
283286
elif isinstance(obj, (list, tuple)):
284-
return [cls.sanitize_for_serialization(item) for item in obj]
287+
return [cls.sanitize_for_serialization(item, query) for item in obj]
285288
if isinstance(obj, dict):
286-
return {key: cls.sanitize_for_serialization(val) for key, val in obj.items()}
289+
return {key: cls.sanitize_for_serialization(val, query) for key, val in obj.items()}
287290
raise ApiValueError('Unable to prepare type {} for serialization'.format(obj.__class__.__name__))
288291

289292
def deserialize(self, response, response_type, _check_type):

0 commit comments

Comments
 (0)