|  | 
| 18 | 18 |     Union, | 
| 19 | 19 |     overload, | 
| 20 | 20 | ) | 
|  | 21 | +from urllib.parse import urlencode | 
| 21 | 22 | 
 | 
| 22 | 23 | import httpx | 
| 23 | 24 | import ujson | 
| @@ -200,7 +201,7 @@ def _graphql_url( | 
| 200 | 201 |         if at: | 
| 201 | 202 |             at = Timestamp(at) | 
| 202 | 203 |             url_params["at"] = at.to_string() | 
| 203 |  | -            url += "?" + "&".join([f"{key}={value}" for key, value in url_params.items()]) | 
|  | 204 | +            url += "?" + urlencode(url_params) | 
| 204 | 205 | 
 | 
| 205 | 206 |         return url | 
| 206 | 207 | 
 | 
| @@ -951,14 +952,19 @@ async def query_gql_query( | 
| 951 | 952 | 
 | 
| 952 | 953 |         if url_params: | 
| 953 | 954 |             url_params_str = [] | 
|  | 955 | +            url_params_dict = {} | 
| 954 | 956 |             for key, value in url_params.items(): | 
| 955 | 957 |                 if isinstance(value, (list)): | 
| 956 | 958 |                     for item in value: | 
| 957 |  | -                        url_params_str.append(f"{key}={item}") | 
|  | 959 | +                        url_params_str.append((key, item)) | 
| 958 | 960 |                 else: | 
| 959 |  | -                    url_params_str.append(f"{key}={value}") | 
|  | 961 | +                    url_params_dict[key] = value | 
| 960 | 962 | 
 | 
| 961 |  | -            url += "?" + "&".join(url_params_str) | 
|  | 963 | +            url += "?" | 
|  | 964 | +            if url_params_dict: | 
|  | 965 | +                url += urlencode(url_params_dict) + "&" | 
|  | 966 | +            if url_params_str: | 
|  | 967 | +                url += urlencode(url_params_str) | 
| 962 | 968 | 
 | 
| 963 | 969 |         payload = {} | 
| 964 | 970 |         if variables: | 
| @@ -1928,14 +1934,19 @@ def query_gql_query( | 
| 1928 | 1934 | 
 | 
| 1929 | 1935 |         if url_params: | 
| 1930 | 1936 |             url_params_str = [] | 
|  | 1937 | +            url_params_dict = {} | 
| 1931 | 1938 |             for key, value in url_params.items(): | 
| 1932 | 1939 |                 if isinstance(value, (list)): | 
| 1933 | 1940 |                     for item in value: | 
| 1934 |  | -                        url_params_str.append(f"{key}={item}") | 
|  | 1941 | +                        url_params_str.append((key, item)) | 
| 1935 | 1942 |                 else: | 
| 1936 |  | -                    url_params_str.append(f"{key}={value}") | 
|  | 1943 | +                    url_params_dict[key] = value | 
| 1937 | 1944 | 
 | 
| 1938 |  | -            url += "?" + "&".join(url_params_str) | 
|  | 1945 | +            url += "?" | 
|  | 1946 | +            if url_params_dict: | 
|  | 1947 | +                url += urlencode(url_params_dict) + "&" | 
|  | 1948 | +            if url_params_str: | 
|  | 1949 | +                url += urlencode(url_params_str) | 
| 1939 | 1950 | 
 | 
| 1940 | 1951 |         payload = {} | 
| 1941 | 1952 |         if variables: | 
|  | 
0 commit comments