## Version 22.3.0 ### Features - [#2347](https://github.com/sanic-org/sanic/pull/2347) API for multi-application server - 🚨 *BREAKING CHANGE*: The old `sanic.worker.GunicornWorker` has been **removed**. To run Sanic with `gunicorn`, you should use it thru `uvicorn` [as described in their docs](https://www.uvicorn.org/#running-with-gunicorn). - 🧁 *SIDE EFFECT*: Named background tasks are now supported, even in Python 3.7 - [#2357](https://github.com/sanic-org/sanic/pull/2357) Parse `Authorization` header as `Request.credentials` - [#2361](https://github.com/sanic-org/sanic/pull/2361) Add config option to skip `Touchup` step in application startup - [#2372](https://github.com/sanic-org/sanic/pull/2372) Updates to CLI help messaging - [#2382](https://github.com/sanic-org/sanic/pull/2382) Downgrade warnings to backwater debug messages - [#2396](https://github.com/sanic-org/sanic/pull/2396) Allow for `multidict` v0.6 - [#2401](https://github.com/sanic-org/sanic/pull/2401) Upgrade CLI catching for alternative application run types - [#2402](https://github.com/sanic-org/sanic/pull/2402) Conditionally inject CLI arguments into factory - [#2413](https://github.com/sanic-org/sanic/pull/2413) Add new start and stop event listeners to reloader process - [#2414](https://github.com/sanic-org/sanic/pull/2414) Remove loop as required listener arg - [#2415](https://github.com/sanic-org/sanic/pull/2415) Better exception for bad URL parsing - [sanic-routing#47](https://github.com/sanic-org/sanic-routing/pull/47) Add a new extention parameter type: ``, ``, ``, ``, ``, `` - 👶 *BETA FEATURE*: This feature will not work with `path` type matching, and is being released as a beta feature only. - [sanic-routing#57](https://github.com/sanic-org/sanic-routing/pull/57) Change `register_pattern` to accept a `str` or `Pattern` - [sanic-routing#58](https://github.com/sanic-org/sanic-routing/pull/58) Default matching on non-empty strings only, and new `strorempty` pattern type - 🚨 *BREAKING CHANGE*: Previously a route with a dynamic string parameter (`/` or `/`) would match on any string, including empty strings. It will now **only** match a non-empty string. To retain the old behavior, you should use the new parameter type: `/`. ### Bugfixes - [#2373](https://github.com/sanic-org/sanic/pull/2373) Remove `error_logger` on websockets - [#2381](https://github.com/sanic-org/sanic/pull/2381) Fix newly assigned `None` in task registry - [sanic-routing#52](https://github.com/sanic-org/sanic-routing/pull/52) Add type casting to regex route matching - [sanic-routing#60](https://github.com/sanic-org/sanic-routing/pull/60) Add requirements check on regex routes (this resolves, for example, multiple static directories with differing `host` values) ### Deprecations and Removals - [#2362](https://github.com/sanic-org/sanic/pull/2362) 22.3 Deprecations and changes 1. `debug=True` and `--debug` do _NOT_ automatically run `auto_reload` 2. Default error render is with plain text (browsers still get HTML by default because `auto` looks at headers) 3. `config` is required for `ErrorHandler.finalize` 4. `ErrorHandler.lookup` requires two positional args 5. Unused websocket protocol args removed - [#2344](https://github.com/sanic-org/sanic/pull/2344) Deprecate loading of lowercase environment variables ### Developer infrastructure - [#2363](https://github.com/sanic-org/sanic/pull/2363) Revert code coverage back to Codecov - [#2405](https://github.com/sanic-org/sanic/pull/2405) Upgrade tests for `sanic-routing` changes - [sanic-testing#35](https://github.com/sanic-org/sanic-testing/pull/35) Allow for httpx v0.22 ### Improved Documentation - [#2350](https://github.com/sanic-org/sanic/pull/2350) Fix link in README for ASGI - [#2398](https://github.com/sanic-org/sanic/pull/2398) Document middleware on_request and on_response - [#2409](https://github.com/sanic-org/sanic/pull/2409) Add missing documentation for `Request.respond` ### Miscellaneous - [#2376](https://github.com/sanic-org/sanic/pull/2376) Fix typing for `ListenerMixin.listener` - [#2383](https://github.com/sanic-org/sanic/pull/2383) Clear deprecation warning in `asyncio.wait` - [#2387](https://github.com/sanic-org/sanic/pull/2387) Cleanup `__slots__` implementations - [#2390](https://github.com/sanic-org/sanic/pull/2390) Clear deprecation warning in `asyncio.get_event_loop`