browserfetch 0.10.0__tar.gz → 0.10.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: browserfetch
3
- Version: 0.10.0
3
+ Version: 0.10.1
4
4
  Summary: fetch in Python using your browser!
5
5
  Keywords: browser,fetch,python,cookies
6
6
  Requires-Python: >=3.11
@@ -1,4 +1,13 @@
1
- __version__ = '0.10.0'
1
+ __version__ = '0.10.1'
2
+ __all__ = [
3
+ 'BrowserError',
4
+ 'evaluate',
5
+ 'fetch',
6
+ 'get',
7
+ 'post',
8
+ 'Response',
9
+ 'start_server',
10
+ ]
2
11
  import atexit
3
12
  from asyncio import (
4
13
  AbstractEventLoop,
@@ -13,7 +22,7 @@ from dataclasses import dataclass
13
22
  from html import escape
14
23
  from json import dumps, loads
15
24
  from logging import getLogger
16
- from urllib.parse import urlencode
25
+ from urllib.parse import parse_qsl, urlencode, urlparse, urlunparse
17
26
 
18
27
  from aiohttp import ClientSession, ClientWebSocketResponse
19
28
  from aiohttp.web import (
@@ -147,7 +156,7 @@ async def _(request):
147
156
  try:
148
157
  await receive_responses(ws)
149
158
  except TypeError:
150
- logger.info('host WebSocket was closed')
159
+ logger.info('WebSocket was closed by browser')
151
160
  hosts[host] = Event()
152
161
  return ws
153
162
 
@@ -251,7 +260,14 @@ async def fetch(
251
260
  :return: a dict of response values.
252
261
  """
253
262
  if params is not None:
254
- url += urlencode(params)
263
+ parsed_url = urlparse(url)
264
+ url = urlunparse(
265
+ parsed_url._replace(
266
+ query=urlencode(
267
+ parse_qsl(parsed_url.query) + [*params.items()]
268
+ )
269
+ )
270
+ )
255
271
 
256
272
  d = await _request(
257
273
  host,
@@ -291,7 +307,7 @@ async def post(
291
307
  url: str,
292
308
  *,
293
309
  params: dict | None = None,
294
- data: bytes | dict | str | None = None,
310
+ data=None,
295
311
  form: dict | None = None,
296
312
  timeout: int | float = 95,
297
313
  options: dict | None = None,
@@ -0,0 +1,25 @@
1
+ from contextlib import suppress
2
+ from unittest.mock import Mock, patch
3
+
4
+ from browserfetch import fetch
5
+
6
+ request_mock = Mock()
7
+
8
+
9
+ @patch('browserfetch._request', new=request_mock)
10
+ async def test_params():
11
+ with suppress(TypeError):
12
+ await fetch(
13
+ url='http://stackoverflow.com/search?q=question',
14
+ params={'lang': 'en', 'tag': 'python', 'q': True},
15
+ )
16
+ request_mock.assert_called_once_with(
17
+ None, # host
18
+ {
19
+ 'action': 'fetch',
20
+ 'url': 'http://stackoverflow.com/search?q=question&lang=en&tag=python&q=True',
21
+ 'options': None,
22
+ 'timeout': 95,
23
+ }, # data
24
+ None, # body
25
+ )
File without changes
File without changes