diff --git a/CHANGELOG.rst b/CHANGELOG.rst index a31ed24a..f7a830e1 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -316,8 +316,6 @@ Version 21.3.0 Version 20.12.3 --------------- -`Current LTS version` - **Bugfixes** * diff --git a/docs/sanic/changelog.rst b/docs/sanic/changelog.rst index 88ae10aa..61787e97 100644 --- a/docs/sanic/changelog.rst +++ b/docs/sanic/changelog.rst @@ -1,6 +1,11 @@ 📜 Changelog ============ +| 🔶 Current release +| 🔷 In support release +| + +.. mdinclude:: ./releases/23/23.3.md .. mdinclude:: ./releases/22/22.12.md .. mdinclude:: ./releases/22/22.9.md .. mdinclude:: ./releases/22/22.6.md diff --git a/docs/sanic/releases/22/22.12.md b/docs/sanic/releases/22/22.12.md index 8a3bd390..96529006 100644 --- a/docs/sanic/releases/22/22.12.md +++ b/docs/sanic/releases/22/22.12.md @@ -1,4 +1,4 @@ -## Version 22.12.0 🔶 +## Version 22.12.0 🔷 _Current version_ diff --git a/docs/sanic/releases/23/23.3.md b/docs/sanic/releases/23/23.3.md new file mode 100644 index 00000000..0c0ecbb9 --- /dev/null +++ b/docs/sanic/releases/23/23.3.md @@ -0,0 +1,53 @@ +## Version 23.3.0 🔶 + +### Features +- [#2545](https://github.com/sanic-org/sanic/pull/2545) Standardize init of exceptions for more consistent control of HTTP responses using exceptions +- [#2606](https://github.com/sanic-org/sanic/pull/2606) Decode headers as UTF-8 also in ASGI +- [#2646](https://github.com/sanic-org/sanic/pull/2646) Separate ASGI request and lifespan callables +- [#2659](https://github.com/sanic-org/sanic/pull/2659) Use ``FALLBACK_ERROR_FORMAT`` for handlers that return ``empty()`` +- [#2662](https://github.com/sanic-org/sanic/pull/2662) Add basic file browser (HTML page) and auto-index serving +- [#2667](https://github.com/sanic-org/sanic/pull/2667) Nicer traceback formatting (HTML page) +- [#2668](https://github.com/sanic-org/sanic/pull/2668) Smarter error page rendering format selection; more reliant upon header and "common sense" defaults +- [#2680](https://github.com/sanic-org/sanic/pull/2680) Check the status of socket before shutting down with ``SHUT_RDWR`` +- [#2687](https://github.com/sanic-org/sanic/pull/2687) Refresh ``Request.accept`` functionality to be more performant and spec-compliant +- [#2696](https://github.com/sanic-org/sanic/pull/2696) Add header accessors as properties + ``` + Example-Field: Foo, Bar + Example-Field: Baz + ``` + ```python + request.headers.example_field == "Foo, Bar,Baz" + ``` +- [#2700](https://github.com/sanic-org/sanic/pull/2700) Simpler CLI targets + + ```sh + $ sanic path.to.module:app # global app instance + $ sanic path.to.module:create_app # factory pattern + $ sanic ./path/to/directory/ # simple serve + ``` +- [#2701](https://github.com/sanic-org/sanic/pull/2701) API to define a number of workers in managed processes +- [#2704](https://github.com/sanic-org/sanic/pull/2704) Add convenience for dynamic changes to routing +- [#2706](https://github.com/sanic-org/sanic/pull/2706) Add convenience methods for cookie creation and deletion + + ```python + response = text("...") + response.add_cookie("test", "It worked!", domain=".yummy-yummy-cookie.com") + ``` +- [#2707](https://github.com/sanic-org/sanic/pull/2707) Simplified ``parse_content_header`` escaping to be RFC-compliant and remove outdated FF hack +- [#2710](https://github.com/sanic-org/sanic/pull/2710) Stricter charset handling and escaping of request URLs +- [#2711](https://github.com/sanic-org/sanic/pull/2711) Consume body on ``DELETE`` by default +- [#2719](https://github.com/sanic-org/sanic/pull/2719) Allow ``password`` to be passed to TLS context +- [#2720](https://github.com/sanic-org/sanic/pull/2720) Skip middleware on ``RequestCancelled`` +- [#2721](https://github.com/sanic-org/sanic/pull/2721) Change access logging format to ``%s`` +- [#2722](https://github.com/sanic-org/sanic/pull/2722) Add ``CertLoader`` as application option for directly controlling ``SSLContext`` objects +- [#2725](https://github.com/sanic-org/sanic/pull/2725) Worker sync state tolerance on race condition + +### Bugfixes +- [#2651](https://github.com/sanic-org/sanic/pull/2651) ASGI websocket to pass thru bytes as is +- [#2697](https://github.com/sanic-org/sanic/pull/2697) Fix comparison between datetime aware and naive in ``file`` when using ``If-Modified-Since`` + +### Deprecations and Removals +- [#2666](https://github.com/sanic-org/sanic/pull/2666) Remove deprecated ``__blueprintname__`` property + +### Improved Documentation +- [#2712](https://github.com/sanic-org/sanic/pull/2712) Improved example using ``'https'`` to create the redirect diff --git a/sanic/__version__.py b/sanic/__version__.py index ea30ce64..fd5f6131 100644 --- a/sanic/__version__.py +++ b/sanic/__version__.py @@ -1 +1 @@ -__version__ = "22.12.0" +__version__ = "23.3.0" diff --git a/sanic/app.py b/sanic/app.py index 83fbacae..8eceec9a 100644 --- a/sanic/app.py +++ b/sanic/app.py @@ -1589,7 +1589,8 @@ class Sanic(StaticHandleMixin, BaseSanic, StartupMixin, metaclass=TouchUpMeta): f"Duplicate route names detected: {names}. You should rename " "one or more of them explicitly by using the `name` param, " "or changing the implicit name derived from the class and " - "function name. For more details, please see ___." + "function name. For more details, please see " + "https://sanic.dev/en/guide/release-notes/v23.3.html#duplicated-route-names-are-no-longer-allowed" # noqa ) raise ServerError(message) diff --git a/sanic/cookies/request.py b/sanic/cookies/request.py index 1636c75c..9d6fbd5e 100644 --- a/sanic/cookies/request.py +++ b/sanic/cookies/request.py @@ -81,7 +81,8 @@ class CookieRequestParameters(RequestParameters): "accessing a cookie value like this will return a list of values. " "To avoid this behavior and continue accessing a single value, " f"please upgrade from request.cookies['{key}'] to " - f"request.cookies.get('{key}'). See more details: ___.", + f"request.cookies.get('{key}'). See more details: " + "https://sanic.dev/en/guide/release-notes/v23.3.html#request-cookies", # noqa 24.3, ) try: diff --git a/sanic/cookies/response.py b/sanic/cookies/response.py index 10f2f48a..cb1bef42 100644 --- a/sanic/cookies/response.py +++ b/sanic/cookies/response.py @@ -70,7 +70,8 @@ class CookieJar(dict): deprecation( "Setting cookie values using the dict pattern has been " "deprecated. You should instead use the cookies.add_cookie " - "method. To learn more, please see: ___.", + "method. To learn more, please see: " + "https://sanic.dev/en/guide/release-notes/v23.3.html#response-cookies", # noqa 0, ) if key not in self: @@ -82,7 +83,8 @@ class CookieJar(dict): deprecation( "Deleting cookie values using the dict pattern has been " "deprecated. You should instead use the cookies.delete_cookie " - "method. To learn more, please see: ___.", + "method. To learn more, please see: " + "https://sanic.dev/en/guide/release-notes/v23.3.html#response-cookies", # noqa 0, ) if key in self: @@ -96,7 +98,8 @@ class CookieJar(dict): deprecation( "Accessing cookies from the CookieJar by dict key is deprecated. " "You should instead use the cookies.get_cookie method. " - "To learn more, please see: ___.", + "To learn more, please see: " + "https://sanic.dev/en/guide/release-notes/v23.3.html#response-cookies", # noqa 0, ) return super().__getitem__(key) @@ -104,7 +107,8 @@ class CookieJar(dict): def __iter__(self): # no cov deprecation( "Iterating over the CookieJar has been deprecated and will be " - "removed in v24.3. To learn more, please see: ___.", + "removed in v24.3. To learn more, please see: " + "https://sanic.dev/en/guide/release-notes/v23.3.html#response-cookies", # noqa 24.3, ) return super().__iter__() @@ -112,7 +116,8 @@ class CookieJar(dict): def keys(self): # no cov deprecation( "Accessing CookieJar.keys() has been deprecated and will be " - "removed in v24.3. To learn more, please see: ___.", + "removed in v24.3. To learn more, please see: " + "https://sanic.dev/en/guide/release-notes/v23.3.html#response-cookies", # noqa 24.3, ) return super().keys() @@ -120,7 +125,8 @@ class CookieJar(dict): def values(self): # no cov deprecation( "Accessing CookieJar.values() has been deprecated and will be " - "removed in v24.3. To learn more, please see: ___.", + "removed in v24.3. To learn more, please see: " + "https://sanic.dev/en/guide/release-notes/v23.3.html#response-cookies", # noqa 24.3, ) return super().values() @@ -128,7 +134,8 @@ class CookieJar(dict): def items(self): # no cov deprecation( "Accessing CookieJar.items() has been deprecated and will be " - "removed in v24.3. To learn more, please see: ___.", + "removed in v24.3. To learn more, please see: " + "https://sanic.dev/en/guide/release-notes/v23.3.html#response-cookies", # noqa 24.3, ) return super().items() @@ -137,7 +144,8 @@ class CookieJar(dict): deprecation( "Accessing cookies from the CookieJar using get is deprecated " "and will be removed in v24.3. You should instead use the " - "cookies.get_cookie method. To learn more, please see: ___.", + "cookies.get_cookie method. To learn more, please see: " + "https://sanic.dev/en/guide/release-notes/v23.3.html#response-cookies", # noqa 24.3, ) return super().get(*args, **kwargs) @@ -145,7 +153,8 @@ class CookieJar(dict): def pop(self, key, *args, **kwargs): # no cov deprecation( "Using CookieJar.pop() has been deprecated and will be " - "removed in v24.3. To learn more, please see: ___.", + "removed in v24.3. To learn more, please see: " + "https://sanic.dev/en/guide/release-notes/v23.3.html#response-cookies", # noqa 24.3, ) self.delete(key)