File: ChangeLog.rst

package info (click to toggle)
python-mechanicalsoup 1.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 416 kB
  • sloc: python: 2,165; makefile: 150
file content (386 lines) | stat: -rw-r--r-- 14,210 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
=============
Release Notes
=============

Version 1.4
===========

* Added support for Python 3.12 and 3.13.

* Removed support for end of life python versions 3.6, 3.7, and 3.8.

* Minimum versions of dependencies ``urllib3`` and ``certifi`` have been
  specified to mitigate security vulnerabilities.

Version 1.3
===========

Breaking changes
----------------

* To prevent malicious web servers from reading arbitrary files from the
  client, files must now be opened explicitly by the user in order to
  upload their contents in form submission. For example, instead of:

    browser["upload"] = "/path/to/file"

  you would now use:

    browser["upload"] = open("/path/to/file", "rb")

  This remediates
  `CVE-2023-34457 <https://github.com/MechanicalSoup/MechanicalSoup/security/advisories/GHSA-x456-3ccm-m6j4>`__.
  Our thanks to @e-c-d for reporting and helping to fix the vulnerability!

Main changes
------------

* Added support for Python 3.11.

* Allow submitting a form with no submit element. This can be achieved by
  passing ``submit=False`` to ``StatefulBrowser.submit_selected``. Thanks
  @alexreg!
  [`#480 <https://github.com/MechanicalSoup/MechanicalSoup/pull/411`__]

Version 1.2
===========

Main changes
------------

* Added support for Python 3.10.

* Add support for HTML form-associated elements (i.e. input elements that are
  associated with a form by a ``form`` attribute, but are not a child element
  of the form.)
  [`#380 <https://github.com/MechanicalSoup/MechanicalSoup/issues/380>`__]

Bug fixes
---------

* When uploading a file, only the filename is now submitted to the server.
  Previously, the full file path was being submitted, which exposed more
  local information than users may have been expecting.
  [`#375 <https://github.com/MechanicalSoup/MechanicalSoup/pull/375>`__]

Version 1.1
===========

Main changes
------------

* Dropped support for EOL Python versions: 2.7 and 3.5.

* Increased minimum version requirement for requests from 2.0 to 2.22.0
  and beautifulsoup4 from 4.4 to 4.7.

* Use encoding from the HTTP request when no HTML encoding is specified.
  [`#355 <https://github.com/MechanicalSoup/MechanicalSoup/pull/355>`__]

* Added the ``put`` method to the ``Browser`` class. This is a light wrapper
  around ``requests.Session.put``.
  [`#359 <https://github.com/MechanicalSoup/MechanicalSoup/pull/359>`__]

* Don't override ``Referer`` headers passed in by the user.
  [`#364 <https://github.com/MechanicalSoup/MechanicalSoup/pull/364>`__]

* ``StatefulBrowser`` methods ``follow_link`` and ``download_link``
  now support passing a dictionary of keyword arguments to
  ``requests``, via ``requests_kwargs``. For symmetry, they also
  support passing Beautiful Soup args in as ``bs4_kwargs``, although
  any excess ``**kwargs`` are sent to Beautiful Soup as well, just as
  they were previously.
  [`#368 <https://github.com/MechanicalSoup/MechanicalSoup/pull/368>`__]


Version 1.0
===========

This is the last release that will support Python 2.7. Thanks to the many
contributors that made this release possible!

Main changes:
-------------

* Added support for Python 3.8 and 3.9.

* ``StatefulBrowser`` has new properties ``page``, ``form``, and ``url``,
  which can be used in place of the methods ``get_current_page``,
  ``get_current_form`` and ``get_url`` respectively (e.g. the new ``x.page``
  is equivalent to ``x.get_current_page()``). These methods may be deprecated
  in a future release.
  [`#175 <https://github.com/MechanicalSoup/MechanicalSoup/issues/175>`__]

* ``StatefulBrowser.form`` will raise an ``AttributeError`` instead of
  returning ``None`` if no form has been selected yet. Note that
  ``StatefulBrowser.get_current_form()`` still returns ``None`` for
  backward compatibility.

Bug fixes
---------

* Decompose ``<select>`` elements with the same name when adding a new
  input element to a form.
  [`#297 <https://github.com/MechanicalSoup/MechanicalSoup/issues/297>`__]

* The ``params`` and ``data`` kwargs passed to ``submit`` will now properly
  be forwarded to the underlying request for GET methods (whereas previously
  ``params`` was being overwritten by ``data``).
  [`#343 <https://github.com/MechanicalSoup/MechanicalSoup/pull/343>`__]

Version 0.12
============

Main changes:
-------------

* Changes in official python version support: added 3.7 and dropped 3.4.

