📜 Changelog¶
Version 23.6.0 🔶¶
Features¶
#2670 Increase
KEEP_ALIVE_TIMEOUT
default to 120 seconds#2716 Adding allow route overwrite option in blueprint
#2724 and #2792 Add a new exception signal for ALL exceptions raised anywhere in application
#2727 Add name prefixing to BP groups
#2754 Update request type on middleware types
#2770 Better exception message on startup time application induced import error
#2776 Set multiprocessing start method early
#2785 Add custom typing to config and ctx objects
#2790 Add
request.client_ip
Bugfixes¶
#2728 Fix traversals for intended results
#2729 Handle case when headers argument of ResponseStream constructor is None
#2737 Fix type annotation for
JSONREsponse
default content type#2740 Use Sanic’s serializer for JSON responses in the Inspector
#2760 Support for
Request.get_current
in ASGI mode#2773 Alow Blueprint routes to explicitly define error_format
#2774 Resolve headers on different renderers
#2782 Resolve pypy compatibility issues
Deprecations and Removals¶
#2777 Remove Python 3.7 support
Developer infrastructure¶
Improved Documentation¶
#2741 Better documentation examples about running Sanic From that list, the items to highlight in the release notes:
Version 23.3.0¶
Features¶
#2545 Standardize init of exceptions for more consistent control of HTTP responses using exceptions
#2606 Decode headers as UTF-8 also in ASGI
#2646 Separate ASGI request and lifespan callables
#2659 Use
FALLBACK_ERROR_FORMAT
for handlers that returnempty()
#2662 Add basic file browser (HTML page) and auto-index serving
#2667 Nicer traceback formatting (HTML page)
#2668 Smarter error page rendering format selection; more reliant upon header and “common sense” defaults
#2680 Check the status of socket before shutting down with
SHUT_RDWR
#2687 Refresh
Request.accept
functionality to be more performant and spec-compliant#2696 Add header accessors as properties
Example-Field: Foo, Bar Example-Field: Baz
request.headers.example_field == "Foo, Bar,Baz"
#2700 Simpler CLI targets
$ sanic path.to.module:app # global app instance $ sanic path.to.module:create_app # factory pattern $ sanic ./path/to/directory/ # simple serve
#2701 API to define a number of workers in managed processes
#2704 Add convenience for dynamic changes to routing
#2706 Add convenience methods for cookie creation and deletion
response = text("...") response.add_cookie("test", "It worked!", domain=".yummy-yummy-cookie.com")
#2707 Simplified
parse_content_header
escaping to be RFC-compliant and remove outdated FF hack#2710 Stricter charset handling and escaping of request URLs
#2711 Consume body on
DELETE
by default#2719 Allow
password
to be passed to TLS context#2720 Skip middleware on
RequestCancelled
#2721 Change access logging format to
%s
#2722 Add
CertLoader
as application option for directly controllingSSLContext
objects#2725 Worker sync state tolerance on race condition
Bugfixes¶
Deprecations and Removals¶
#2666 Remove deprecated
__blueprintname__
property
Improved Documentation¶
#2712 Improved example using
'https'
to create the redirect
Version 22.12.0 🔷¶
Current version
Features¶
#2569 Add
JSONResponse
class with some convenient methods when updating a response object#2598 Change
uvloop
requirement to>=0.15.0
#2609 Add compatibility with
websockets
v11.0#2610 Kill server early on worker error
Raise deadlock timeout to 30s
#2617 Scale number of running server workers
#2621 #2634 Send
SIGKILL
on subsequentctrl+c
to force worker exit#2622 Add API to restart all workers from the multiplexer
#2624 Default to
spawn
for all subprocesses unless specifically set:from sanic import Sanic Sanic.start_method = "fork"
#2625 Filename normalisation of form-data/multipart file uploads
#2626 Move to HTTP Inspector:
Remote access to inspect running Sanic instances
TLS support for encrypted calls to Inspector
Authentication to Inspector with API key
Ability to extend Inspector with custom commands
#2632 Control order of restart operations
#2633 Move reload interval to class variable
#2636 Add
priority
toregister_middleware
method#2639 Add
unquote
toadd_route
method#2640 ASGI websockets to receive
text
orbytes
Bugfixes¶
Deprecations and Removals¶
#2608 #2630 Signal conditions and triggers saved on
signal.extra
#2626 Move to HTTP Inspector
🚨 BREAKING CHANGE: Moves the Inspector to a Sanic app from a simple TCP socket with a custom protocol
DEPRECATE: The
--inspect*
commands have been deprecated in favor ofinspect ...
commands
#2628 Replace deprecated
distutils.strtobool
Developer infrastructure¶
#2612 Add CI testing for Python 3.11
Version 22.9.1¶
Features¶
#2585 Improved error message when no applications have been registered
Bugfixes¶
Deprecations and Removals¶
Developer infrastructure¶
#2588 Markdown templates on issue forms
Improved Documentation¶
Version 22.9.0¶
Features¶
#2445 Add custom loads function
#2490 Make
WebsocketImplProtocol
async iterable#2499 Sanic Server WorkerManager refactor
#2506 Use
pathlib
for path resolution (for static file serving)#2508 Use
path.parts
instead ofmatch
(for static file serving)#2513 Better request cancel handling
#2516 Add request properties for HTTP method info:
request.is_safe
request.is_idempotent
request.is_cacheable
See MDN docs for more information about when these apply
#2522 Always show server location in ASGI
#2526 Cache control support for static files for returning 304 when appropriate
#2533 Refactor
_static_request_handler
#2540 Add signals before and after handler execution
http.handler.before
http.handler.after
#2542 Add [redacted] to CLI :)
#2546 Add deprecation warning filter
#2550 Middleware priority and performance enhancements
Bugfixes¶
Deprecations and Removals¶
Developer infrastructure¶
Improved Documentation¶
Version 22.6.2¶
Bugfixes¶
#2522 Always show server location in ASGI
Version 22.6.1¶
Bugfixes¶
#2477 Sanic static directory fails when folder name ends with “..”
Version 22.6.0¶
Features¶
#2378 Introduce HTTP/3 and autogeneration of TLS certificates in
DEBUG
mode👶 EARLY RELEASE FEATURE: Serving Sanic over HTTP/3 is an early release feature. It does not yet fully cover the HTTP/3 spec, but instead aims for feature parity with Sanic’s existing HTTP/1.1 server. Websockets, WebTransport, push responses are examples of some features not yet implemented.
📦 EXTRA REQUIREMENT: Not all HTTP clients are capable of interfacing with HTTP/3 servers. You may need to install a HTTP/3 capable client.
📦 EXTRA REQUIREMENT: In order to use TLS autogeneration, you must install either mkcert or trustme.
#2416 Add message to
task.cancel
#2420 Add exception aliases for more consistent naming with standard HTTP response types (
BadRequest
,MethodNotAllowed
,RangeNotSatisfiable
)#2432 Expose ASGI
scope
as a property on theRequest
object#2438 Easier access to websocket class for annotation:
from sanic import Websocket
#2439 New API for reading form values with options:
Request.get_form
#2445 Add custom
loads
function#2447, #2486 Improved API to support setting cache control headers
#2453 Move verbosity filtering to logger
#2475 Expose getter for current request using
Request.get_current()
Bugfixes¶
Deprecations and Removals¶
#2487 v22.6 deprecations and changes
Optional application registry
Execution of custom handlers after some part of response was sent
Configuring fallback handlers on the
ErrorHandler
Custom
LOGO
settingsanic.response.stream
AsyncioServer.init
Developer infrastructure¶
Improved Documentation¶
Version 22.3.0¶
Features¶
#2347 API for multi-application server
🚨 BREAKING CHANGE: The old
sanic.worker.GunicornWorker
has been removed. To run Sanic withgunicorn
, you should use it thruuvicorn
as described in their docs.🧁 SIDE EFFECT: Named background tasks are now supported, even in Python 3.7
#2357 Parse
Authorization
header asRequest.credentials
#2361 Add config option to skip
Touchup
step in application startup#2372 Updates to CLI help messaging
#2382 Downgrade warnings to backwater debug messages
#2396 Allow for
multidict
v0.6#2401 Upgrade CLI catching for alternative application run types
#2402 Conditionally inject CLI arguments into factory
#2413 Add new start and stop event listeners to reloader process
#2414 Remove loop as required listener arg
#2415 Better exception for bad URL parsing
sanic-routing#47 Add a new extention parameter type:
<file:ext>
,<file:ext=jpg>
,<file:ext=jpg|png|gif|svg>
,<file=int:ext>
,<file=int:ext=jpg|png|gif|svg>
,<file=float:ext=tar.gz>
👶 BETA FEATURE: This feature will not work with
path
type matching, and is being released as a beta feature only.
sanic-routing#57 Change
register_pattern
to accept astr
orPattern
sanic-routing#58 Default matching on non-empty strings only, and new
strorempty
pattern type🚨 BREAKING CHANGE: Previously a route with a dynamic string parameter (
/<foo>
or/<foo:str>
) 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:/<foo:strorempty>
.
Bugfixes¶
#2373 Remove
error_logger
on websockets#2381 Fix newly assigned
None
in task registrysanic-routing#52 Add type casting to regex route matching
sanic-routing#60 Add requirements check on regex routes (this resolves, for example, multiple static directories with differing
host
values)
Deprecations and Removals¶
#2362 22.3 Deprecations and changes
debug=True
and--debug
do NOT automatically runauto_reload
Default error render is with plain text (browsers still get HTML by default because
auto
looks at headers)config
is required forErrorHandler.finalize
ErrorHandler.lookup
requires two positional argsUnused websocket protocol args removed
#2344 Deprecate loading of lowercase environment variables
Developer infrastructure¶
#2363 Revert code coverage back to Codecov
#2405 Upgrade tests for
sanic-routing
changessanic-testing#35 Allow for httpx v0.22
Improved Documentation¶
Miscellaneous¶
Version 21.12.1 🔷¶
Current LTS version
Version 21.12.0 🔹¶
Features¶
#2260 Allow early Blueprint registrations to still apply later added objects
#2262 Noisy exceptions - force logging of all exceptions
#2264 Optional
uvloop
by configuration#2270 Vhost support using multiple TLS certificates
#2277 Change signal routing for increased consistency
BREAKING CHANGE: If you were manually routing signals there is a breaking change. The signal router’s
get
is no longer 100% determinative. There is now an additional step to loop thru the returned signals for proper matching on the requirements. If signals are being dispatched usingapp.dispatch
orbp.dispatch
, there is no change.
#2290 Add contextual exceptions
#2291 Increase join concat performance
#2295, #2316, #2331 Restructure of CLI and application state with new displays and more command parity with
app.run
#2302 Add route context at definition time
#2304 Named tasks and new API for managing background tasks
#2307 On app auto-reload, provide insight of changed files
#2308 Auto extend application with Sanic Extensions if it is installed, and provide first class support for accessing the extensions
#2309 Builtin signals changed to
Enum
#2313 Support additional config implementation use case
#2321 Refactor environment variable hydration logic
#2327 Prevent sending multiple or mixed responses on a single request
#2330 Custom type casting on environment variables
#2332 Make all deprecation notices consistent
#2335 Allow underscore to start instance names
Bugfixes¶
Deprecations and Removals¶
#2306 Removal of deprecated items
Sanic
andBlueprint
may no longer have arbitrary properties attached to themSanic
andBlueprint
forced to have compliant namesalphanumeric +
_
+-
must start with letter or
_
load_env
keyword argument ofSanic
sanic.exceptions.abort
sanic.views.CompositionView
sanic.response.StreamingHTTPResponse
NOTE: the
stream()
response method (where you pass a callable streaming function) has been deprecated and will be removed in v22.6. You should upgrade all streaming responses to the new style: https://sanicframework.org/en/guide/advanced/streaming.html#response-streaming
#2320 Remove app instance from Config for error handler setting
Developer infrastructure¶
Improved Documentation¶
Miscellaneous¶
Version 21.9.3¶
Rerelease of v21.9.2 with some cleanup
Version 21.9.2¶
Version 21.9.1¶
#2259 Allow non-conforming ErrorHandlers
Version 21.9.0¶
Features¶
#2160 Add new 17 signals into server and request lifecycles
#2162 Smarter
auto
fallback formatting upon exception#2184 Introduce implementation for copying a Blueprint
#2200 Accept header parsing
#2207 Log remote address if available
#2209 Add convenience methods to BP groups
#2216 Add default messages to SanicExceptions
#2225 Type annotation convenience for annotated handlers with path parameters
#2236 Allow Falsey (but not-None) responses from route handlers
#2238 Add
exception
decorator to Blueprint Groups#2244 Explicit static directive for serving file or dir (ex:
static(..., resource_type="file")
)#2245 Close HTTP loop when connection task cancelled
Bugfixes¶
#2188 Fix the handling of the end of a chunked request
#2195 Resolve unexpected error handling on static requests
#2208 Make blueprint-based exceptions attach and trigger in a more intuitive manner
#2211 Fixed for handling exceptions of asgi app call
#2213 Fix bug where ws exceptions not being logged
#2231 Cleaner closing of tasks by using
abort()
in strategic places to avoid dangling sockets#2247 Fix logging of auto-reload status in debug mode
#2246 Account for BP with exception handler but no routes
Developer infrastructure¶
Miscellaneous¶
#2173 Remove Duplicated Dependencies and PEP 517 Support
Note
CHANGELOG files are maintained in ./docs/sanic/releases
. To view the full CHANGELOG, please visit https://sanic.readthedocs.io/en/stable/sanic/changelog.html.
Version 21.6.1¶
Bugfixes
Version 21.6.0¶
Features
#2094 Add
response.eof()
method for closing a stream in a handler#2097 Allow case-insensitive HTTP Upgrade header
#2104 Explicit usage of CIMultiDict getters
#2109 Consistent use of error loggers
#2114 New
client_ip
access of connection info instance#2119 Alternatate classes on instantiation for
Config
andSanic.ctx
#2133 Implement new version of AST router
Proper differentiation between
alpha
andstring
param typesAdds a
slug
param type, example:<foo:slug>
Deprecates
<foo:string>
in favor of<foo:str>
Deprecates
<foo:number>
in favor of<foo:float>
Adds a
route.uri
accessor#2136 CLI improvements with new optional params
#2137 Add
version_prefix
to URL builders#2140 Event autoregistration with
EVENT_AUTOREGISTER
#2146, #2147 Require stricter names on
Sanic()
andBlueprint()
#2150 Infinitely reusable and nestable
Blueprint
andBlueprintGroup
#2154 Upgrade
websockets
dependency to min version#2155 Allow for maximum header sizes to be increased:
REQUEST_MAX_HEADER_SIZE
#2157 Allow app factory pattern in CLI
#2165 Change HTTP methods to enums
#2167 Allow auto-reloading on additional directories
#2168 Add simple HTTP server to CLI
#2170 Additional methods for attaching
HTTPMethodView
Bugfixes
#2091 Fix
UserWarning
in ASGI mode for missing__slots__
#2099 Fix static request handler logging exception on 404
#2110 Fix request.args.pop removes parameters inconsistently
#2107 Fix type hinting for load_env
#2127 Make sure ASGI ws subprotocols is a list
#2128 Fix issue where Blueprint exception handlers do not consistently route to proper handler
Deprecations and Removals
Developer infrastructure
#2149 Remove Travis CI in favor of GitHub Actions
Improved Documentation
Version 21.3.2¶
Bugfixes
Version 21.3.1¶
Bugfixes
#2076 Static files inside subfolders are not accessible (404)
Version 21.3.0¶
Features
#1876 Unified streaming server
#2005 New
Request.id
property#2008 Allow Pathlib Path objects to be passed to
app.static()
helper#2032 Add raw header info to request object
#2043 Add
__str__
and__repr__
to Sanic and Blueprint#2047 Enable versioning and strict slash on BlueprintGroup
#2053 Make
get_app
name argument optional#2055 JSON encoder change via app
#2063 App and connection level context objects
Bugfixes
Resolve #1420
url_for
wherestrict_slashes
are on for a path ending in/
Resolve #1525 Routing is incorrect with some special characters
Resolve #1653 ASGI headers in body
Resolve #1722 Using curl in chunk mode
Resolve #1730 Extra content in ASGI streaming response
Resolve #1749 Restore broken middleware edge cases
Resolve #1790 Protocol errors did not support async error handlers #1790
Resolve #1824 Timeout on specific methods
Resolve #1875 Response timeout error from all routes after returning several timeouts from a specific route
Resolve #1988 Handling of safe methods with body
#2001 Raise ValueError when cookie max-age is not an integer
Deprecations and Removals
Developer infrastructure
Improved Documentation
Miscellaneous
Request.route
propertyBetter websocket subprotocols support
Resolve bug with middleware in Blueprint Group when passed callable
Moves common logic between Blueprint and Sanic into mixins
- Route naming changed to be more consistent
request endpoint is the route name
route names are fully namespaced
- Some new convenience decorators:
@app.main_process_start
@app.main_process_stop
@app.before_server_start
@app.after_server_start
@app.before_server_stop
@app.after_server_stop
@app.on_request
@app.on_response
Fixes
Allow
header that did not includeHEAD
Using “name” keyword in
url_for
for a “static” route where name does not existCannot have multiple
app.static()
without using the named paramUsing “filename” keyword in
url_for
on a file route
unquote
in route def (not automatic)
routes_all
is tuplesHandler arguments are kwarg only
request.match_info
is now a cached (and not computed) propertyUnknown static file mimetype is sent as
application/octet-stream
_host
keyword inurl_for
Add charset default to
utf-8
for text and js content types if not specifiedVersion for a route can be str, float, or int
Route has ctx property
App has
routes_static
,routes_dynamic
,routes_regex
#2044 Code cleanup and refactoring
#2072 Remove
BaseSanic
metaclass#2074 Performance adjustments in
handle_request_
Version 20.12.3¶
Bugfixes
#2021 Remove prefix from websocket handler name
Version 20.12.2¶
Dependencies
Version 19.12.5¶
Dependencies
Version 20.12.0¶
Features
#1993 Add disable app registry
#1945 Static route more verbose if file not found
#1954 Fix static routes registration on a blueprint
#1961 Add Python 3.9 support
#1962 Sanic CLI upgrade
#1967 Update aiofile version requirements
#1969 Update multidict version requirements
#1970 Add py.typed file
#1972 Speed optimization in request handler
#1979 Add app registry and Sanic class level app retrieval
Bugfixes
#1965 Fix Chunked Transport-Encoding in ASGI streaming response
Deprecations and Removals
#1981 Cleanup and remove deprecated code
Developer infrastructure
Improved Documentation
Version 20.9.1¶
Bugfixes
Version 19.12.3¶
Bugfixes
#1959 Removes duplicate headers in ASGI streaming body
Version 20.9.0¶
Features
#1887 Pass subprotocols in websockets (both sanic server and ASGI)
#1894 Automatically set
test_mode
flag on app instance#1903 Add new unified method for updating app values
#1906, #1909 Adds WEBSOCKET_PING_TIMEOUT and WEBSOCKET_PING_INTERVAL configuration values
#1935 httpx version dependency updated, it is slated for removal as a dependency in v20.12
#1937 Added auto, text, and json fallback error handlers (in v21.3, the default will change form html to auto)
Bugfixes
#1897 Resolves exception from unread bytes in stream
Deprecations and Removals
#1903 config.from_envar, config.from_pyfile, and config.from_object are deprecated and set to be removed in v21.3
Developer infrastructure
Improved Documentation
#1922 Add explicit ASGI compliance to the README
Version 20.6.3¶
Bugfixes
#1884 Revert change to multiprocessing mode
Version 20.6.2¶
Features
#1641 Socket binding implemented properly for IPv6 and UNIX sockets
Version 20.6.1¶
Features
Bugfixes
#1776 Bug fix for host parameter issue with lists
#1842 Fix static _handler pickling error
#1827 Fix reloader on OSX py38 and Windows
#1848 Reverse named_response_middlware execution order, to match normal response middleware execution order
#1853 Fix pickle error when attempting to pickle an application which contains websocket routes
Deprecations and Removals
#1739 Deprecate body_bytes to merge into body
Developer infrastructure
Improved Documentation
Version 20.6.0¶
Released, but unintentionally omitting PR #1880, so was replaced by 20.6.1
Version 20.3.0¶
Features
#1762 Add
srv.start_serving()
andsrv.serve_forever()
toAsyncioServer
#1767 Make Sanic usable on
hypercorn -k trio myweb.app
#1768 No tracebacks on normal errors and prettier error pages
#1769 Code cleanup in file responses
#1798 Allow multiple workers on MacOS with Python 3.8
#1820 Do not set content-type and content-length headers in exceptions
Bugfixes
Deprecations and Removals
#1800 Begin deprecation in way of first-class streaming, removal of
body_init
,body_push
, andbody_finish
#1801 Complete deprecation from #1666 of dictionary context on
request
objects.#1807 Remove server config args that can be read directly from app
#1818 Complete deprecation of
app.remove_route
andrequest.raw_args
Dependencies
Developer infrastructure
#1833 Resolve broken documentation builds
Improved Documentation
#1755 Usage of
response.empty()
#1778 Update README
#1783 Fix typo
#1784 Corrected changelog for docs move of MD to RST (#1691)
#1803 Update config docs to match DEFAULT_CONFIG
#1814 Update getting_started.rst
#1821 Update to deployment
#1822 Update docs with changes done in 20.3
#1834 Order of listeners
Version 19.12.0¶
Bugfixes
Fix blueprint middleware application
Currently, any blueprint middleware registered, irrespective of which blueprint was used to do so, was being applied to all of the routes created by the
@app
and@blueprint
alike.As part of this change, the blueprint based middleware application is enforced based on where they are registered.
If you register a middleware via
@blueprint.middleware
then it will apply only to the routes defined by the blueprint.If you register a middleware via
@blueprint_group.middleware
then it will apply to all blueprint based routes that are part of the group.If you define a middleware via
@app.middleware
then it will be applied on all available routes (#37)
Fix url_for behavior with missing SERVER_NAME
If the SERVER_NAME was missing in the app.config entity, the url_for on the request and app were failing due to an AttributeError. This fix makes the availability of SERVER_NAME on our app.config an optional behavior. (#1707)
Improved Documentation
Move docs from MD to RST
Moved all docs from markdown to restructured text like the rest of the docs to unify the scheme and make it easier in the future to update documentation. (#1691)
Fix documentation for get and getlist of the request.args
Add additional example for showing the usage of getlist and fix the documentation string for request.args behavior (#1704)
Version 19.6.3¶
Features
Enable Towncrier Support
As part of this feature, towncrier is being introduced as a mechanism to partially automate the process of generating and managing change logs as part of each of pull requests. (#1631)
Improved Documentation
Documentation infrastructure changes
Enable having a single common CHANGELOG file for both GitHub page and documentation
Fix Sphinix deprecation warnings
Fix documentation warnings due to invalid rst indentation
Enable common contribution guidelines file across GitHub and documentation via CONTRIBUTING.rst (#1631)
Version 19.6.2¶
Features
#1562 Remove
aiohttp
dependency and create newSanicTestClient
based upon requests-async#1475 Added ASGI support (Beta)
#1436 Add Configure support from object string
Bugfixes
Deprecations and Removals
Warning
Sanic will not support Python 3.5 from version 19.6 and forward. However, version 18.12LTS will have its support period extended thru December 2020, and therefore passing Python’s official support version 3.5, which is set to expire in September 2020.
Version 19.3¶
Features
#1497 Add support for zero-length and RFC 5987 encoded filename for multipart/form-data requests.
#1484 The type of
expires
attribute ofsanic.cookies.Cookie
is now enforced to be of typedatetime
.#1482 Add support for the
stream
parameter ofsanic.Sanic.add_route()
available tosanic.Blueprint.add_route()
.#1481 Accept negative values for route parameters with type
int
ornumber
.#1476 Deprecated the use of
sanic.request.Request.raw_args
- it has a fundamental flaw in which is drops repeated query string parameters. Addedsanic.request.Request.query_args
as a replacement for the original use-case.#1472 Remove an unwanted
None
check in Request classrepr
implementation. This changes the defaultrepr
of a Request from<Request>
to<Request: None />
#1470 Added 2 new parameters to
sanic.app.Sanic.create_server
:
return_asyncio_server
- whether to return an asyncio.Server.
asyncio_server_kwargs
- kwargs to pass toloop.create_server
for the event loop that sanic is using.This is a breaking change.
#1499 Added a set of test cases that test and benchmark route resolution.
#1457 The type of the
"max-age"
value in asanic.cookies.Cookie
is now enforced to be an integer. Non-integer values are replaced with0
.#1445 Added the
endpoint
attribute to an incomingrequest
, containing the name of the handler function.#1423 Improved request streaming.
request.stream
is now a bounded-size buffer instead of an unbounded queue. Callers must now callawait request.stream.read()
instead ofawait request.stream.get()
to read each portion of the body.This is a breaking change.
Bugfixes
#1502 Sanic was prefetching
time.time()
and updating it once per second to avoid excessivetime.time()
calls. The implementation was observed to cause memory leaks in some cases. The benefit of the prefetch appeared to negligible, so this has been removed. Fixes #1500#1501 Fix a bug in the auto-reloader when the process was launched as a module i.e.
python -m init0.mod1
where the sanic server is started ininit0/mod1.py
withdebug
enabled and imports another module ininit0
.#1376 Allow sanic test client to bind to a random port by specifying
port=None
when constructing aSanicTestClient
#1399 Added the ability to specify middleware on a blueprint group, so that all routes produced from the blueprints in the group have the middleware applied.
#1442 Allow the the use the
SANIC_ACCESS_LOG
environment variable to enable/disable the access log when not explicitly passed toapp.run()
. This allows the access log to be disabled for example when running via gunicorn.
Developer infrastructure
Improved Documentation
#1516 Fix typo at the exception documentation
#1510 fix typo in Asyncio example
#1486 Documentation typo
#1477 Fix grammar in README.md
#1489 Added “databases” to the extensions list
#1483 Add sanic-zipkin to extensions list
#1487 Removed link to deleted repo, Sanic-OAuth, from the extensions list
#1460 18.12 changelog
#1449 Add example of amending request object
#1446 Update README
#1444 Update README
#1443 Update README, including new logo
#1440 fix minor type and pip install instruction mismatch
#1424 Documentation Enhancements
Note: 19.3.0 was skipped for packagement purposes and not released on PyPI
Version 18.12¶
Changes:
Improved codebase test coverage from 81% to 91%.
Added stream_large_files and host examples in static_file document
Added methods to append and finish body content on Request (#1379)
Integrated with .appveyor.yml for windows ci support
Added documentation for AF_INET6 and AF_UNIX socket usage
Adopt black/isort for codestyle
Cancel task when connection_lost
Simplify request ip and port retrieval logic
Handle config error in load config file.
Integrate with codecov for CI
Add missed documentation for config section.
Deprecate Handler.log
Pinned httptools requirement to version 0.0.10+
Fixes:
Fix
remove_entity_headers
helper function (#1415)Fix TypeError when use Blueprint.group() to group blueprint with default url_prefix, Use os.path.normpath to avoid invalid url_prefix like api//v1 f8a6af1 Rename the
http
module tohelpers
to prevent conflicts with the built-in Python http library (fixes #1323)Fix unittests on windows
Fix Namespacing of sanic logger
Fix missing quotes in decorator example
Fix redirect with quoted param
Fix doc for latest blueprint code
Fix build of latex documentation relating to markdown lists
Fix loop exception handling in app.py
Fix content length mismatch in windows and other platform
Fix Range header handling for static files (#1402)
Fix the logger and make it work (#1397)
Fix type pikcle->pickle in multiprocessing test
Fix pickling blueprints Change the string passed in the “name” section of the namedtuples in Blueprint to match the name of the Blueprint module attribute name. This allows blueprints to be pickled and unpickled, without errors, which is a requirement of running Sanic in multiprocessing mode in Windows. Added a test for pickling and unpickling blueprints Added a test for pickling and unpickling sanic itself Added a test for enabling multiprocessing on an app with a blueprint (only useful to catch this bug if the tests are run on Windows).
Fix document for logging
Version 0.8¶
0.8.3
Changes:
Ownership changed to org ‘sanic-org’
0.8.0
Changes:
Add Server-Sent Events extension (Innokenty Lebedev)
Graceful handling of request_handler_task cancellation (Ashley Sommer)
Sanitize URL before redirection (aveao)
Add url_bytes to request (johndoe46)
py37 support for travisci (yunstanford)
Auto reloader support for OSX (garyo)
Add UUID route support (Volodymyr Maksymiv)
Add pausable response streams (Ashley Sommer)
Add weakref to request slots (vopankov)
remove ubuntu 12.04 from test fixture due to deprecation (yunstanford)
Allow streaming handlers in add_route (kinware)
use travis_retry for tox (Raphael Deem)
update aiohttp version for test client (yunstanford)
add redirect import for clarity (yingshaoxo)
Update HTTP Entity headers (Arnulfo Solís)
Add register_listener method (Stephan Fitzpatrick)
Remove uvloop/ujson dependencies for Windows (abuckenheimer)
Content-length header on 204/304 responses (Arnulfo Solís)
Extend WebSocketProtocol arguments and add docs (Bob Olde Hampsink, yunstanford)
Update development status from pre-alpha to beta (Maksim Anisenkov)
KeepAlive Timeout log level changed to debug (Arnulfo Solís)
Pin pytest to 3.3.2 because of pytest-dev/pytest#3170 (Maksim Aniskenov)
Install Python 3.5 and 3.6 on docker container for tests (Shahin Azad)
Add support for blueprint groups and nesting (Elias Tarhini)
Remove uvloop for windows setup (Aleksandr Kurlov)
Auto Reload (Yaser Amari)
Documentation updates/fixups (multiple contributors)
Fixes:
Fix: auto_reload in Linux (Ashley Sommer)
Fix: broken tests for aiohttp >= 3.3.0 (Ashley Sommer)
Fix: disable auto_reload by default on windows (abuckenheimer)
Fix (1143): Turn off access log with gunicorn (hqy)
Fix (1268): Support status code for file response (Cosmo Borsky)
Fix (1266): Add content_type flag to Sanic.static (Cosmo Borsky)
Fix: subprotocols parameter missing from add_websocket_route (ciscorn)
Fix (1242): Responses for CI header (yunstanford)
Fix (1237): add version constraint for websockets (yunstanford)
Fix (1231): memory leak - always release resource (Phillip Xu)
Fix (1221): make request truthy if transport exists (Raphael Deem)
Fix failing tests for aiohttp>=3.1.0 (Ashley Sommer)
Fix try_everything examples (PyManiacGR, kot83)
Fix (1158): default to auto_reload in debug mode (Raphael Deem)
Fix (1136): ErrorHandler.response handler call too restrictive (Julien Castiaux)
Fix: raw requires bytes-like object (cloudship)
Fix (1120): passing a list in to a route decorator’s host arg (Timothy Ebiuwhe)
Fix: Bug in multipart/form-data parser (DirkGuijt)
Fix: Exception for missing parameter when value is null (NyanKiyoshi)
Fix: Parameter check (Howie Hu)
Fix (1089): Routing issue with named parameters and different methods (yunstanford)
Fix (1085): Signal handling in multi-worker mode (yunstanford)
Fix: single quote in readme.rst (Cosven)
Fix: method typos (Dmitry Dygalo)
Fix: log_response correct output for ip and port (Wibowo Arindrarto)
Fix (1042): Exception Handling (Raphael Deem)
Fix: Chinese URIs (Howie Hu)
Fix (1079): timeout bug when self.transport is None (Raphael Deem)
Fix (1074): fix strict_slashes when route has slash (Raphael Deem)
Fix (1050): add samesite cookie to cookie keys (Raphael Deem)
Fix (1065): allow add_task after server starts (Raphael Deem)
Fix (1061): double quotes in unauthorized exception (Raphael Deem)
Fix (1062): inject the app in add_task method (Raphael Deem)
Fix: update environment.yml for readthedocs (Eli Uriegas)
Fix: Cancel request task when response timeout is triggered (Jeong YunWon)
Fix (1052): Method not allowed response for RFC7231 compliance (Raphael Deem)
Fix: IPv6 Address and Socket Data Format (Dan Palmer)
Note: Changelog was unmaintained between 0.1 and 0.7
Version 0.1¶
0.1.7
Reversed static url and directory arguments to meet spec
0.1.6
Static files
Lazy Cookie Loading
0.1.5
Cookies
Blueprint listeners and ordering
Faster Router
Fix: Incomplete file reads on medium+ sized post requests
Breaking: after_start and before_stop now pass sanic as their first argument
0.1.4
Multiprocessing
0.1.3
Blueprint support
Faster Response processing
0.1.1 - 0.1.2
Struggling to update pypi via CI
0.1.0
Released to public