Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-bleach for openSUSE:Factory checked in at 2023-10-29 19:39:48 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-bleach (Old) and /work/SRC/openSUSE:Factory/.python-bleach.new.17445 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-bleach" Sun Oct 29 19:39:48 2023 rev:20 rq:1120892 version:6.1.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-bleach/python-bleach.changes 2023-06-30 19:58:41.973581844 +0200 +++ /work/SRC/openSUSE:Factory/.python-bleach.new.17445/python-bleach.changes 2023-10-29 19:40:02.579540500 +0100 @@ -1,0 +2,13 @@ +Sat Oct 28 09:50:58 UTC 2023 - Dirk Müller <[email protected]> + +- update to 6.1.0: + * Dropped support for Python 3.7. + * Add support for Python 3.12. + * Fix linkify with arrays in querystring + * Handle more cases with < followed by character data + * Fix entities inside a tags in linkification + * Update cap for tinycss2 to <1.3 + * Updated Sphinx requirement + * Add dependabot for github actions and update github actions + +------------------------------------------------------------------- Old: ---- bleach-6.0.0.tar.gz New: ---- bleach-6.1.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-bleach.spec ++++++ --- /var/tmp/diff_new_pack.DTgKcU/_old 2023-10-29 19:40:03.183562475 +0100 +++ /var/tmp/diff_new_pack.DTgKcU/_new 2023-10-29 19:40:03.183562475 +0100 @@ -19,7 +19,7 @@ %{?sle15_python_module_pythons} Name: python-bleach -Version: 6.0.0 +Version: 6.1.0 Release: 0 Summary: A whitelist-based HTML-sanitizing tool License: Apache-2.0 ++++++ bleach-6.0.0.tar.gz -> bleach-6.1.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bleach-6.0.0/CHANGES new/bleach-6.1.0/CHANGES --- old/bleach-6.0.0/CHANGES 2023-01-23 17:39:32.000000000 +0100 +++ new/bleach-6.1.0/CHANGES 2023-10-06 21:29:31.000000000 +0200 @@ -1,6 +1,28 @@ Bleach changes ============== +Version 6.1.0 (October 6th, 2023) +--------------------------------- + +**Backwards incompatible changes** + +* Dropped support for Python 3.7. (#709) + +**Security fixes** + +None + +**Bug fixes** + +* Add support for Python 3.12. (#710) +* Fix linkify with arrays in querystring (#436) +* Handle more cases with < followed by character data (#705) +* Fix entities inside a tags in linkification (#704) +* Update cap for tinycss2 to <1.3 (#702) +* Updated Sphinx requirement +* Add dependabot for github actions and update github actions + + Version 6.0.0 (January 23rd, 2023) ---------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bleach-6.0.0/MANIFEST.in new/bleach-6.1.0/MANIFEST.in --- old/bleach-6.0.0/MANIFEST.in 2023-01-21 23:17:49.000000000 +0100 +++ new/bleach-6.1.0/MANIFEST.in 2023-10-06 18:19:57.000000000 +0200 @@ -12,7 +12,6 @@ include docs/conf.py include docs/Makefile -include docs/requirements.txt include scripts/* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bleach-6.0.0/PKG-INFO new/bleach-6.1.0/PKG-INFO --- old/bleach-6.0.0/PKG-INFO 2023-01-23 17:39:56.468108200 +0100 +++ new/bleach-6.1.0/PKG-INFO 2023-10-06 21:30:35.005795000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: bleach -Version: 6.0.0 +Version: 6.1.0 Summary: An easy safelist-based HTML-sanitizing tool. Home-page: https://github.com/mozilla/bleach Maintainer: Will Kahn-Greene @@ -14,18 +14,21 @@ Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy Classifier: Topic :: Software Development :: Libraries :: Python Modules -Requires-Python: >=3.7 +Requires-Python: >=3.8 Description-Content-Type: text/x-rst -Provides-Extra: css License-File: LICENSE +Requires-Dist: six>=1.9.0 +Requires-Dist: webencodings +Provides-Extra: css +Requires-Dist: tinycss2<1.3,>=1.1.0; extra == "css" ====== Bleach @@ -40,6 +43,9 @@ .. image:: https://badge.fury.io/py/bleach.svg :target: http://badge.fury.io/py/bleach +**NOTE: 2023-01-23: Bleach is deprecated.** See issue: +`<https://github.com/mozilla/bleach/issues/698>`__ + Bleach is an allowed-list-based HTML sanitizing library that escapes or strips markup and attributes. @@ -152,6 +158,28 @@ Bleach changes ============== +Version 6.1.0 (October 6th, 2023) +--------------------------------- + +**Backwards incompatible changes** + +* Dropped support for Python 3.7. (#709) + +**Security fixes** + +None + +**Bug fixes** + +* Add support for Python 3.12. (#710) +* Fix linkify with arrays in querystring (#436) +* Handle more cases with < followed by character data (#705) +* Fix entities inside a tags in linkification (#704) +* Update cap for tinycss2 to <1.3 (#702) +* Updated Sphinx requirement +* Add dependabot for github actions and update github actions + + Version 6.0.0 (January 23rd, 2023) ---------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bleach-6.0.0/README.rst new/bleach-6.1.0/README.rst --- old/bleach-6.0.0/README.rst 2021-08-09 16:34:04.000000000 +0200 +++ new/bleach-6.1.0/README.rst 2023-01-23 18:34:25.000000000 +0100 @@ -11,6 +11,9 @@ .. image:: https://badge.fury.io/py/bleach.svg :target: http://badge.fury.io/py/bleach +**NOTE: 2023-01-23: Bleach is deprecated.** See issue: +`<https://github.com/mozilla/bleach/issues/698>`__ + Bleach is an allowed-list-based HTML sanitizing library that escapes or strips markup and attributes. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bleach-6.0.0/bleach/__init__.py new/bleach-6.1.0/bleach/__init__.py --- old/bleach-6.0.0/bleach/__init__.py 2023-01-23 17:39:32.000000000 +0100 +++ new/bleach-6.1.0/bleach/__init__.py 2023-10-06 21:29:31.000000000 +0200 @@ -11,9 +11,9 @@ # yyyymmdd -__releasedate__ = "20230123" +__releasedate__ = "20231006" # x.y.z or x.y.z.dev0 -- semver -__version__ = "6.0.0" +__version__ = "6.1.0" __all__ = ["clean", "linkify"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bleach-6.0.0/bleach/html5lib_shim.py new/bleach-6.1.0/bleach/html5lib_shim.py --- old/bleach-6.0.0/bleach/html5lib_shim.py 2023-01-23 14:40:59.000000000 +0100 +++ new/bleach-6.1.0/bleach/html5lib_shim.py 2023-10-06 20:40:11.000000000 +0200 @@ -395,10 +395,17 @@ # followed by a series of characters. It's treated as a tag # name that abruptly ends, but we should treat that like # character data - yield { - "type": TAG_TOKEN_TYPE_CHARACTERS, - "data": "<" + self.currentToken["name"], - } + yield {"type": TAG_TOKEN_TYPE_CHARACTERS, "data": self.stream.get_tag()} + elif last_error_token["data"] in ( + "eof-in-attribute-name", + "eof-in-attribute-value-no-quotes", + ): + # Handle the case where the text being parsed ends with < + # followed by a series of characters and then space and then + # more characters. It's treated as a tag name followed by an + # attribute that abruptly ends, but we should treat that like + # character data. + yield {"type": TAG_TOKEN_TYPE_CHARACTERS, "data": self.stream.get_tag()} else: yield last_error_token diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bleach-6.0.0/bleach/linkifier.py new/bleach-6.1.0/bleach/linkifier.py --- old/bleach-6.0.0/bleach/linkifier.py 2023-01-23 14:40:59.000000000 +0100 +++ new/bleach-6.1.0/bleach/linkifier.py 2023-10-06 20:49:32.000000000 +0200 @@ -45,8 +45,8 @@ r"""\(* # Match any opening parentheses. \b(?<![@.])(?:(?:{0}):/{{0,3}}(?:(?:\w+:)?\w+@)?)? # http:// ([\w-]+\.)+(?:{1})(?:\:[0-9]+)?(?!\.\w)\b # xx.yy.tld(:##)? - (?:[/?][^\s\{{\}}\|\\\^\[\]`<>"]*)? - # /path/zz (excluding "unsafe" chars from RFC 1738, + (?:[/?][^\s\{{\}}\|\\\^`<>"]*)? + # /path/zz (excluding "unsafe" chars from RFC 3986, # except for # and ~, which happen in practice) """.format( "|".join(sorted(protocols)), "|".join(sorted(tlds)) @@ -591,7 +591,7 @@ in_a = False token_buffer = [] else: - token_buffer.append(token) + token_buffer.extend(list(self.extract_entities(token))) continue if token["type"] in ["StartTag", "EmptyTag"]: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bleach-6.0.0/bleach.egg-info/PKG-INFO new/bleach-6.1.0/bleach.egg-info/PKG-INFO --- old/bleach-6.0.0/bleach.egg-info/PKG-INFO 2023-01-23 17:39:56.000000000 +0100 +++ new/bleach-6.1.0/bleach.egg-info/PKG-INFO 2023-10-06 21:30:34.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: bleach -Version: 6.0.0 +Version: 6.1.0 Summary: An easy safelist-based HTML-sanitizing tool. Home-page: https://github.com/mozilla/bleach Maintainer: Will Kahn-Greene @@ -14,18 +14,21 @@ Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy Classifier: Topic :: Software Development :: Libraries :: Python Modules -Requires-Python: >=3.7 +Requires-Python: >=3.8 Description-Content-Type: text/x-rst -Provides-Extra: css License-File: LICENSE +Requires-Dist: six>=1.9.0 +Requires-Dist: webencodings +Provides-Extra: css +Requires-Dist: tinycss2<1.3,>=1.1.0; extra == "css" ====== Bleach @@ -40,6 +43,9 @@ .. image:: https://badge.fury.io/py/bleach.svg :target: http://badge.fury.io/py/bleach +**NOTE: 2023-01-23: Bleach is deprecated.** See issue: +`<https://github.com/mozilla/bleach/issues/698>`__ + Bleach is an allowed-list-based HTML sanitizing library that escapes or strips markup and attributes. @@ -152,6 +158,28 @@ Bleach changes ============== +Version 6.1.0 (October 6th, 2023) +--------------------------------- + +**Backwards incompatible changes** + +* Dropped support for Python 3.7. (#709) + +**Security fixes** + +None + +**Bug fixes** + +* Add support for Python 3.12. (#710) +* Fix linkify with arrays in querystring (#436) +* Handle more cases with < followed by character data (#705) +* Fix entities inside a tags in linkification (#704) +* Update cap for tinycss2 to <1.3 (#702) +* Updated Sphinx requirement +* Add dependabot for github actions and update github actions + + Version 6.0.0 (January 23rd, 2023) ---------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bleach-6.0.0/bleach.egg-info/SOURCES.txt new/bleach-6.1.0/bleach.egg-info/SOURCES.txt --- old/bleach-6.0.0/bleach.egg-info/SOURCES.txt 2023-01-23 17:39:56.000000000 +0100 +++ new/bleach-6.1.0/bleach.egg-info/SOURCES.txt 2023-10-06 21:30:34.000000000 +0200 @@ -81,7 +81,6 @@ docs/index.rst docs/linkify.rst docs/migrating.rst -docs/requirements.txt scripts/vendor_verify.sh tests/test_callbacks.py tests/test_clean.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bleach-6.0.0/bleach.egg-info/requires.txt new/bleach-6.1.0/bleach.egg-info/requires.txt --- old/bleach-6.0.0/bleach.egg-info/requires.txt 2023-01-23 17:39:56.000000000 +0100 +++ new/bleach-6.1.0/bleach.egg-info/requires.txt 2023-10-06 21:30:34.000000000 +0200 @@ -2,4 +2,4 @@ webencodings [css] -tinycss2<1.2,>=1.1.0 +tinycss2<1.3,>=1.1.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bleach-6.0.0/docs/requirements.txt new/bleach-6.1.0/docs/requirements.txt --- old/bleach-6.0.0/docs/requirements.txt 2022-12-08 03:33:34.000000000 +0100 +++ new/bleach-6.1.0/docs/requirements.txt 1970-01-01 01:00:00.000000000 +0100 @@ -1,3 +0,0 @@ -# NOTE: this gets run during the RTD build from the parent directory with: -# python -m pip install --exists-action=w --no-cache-dir -r docs/requirements.txt --e .[dev,css] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bleach-6.0.0/requirements-dev.txt new/bleach-6.1.0/requirements-dev.txt --- old/bleach-6.0.0/requirements-dev.txt 2023-01-23 17:07:31.000000000 +0100 +++ new/bleach-6.1.0/requirements-dev.txt 2023-10-06 01:13:35.000000000 +0200 @@ -1,13 +1,13 @@ -e . -black==22.12.0; implementation_name == 'cpython' -build==0.10.0 -mypy==0.991; implementation_name =='cpython' -pytest==7.2.1 -tox==4.3.5 -tox-gh-actions==3.0.0 +black==23.9.1; implementation_name == 'cpython' +build==1.0.3 +mypy==1.5.1; implementation_name =='cpython' +pytest==7.4.2 +setuptools==68.2.2 +tox==4.11.3 +tox-gh-actions==3.1.3 twine==4.0.2 -wheel==0.38.4 +wheel==0.41.2 -# NOTE(willkg): Held back until we drop support for Python 3.7 -Sphinx==5.3.0 +Sphinx==7.2.6; python_version > "3.8" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bleach-6.0.0/setup.py new/bleach-6.1.0/setup.py --- old/bleach-6.0.0/setup.py 2023-01-23 17:39:32.000000000 +0100 +++ new/bleach-6.1.0/setup.py 2023-10-06 18:19:57.000000000 +0200 @@ -32,7 +32,7 @@ EXTRAS_REQUIRE = { "css": [ - "tinycss2>=1.1.0,<1.2", + "tinycss2>=1.1.0,<1.3", ], } @@ -51,7 +51,7 @@ include_package_data=True, package_data={"": ["README.rst"]}, zip_safe=False, - python_requires=">=3.7", + python_requires=">=3.8", install_requires=INSTALL_REQUIRES, extras_require=EXTRAS_REQUIRE, classifiers=[ @@ -63,11 +63,11 @@ "Programming Language :: Python", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development :: Libraries :: Python Modules", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bleach-6.0.0/tests/test_clean.py new/bleach-6.1.0/tests/test_clean.py --- old/bleach-6.0.0/tests/test_clean.py 2023-01-23 14:40:59.000000000 +0100 +++ new/bleach-6.1.0/tests/test_clean.py 2023-10-06 20:08:04.000000000 +0200 @@ -163,6 +163,10 @@ ("<y", "<y"), ("x < y", "x < y"), ("<y>", "<y>"), + # this is an eof-in-attribute-name parser error + ("<some thing", "<some thing"), + # this is an eof-in-attribute-value-no-quotes parser error + ("<some thing=foo", "<some thing=foo"), ], ) def test_lessthan_escaping(text, expected): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bleach-6.0.0/tests/test_linkify.py new/bleach-6.1.0/tests/test_linkify.py --- old/bleach-6.0.0/tests/test_linkify.py 2023-01-23 14:40:59.000000000 +0100 +++ new/bleach-6.1.0/tests/test_linkify.py 2023-10-06 20:49:32.000000000 +0200 @@ -300,6 +300,14 @@ ) +def test_link_with_qs_with_array(): + """Test that urls pick up [] in querystring""" + assert linkify("http://test.com?array[]=1¶ms_in[]=2") == ( + '<a href="http://test.com?array[]=1&params_in[]=2" ' + + 'rel="nofollow">http://test.com?array[]=1&params_in[]=2</a>' + ) + + def test_link_query(): assert ( linkify("http://xx.com/?test=win") @@ -323,6 +331,7 @@ def test_link_entities_in_qs(): + """Entities in the querystring get escaped""" assert ( linkify("http://xx.com/?a=1&b=2") == '<a href="http://xx.com/?a=1&b=2" rel="nofollow">http://xx.com/?a=1&b=2</a>' @@ -330,9 +339,18 @@ def test_link_entities_in_characters_token(): + """Entitites in a Characters token don't get escaped""" assert linkify("foo bar") == "foo bar" +def test_link_entities_in_a_tag(): + """Entitites between an a start tag and an a end tag don't get escaped""" + assert ( + linkify('<a href="/">Some entity’s</a>', callbacks=[]) + == '<a href="/">Some entity’s</a>' + ) + + def test_escaped_html(): """If I pass in escaped HTML, it should probably come out escaped.""" s = "<em>strong</em>" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bleach-6.0.0/tests/test_parse_shim.py new/bleach-6.1.0/tests/test_parse_shim.py --- old/bleach-6.0.0/tests/test_parse_shim.py 2023-01-21 23:17:49.000000000 +0100 +++ new/bleach-6.1.0/tests/test_parse_shim.py 2023-10-03 16:27:32.000000000 +0200 @@ -95,7 +95,6 @@ ], ) def test_urlparse(uri, expected): - if inspect.isclass(expected) and issubclass(expected, BaseException): with pytest.raises(expected): urlparse(uri) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bleach-6.0.0/tests_website/server.py new/bleach-6.1.0/tests_website/server.py --- old/bleach-6.0.0/tests_website/server.py 2022-02-09 15:40:52.000000000 +0100 +++ new/bleach-6.1.0/tests_website/server.py 2023-10-03 16:27:32.000000000 +0200 @@ -20,7 +20,6 @@ class BleachCleanHandler(http.server.SimpleHTTPRequestHandler): - # Prevent 'cannot bind to address' errors on restart allow_reuse_address = True diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bleach-6.0.0/tox.ini new/bleach-6.1.0/tox.ini --- old/bleach-6.0.0/tox.ini 2023-01-21 23:17:49.000000000 +0100 +++ new/bleach-6.1.0/tox.ini 2023-10-05 23:30:20.000000000 +0200 @@ -2,9 +2,9 @@ [tox] envlist = - py{37,38,39,310,311,py3} - py{37,38,39,310,311,py3}-tinycss2 - py{37,38,39,310,311}-build-no-lang + py{38,39,310,311,312,py3} + py{38,39,310,311,312,py3}-tinycss2 + py{38,39,310,311,312}-build-no-lang py39-docs py39-format-check py39-lint @@ -12,11 +12,11 @@ [gh-actions] python = - 3.7: py37 3.8: py38 3.9: py39 3.10: py310 3.11: py311 + 3.12: py312 pypy-3.8: pypy3 [testenv] @@ -25,31 +25,31 @@ pytest {posargs:-v} python setup.py build -[testenv:py37-tinycss2] +[testenv:py38-tinycss2] deps = -rrequirements-dev.txt extras = css commands = pytest {posargs:-v} -[testenv:py38-tinycss2] +[testenv:py39-tinycss2] deps = -rrequirements-dev.txt extras = css commands = pytest {posargs:-v} -[testenv:py39-tinycss2] +[testenv:py310-tinycss2] deps = -rrequirements-dev.txt extras = css commands = pytest {posargs:-v} -[testenv:py310-tinycss2] +[testenv:py311-tinycss2] deps = -rrequirements-dev.txt extras = css commands = pytest {posargs:-v} -[testenv:py311-tinycss2] +[testenv:py312-tinycss2] deps = -rrequirements-dev.txt extras = css commands = @@ -61,31 +61,31 @@ commands = pytest {posargs:-v} -[testenv:py37-build-no-lang] +[testenv:py38-build-no-lang] setenv = LANG= commands = python setup.py build -[testenv:py38-build-no-lang] +[testenv:py39-build-no-lang] setenv = LANG= commands = python setup.py build -[testenv:py39-build-no-lang] +[testenv:py310-build-no-lang] setenv = LANG= commands = python setup.py build -[testenv:py310-build-no-lang] +[testenv:py311-build-no-lang] setenv = LANG= commands = python setup.py build -[testenv:py311-build-no-lang] +[testenv:py312-build-no-lang] setenv = LANG= commands = @@ -111,7 +111,7 @@ deps = -rrequirements-dev.txt platform = linux commands = - black --target-version=py37 --check --diff --exclude=_vendor setup.py bleach/ tests/ tests_website/ + black --target-version=py38 --check --diff --exclude=_vendor setup.py bleach/ tests/ tests_website/ [testenv:py39-docs] changedir = docs
