Commit graph

61 commits

Author SHA1 Message Date
pgjones
0ec7f713d6 Split the App and Blueprint into Sansio and IO parts
This follows a similar structure in Werkzeug and allows for async
based IO projects, specifically Quart, to base themselves on
Flask.

Note that the globals, and signals are specific to Flask and hence
specific to Flask's IO. This means they cannot be moved to the sansio
part of the codebase.
2023-08-19 18:35:14 +01:00
pgjones
a64588f87a Move file to sansio
This is preperation for refactoring the files so that there are sansio
and flask specific versions. This structure follows the Werkzeug
structure/pattern.
2023-08-19 18:35:00 +01:00
David Lord
44ffe6c6d6
add __future__ annotations 2023-04-20 09:24:44 -07:00
Evgeny Mozhaev
b8b410014d
require a non-empty name for blueprints 2023-03-11 08:26:36 -08:00
David Lord
fc03d0dfab
setup method on registered blueprint is error 2023-02-23 09:29:36 -08:00
David Lord
6650764e97
remove previously deprecated code 2023-02-23 08:35:16 -08:00
David Lord
a18ae3d752
Merge branch '2.2.x' 2023-02-10 15:06:38 -08:00
David Lord
ab93222bd6
point to app-scoped blueprint methods 2023-02-10 10:38:44 -08:00
pgjones
cabda59353 Ensure that blueprint subdomains suffix-chain
This ensures that a child's subdomain prefixs any parent subdomain
such that the full domain is child.parent.domain.tld and onwards with
further nesting. This makes the most sense to users and mimics how
url_prefixes work (although subdomains suffix).
2023-01-04 18:06:04 +00:00
Josh Michael Karamuth
d7b6c1f670 Fix subdomain inheritance for nested blueprints.
Fixes #4834
2023-01-04 16:19:52 +00:00
Maxim G. Ivanov
09112cfc47
template_folder type allows pathlib 2022-12-24 11:17:52 -07:00
David Lord
d178653b5f
update requirements 2022-11-25 07:39:54 -08:00
David Lord
714ccefeca
show deprecation warning on json_encoder/decoder access 2022-08-03 09:22:03 -07:00
David Lord
69f9845ef2
add json provider interface 2022-07-13 07:42:52 -07:00
Phil Jones
9b44bf2818
Improve decorator typing (#4676)
* Add a missing setupmethod decorator

* Improve the decorator typing

This will allow type checkers to understand that the decorators return
the same function signature as passed as an argument. This follows the
guidelines from
https://mypy.readthedocs.io/en/stable/generics.html#declaring-decorators.

I've chosen to keep a TypeVar per module and usage as I think
encouraged by PEP 695, which I hope is accepted as the syntax is much
nicer.
2022-07-06 14:05:20 -07:00
David Lord
96c97dec09
deprecate before_first_request 2022-06-06 10:04:05 -07:00
David Lord
7a2d5fb6df
Merge branch '2.1.x' 2022-06-06 09:30:30 -07:00
David Lord
3351a8677e
add errorhandler type check tests 2022-06-05 15:44:28 -07:00
David Lord
81be290ec8
view function is actually type checked 2022-06-05 15:43:53 -07:00
David Lord
9e2e1de2fc
Merge branch '2.1.x' 2022-06-01 11:27:08 -07:00
David Lord
61f62e6005
access flask types through namespace alias 2022-05-23 13:21:22 -07:00
David Lord
a406c297aa
apply setupmethod consistently 2022-05-23 09:09:12 -07:00
Chris Hallacy
eb36135cfe
always warn on blueprint setupmethod after registration 2022-05-23 09:09:12 -07:00
Stanislav Bushuev
a74e266474
skip coverage for TYPE_CHECKING 2022-05-03 12:11:55 -06:00
David Lord
8886328822
relax errorhandler function arg type 2022-03-15 08:32:15 -07:00
David Lord
48f2afbf90
same blueprint cannot be registered with same name 2021-11-12 09:52:16 -08:00
Yourun-Proger
9a2adfba4d
static_folder can be a pathlib.Path 2021-08-05 18:16:20 -07:00
pgjones
a44c722860 Fix registering a blueprint twice with differing names
Previously the blueprint recorded aspects (before request, after
request etc) would only be added to the app if it was the first
registration of the blueprint instance. However only the record-once
aspects (app-before requests, app-after request) should be added once
on registration of the instance, whereas everything else should be
added on every unique name registration. This ensures that these
trigger under the new name as well as the old.
2021-06-14 17:18:47 +00:00
Pascal Corpet
6a4e7e948d improve typing for app.errorhandler decorator 2021-06-01 19:25:27 +01:00
Marat Sharafutdinov
a960236117 Fix type annotation for before_request and before_app_request decorators 2021-05-25 18:29:52 +00:00
pgjones
3257b7574e Fix blueprint renaming
This ensures that if a blueprint is renamed at the time of
registration that name is used when constructing endpoints, as
expected.
2021-05-21 15:04:30 +01:00
pgjones
714b0a467a Fix blueprint self registration
By raising a ValueError if attempted. I don't see a use case that
makes this worth supporting.
2021-05-21 15:04:30 +01:00
David Lord
9409be6e34 warn when registering same blueprint with same name 2021-05-21 15:04:30 +01:00
David Lord
63b306743f changelog for blueprint registered name 2021-05-21 15:04:30 +01:00
pgjones
c2920e2bd9 Bugfix allow blueprints to be registered with a different name
This allows the same blueprint to be registered multiple times at the
same level, but with differing url_prefixes and names.
2021-05-21 15:04:18 +01:00
pgjones
141fde1d8e Bugfix blueprint naming
Following discussions for Flask we've decided to name blueprints based
on how they are registered. This allows for two different blueprints
to have the same self-name as long as they are registered in different
nested positions. This helps users choose better blueprint names.
2021-05-21 15:04:18 +01:00
pgjones
99afbb277d Fix blueprint nested url_prefix
This ensures that the url_prefix is correctly applied, no matter if
set during the registration override or when constructing the
blueprint.
2021-05-21 15:04:18 +01:00
Alex Hedges
10a36cb60e Improve decorator factory type signatures
These changes are required to preserve the type signatures of the
created decorators.
2021-05-21 08:09:05 +00:00
Alex Hedges
bf982718cf Make add_url_rule() signature consistent
This caused a mypy error when I was making another typing improvement,
so I am fixing it before committing my other changes.
2021-05-21 08:09:05 +00:00
pgjones
6fbdeb80c7 Fix nested blueprint url_prefix
This fixes the case where the blueprint is registered with a
url_prefix but any child blueprints have no prefixes.
2021-05-17 15:47:25 +01:00
Grey Li
e93704fbfd
fix url_prefix argument when nesting blueprints 2021-05-13 15:02:13 -07:00
David Lord
7c5261407d
blueprint name may not contain a dot 2021-05-13 14:31:50 -07:00
pgjones
7f87f3dd93
Simplify the async handling code
Firstly `run_sync` was a misleading name as it didn't run anything,
instead I think `async_to_sync` is much clearer as it converts a
coroutine function to a function. (Name stolen from asgiref).

Secondly trying to run the ensure_sync during registration made the
code more complex and brittle, e.g. the _flask_async_wrapper
usage. This was done to pay any setup costs during registration rather
than runtime, however this only saved a iscoroutne check. It allows
the weirdness of the Blueprint and Scaffold ensure_sync methods to be
removed.

Switching to runtime ensure_sync usage provides a method for
extensions to also support async, as now documented.
2021-05-03 06:15:39 -07:00
pgjones
77237093da Add initial type hints
This should make it easier for users to correctly use Flask. The hints
are from Quart.
2021-04-26 17:29:53 +01:00
pgjones
f92e820b4b
Nested blueprints
This allows blueprints to be nested within blueprints via a new
Blueprint.register_blueprint method. This should provide a use case
that has been desired for the past ~10 years.

This works by setting the endpoint name to be the blueprint names,
from parent to child delimeted by "." and then iterating over the
blueprint names in reverse order in the app (from most specific to
most general). This means that the expectation of nesting a blueprint
within a nested blueprint is met.
2021-04-14 09:25:42 -07:00
David Lord
dc3e9c0cc3
update async docs 2021-04-06 15:33:06 -07:00
pgjones
00f5a3e55c
Alter ensure_sync implementation to support extensions
This allows extensions to override the Flask.ensure_sync method and
have the change apply to blueprints as well. Without this change it is
possible for differing blueprints to have differing ensure_sync
approaches depending on the extension used - which would likely result
in event-loop blocking issues.

This also allows blueprints to have a custom ensure_sync, although
this is a by product rather than an expected use case.
2021-04-06 15:33:06 -07:00
David Lord
3dfc12e8d8
only extend on first registration 2021-03-10 10:51:06 -08:00
David Lord
7029674775
rewrite Scaffold docs 2021-03-10 10:38:16 -08:00
pgjones
fd62210f58
Utilise defaultdicts
This code originates from the Python 2.4 supporting version of Flask,
with defaultdicts being added in 2.5. Using defaultdict makes the
intentional usage clearer, and slightly simplifies the code.
2021-03-08 09:58:12 -08:00