* Added ability to submit a form without updating ``StatefulBrowser`` internal
  state: ``submit_selected(..., update_state=False)``. This means you get a
  response from the form submission, but your browser stays on the same page.
  Useful for handling forms that result in a file download or open a new tab.

Bug fixes
---------

* Improve handling of form enctype to behave like a real browser.
  [`#242 <https://github.com/MechanicalSoup/MechanicalSoup/issues/242>`__]

* HTML ``type`` attributes are no longer required to be lowercase.
  [`#245 <https://github.com/MechanicalSoup/MechanicalSoup/issues/245>`__]

* Form controls with the ``disabled`` attribute will no longer be submitted
  to improve compliance with the HTML standard. If you were relying on this
  bug to submit disabled elements, you can still achieve this by deleting the
  ``disabled`` attribute from the element in the :class:`~mechanicalsoup.Form`
  object directly.
  [`#248 <https://github.com/MechanicalSoup/MechanicalSoup/issues/248>`__]

* When a form containing a file input field is submitted without choosing a
  file, an empty filename & content will be sent just like in a real browser.
  [`#250 <https://github.com/MechanicalSoup/MechanicalSoup/issues/250>`__]

* ``<option>`` tags without a ``value`` attribute will now use their text as
  the value.
  [`#252 <https://github.com/MechanicalSoup/MechanicalSoup/pull/252>`__]

* The optional ``url_regex`` argument to ``follow_link`` and ``download_link``
  was fixed so that it is no longer ignored.
  [`#256 <https://github.com/MechanicalSoup/MechanicalSoup/pull/256>`__]

* Allow duplicate submit elements instead of raising a LinkNotFoundError.
  [`#264 <https://github.com/MechanicalSoup/MechanicalSoup/issues/264>`__]

Our thanks to the many new contributors in this release!

Version 0.11
============

This release focuses on fixing bugs related to uncommon HTTP/HTML
scenarios and on improving the documentation.

Bug fixes
---------

* Constructing a :class:`~mechanicalsoup.Form` instance from a
  ``bs4.element.Tag`` whose tag name is not ``form`` will now emit a warning,
  and may be deprecated in the future.
  [`#228 <https://github.com/MechanicalSoup/MechanicalSoup/pull/228>`__]

* **Breaking Change:** :class:`~mechanicalsoup.LinkNotFoundError` now derives
  from ``Exception`` instead of ``BaseException``. While this will bring the
  behavior in line with most people's expectations, it may affect the behavior
  of your code if you were heavily relying on this implementation detail in
  your exception handling.
  [`#203 <https://github.com/MechanicalSoup/MechanicalSoup/issues/203>`__]

* Improve handling of ``button`` submit elements. Will now correctly ignore
  buttons of type ``button`` and ``reset`` during form submission, since they
  are not considered to be submit elements.
  [`#199 <https://github.com/MechanicalSoup/MechanicalSoup/pull/199>`__]

* Do a better job of inferring the content type of a response if the
  ``Content-Type`` header is not provided.
  [`#195 <https://github.com/MechanicalSoup/MechanicalSoup/pull/195>`__]

* Improve consistency of query string construction between MechanicalSoup
  and web browsers in edge cases where form elements have duplicate name
  attributes. This prevents errors in valid use cases, and also makes
  MechanicalSoup more tolerant of invalid HTML.
  [`#158 <https://github.com/MechanicalSoup/MechanicalSoup/issues/158>`__]

Version 0.10
============

Main changes:
-------------
* Added ``StatefulBrowser.refresh()`` to reload the current page with the same request.
  [`#188 <https://github.com/MechanicalSoup/MechanicalSoup/issues/188>`__]

* ``StatefulBrowser.follow_link``,
  ``StatefulBrowser.submit_selected()`` and the new
  ``StatefulBrowser.download_link`` now sets the ``Referer:`` HTTP
  header to the page from which the link is followed.
  [`#179 <https://github.com/MechanicalSoup/MechanicalSoup/issues/179>`__]

* Added method ``StatefulBrowser.download_link``, which will download the
  contents of a link to a file without changing the state of the browser.
  [`#170 <https://github.com/MechanicalSoup/MechanicalSoup/issues/170>`__]

* The ``selector`` argument of ``Browser.select_form`` can now be a
  `bs4.element.Tag <https://www.crummy.com/software/BeautifulSoup/bs4/doc/#tag>`__
  in addition to a CSS selector.
  [`#169 <https://github.com/MechanicalSoup/MechanicalSoup/issues/169>`__]

* ``Browser.submit`` and ``StatefulBrowser.submit_selected`` accept a larger
  number of keyword arguments. Arguments are forwarded to
  `requests.Session.request <http://docs.python-requests.org/en/master/api/#requests.Session.request>`__.
  [`#166 <https://github.com/MechanicalSoup/MechanicalSoup/pull/166>`__]

Internal changes:
-----------------

* ``StatefulBrowser.choose_submit`` will now ignore input elements that are
  missing a name-attribute instead of raising a ``KeyError``.
  [`#180 <https://github.com/MechanicalSoup/MechanicalSoup/issues/180>`__]

* Private methods ``Browser._build_request`` and ``Browser._prepare_request``
  have been replaced by a single method ``Browser._request``.
  [`#166 <https://github.com/MechanicalSoup/MechanicalSoup/pull/166>`__]

Version 0.9
===========

Main changes:
-------------

* We do not rely on BeautifulSoup's default choice of HTML parser.
  Instead, we now specify ``lxml`` as default. As a consequence, the
  default setting requires ``lxml`` as a dependency.

* Python 2.6 and 3.3 are no longer supported.

* The GitHub URL moved from
  https://github.com/hickford/MechanicalSoup/ to
  https://github.com/MechanicalSoup/MechanicalSoup. @moy and
  @hemberger are now officially administrators of the project in
  addition to @hickford, the original author.

* We now have a documentation site: https://mechanicalsoup.readthedocs.io/.
  The API is now fully documented, and we have included a tutorial,
  several more code examples, and a FAQ.

* ``StatefulBrowser.select_form`` can now be called without argument,
  and defaults to ``"form"`` in this case. It also has a new argument,
  ``nr`` (defaults to 0), which can be used to specify the index of
  the form to select if multiple forms match the selection criteria.

* We now use requirement files. You can install the dependencies of
  MechanicalSoup with e.g.::

    pip install -r requirements.txt -r tests/requirements.txt

* The ``Form`` class was restructured and has a new API. The behavior of
  existing code is unchanged, but a new collection of methods has been
  added for clarity and consistency with the ``set`` method:

  - ``set_input`` deprecates ``input``
  - ``set_textarea`` deprecates ``textarea``
  - ``set_select`` is new
  - ``set_checkbox`` and ``set_radio`` together deprecate ``check``
    (checkboxes are handled differently by default)

* A new ``Form.print_summary`` method allows you to write
  ``browser.get_current_form().print_summary()`` to get a summary of the
  fields you need to fill-in (and which ones are already filled-in).

* The ``Form`` class now supports selecting multiple options in
  a ``<select multiple>`` element.

Bug fixes
---------

* Checking checkboxes with ``browser["name"] = ("val1", "val2")`` now
  unchecks all checkbox except the ones explicitly specified.

* ``StatefulBrowser.submit_selected`` and ``StatefulBrowser.open`` now
  reset __current_page to None when the result is not an HTML page.
  This fixes a bug where __current_page was still the previous page.

* We don't error out anymore when trying to uncheck a box which
  doesn't have a ``checkbox`` attribute.

* ``Form.new_control`` now correctly overrides existing elements.

Internal changes
----------------

* The testsuite has been further improved and reached 100% coverage.

* Tests are now run against the local version of MechanicalSoup, not
  against the installed version.

* ``Browser.add_soup`` will now always attach a *soup*-attribute.
  If the response is not text/html, then soup is set to None.

* ``Form.set(force=True)`` creates an ``<input type=text ...>``
  element instead of an ``<input type=input ...>``.

Version 0.8
===========

Main changes:
-------------

* `Browser` and `StatefulBrowser` can now be configured to raise a
  `LinkNotFound` exception when encountering a 404 Not Found error.
  This is activated by passing `raise_on_404=True` to the constructor.
  It is disabled by default for backward compatibility, but is highly
  recommended.

* `Browser` now has a `__del__` method that closes the current session
  when the object is deleted.

* A `Link` object can now be passed to `follow_link`.

* The user agent can now be customized. The default includes
  `MechanicalSoup` and its version.

* There is now a direct interface to the cookiejar in `*Browser`
  classes (`(set|get)_cookiejar` methods).

* This is the last MechanicalSoup version supporting Python 2.6 and
  3.3.

Bug fixes:
----------

* We used to crash on forms without action="..." fields.

* The `choose_submit` method has been fixed, and the `btnName`
  argument of `StatefulBrowser.submit_selected` is now a shortcut for
  using `choose_submit`.

* Arguments to `open_relative` were not properly forwarded.

Internal changes:
-----------------

* The testsuite has been greatly improved. It now uses the pytest API
  (not only the `pytest` launcher) for more concise code.

* The coverage of the testsuite is now measured with codecov.io. The
  results can be viewed on:
  https://codecov.io/gh/hickford/MechanicalSoup

* We now have a requires.io badge to help us tracking issues with
  dependencies. The report can be viewed on:
  https://requires.io/github/hickford/MechanicalSoup/requirements/

* The version number now appears in a single place in the source code.

Version 0.7
===========

see Git history, no changelog sorry.