Compare commits

...

4566 commits
0.8.1 ... main

Author SHA1 Message Date
David Lord
36e4a824f3
Any for CertParamType type 2026-05-31 07:42:46 -07:00
David Lord
954f5684e4
update dev dependencies 2026-05-18 16:35:44 -07:00
David Lord
9fcd34c9f3
Merge branch 'stable' 2026-05-13 07:37:53 -07:00
David Lord
1d49747264
update flask-mongoengine link 2026-05-13 07:37:21 -07:00
David Lord
7374c85dde
remove leftover setuptools 2026-05-02 05:59:12 -07:00
David Lord
dcbede0cb0
autoescape selection uses case-insensitive comparison (#6013) 2026-05-01 20:58:56 -07:00
David Lord
9368fb3f3c
case-insensitive comparison 2026-05-01 20:56:39 -07:00
David Lord
06ea505ce2
separate copy per call 2026-05-01 20:31:50 -07:00
David Lord
2ac89889f4
Merge branch 'stable' 2026-04-08 21:04:03 -07:00
David Lord
689362089e
fix typo 2026-04-08 21:01:29 -07:00
David Lord
258d68b6ff
Merge branch 'stable' 2026-04-05 12:32:14 -07:00
David Lord
a31e6b7346
remove werkzeug host tests 2026-04-05 12:31:01 -07:00
David Lord
e4e4bf6543
Merge branch 'stable' 2026-04-05 11:24:48 -07:00
David Lord
b21425d6df
reduce venv size 2026-04-05 11:13:13 -07:00
David Lord
83dbcb222a
update dev dependencies 2026-04-03 15:59:16 -07:00
David Lord
7ef2946fb5
remove unicode host test (#5962) 2026-03-24 06:55:57 -07:00
David Lord
91c6b3fecf
remove unicode host test 2026-03-24 06:51:39 -07:00
David Lord
4cae5d8e41
Merge branch 'stable' 2026-03-08 16:21:50 -07:00
David Lord
a197702e2c
update dev dependencies 2026-03-08 16:20:07 -07:00
David Lord
4774385abd
add zizmor to scan workflows (#5945) 2026-03-08 16:15:00 -07:00
David Lord
560c119e3d
add zizmor to scan workflows 2026-03-08 16:05:00 -07:00
David Lord
3a9d54f3da
Merge branch 'stable' 2026-03-04 07:36:21 -08:00
David Lord
a29f88ce6f
document that headers must be set before streaming 2026-03-04 07:36:09 -08:00
David Lord
c34d6e81fd
all teardown callbacks are called despite errors (#5928) 2026-02-19 20:00:34 -08:00
David Lord
fbb6f0bc4c
all teardown callbacks are called despite errors 2026-02-19 19:41:50 -08:00
David Lord
7b0088693e
fix typing 2026-02-19 08:42:33 -08:00
David Lord
a411a2434b
add back opening session on context push 2026-02-19 08:35:48 -08:00
David Lord
daca74d93a
Merge branch 'stable' 2026-02-18 21:56:24 -08:00
David Lord
f00ad424ee
release version 3.1.3 (#5924) 2026-02-18 21:01:53 -08:00
David Lord
22d924701a
release version 3.1.3 2026-02-18 19:41:55 -08:00
David Lord
089cb86dd2
Merge commit from fork
request context tracks session access
2026-02-18 19:35:58 -08:00
David Lord
c17f379390
request context tracks session access 2026-02-18 19:02:54 -08:00
David Lord
27be933840
start version 3.1.3 2026-02-18 14:52:52 -08:00
David Lord
d98eb69a35
revert cli test change 2026-02-12 13:11:01 -08:00
David Lord
12e95c93b4
fix provide_automatic_options override (#5917) 2026-02-12 13:07:50 -08:00
David Lord
e82db2ca3a
fix provide_automatic_options override 2026-02-12 13:03:03 -08:00
David Lord
d3b78fd18a
Merge remote-tracking branch 'origin/stable' 2026-02-06 13:22:54 -08:00
David Lord
663198d7b4
update dev dependencies 2026-02-03 10:22:19 -08:00
David Lord
976459f7cb
fix editable werkzeug 2026-02-03 10:20:49 -08:00
David Lord
5e621a2801
update domain matching tests for Werkzeug 3.2 2026-02-03 10:19:45 -08:00
David Lord
4e652d3f68
Abort if the instance folder cannot be created (#5903) 2026-01-28 07:43:00 -08:00
Markus Heidelberg
3d03098a97 Abort if the instance folder cannot be created
According to the comment, the instance folder should exist in any case.
But a PermissionError was ignored silently.

Since Python 3.9 is the minimum required version, it is safe to use
"exist_ok" added in Python 3.2 and avoid exception handling.
2026-01-27 09:18:37 +01:00
David Lord
798e006f43
Merge branch 'stable' 2026-01-25 10:38:42 -08:00
David Lord
407eb76b27
document using gevent for async (#5900) 2026-01-25 10:35:12 -08:00
David Lord
ac5664d228
document using gevent for async 2026-01-25 10:33:13 -08:00
David Lord
23df07d799
Merge branch 'stable' 2026-01-24 19:55:36 -08:00
David Lord
4b8bde97d4
deprecate should_ignore_error (#5899) 2026-01-24 19:53:11 -08:00
David Lord
0292047b22
remove unused ruff check rule 2026-01-24 19:52:11 -08:00
David Lord
c77a520343
deprecate should_ignore_error 2026-01-24 19:50:30 -08:00
David Lord
9b74a90dd3
fix codespell findings 2026-01-24 19:11:02 -08:00
David Lord
5880befcd2
Merge branch 'stable' 2026-01-24 19:05:26 -08:00
David Lord
4f79d5b59a
Increase required flit_core version to 3.11 (#5865) 2026-01-24 19:04:07 -08:00
Markus Heidelberg
fe3b215d3a
Increase required flit_core version to 3.11
Needed since Flask 3.1.1 after having set the "license" keyword to an
SPDX license expression. Avoids this possible build error:

  flit_core.config.ConfigError: license field should be <class 'dict'>, not <class 'str'>

Fixes: 0109e496f ("use uv").
2026-01-24 19:02:37 -08:00
David Lord
5559ef42b5
pre-commit: Add codespell (#5844) 2026-01-24 19:00:23 -08:00
David Lord
3709c4a9a8
update ruff hook and noqa
co-authored-by: Christian Clauss <cclauss@me.com>
2026-01-24 18:58:45 -08:00
Christian Clauss
709f83f6a3
pre-commit: Add codespell 2026-01-24 18:53:30 -08:00
ADITYA SAH
30da640ffe
clarify 415 vs 400 errors for request.json (#5827) 2026-01-24 18:46:56 -08:00
David Lord
25642fd1fd
fix annotation for select_jinja_autoescape (#5808) 2026-01-24 18:25:31 -08:00
David Lord
809d5a8869
redirect defaults to 303 (#5898) 2026-01-24 17:18:35 -08:00
David Lord
eca5fd1dfd
redirect defaults to 303 2026-01-24 17:16:38 -08:00
David Lord
eb58d862cc
Merge branch 'stable' 2026-01-24 17:15:54 -08:00
David Lord
64dd0809c2
update dev dependencies 2026-01-24 17:14:20 -08:00
David Lord
97bddc1f61
update dev dependencies 2026-01-05 08:50:52 -08:00
David Lord
ad68a12645
drop experimental 3.13t test env 2025-11-28 11:05:52 -08:00
David Lord
2579ce9f18
Merge branch 'stable' 2025-11-17 10:05:51 -08:00
David Lord
607d1948b8
split free threading envs 2025-11-17 10:05:39 -08:00
David Lord
218880c7fd
Merge branch 'stable' 2025-11-17 10:03:42 -08:00
David Lord
917000097f
test py3.14 2025-11-17 10:02:53 -08:00
David Lord
96a01e420b
Merge branch 'stable' 2025-11-17 09:45:56 -08:00
David Lord
da6d075dfd
update dev dependencies 2025-11-17 09:43:40 -08:00
David Lord
70d04b5a26
pass context through dispatch methods (#5818) 2025-11-17 08:49:53 -08:00
Hynek Schlawack
88a65bb374
Docs typo/markup fixes (#5829) 2025-10-14 13:26:26 -07:00
David Lord
6a64969009
pass context through dispatch methods 2025-09-19 17:33:30 -07:00
David Lord
adf363679d
merge app and request context (#5812) 2025-09-19 16:45:27 -07:00
David Lord
c2705ffd9c
merge app and request context 2025-09-19 16:43:53 -07:00
subhajitsaha01
dbd4c28825 Changed the static annotated type of select_jinja_autoescape method in src/flask/sansio/app.py 2025-09-06 22:01:22 +05:30
David Lord
330123258e
Merge branch 'stable' 2025-08-19 14:09:56 -07:00
David Lord
85793d6c22
release version 3.1.2 (#5800) 2025-08-19 14:03:43 -07:00
David Lord
2c1b30d050
release version 3.1.2 2025-08-19 13:57:47 -07:00
David Lord
1292419ddf
Update GitHub Actions workflow for artifact handling (#5795) 2025-08-19 13:56:49 -07:00
Grant Birkinbine
4dd52ca9c7
Update GitHub Actions workflow for artifact handling 2025-08-19 13:50:03 -07:00
David Lord
55c6255657
update dev dependencies 2025-08-19 13:41:24 -07:00
David Lord
ed1c9e953e
support call template_filter without parens (#5736) 2025-08-19 12:36:00 -07:00
David Lord
edebd37044
rewrite docs, clean up typing for template decorators 2025-08-19 12:33:21 -07:00
kadai0308
daf1510a4b
use template_filter without parens 2025-08-19 12:33:21 -07:00
David Lord
d8259eb119
use Jinja name consistently 2025-08-19 10:43:16 -07:00
David Lord
38b4c1e19b
refactor stream_with_context for async views (#5799) 2025-08-19 08:23:51 -07:00
David Lord
9822a03515
refactor stream_with_context for async views 2025-08-19 08:18:55 -07:00
David Lord
49b7e7bc8f
security docs for TRUSTED_HOSTS (#5798) 2025-08-18 11:44:57 -07:00
David Lord
b228ca3d87
security docs for TRUSTED_HOSTS 2025-08-18 11:42:48 -07:00
David Lord
ff64079a51
update flask-talisman link 2025-08-18 10:51:12 -07:00
David Lord
1dfd7cd555
use IO[bytes] instead of BinaryIO for wider compatibility (#5777) 2025-08-18 10:26:12 -07:00
Tero Vuotila
d44f1c6523
relax type hint for bytes io 2025-08-18 10:22:59 -07:00
David Lord
c56c5ec7c4
Docs: Fix escaping in HTML escaping example (#5742) 2025-08-18 10:20:06 -07:00
Badhreesh
0f83958247
demonstrate escaping with query string
slash in value would be interpreted as a path separator in the URL
2025-08-18 10:19:18 -07:00
David Lord
7fea7cf156
Update macOS UI reference to “System Settings” (#5723) 2025-08-18 10:08:07 -07:00
David Lord
24824ff666
push preserved contexts in correct order (#5797) 2025-08-18 09:56:39 -07:00
David Lord
53b8f08218
push preserved contexts in correct order 2025-08-18 09:45:56 -07:00
David Lord
5addaf833b
start version 3.1.2 2025-08-18 09:42:21 -07:00
David Lord
85c5d93cbd
Merge branch 'stable' 2025-06-12 13:48:07 -07:00
David Lord
85cc710464
svg logo 2025-06-12 13:46:49 -07:00
David Lord
284273e3c5
Merge branch 'stable' 2025-06-10 13:18:26 -07:00
David Lord
f17d986948
cleanup svg 2025-06-10 13:18:15 -07:00
David Lord
d6009c0aeb
Merge branch 'stable' 2025-06-09 21:20:46 -07:00
David Lord
2b42a803a2
cleanup svg 2025-06-09 21:20:36 -07:00
David Lord
211cce038a
Merge branch 'stable' 2025-06-09 14:33:44 -07:00
David Lord
a7b67c99f9
svg logo (#5757) 2025-06-09 14:33:26 -07:00
David Lord
a758915893
svg logo 2025-06-09 14:31:31 -07:00
David Lord
e974128863
Merge branch 'stable' 2025-06-08 09:54:32 -07:00
David Lord
f04c5e6964
update dev dependencies 2025-06-08 09:52:11 -07:00
David Lord
c07b201ce3
Merge pull request #5754
remove slsa provenance
2025-06-08 09:47:45 -07:00
David Lord
adeea00707
remove slsa provenance
PyPI trusted publishing has its own attestation support now.
2025-06-08 09:43:05 -07:00
abhiram kamini
7bf3be8dfa
Update server.rst
made changes to rename system preferences to system settings according to new mac os name change
2025-06-04 17:24:45 -07:00
David Lord
a42c4d54a3
Fix global CONTRIBUTING link (#5737) 2025-05-20 12:30:04 -04:00
AJ Jordan
184ec3c545
Fix global CONTRIBUTING link 2025-05-20 12:26:17 -04:00
David Lord
a5f9742398
drop end of life python versions (#5731) 2025-05-13 08:35:41 -07:00
David Lord
52df9eed45
drop end of life python versions 2025-05-13 08:31:54 -07:00
David Lord
e7e5380776
Merge branch 'stable' 2025-05-13 08:10:30 -07:00
David Lord
bbaf13333f
fix syntax 2025-05-13 08:09:39 -07:00
David Lord
57e7286948
release version 3.1.1 (#5730) 2025-05-13 08:01:42 -07:00
David Lord
7fff56f517
release version 3.1.1 2025-05-13 07:51:12 -07:00
David Lord
73d6504063
Merge commit from fork
Sessions: fix signing key selection when key rotation is enabled
2025-05-13 07:46:54 -07:00
David Lord
cbb6c36692
update docs about fallback order 2025-05-12 18:30:27 -07:00
James Addison
fb54159861
secret key rotation: fix key list ordering
The `itsdangerous` serializer interface[1] expects keys to be
provided with the oldest key at index zero and the active signing key
at the end of the list.

We document[2] that `SECRET_KEY_FALLBACKS` should be configured with
the most recent first (at index zero), so to achieve the expected
behaviour, those should be inserted in reverse-order at the head of
the list.

[1] - https://itsdangerous.palletsprojects.com/en/stable/serializer/#itsdangerous.serializer.Serializer

[2] - https://flask.palletsprojects.com/en/stable/config/#SECRET_KEY_FALLBACKS
2025-05-12 18:30:27 -07:00
David Lord
bc143499cf
Merge branch 'stable' 2025-05-11 18:08:43 -07:00
David Lord
941efd4a36
use uv (#5727) 2025-05-11 18:04:35 -07:00
David Lord
0109e496f6
use uv 2025-05-11 17:58:53 -07:00
David Lord
11c45eeba3
update dev dependencies 2025-05-11 05:58:48 -07:00
David Lord
b78b5a210b
Merge branch 'stable' 2025-03-30 13:17:17 -07:00
David Lord
e785166507
Async Iterable Response (#5659) 2025-03-30 13:15:54 -07:00
CoolCat467
410e5ab7ed
Accept AsyncIterable for responses 2025-03-30 13:14:25 -07:00
David Lord
bfffe87d4c
add ghsa links 2025-03-29 15:57:16 -07:00
David Lord
73ce26c3e8
remove tests about deprecated pkgutil.get_loader (#5702) 2025-03-29 15:45:11 -07:00
David Lord
41ec5760a2
remove tests about deprecated pkgutil.get_loader 2025-03-29 15:42:58 -07:00
David Lord
2732c4db66
add endpoint name in favicon example (#5701) 2025-03-29 15:32:28 -07:00
David Lord
c94d2a77db
add endpoint name in favicon example 2025-03-29 15:30:56 -07:00
David Lord
315ebc1176
better type checking during deprecation (#5700) 2025-03-29 15:28:27 -07:00
David Lord
7d5d187458
better type checking during deprecation 2025-03-29 15:23:34 -07:00
David Lord
c7c8dc38ea
Remove HTTP Public Key Pinning from docs (#5695) 2025-03-29 15:17:48 -07:00
black
2ae36c8dd5
Remove HTTP Public Key Pinning from docs
The header is considered obsolete and no longer supported by any major
browser. MDN link is dead.
2025-03-29 15:16:24 -07:00
David Lord
5ea0ab8ea2
Handle help arg by itself the same as no args (#5674) 2025-03-29 15:15:04 -07:00
George Waters
da60039486
Handle help arg by itself the same as no args
When the 'flask' command is used with only the '--help' parameter, this
change will make sure to try and load the app before the help callback
is run. This was previously only being done when the 'flask' command was
used by itself. This meant when passing in '--help', any custom commands
were not getting shown in the help message. With this change, custom
commands will be included in the help message when running 'flask' on
the command line by itself or with the '--help' parameter.
2025-03-29 15:13:23 -07:00
David Lord
08c480b3b3
Update app factory docs (#5671) 2025-03-29 15:10:55 -07:00
kotvkvante
f51a23839a fix bash cli syntax error and app name 2025-03-29 15:09:26 -07:00
David Lord
04b070fa26
Fix typo in the docs (#5650) 2025-03-29 14:49:06 -07:00
zhuangzhuang
75a8327cfd
Update mongoengine.rst 2025-03-29 14:47:41 -07:00
David Lord
165af0a090
update dev dependencies 2025-03-29 14:44:59 -07:00
David Lord
235c52fa10
fix rtd build 2025-03-29 14:37:13 -07:00
David Lord
f61172b8dd
Merge branch 'stable' 2025-01-05 09:10:00 -08:00
David Lord
959052fb8d
use global contributing guide
Remove the per-project files so we don't have to
keep them in sync. GitHub's UI links to everything
except the contributing guide, so add a section
about that to the readme.

(cherry picked from commit 60a11a730e)
2025-01-05 09:09:33 -08:00
David Lord
5b525e9797
markdown formatting
(cherry picked from commit 6b361ce06b)
2025-01-05 09:09:32 -08:00
David Lord
60a11a730e
use global contributing guide
Remove the per-project files so we don't have to
keep them in sync. GitHub's UI links to everything
except the contributing guide, so add a section
about that to the readme.
2025-01-05 09:02:41 -08:00
David Lord
6b361ce06b
markdown formatting 2025-01-05 09:01:49 -08:00
David Lord
6b054f8f38
Merge branch 'stable' 2024-11-23 17:54:29 -08:00
David Lord
f2674c5bb4
fix type hint for cli_runner.invoke (#5647) 2024-11-23 17:52:56 -08:00
kurtatter
54c3f87af9
fix type hint for cli_runner.invoke 2024-11-23 17:50:40 -08:00
David Lord
ea08f155d8
update __version__ deprecation (#5649) 2024-11-23 16:06:37 -08:00
David Lord
b394a994e6
update __version__ deprecation 2024-11-23 16:03:47 -08:00
David Lord
dcbe86bd15
start version 3.1.1 2024-11-23 16:01:16 -08:00
David Lord
d5b7a05ab2
remove previously deprecated code (#5648) 2024-11-23 15:59:30 -08:00
David Lord
d22bfcd4cf
remove previously deprecated code 2024-11-23 15:41:36 -08:00
David Lord
4fec712f32
start version 3.2.0 2024-11-23 15:33:38 -08:00
David Lord
18ffe1eaf6
add gettext config for docs 2024-11-20 19:37:06 -08:00
David Lord
bc098406af
release version 3.1.0 (#5640) 2024-11-13 10:27:38 -08:00
David Lord
ab81496641
release version 3.1.0 2024-11-13 10:20:07 -08:00
David Lord
70602a196a
remove test pypi 2024-11-13 09:23:24 -08:00
David Lord
6748a09341
update dev dependencies 2024-11-13 08:48:10 -08:00
David Lord
22c48a738b
Merge remote-tracking branch 'origin/stable' 2024-11-13 08:43:48 -08:00
David Lord
2eab96a32a
use generic bases for session (#5638) 2024-11-13 08:27:11 -08:00
David Lord
f49dbfd3e4
use generic bases for session 2024-11-13 08:22:57 -08:00
David Lord
7b21d43d4c
configure and check request.trusted_hosts (#5637) 2024-11-12 21:03:23 -08:00
David Lord
4f7156f2c3
configure and check trusted_hosts 2024-11-12 21:01:55 -08:00
David Lord
10bdf61a0f
setting SERVER_NAME does not restrict routing for both subdomain_matching and host_matching (#5634) 2024-11-12 10:13:39 -08:00
David Lord
4995a775df
fix subdomain_matching=False behavior 2024-11-12 08:58:08 -08:00
David Lord
07c7d5730a
update min blinker version (#5633) 2024-11-08 09:55:00 -08:00
David Lord
470e2b8d17
update min blinker version 2024-11-08 09:48:59 -08:00
David Lord
a20bcff8dc
enable secret key rotation (#5632) 2024-11-08 08:16:04 -08:00
David Lord
e13373f838
enable secret key rotation 2024-11-08 08:09:01 -08:00
David Lord
7522c4bcdb
update env file precedence (#5630) 2024-11-07 11:56:26 -08:00
David Lord
2c31603042
update env file precedence 2024-11-07 11:54:29 -08:00
David
6c44dd4bb8
update helpers.send_from_directory docstring (#5599)
Update helpers.send_from_directory docstring to match werkzeug.utils.send_from_directory docstring on the :param directory: line.
2024-11-06 09:47:57 -08:00
David Lord
98ae718976
fix mypy finding 2024-11-01 18:06:34 -07:00
David Lord
c62b03bcfd
fix example and tutorial compatibility and update metadata (#5627) 2024-11-01 18:06:11 -07:00
David Lord
a9b99b3489
update example project metadata 2024-11-01 18:00:39 -07:00
David Lord
8aa161a437
add sqlite datetime converter 2024-11-01 17:18:52 -07:00
David Lord
df201ed152
fix js example test 2024-11-01 16:44:17 -07:00
David Lord
ce08bc704e
add SESSION_COOKIE_PARTITIONED config (#5499) 2024-11-01 16:26:37 -07:00
David Lord
9efc1ebeeb
add SESSION_COOKIE_PARTITIONED config
co-authored-by: Jose Cespedes <josecespedes@ibm.com>
2024-11-01 16:24:15 -07:00
David Lord
6f2014d353
add config and docs for limits (#5626) 2024-11-01 13:21:35 -07:00
David Lord
c7a53888a1
add config and docs for limits 2024-11-01 13:17:53 -07:00
David Lord
62c56e08c4
update minimum dependencies (#5624) 2024-10-31 13:15:29 -07:00
David Lord
8f37c82f61
update min dependencies 2024-10-31 13:11:06 -07:00
David Lord
39e7208366
update dev dependencies 2024-10-31 13:08:52 -07:00
David Lord
227838c472
no need for separate requirements-skip folder anymore 2024-10-31 13:08:52 -07:00
David Lord
99ce7ed0e4
drop support for Python 3.8 (#5623) 2024-10-31 12:32:10 -07:00
David Lord
1d610e44b3
drop support for Python 3.8 2024-10-31 12:30:53 -07:00
David Lord
e8b91cd38a
fix pyright type errors (#5620) 2024-10-24 14:54:53 -07:00
bre-17387639
9e831e915f
fix pyright type errors 2024-10-24 14:46:34 -07:00
David Lord
5e8cb74018
update test workflow trigger 2024-10-24 13:29:34 -07:00
David Lord
2778b7c23f
Merge branch 'stable' 2024-10-24 13:28:57 -07:00
David Lord
96800fb673
update test workflow trigger 2024-10-24 13:28:46 -07:00
David Lord
8f2bc008ad
update dev dependencies 2024-10-24 13:27:52 -07:00
David Lord
9b5549313e
Merge branch '3.0.x' 2024-10-23 13:45:17 -07:00
David Lord
68150d4caf
Fix the issue link in the Flask 3.0.1 Changelog in the send_file argu… (#5618) 2024-10-22 14:16:56 -07:00
Catarina Bressan
74721b48f0 Fix the issue link in the Flask 3.0.1 Changelog in the send_file argument type entry 2024-10-22 17:32:02 -03:00
David Lord
d273f87a41
use python 3.9 to test dev versions (#5615) 2024-10-18 13:22:45 -07:00
David Lord
52ccd66735
use python 3.9 to test dev versions 2024-10-18 13:19:51 -07:00
David Lord
dffe303482
fix mypy findings 2024-10-18 13:04:35 -07:00
David Lord
52c060f718
Fix typo in the changelog (#5609) 2024-10-18 12:59:21 -07:00
David Lord
c5a5576522
update CHANGES.rst 2024-10-18 10:03:49 -07:00
David Lord
bca18041b0
Merge branch '3.0.x' 2024-10-18 10:03:09 -07:00
David Lord
b337d21058
update dev dependencies 2024-10-18 10:02:35 -07:00
Grey Li
e63ead4208 Fix typo in the changelog 2024-09-24 08:54:01 +08:00
David Lord
2fec0b206c
set up pre-commit lite workflow
Committed via https://github.com/asottile/all-repos
2024-09-01 09:04:14 -07:00
David Lord
111e5bd312
set up pre-commit lite workflow
Committed via https://github.com/asottile/all-repos
2024-09-01 08:48:02 -07:00
David Lord
db49548d71
set up pre-commit lite workflow
Committed via https://github.com/asottile/all-repos
2024-09-01 08:32:27 -07:00
David Lord
f93dd6e826
remove pre-commit.ci update 2024-08-23 18:05:21 -07:00
David Lord
7e53070307
Merge branch '3.0.x' 2024-08-23 17:20:31 -07:00
David Lord
c77b099cbb
remove min python for pip-compile 2024-08-23 17:18:38 -07:00
David Lord
eeb5f95a0f
Merge branch '3.0.x' 2024-08-23 16:41:53 -07:00
David Lord
40b78fa2ea
fix min python for pip-compile 2024-08-23 16:41:39 -07:00
David Lord
4e6384da32
Merge branch '3.0.x' 2024-08-23 16:34:57 -07:00
David Lord
2c5d652493
remove unused config 2024-08-23 16:33:59 -07:00
David Lord
176fdfa000
fix mypy findings 2024-08-23 16:33:52 -07:00
David Lord
2d31dce826
remove dependabot 2024-08-23 16:33:40 -07:00
David Lord
29a94bd102
update dev dependencies 2024-08-23 16:33:27 -07:00
David Lord
0f2ae2b933
add gha-update 2024-08-23 16:33:00 -07:00
David Lord
8a6cdf1e2a
[pre-commit.ci] pre-commit autoupdate (#5541) 2024-08-06 08:31:00 -07:00
pre-commit-ci[bot]
326ad3f43c
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.5.0 → v0.5.6](https://github.com/astral-sh/ruff-pre-commit/compare/v0.5.0...v0.5.6)
2024-08-05 23:09:19 +00:00
David Lord
a791997041
Bump the github-actions group with 3 updates (#5539) 2024-08-03 07:28:45 -07:00
dependabot[bot]
4fe0aebab7
Bump the github-actions group with 3 updates
Bumps the github-actions group with 3 updates: [actions/setup-python](https://github.com/actions/setup-python), [actions/upload-artifact](https://github.com/actions/upload-artifact) and [actions/download-artifact](https://github.com/actions/download-artifact).


Updates `actions/setup-python` from 5.1.0 to 5.1.1
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](82c7e631bb...39cd14951b)

Updates `actions/upload-artifact` from 4.3.3 to 4.3.4
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](65462800fd...0b2256b8c0)

Updates `actions/download-artifact` from 4.1.7 to 4.1.8
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](65a9edc588...fa0a91b85d)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-01 15:48:34 +00:00
David Lord
a8956feba1
Add encoding parameter to open resource (#5526) 2024-07-10 19:16:46 -07:00
David Lord
28d5a4d718
add encoding parameter to open_resource
co-authored-by: mark <lopkophacked@protonmail.com>
2024-07-10 19:14:06 -07:00
David Lord
5353f306fe
Update waitress.rst (#5522) 2024-07-10 18:08:49 -07:00
Amirreza A
321bd74b95
Update waitress.rst
fixed a small typo
2024-07-10 18:06:15 -07:00
David Lord
66af0e55ef
[pre-commit.ci] pre-commit autoupdate (#5517) 2024-07-02 04:17:59 -07:00
pre-commit-ci[bot]
3d357273b5
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.4.7 → v0.5.0](https://github.com/astral-sh/ruff-pre-commit/compare/v0.4.7...v0.5.0)
2024-07-02 00:15:33 +00:00
David Lord
926ab92118
Bump the python-requirements group in /requirements with 5 updates (#5514) 2024-07-01 16:14:08 -07:00
David Lord
088b58dbce
Bump the github-actions group with 2 updates (#5516) 2024-07-01 12:47:02 -07:00
dependabot[bot]
7621b3d96a
Bump the github-actions group with 2 updates
Bumps the github-actions group with 2 updates: [actions/checkout](https://github.com/actions/checkout) and [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish).


Updates `actions/checkout` from 4.1.6 to 4.1.7
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](a5ac7e51b4...692973e3d9)

Updates `pypa/gh-action-pypi-publish` from 1.8.14 to 1.9.0
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](81e9d935c8...ec4db0b4dd)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: pypa/gh-action-pypi-publish
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-01 15:56:20 +00:00
dependabot[bot]
e165f3aef4
Bump the python-requirements group in /requirements with 5 updates
Bumps the python-requirements group in /requirements with 5 updates:

| Package | From | To |
| --- | --- | --- |
| [cryptography](https://github.com/pyca/cryptography) | `42.0.7` | `42.0.8` |
| [mypy](https://github.com/python/mypy) | `1.10.0` | `1.10.1` |
| [pyright](https://github.com/RobertCraigie/pyright-python) | `1.1.365` | `1.1.369` |
| [pytest](https://github.com/pytest-dev/pytest) | `8.2.1` | `8.2.2` |
| [tox](https://github.com/tox-dev/tox) | `4.15.0` | `4.15.1` |


Updates `cryptography` from 42.0.7 to 42.0.8
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/42.0.7...42.0.8)

Updates `mypy` from 1.10.0 to 1.10.1
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python/mypy/compare/v1.10.0...v1.10.1)

Updates `pyright` from 1.1.365 to 1.1.369
- [Release notes](https://github.com/RobertCraigie/pyright-python/releases)
- [Commits](https://github.com/RobertCraigie/pyright-python/compare/v1.1.365...v1.1.369)

Updates `pytest` from 8.2.1 to 8.2.2
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.2.1...8.2.2)

Updates `tox` from 4.15.0 to 4.15.1
- [Release notes](https://github.com/tox-dev/tox/releases)
- [Changelog](https://github.com/tox-dev/tox/blob/main/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/tox/compare/4.15.0...4.15.1)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-requirements
- dependency-name: mypy
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-requirements
- dependency-name: pyright
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-requirements
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-requirements
- dependency-name: tox
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: python-requirements
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-01 15:28:16 +00:00
pgjones
d718ecf6d3 Provide a configuration option to control automatic option responses
By default Flask will provide responses to OPTIONS requests that are
automatically generated. These responses list the valid methods in the
response headers. Whilst this is useful, it can be frowned on by
auditors hence an ability to disable it wholesale is useful.
2024-06-07 19:04:18 +00:00
David Lord
0ce27278d2
[pre-commit.ci] pre-commit autoupdate (#5495) 2024-06-03 15:25:32 -07:00
pre-commit-ci[bot]
07c8f19bfd
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.4.3 → v0.4.7](https://github.com/astral-sh/ruff-pre-commit/compare/v0.4.3...v0.4.7)
2024-06-03 22:10:27 +00:00
David Lord
0d2100ed17
Bump actions/checkout from 4.1.4 to 4.1.6 in the github-actions group (#5493) 2024-06-01 09:01:46 -07:00
dependabot[bot]
e3535f9971
Bump actions/checkout from 4.1.4 to 4.1.6 in the github-actions group
Bumps the github-actions group with 1 update: [actions/checkout](https://github.com/actions/checkout).


Updates `actions/checkout` from 4.1.4 to 4.1.6
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](0ad4b8fada...a5ac7e51b4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-01 15:55:45 +00:00
David Lord
422e05e28d
Bump the python-requirements group in /requirements with 3 updates (#5492) 2024-06-01 08:16:45 -07:00
dependabot[bot]
f567ab9068
Bump the python-requirements group in /requirements with 3 updates
Bumps the python-requirements group in /requirements with 3 updates: [pyright](https://github.com/RobertCraigie/pyright-python), [pytest](https://github.com/pytest-dev/pytest) and [pre-commit](https://github.com/pre-commit/pre-commit).


Updates `pyright` from 1.1.361 to 1.1.365
- [Release notes](https://github.com/RobertCraigie/pyright-python/releases)
- [Commits](https://github.com/RobertCraigie/pyright-python/compare/v1.1.361...v1.1.365)

Updates `pytest` from 8.2.0 to 8.2.1
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.2.0...8.2.1)

Updates `pre-commit` from 3.7.0 to 3.7.1
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md)
- [Commits](https://github.com/pre-commit/pre-commit/compare/v3.7.0...v3.7.1)

---
updated-dependencies:
- dependency-name: pyright
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-requirements
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-requirements
- dependency-name: pre-commit
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: python-requirements
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-01 15:12:17 +00:00
David Lord
6d126e1013
Added python type annotation and return type. (#5485) 2024-05-25 11:32:15 -07:00
Heisenberg
c7da8c2aa3
Added python type annotation and return type. 2024-05-25 11:28:19 -07:00
David Lord
bb16048ad7
Edited variable names in quickstart guide (#5487) 2024-05-25 11:27:37 -07:00
Jake Tanis
767ad19b10
Edited variable names in the rendering templates section of the quickstart guide. 2024-05-25 11:25:24 -07:00
David Lord
a2f495b9ff
SESSION_COOKIE_DOMAIN caveat documentation (#5464) 2024-05-25 10:27:04 -07:00
Éloi Rivard
4a1766c252
document caveats on SESSION_COOKIE_DOMAIN
Changing this value might result in browsers with several competing session cookies. In
that situation there is no guarantee of which one will be sent first, and be used as the
session cookie.
2024-05-25 10:23:44 -07:00
David Lord
255c8d66af
Merge branch '3.0.x' 2024-05-11 08:40:26 -07:00
David Lord
bea5876e46
test with python 3.13 (#5481) 2024-05-11 08:39:30 -07:00
David Lord
9101439d7b
test with python 3.13 2024-05-11 08:37:47 -07:00
David Lord
67ed36910d
[pre-commit.ci] pre-commit autoupdate (#5477) 2024-05-06 15:28:44 -07:00
pre-commit-ci[bot]
4e894892bc
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.3.5 → v0.4.3](https://github.com/astral-sh/ruff-pre-commit/compare/v0.3.5...v0.4.3)
2024-05-06 22:05:35 +00:00
David Lord
d64ecfb244
Bump the python-requirements group across 1 directory with 6 updates (#5476) 2024-05-06 10:24:44 -07:00
David Lord
860a25c390
fix mypy finding 2024-05-06 10:23:10 -07:00
dependabot[bot]
273123f6b8
Bump the python-requirements group across 1 directory with 6 updates
Bumps the python-requirements group with 6 updates in the /requirements directory:

| Package | From | To |
| --- | --- | --- |
| [cryptography](https://github.com/pyca/cryptography) | `42.0.5` | `42.0.7` |
| [mypy](https://github.com/python/mypy) | `1.9.0` | `1.10.0` |
| [pallets-sphinx-themes](https://github.com/pallets/pallets-sphinx-themes) | `2.1.2` | `2.1.3` |
| [pyright](https://github.com/RobertCraigie/pyright-python) | `1.1.359` | `1.1.361` |
| [pytest](https://github.com/pytest-dev/pytest) | `8.1.1` | `8.2.0` |
| [tox](https://github.com/tox-dev/tox) | `4.14.2` | `4.15.0` |



Updates `cryptography` from 42.0.5 to 42.0.7
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/42.0.5...42.0.7)

Updates `mypy` from 1.9.0 to 1.10.0
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python/mypy/compare/1.9.0...v1.10.0)

Updates `pallets-sphinx-themes` from 2.1.2 to 2.1.3
- [Release notes](https://github.com/pallets/pallets-sphinx-themes/releases)
- [Changelog](https://github.com/pallets/pallets-sphinx-themes/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/pallets-sphinx-themes/compare/2.1.2...2.1.3)

Updates `pyright` from 1.1.359 to 1.1.361
- [Release notes](https://github.com/RobertCraigie/pyright-python/releases)
- [Commits](https://github.com/RobertCraigie/pyright-python/compare/v1.1.359...v1.1.361)

Updates `pytest` from 8.1.1 to 8.2.0
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.1.1...8.2.0)

Updates `tox` from 4.14.2 to 4.15.0
- [Release notes](https://github.com/tox-dev/tox/releases)
- [Changelog](https://github.com/tox-dev/tox/blob/main/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/tox/compare/4.14.2...4.15.0)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-requirements
- dependency-name: mypy
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: python-requirements
- dependency-name: pallets-sphinx-themes
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-requirements
- dependency-name: pyright
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-requirements
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: python-requirements
- dependency-name: tox
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: python-requirements
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-06 17:19:27 +00:00
David Lord
fc605b575b
Bump the github-actions group with 2 updates (#5473) 2024-05-06 10:17:48 -07:00
dependabot[bot]
a936b0c610
Bump the github-actions group with 2 updates
Bumps the github-actions group with 2 updates: [actions/checkout](https://github.com/actions/checkout) and [actions/download-artifact](https://github.com/actions/download-artifact).


Updates `actions/checkout` from 4.1.3 to 4.1.4
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](1d96c772d1...0ad4b8fada)

Updates `actions/download-artifact` from 4.1.6 to 4.1.7
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](9c19ed7fe5...65a9edc588)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-06 17:16:26 +00:00
David Lord
4f42c64203
Merge branch '3.0.x' 2024-05-06 10:13:35 -07:00
David Lord
eb1182a10e
fix mypy finding 2024-05-06 10:12:32 -07:00
David Lord
a363642a32
fix mypy finding with new werkzeug endpoint type 2024-05-06 10:09:58 -07:00
David Lord
57add386c9
examples/javascript: Update Documentation URL in pyproject.toml (#5475) 2024-05-02 05:10:51 -07:00
JamesMRamm
823e279e0d
Update pyproject.toml
Correction to Documentation URL
2024-05-02 17:57:34 +10:00
David Lord
11c15ddfeb
Bump the python-requirements group in /requirements with 3 updates (#5468) 2024-04-23 16:54:09 -07:00
dependabot[bot]
224c639bf9
Bump the python-requirements group in /requirements with 3 updates
Bumps the python-requirements group in /requirements with 3 updates: [pallets-sphinx-themes](https://github.com/pallets/pallets-sphinx-themes), [sphinx](https://github.com/sphinx-doc/sphinx) and [pyright](https://github.com/RobertCraigie/pyright-python).


Updates `pallets-sphinx-themes` from 2.1.1 to 2.1.2
- [Release notes](https://github.com/pallets/pallets-sphinx-themes/releases)
- [Changelog](https://github.com/pallets/pallets-sphinx-themes/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/pallets-sphinx-themes/compare/2.1.1...2.1.2)

Updates `sphinx` from 7.2.6 to 7.3.7
- [Release notes](https://github.com/sphinx-doc/sphinx/releases)
- [Changelog](https://github.com/sphinx-doc/sphinx/blob/master/CHANGES.rst)
- [Commits](https://github.com/sphinx-doc/sphinx/compare/v7.2.6...v7.3.7)

Updates `pyright` from 1.1.357 to 1.1.359
- [Release notes](https://github.com/RobertCraigie/pyright-python/releases)
- [Commits](https://github.com/RobertCraigie/pyright-python/compare/v1.1.357...v1.1.359)

---
updated-dependencies:
- dependency-name: pallets-sphinx-themes
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-requirements
- dependency-name: sphinx
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: python-requirements
- dependency-name: pyright
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-requirements
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-23 23:52:58 +00:00
David Lord
f48802acbb
Bump the github-actions group across 1 directory with 4 updates (#5470) 2024-04-23 16:52:13 -07:00
dependabot[bot]
b7278186c4
Bump the github-actions group across 1 directory with 4 updates
Bumps the github-actions group with 4 updates in the / directory: [actions/checkout](https://github.com/actions/checkout), [actions/upload-artifact](https://github.com/actions/upload-artifact), [slsa-framework/slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator) and [actions/download-artifact](https://github.com/actions/download-artifact).


Updates `actions/checkout` from 4.1.2 to 4.1.3
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](9bb56186c3...1d96c772d1)

Updates `actions/upload-artifact` from 3.1.3 to 4.3.3
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](a8a3f3ad30...65462800fd)

Updates `slsa-framework/slsa-github-generator` from 1.10.0 to 2.0.0
- [Release notes](https://github.com/slsa-framework/slsa-github-generator/releases)
- [Changelog](https://github.com/slsa-framework/slsa-github-generator/blob/main/CHANGELOG.md)
- [Commits](https://github.com/slsa-framework/slsa-github-generator/compare/v1.10.0...v2.0.0)

Updates `actions/download-artifact` from 3.0.2 to 4.1.6
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](9bc31d5ccc...9c19ed7fe5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: slsa-framework/slsa-github-generator
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-23 23:50:43 +00:00
David Lord
ccf125bf30
fix mypy findings 2024-04-23 16:49:42 -07:00
David Lord
db0fe9436e
unignore upload/download-artifact 2024-04-23 16:31:03 -07:00
David Lord
2c7f57ad5b
Merge branch '3.0.x' 2024-04-08 15:29:31 -07:00
David Lord
f958b6500b
build docs from scratch each test 2024-04-08 15:28:57 -07:00
David Lord
346d1abaff
remove install and contribute sections
install leads people to install into the system instead of a virtualenv,
and readme isn't the place to teach that
contribute is now linked in the github interface above the readme
2024-04-08 15:28:28 -07:00
David Lord
19610a9e46
start version 3.1.0 2024-04-07 12:29:49 -07:00
David Lord
aee16df63b
Merge branch '3.0.x' 2024-04-07 12:28:51 -07:00
David Lord
61182249cb
release version 3.0.3 (#5461) 2024-04-07 12:27:04 -07:00
David Lord
c12a5d874c
release version 3.0.3 2024-04-07 12:17:41 -07:00
David Lord
5e22cc9eec
Don't set the cli attribute in the sansio scaffold (#5270) 2024-04-07 12:16:22 -07:00
pgjones
5fdce4c331
Don't set the cli attribute in the sansio scaffold
It is (currently) Flask specific and hence cannot be shared in the
sansio shared code.
2024-04-07 12:13:02 -07:00
David Lord
adb7dd99c2
don't access app.logger when configuring app.logger 2024-04-07 12:03:19 -07:00
David Lord
b739390955
support FIPS builds without SHA-1 (#5460) 2024-04-07 11:42:24 -07:00
David Lord
db461112c7
access sha1 lazily 2024-04-07 11:41:13 -07:00
David Lord
7320e311a0
start version 3.0.3 2024-04-07 11:22:02 -07:00
David Lord
a855756017
Bump the github-actions group with 3 updates (#5459) 2024-04-07 11:11:26 -07:00
dependabot[bot]
be508c6184
Bump the github-actions group with 3 updates
Bumps the github-actions group with 3 updates: [dessant/lock-threads](https://github.com/dessant/lock-threads), [actions/checkout](https://github.com/actions/checkout) and [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish).


Updates `dessant/lock-threads` from 7de207be1d3ce97a9abe6ff1306222982d1ca9f9 to 1bf7ec25051fe7c00bdd17e6a7cf3d7bfb7dc771
- [Release notes](https://github.com/dessant/lock-threads/releases)
- [Changelog](https://github.com/dessant/lock-threads/blob/main/CHANGELOG.md)
- [Commits](7de207be1d...1bf7ec2505)

Updates `actions/checkout` from 4.1.1 to 4.1.2
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](b4ffde65f4...9bb56186c3)

Updates `pypa/gh-action-pypi-publish` from 68e62d4871ad9d14a9d55f114e6ac71f0b408ec0 to 81e9d935c883d0b210363ab89cf05f3894778450
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](68e62d4871...81e9d935c8)

---
updated-dependencies:
- dependency-name: dessant/lock-threads
  dependency-type: direct:production
  dependency-group: github-actions
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: pypa/gh-action-pypi-publish
  dependency-type: direct:production
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-07 18:04:59 +00:00
David Lord
6ab71ed7cf
Merge branch '3.0.x' 2024-04-07 11:03:46 -07:00
David Lord
87d5f5b9a9
update project files (#5457)
* update pre-commit hook
* upgrade pip with venv
* update description and version
* show url in publish environment
* update versions
* update versions, separate typing job
* use dependabot grouped updates
  ignore upload/download-artifact until slsa updates
* use sphinx.ext.extlinks instead of sphinx-issues
* update dev dependencies
* update editorconfig
* update gitignore
* update .readthedocs.yaml
* license is txt, readme is md
* update pyproject.toml
  add typed classifier
  add pyright config
  simplify urls
* tox builds docs in place
* update min test py version
* add tox env to update all dev dependencies
* update issue and pr templates
* rename security docs page to not conflict with org policy file
* simplify matrix
2024-04-07 10:24:40 -07:00
David Lord
98a7f9fcf0
Use per-release URLs in GH env UI when publishing to the PyPI (#5423) 2024-04-06 16:17:13 -07:00
Sviatoslav Sydorenko (Святослав Сидоренко)
0e59442f6c
Use per-release URLs in GH env UI when publishing to the PyPI
This essentially, makes the UI nicer in a few places with a clickable link to the released version being presented in the web interface of GitHub.
2024-02-27 01:24:27 +01:00
David Lord
b90a4f1f4a
[pre-commit.ci] pre-commit autoupdate (#5404) 2024-02-12 12:50:45 -08:00
pre-commit-ci[bot]
ad36383951
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.1.13 → v0.2.0](https://github.com/astral-sh/ruff-pre-commit/compare/v0.1.13...v0.2.0)
2024-02-05 20:28:43 +00:00
David Lord
6b422a05f3
Merge branch '3.0.x' 2024-02-03 13:13:41 -08:00
David Lord
d5e321b792
release version 3.0.2 (#5403) 2024-02-03 13:12:15 -08:00
David Lord
d2030595dc
release version 3.0.2 2024-02-03 12:54:41 -08:00
David Lord
d7209a9570
fix super call in list comprehension (#5393) 2024-02-03 12:39:33 -08:00
Tony Huang
1af8f95785
fix super call in list comprehension 2024-02-03 12:36:06 -08:00
David Lord
3435d2ff15
Fix jinja_loader typehint (#5389) 2024-02-03 12:18:40 -08:00
Cody Scott
ecc057dd48
fix jinja_loader annotation 2024-02-03 12:14:38 -08:00
David Lord
3207af8827
start version 3.0.2 2024-02-03 09:41:38 -08:00
David Lord
94e80b3da9
Bump the python-requirements group in /requirements with 6 updates (#5401) 2024-02-03 07:40:27 -08:00
David Lord
f32dddc71c
Bump the github-actions group with 2 updates (#5400) 2024-02-03 07:35:16 -08:00
dependabot[bot]
484a7cc9a7
Bump the python-requirements group in /requirements with 6 updates
Bumps the python-requirements group in /requirements with 6 updates:

| Package | From | To |
| --- | --- | --- |
| [sphinx-issues](https://github.com/sloria/sphinx-issues) | `3.0.1` | `4.0.0` |
| [sphinx-tabs](https://github.com/executablebooks/sphinx-tabs) | `3.4.4` | `3.4.5` |
| [cryptography](https://github.com/pyca/cryptography) | `41.0.7` | `42.0.2` |
| [pytest](https://github.com/pytest-dev/pytest) | `7.4.4` | `8.0.0` |
| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.0.0` | `1.0.1` |
| [tox](https://github.com/tox-dev/tox) | `4.12.0` | `4.12.1` |


Updates `sphinx-issues` from 3.0.1 to 4.0.0
- [Commits](https://github.com/sloria/sphinx-issues/compare/3.0.1...4.0.0)

Updates `sphinx-tabs` from 3.4.4 to 3.4.5
- [Release notes](https://github.com/executablebooks/sphinx-tabs/releases)
- [Changelog](https://github.com/executablebooks/sphinx-tabs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/executablebooks/sphinx-tabs/compare/v3.4.4...v3.4.5)

Updates `cryptography` from 41.0.7 to 42.0.2
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/41.0.7...42.0.2)

Updates `pytest` from 7.4.4 to 8.0.0
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/7.4.4...8.0.0)

Updates `python-dotenv` from 1.0.0 to 1.0.1
- [Release notes](https://github.com/theskumar/python-dotenv/releases)
- [Changelog](https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md)
- [Commits](https://github.com/theskumar/python-dotenv/compare/v1.0.0...v1.0.1)

Updates `tox` from 4.12.0 to 4.12.1
- [Release notes](https://github.com/tox-dev/tox/releases)
- [Changelog](https://github.com/tox-dev/tox/blob/main/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/tox/compare/4.12.0...4.12.1)

---
updated-dependencies:
- dependency-name: sphinx-issues
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: python-requirements
- dependency-name: sphinx-tabs
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-requirements
- dependency-name: cryptography
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: python-requirements
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: python-requirements
- dependency-name: python-dotenv
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-requirements
- dependency-name: tox
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: python-requirements
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-01 15:41:57 +00:00
dependabot[bot]
a4bada52d0
Bump the github-actions group with 2 updates
Bumps the github-actions group with 2 updates: [dessant/lock-threads](https://github.com/dessant/lock-threads) and [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish).


Updates `dessant/lock-threads` from 7de207be1d3ce97a9abe6ff1306222982d1ca9f9 to 1bf7ec25051fe7c00bdd17e6a7cf3d7bfb7dc771
- [Release notes](https://github.com/dessant/lock-threads/releases)
- [Changelog](https://github.com/dessant/lock-threads/blob/main/CHANGELOG.md)
- [Commits](7de207be1d...1bf7ec2505)

Updates `pypa/gh-action-pypi-publish` from f946db0f765b9ae754e44bfd5ae5b8b91cfb37ef to 2f6f737ca5f74c637829c0f5c3acd0e29ea5e8bf
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](f946db0f76...2f6f737ca5)

---
updated-dependencies:
- dependency-name: dessant/lock-threads
  dependency-type: direct:production
  dependency-group: github-actions
- dependency-name: pypa/gh-action-pypi-publish
  dependency-type: direct:production
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-01 15:31:35 +00:00
David Lord
4df377cfbf
Merge branch '3.0.x' 2024-01-18 12:20:56 -08:00
David Lord
233be7a0fa
release version 3.0.1 (#5386) 2024-01-18 12:03:25 -08:00
David Lord
f622b1cade
release version 3.0.1 2024-01-18 11:57:33 -08:00
David Lord
5fcc999b7d
fix create release action 2024-01-18 11:57:22 -08:00
David Lord
da3a0ddfe2
fix slsa generator version 2024-01-18 11:53:19 -08:00
David Lord
5e059be1b3
update actions versions 2024-01-18 11:41:38 -08:00
David Lord
bae6ee888f
address mypy strict findings (#5383) 2024-01-18 09:16:53 -08:00
David Lord
81b3c85f51
update requirements 2024-01-18 09:15:01 -08:00
David Lord
08d3185e87
update pre-commit hooks 2024-01-16 10:12:10 -08:00
David Lord
6000e80acf
address mypy strict findings 2024-01-16 10:11:13 -08:00
David Lord
7b5e176d1a
[pre-commit.ci] pre-commit autoupdate (#5377) 2024-01-15 07:52:57 -08:00
David Lord
5a48a0fe6b
untag without object_hook (#5382) 2024-01-15 07:52:35 -08:00
David Lord
700fc7d928
untag without object_hook 2024-01-15 07:49:02 -08:00
pre-commit-ci[bot]
8fdab74cc8 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2024-01-01 20:24:30 +00:00
pre-commit-ci[bot]
24ec38d6a0
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.1.6 → v0.1.9](https://github.com/astral-sh/ruff-pre-commit/compare/v0.1.6...v0.1.9)
2024-01-01 20:24:10 +00:00
David Lord
c2f65dd1cf
Bump the python-requirements group in /requirements with 3 updates (#5374) 2024-01-01 07:21:54 -08:00
dependabot[bot]
63ff4185f9
Bump the python-requirements group in /requirements with 3 updates
Bumps the python-requirements group in /requirements with 3 updates: [pytest](https://github.com/pytest-dev/pytest), [mypy](https://github.com/python/mypy) and [pre-commit](https://github.com/pre-commit/pre-commit).


Updates `pytest` from 7.4.3 to 7.4.4
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/7.4.3...7.4.4)

Updates `mypy` from 1.7.1 to 1.8.0
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python/mypy/compare/v1.7.1...v1.8.0)

Updates `pre-commit` from 3.5.0 to 3.6.0
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md)
- [Commits](https://github.com/pre-commit/pre-commit/compare/v3.5.0...v3.6.0)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-requirements
- dependency-name: mypy
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: python-requirements
- dependency-name: pre-commit
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: python-requirements
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-01 15:11:19 +00:00
David Lord
708d62d717
Merge branch '3.0.x' 2023-12-13 16:28:13 -08:00
David Lord
c275573147
run typing tests 2023-12-13 16:27:37 -08:00
David Lord
12a1c4940d
Merge branch '3.0.x' 2023-12-13 15:13:41 -08:00
David Lord
77f6c72cf9
Update docs to address redesigned macOS settings app (#5355) 2023-12-13 15:13:22 -08:00
Ben Huebscher
8a66990c61
Update docs to address redesigned macOS settings app 2023-12-13 15:10:47 -08:00
David Lord
05eebe36ab
fix missing quote in --key error message (#5344) 2023-12-13 15:06:37 -08:00
lizard
1d5abfadd7
Fixing issue 5342: 'The double quote is missing in the string' 2023-12-13 15:05:03 -08:00
David Lord
399aa8531c
Bump the python-requirements group in /requirements with 3 updates (#5351) 2023-12-13 15:01:14 -08:00
dependabot[bot]
b55ccae72a
Bump the python-requirements group in /requirements with 3 updates
Bumps the python-requirements group in /requirements with 3 updates: [cryptography](https://github.com/pyca/cryptography), [mypy](https://github.com/python/mypy) and [tox](https://github.com/tox-dev/tox).

Updates `cryptography` from 41.0.5 to 41.0.7
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/41.0.5...41.0.7)

Updates `mypy` from 1.6.1 to 1.7.1
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python/mypy/compare/v1.6.1...v1.7.1)

Updates `tox` from 4.11.3 to 4.11.4
- [Release notes](https://github.com/tox-dev/tox/releases)
- [Changelog](https://github.com/tox-dev/tox/blob/main/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/tox/compare/4.11.3...4.11.4)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-requirements
- dependency-name: mypy
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: python-requirements
- dependency-name: tox
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: python-requirements
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-13 14:58:31 -08:00
David Lord
089f6a1c50
Bump the github-actions group with 2 updates (#5352) 2023-12-04 14:26:30 -08:00
David Lord
b64f848d2c
[pre-commit.ci] pre-commit autoupdate (#5354) 2023-12-04 14:26:15 -08:00
pre-commit-ci[bot]
452b78f243
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.1.5 → v0.1.6](https://github.com/astral-sh/ruff-pre-commit/compare/v0.1.5...v0.1.6)
2023-12-04 20:29:39 +00:00
dependabot[bot]
78ced0093a
Bump the github-actions group with 2 updates
Bumps the github-actions group with 2 updates: [dessant/lock-threads](https://github.com/dessant/lock-threads) and [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish).


Updates `dessant/lock-threads` from 4.0.1 to 5.0.1
- [Release notes](https://github.com/dessant/lock-threads/releases)
- [Changelog](https://github.com/dessant/lock-threads/blob/main/CHANGELOG.md)
- [Commits](be8aa5be94...1bf7ec2505)

Updates `pypa/gh-action-pypi-publish` from 1.8.10 to 1.8.11
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](b7f401de30...2f6f737ca5)

---
updated-dependencies:
- dependency-name: dessant/lock-threads
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: pypa/gh-action-pypi-publish
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-01 15:47:14 +00:00
David Lord
d61198941a
Merge branch '3.0.x' 2023-11-15 13:03:05 -08:00
David Lord
b97165db75
type hint fix for flask.send_file (#5336) 2023-11-15 12:55:43 -08:00
Daniel Isaac
4104f29956
type hint fix for flask.send_file 2023-11-15 12:53:22 -08:00
David Lord
66743d4f9d
start version 3.0.1 2023-11-15 12:50:46 -08:00
David Lord
258311d098
Merge branch '3.0.x' 2023-11-15 12:48:42 -08:00
David Lord
5308db0637
update pre-commit hooks 2023-11-15 12:47:41 -08:00
David Lord
59fd6aa104
use pip-compile instead of pip-compile-multi 2023-11-15 12:44:20 -08:00
David Lord
560383fe14
update python version matrix
(cherry picked from commit 6ee5dcc0ec)
2023-11-15 12:19:59 -08:00
David Lord
6277036567
update read the docs env
(cherry picked from commit 29f1bd22d7)
2023-11-15 12:19:59 -08:00
David Lord
ce27ddeba1
Merge branch '3.0.x' 2023-11-15 12:14:51 -08:00
David Lord
54e05a2824
use ruff linter and formatter 2023-11-15 12:14:37 -08:00
David Lord
9a12f34bbe
use ruff linter and formatter (#5331) 2023-11-09 13:29:20 -08:00
David Lord
54ff9b2972
use ruff linter and formatter 2023-11-09 10:27:01 -08:00
David Lord
6edfd78c9f
Bump the github-actions group with 4 updates (#5330) 2023-11-09 09:04:52 -08:00
dependabot[bot]
4431ada1a2
Bump the github-actions group with 4 updates
Bumps the github-actions group with 4 updates: [actions/checkout](https://github.com/actions/checkout), [actions/setup-python](https://github.com/actions/setup-python), [actions/upload-artifact](https://github.com/actions/upload-artifact) and [actions/cache](https://github.com/actions/cache).


Updates `actions/checkout` from 3.6.0 to 4.1.1
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](f43a0e5ff2...b4ffde65f4)

Updates `actions/setup-python` from 4.7.0 to 4.7.1
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](61a6322f88...65d7f2d534)

Updates `actions/upload-artifact` from 3.1.2 to 3.1.3
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](0b7f8abb15...a8a3f3ad30)

Updates `actions/cache` from 3.3.1 to 3.3.2
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](88522ab9f3...704facf57e)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-09 17:01:38 +00:00
David Lord
24653528cc
use pip-compile and dependabot grouped updates (#5329) 2023-11-09 09:00:37 -08:00
David Lord
33d8886226
enable grouped updates for actions and python 2023-11-09 08:56:36 -08:00
David Lord
04920b3076
use pip-compile instead of pip-compile-multi 2023-11-09 08:56:36 -08:00
David Lord
6ee5dcc0ec
update python version matrix 2023-11-09 08:45:23 -08:00
David Lord
c4bfd367e2
update description 2023-11-09 08:40:39 -08:00
David Lord
29f1bd22d7
update read the docs env 2023-11-09 08:39:48 -08:00
David Lord
8d9519df09
Update link to hypercorn (#5313) 2023-10-28 08:42:53 -07:00
Resistor-git
7af0271f47 Initial commit 2023-10-28 08:04:03 +00:00
Resistor-git
be6ec06894 Fix link to Hypercorn in docs/deploying/asgi.rst - they moved from gitlab from github. 2023-10-28 07:38:33 +00:00
David Lord
beedaa4eff
docs/testing.rst: fix follow_redirects sample code (#5303) 2023-10-20 09:50:00 -07:00
Arnout Engelen
bb9937593d
docs/testing.rst: fix follow_redirects sample code 2023-10-20 17:17:24 +02:00
Iztok Fister Jr
541bc8dfc2
examples/javascript: replace obsolete link (#5287) 2023-10-06 17:36:39 -07:00
Akinola Abiodun Emmanuel
3652ecd9e0
Update index.rst (#5291)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2023-10-06 16:37:42 -07:00
pgjones
14232513fd Release version 3.0.0 2023-09-30 15:37:24 +01:00
pgjones
3252f2bc54 Bump Werkzeug 3.0.0 2023-09-30 15:37:24 +01:00
pgjones
438edcdf01 Allow self as an argument to url_for
This makes the Flask.url_for self argument positional only (Flask
supports Python 3.8+) thereby restoring the ability to pass self as a
value argument to url_for.
2023-09-30 15:25:31 +01:00
nick2202
b7c1290528 Fix wrong spelling of JS method .innerHTML 2023-09-24 15:58:22 +01:00
David Lord
8037487165
Bump pypa/gh-action-pypi-publish from 1.8.8 to 1.8.10 (#5248) 2023-09-05 14:02:38 -07:00
David Lord
e8076d9114
Bump slsa-framework/slsa-github-generator from 1.7.0 to 1.9.0 (#5247) 2023-09-05 14:02:28 -07:00
David Lord
ecc4a38b7c
Bump actions/checkout from 3.5.3 to 3.6.0 (#5246) 2023-09-05 14:01:15 -07:00
dependabot[bot]
24c6508d39
Bump pypa/gh-action-pypi-publish from 1.8.8 to 1.8.10
Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.8.8 to 1.8.10.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](f8c70e705f...b7f401de30)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-01 16:30:35 +00:00
dependabot[bot]
98cef9fcca
Bump slsa-framework/slsa-github-generator from 1.7.0 to 1.9.0
Bumps [slsa-framework/slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator) from 1.7.0 to 1.9.0.
- [Release notes](https://github.com/slsa-framework/slsa-github-generator/releases)
- [Changelog](https://github.com/slsa-framework/slsa-github-generator/blob/main/CHANGELOG.md)
- [Commits](https://github.com/slsa-framework/slsa-github-generator/compare/v1.7.0...v1.9.0)

---
updated-dependencies:
- dependency-name: slsa-framework/slsa-github-generator
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-01 16:30:31 +00:00
dependabot[bot]
0c97a411b4
Bump actions/checkout from 3.5.3 to 3.6.0
Bumps [actions/checkout](https://github.com/actions/checkout) from 3.5.3 to 3.6.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](c85c95e3d7...f43a0e5ff2)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-01 16:30:27 +00:00
David Lord
faef9a0fce
deprecate __version__ attribute (#5242) 2023-08-29 06:09:59 -07:00
David Lord
293041a290
deprecate __version__ attribute 2023-08-29 06:03:11 -07:00
David Lord
153433f612
Merge remote-tracking branch 'origin/2.3.x' 2023-08-27 09:21:54 -07:00
pgjones
65271c105f Remove print left in by accident
This was added as per 0ec7f713d6 by
mistake.
2023-08-27 07:12:04 -07:00
David Lord
a6007373b5
release version 2.3.3 (#5232) 2023-08-21 12:52:54 -07:00
David Lord
3205b53c7c
release version 2.3.3 2023-08-21 10:25:35 -07:00
David Lord
9f9550247a
bump werkzeug 2.3.7
use importlib.metadata.version
2023-08-21 10:12:54 -07:00
David Lord
90967ccb9a
bump werkzeug 2.3.7 (#5231) 2023-08-21 09:42:21 -07:00
David Lord
5bb30270d2
bump werkzeug 2.3.7
use importlib.metadata.version
2023-08-21 09:39:10 -07:00
David Lord
1d8b53f782
Split the App and Blueprint into Sansio and IO parts (#5127) 2023-08-20 09:32:09 -07:00
pgjones
bc5dd3894b Add a changelog for the sans-io changes 2023-08-19 19:25:36 +01:00
pgjones
318592511c Add a brief README to the sansio
This should hopefully explain what it is used for and why certain code
cannot be present in it.
2023-08-19 18:35:15 +01:00
pgjones
80cf589a26 Correct the error handler typing
It may also be awaitable, as invocations are wrapped in ensure_sync.
2023-08-19 18:35:15 +01:00
pgjones
cc80a47f5b Widen the response typing
Whilst not strictly true for Flask, it is true for Flask and Quart and
hence makes it much easier for Quart to extend Flask classes. The
alternatives are generic usage in the sansio codebase or mixed usage
within Flask. I think this is a good compromise.
2023-08-19 18:35:15 +01:00
pgjones
3f6b243cec Support async template context processors
This is useful as there is contextual information that could be loaded
via IO e.g. information from a database. This also matches Quart and
hence makes the shared signature easier to manage.
2023-08-19 18:35:15 +01:00
pgjones
72c85e80c8 Provide an extendable merge blueprint funcs method
This allows a Blueprint implementation that has additional funcs, such
as Quart with its before_websocket_funcs (as example), to extend the
merge method to also merge these functions.
2023-08-19 18:35:15 +01:00
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
0e0e8ddcdc
remove deprecated code (#5223) 2023-08-16 15:08:52 -07:00
David Lord
04994df59f
remove deprecated code 2023-08-16 15:00:49 -07:00
David Lord
6a12b191f7
start version 3.0.0 2023-08-16 14:41:57 -07:00
David Lord
9e9acfb3fe
Merge branch '2.3.x' 2023-08-16 14:30:03 -07:00
David Lord
0273664009
Update dispatch by path example (#5217) 2023-08-16 14:29:39 -07:00
David Lord
a887e179b8
clean up 2023-08-16 14:25:53 -07:00
pavithra
aa6d4c3e92
update dispatch-by-path example 2023-08-16 14:25:36 -07:00
David Lord
6d49a1e4b7
Merge branch '2.3.x' 2023-08-16 13:38:05 -07:00
David Lord
826514b8eb
fix flake8 bugbear findings 2023-08-16 13:37:56 -07:00
David Lord
c49ce2e1eb
fix flake8 bugbear findings 2023-08-16 13:37:26 -07:00
David Lord
3237fff4b8
Merge branch '2.3.x' 2023-08-16 13:35:46 -07:00
David Lord
6d266f6363
Pass maxsplit via kwarg to re.split (#5215) 2023-08-16 13:35:13 -07:00
hauntsaninja
17e146ad94
Pass maxsplit via kwarg to re.split 2023-08-16 13:33:13 -07:00
David Lord
80ae10f402
update dev requirements 2023-08-16 13:30:18 -07:00
David Lord
7d399e80c3
Merge branch '2.3.x' 2023-08-16 13:29:25 -07:00
David Lord
b1385919be
Bump pypa/gh-action-pypi-publish from 1.8.7 to 1.8.8 (#5213) 2023-08-01 09:59:06 -07:00
David Lord
6a5277d341
Bump actions/setup-python from 4.6.1 to 4.7.0 (#5212) 2023-08-01 09:58:55 -07:00
dependabot[bot]
dcc86ebfce
Bump pypa/gh-action-pypi-publish from 1.8.7 to 1.8.8
Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.8.7 to 1.8.8.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](f5622bde02...f8c70e705f)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-01 16:56:22 +00:00
dependabot[bot]
180ff8853c
Bump actions/setup-python from 4.6.1 to 4.7.0
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4.6.1 to 4.7.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](bd6b4b6205...61a6322f88)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-01 16:56:18 +00:00
David Lord
8a72b74161
[pre-commit.ci] pre-commit autoupdate (#5211) 2023-08-01 09:17:47 -07:00
pre-commit-ci[bot]
7255be9626
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/asottile/pyupgrade: v3.8.0 → v3.10.1](https://github.com/asottile/pyupgrade/compare/v3.8.0...v3.10.1)
- [github.com/psf/black: 23.3.0 → 23.7.0](https://github.com/psf/black/compare/23.3.0...23.7.0)
- [github.com/PyCQA/flake8: 6.0.0 → 6.1.0](https://github.com/PyCQA/flake8/compare/6.0.0...6.1.0)
2023-08-01 08:45:55 +00:00
David Lord
f215de030e
[pre-commit.ci] pre-commit autoupdate (#5187) 2023-07-04 06:18:22 -07:00
pre-commit-ci[bot]
65bc763634
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/asottile/pyupgrade: v3.7.0 → v3.8.0](https://github.com/asottile/pyupgrade/compare/v3.7.0...v3.8.0)
2023-07-04 06:36:29 +00:00
David Lord
a0db890853
Update install.rst with required description (#5182) 2023-07-03 05:58:14 -07:00
Pamela Fox
11da927fd9
Update install.rst with required description 2023-07-03 05:51:06 -07:00
David Lord
cb825687a5
Bump actions/checkout from 3.5.2 to 3.5.3 (#5186) 2023-07-01 09:24:20 -07:00
David Lord
51bf0fdd90
Bump slsa-framework/slsa-github-generator from 1.6.0 to 1.7.0 (#5185) 2023-07-01 09:24:11 -07:00
David Lord
0da5788efb
Bump dessant/lock-threads from 4.0.0 to 4.0.1 (#5184) 2023-07-01 09:23:57 -07:00
David Lord
326484a8d1
Bump pypa/gh-action-pypi-publish from 1.8.6 to 1.8.7 (#5183) 2023-07-01 09:23:35 -07:00
dependabot[bot]
1ce4d95de9
Bump actions/checkout from 3.5.2 to 3.5.3
Bumps [actions/checkout](https://github.com/actions/checkout) from 3.5.2 to 3.5.3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](8e5e7e5ab8...c85c95e3d7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-01 16:16:28 +00:00
dependabot[bot]
1fb188636e
Bump slsa-framework/slsa-github-generator from 1.6.0 to 1.7.0
Bumps [slsa-framework/slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator) from 1.6.0 to 1.7.0.
- [Release notes](https://github.com/slsa-framework/slsa-github-generator/releases)
- [Changelog](https://github.com/slsa-framework/slsa-github-generator/blob/main/CHANGELOG.md)
- [Commits](https://github.com/slsa-framework/slsa-github-generator/compare/v1.6.0...v1.7.0)

---
updated-dependencies:
- dependency-name: slsa-framework/slsa-github-generator
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-01 16:16:25 +00:00
dependabot[bot]
f62580b947
Bump dessant/lock-threads from 4.0.0 to 4.0.1
Bumps [dessant/lock-threads](https://github.com/dessant/lock-threads) from 4.0.0 to 4.0.1.
- [Release notes](https://github.com/dessant/lock-threads/releases)
- [Changelog](https://github.com/dessant/lock-threads/blob/main/CHANGELOG.md)
- [Commits](c1b35aecc5...be8aa5be94)

---
updated-dependencies:
- dependency-name: dessant/lock-threads
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-01 16:16:22 +00:00
dependabot[bot]
47a89da558
Bump pypa/gh-action-pypi-publish from 1.8.6 to 1.8.7
Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.8.6 to 1.8.7.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](a56da0b891...f5622bde02)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-01 16:16:19 +00:00
David Lord
09789f2a34
fix typo in errorhandling doc (#5180) 2023-06-29 17:28:25 -07:00
ToolMoney
aea13d5a10 fix typo in errorhandling doc 2023-06-29 17:20:35 -07:00
David Lord
15a0d4afd4
Merge branch '2.3.x' 2023-06-27 14:18:56 -07:00
David Lord
f39c71609e
remove manifest.in 2023-06-27 14:18:18 -07:00
David Lord
3c85ec953f
use flit_core as build backend (#5177) 2023-06-27 14:17:46 -07:00
David Lord
6b9acd565c
switch docs to flit 2023-06-27 14:13:56 -07:00
David Lord
46b328854a
switch examples to flit 2023-06-27 14:13:56 -07:00
David Lord
f38f3a745a
switch to flit build backend 2023-06-27 14:13:56 -07:00
David Lord
b1bdd97564
Merge branch '2.3.x' 2023-06-27 08:30:43 -07:00
David Lord
d67c47b81f
simplify tox config
envs inherit base testenv
2023-06-27 08:29:41 -07:00
David Lord
7bfbcfab87
Merge branch '2.3.x' 2023-06-27 07:42:06 -07:00
David Lord
8933d75443
update pypy test version 2023-06-27 07:41:15 -07:00
David Lord
cc55d7b3cf
Merge branch '2.3.x' 2023-06-27 07:11:37 -07:00
David Lord
aca7d5637d
update dependencies 2023-06-27 07:11:22 -07:00
David Lord
ec2b2394dc
update import of declarative_base from SQLAlchemy (#5171) 2023-06-21 09:32:37 -07:00
mohammad m. moniri
a7ae372f2f
update import of declarative_base from SQLAlchemy 2023-06-21 09:30:03 -07:00
David Lord
4bcd4be6b7
Merge branch '2.3.x' 2023-06-09 09:41:25 -07:00
David Lord
8e33b7b3e2
update werkzeug requirement 2023-06-09 09:41:17 -07:00
David Lord
4be9f52142
fix use of importlib.util.find_spec (#5161) 2023-06-09 09:38:59 -07:00
David Lord
bda295d37f
fix use of importlib.util.find_spec 2023-06-09 09:34:42 -07:00
David Lord
4d6ae8273a
Merge branch '2.3.x' 2023-06-08 14:33:28 -07:00
David Lord
c8cf4694c6
unpin sphinx and sphinx-tabs 2023-06-08 14:33:16 -07:00
David Lord
935ee742b4
Merge branch '2.3.x' 2023-06-07 13:22:15 -07:00
David Lord
9930b0fe8e
Python 3.12 compatibility (#5157) 2023-06-07 13:21:49 -07:00
David Lord
ed8ddb6a3a
update werkzeug to 2.3.5 2023-06-07 13:18:49 -07:00
David Lord
84e11a1e82
use importlib instead of pkgutil 2023-06-07 13:13:41 -07:00
David Lord
367e1df785
start version 2.3.3 2023-06-07 13:10:39 -07:00
David Lord
2be71d323d
[pre-commit.ci] pre-commit autoupdate (#5154) 2023-06-07 12:53:30 -07:00
David Lord
d614d6bf8c
ignore pytest ast warnings 2023-06-06 09:30:34 -07:00
pre-commit-ci[bot]
32d2f47ed1
[pre-commit.ci] pre-commit autoupdate
updates:
- https://github.com/asottile/reorder_python_importshttps://github.com/asottile/reorder-python-imports
2023-06-06 09:26:43 -07:00
David Lord
c9b6110dec
Merge branch '2.3.x' 2023-06-06 09:26:05 -07:00
David Lord
7dbb2f7e05
retarget pre-commit.ci 2023-06-06 09:25:47 -07:00
David Lord
a3e4013f89
Bump actions/setup-python from 4.6.0 to 4.6.1 (#5150) 2023-06-01 11:49:16 -07:00
David Lord
fb20cbbf1e
Bump pypa/gh-action-pypi-publish from 1.8.5 to 1.8.6 (#5149) 2023-06-01 11:47:53 -07:00
David Lord
c49757a459
Bump slsa-framework/slsa-github-generator from 1.5.0 to 1.6.0 (#5148) 2023-06-01 11:46:49 -07:00
dependabot[bot]
18e703bc93
Bump actions/setup-python from 4.6.0 to 4.6.1
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4.6.0 to 4.6.1.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](57ded4d7d5...bd6b4b6205)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-01 16:56:50 +00:00
dependabot[bot]
fc74a114b3
Bump pypa/gh-action-pypi-publish from 1.8.5 to 1.8.6
Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.8.5 to 1.8.6.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](0bf742be3e...a56da0b891)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-01 16:56:46 +00:00
dependabot[bot]
40f31c3078
Bump slsa-framework/slsa-github-generator from 1.5.0 to 1.6.0
Bumps [slsa-framework/slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator) from 1.5.0 to 1.6.0.
- [Release notes](https://github.com/slsa-framework/slsa-github-generator/releases)
- [Changelog](https://github.com/slsa-framework/slsa-github-generator/blob/main/CHANGELOG.md)
- [Commits](https://github.com/slsa-framework/slsa-github-generator/compare/v1.5.0...v1.6.0)

---
updated-dependencies:
- dependency-name: slsa-framework/slsa-github-generator
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-01 16:56:43 +00:00
David Lord
31fd9c8791
Merge branch '2.3.x' 2023-05-31 09:19:14 -07:00
David Lord
38f02e04f4
update metadata 2023-05-31 09:18:33 -07:00
David Lord
e7264776bd
update dependencies 2023-05-31 09:17:51 -07:00
David Lord
ae07dead24
Merge pull request #5140 from Jeroendevr/patch-1 2023-05-31 09:14:56 -07:00
Jeroendevr
0f477df86a
Config from Data Files to match from_file API
In the API docs using a TOML file to load config is referred to as https://flask.palletsprojects.com/en/2.3.x/api/#flask.Config.from_file

To keep docs consistent a small change to the config docs.
2023-05-24 11:13:36 +02:00
Pedro Guilherme S. Moreira
55332be325
docs: fix wrong JS syntax (#5136) 2023-05-18 14:33:44 +02:00
David Lord
b80baaf359
Merge pull request #5126 from pgjones/pathlike
Allow for PathLike types for config file variables
2023-05-14 09:43:35 -07:00
pgjones
2abb7513dc Allow for PathLike types for config file variables
This follows the Flask practice elsewhere and makes it clear PathLike
filenames are valid.
2023-05-14 16:09:25 +01:00
David Lord
d0bf462866
Merge branch '2.3.x' 2023-05-09 12:38:00 -07:00
David Lord
4911012cf4
update workflows
update publish parameter names
remove pip update
2023-05-09 12:37:33 -07:00
David Lord
57e926c791
Merge branch '2.3.x' 2023-05-02 10:42:04 -07:00
David Lord
859d63902e
Merge pull request #5111 from pallets/update-tests
update tests
2023-05-02 10:41:41 -07:00
David Lord
0a00e1b608
use tmp_path instead of tmpdir 2023-05-02 10:38:27 -07:00
David Lord
1d7281fe07
remove egg test
eggs aren't supported, and Python 3.12 removes setuptools
2023-05-02 09:53:31 -07:00
David Lord
e374853c75
Merge branch '2.3.x' 2023-05-02 07:52:49 -07:00
David Lord
97c830190f
Merge branch '2.2.x' into 2.3.x 2023-05-02 07:50:30 -07:00
David Lord
bda08b11c6
Merge pull request #5110 from pallets/release-2.2.5
release version 2.2.5
2023-05-02 07:43:48 -07:00
David Lord
47af817c8f
release version 2.2.5 2023-05-02 07:35:27 -07:00
David Lord
afd63b1617
Merge pull request #5109 from pallets/backport-vary-cookie
backport 2.2.x: set `Vary: Cookie` header consistently for session
2023-05-02 07:18:08 -07:00
David Lord
ca12e8ebb7
update dependencies 2023-05-02 07:17:52 -07:00
David Lord
8646edca6f
set Vary: Cookie header consistently for session 2023-05-02 07:14:15 -07:00
David Lord
a6367dac74
Merge pull request #5108 from pallets/werkzeug-compat
werkzeug 2.3.3 compatibility
2023-05-02 07:12:59 -07:00
David Lord
3fbfbad79f
werkzeug 2.3.3 compatibility 2023-05-02 07:09:36 -07:00
David Lord
726d3f4fa9
start version 2.2.5 2023-05-02 06:56:08 -07:00
David Lord
7b31099252
Merge pull request #5106 from pallets/dependabot/github_actions/pypa/gh-action-pypi-publish-1.8.5
Bump pypa/gh-action-pypi-publish from 1.8.4 to 1.8.5
2023-05-01 10:22:01 -07:00
David Lord
723091b903
Merge pull request #5104 from pallets/dependabot/github_actions/actions/checkout-3.5.2
Bump actions/checkout from 3.5.0 to 3.5.2
2023-05-01 10:21:02 -07:00
dependabot[bot]
dcd25d8f07
Bump actions/checkout from 3.5.0 to 3.5.2
Bumps [actions/checkout](https://github.com/actions/checkout) from 3.5.0 to 3.5.2.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](8f4b7f8486...8e5e7e5ab8)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-01 17:18:16 +00:00
David Lord
1e160c199b
Merge pull request #5105 from pallets/dependabot/github_actions/actions/setup-python-4.6.0
Bump actions/setup-python from 4.5.0 to 4.6.0
2023-05-01 10:17:25 -07:00
dependabot[bot]
ec8ca69195
Bump pypa/gh-action-pypi-publish from 1.8.4 to 1.8.5
Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.8.4 to 1.8.5.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](29930c9cf5...0bf742be3e)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-01 16:57:14 +00:00
dependabot[bot]
b7b753b96c
Bump actions/setup-python from 4.5.0 to 4.6.0
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4.5.0 to 4.6.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](d27e3f3d7c...57ded4d7d5)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-01 16:57:10 +00:00
David Lord
0afeb1d11c
fix release date 2023-05-01 09:01:40 -07:00
David Lord
4cf8b78c6c
Merge pull request #5102 from pallets/release-2.3.2
release version 2.3.2
2023-05-01 08:42:27 -07:00
David Lord
f3b8f57054
release version 2.3.2 2023-05-01 08:35:10 -07:00
David Lord
c990bba94a
update min test env 2023-05-01 08:35:10 -07:00
David Lord
adedb2a64e
Merge pull request #5101 from pallets/update-werkzeug
update werkzeug to >=2.3.3
2023-05-01 08:22:58 -07:00
David Lord
e1aedecdc6
update werkzeug 2023-05-01 08:18:03 -07:00
David Lord
37badc3ce8
update changelog 2023-05-01 08:13:12 -07:00
David Lord
70f906c51c
Merge pull request from GHSA-m2qf-hxjv-5gpq
set `Vary: Cookie` header consistently for session
2023-05-01 08:11:41 -07:00
David Lord
8705dd39c4
set Vary: Cookie header consistently for session 2023-05-01 08:10:52 -07:00
David Lord
9532cba45d
fix mypy finding 2023-05-01 08:10:25 -07:00
David Lord
0bc7356ce1
start version 2.3.2 2023-05-01 08:02:46 -07:00
David Lord
f07fb2b607
Merge pull request #5086 from pallets/release-2.3.1
release version 2.3.1
2023-04-25 15:21:36 -06:00
David Lord
721abdc381
release version 2.3.1 2023-04-25 14:08:38 -06:00
David Lord
0867dce42c
Merge pull request #5085 from lucaswerkmeister/patch-1
Fix importing Markup from flask
2023-04-25 14:06:22 -06:00
Lucas Werkmeister
0ec9192cf2
fix importing Markup from flask 2023-04-25 13:50:43 -06:00
David Lord
345f18442c
start version 2.3.1 2023-04-25 13:48:16 -06:00
David Lord
5f4072423e
Merge pull request #5083 from pallets/release-2.3.0
release version 2.3.0
2023-04-25 12:42:22 -06:00
David Lord
8728c3e4cd
release version 2.3.0 2023-04-25 12:35:06 -06:00
David Lord
eb33b8c809
Merge pull request #5082 from pallets/minimum-requirements
update minimum requirements
2023-04-25 12:33:30 -06:00
David Lord
79ebf6c39c
update minimum requirements 2023-04-25 12:28:59 -06:00
David Lord
73739a29f4
Merge branch '2.2.x' 2023-04-25 11:55:41 -06:00
David Lord
ddc7accaa2
Merge pull request #5081 from pallets/release-2.2.4
release version 2.2.4
2023-04-25 11:53:09 -06:00
David Lord
cd1b68cf6e
Merge branch '2.2.x' 2023-04-25 11:41:20 -06:00
David Lord
74e0329820
release version 2.2.4 2023-04-25 11:41:10 -06:00
David Lord
2d460685b1
update dev env 2023-04-25 11:41:10 -06:00
David Lord
64bc45874d
update dev dependencies 2023-04-25 11:40:57 -06:00
David Lord
427e5dc4f3
update dev env 2023-04-25 11:00:01 -06:00
David Lord
0c5f18ab91
Merge pull request #5077 from EtiennePelletier/master
Remove double period in signals documentation page
2023-04-24 12:21:42 -06:00
EtiennePelletier
d48deba273 Remove double period in signals documentation page 2023-04-24 11:06:27 -06:00
David Lord
2b2a764143
Merge pull request #5073 from pallets/new-logo
use new logo
2023-04-20 11:49:26 -07:00
David Lord
83d777bebf
use new logo 2023-04-20 11:38:04 -07:00
David Lord
b4345cb4eb
Merge pull request #5072 from pallets/drop-py37
drop support for Python 3.7
2023-04-20 11:11:52 -07:00
David Lord
2e8fe7b2f2
drop support for python 3.7 2023-04-20 11:09:55 -07:00
David Lord
9659b11a45
remove pypy 3.8 and 3.7 from tests 2023-04-20 10:15:58 -07:00
David Lord
f139024b1c
remove old links 2023-04-20 09:53:38 -07:00
David Lord
a4ea5df5d5
Merge pull request #5071 from pallets/future-annotations
use postponed evaluation of annotations
2023-04-20 09:36:51 -07:00
David Lord
44ffe6c6d6
add __future__ annotations 2023-04-20 09:24:44 -07:00
David Lord
cfa863c357
Merge branch '2.2.x' 2023-04-15 12:30:20 -07:00
David Lord
db7d2d2d68
Merge pull request #5067 from pallets/tox-constraints
use tox 4.4 constraint feature
2023-04-15 12:27:24 -07:00
David Lord
a67195e059
update dependencies 2023-04-15 12:25:09 -07:00
David Lord
7e6e68aed9
enforce minimum versions in env 2023-04-15 12:20:57 -07:00
David Lord
a1d0eda789
Merge pull request #5066 from pallets/docs-passthrough
document passthrough_errors
2023-04-15 11:57:46 -07:00
David Lord
5bba529dfc
document passthrough_errors 2023-04-15 11:53:56 -07:00
David Lord
9a4d370ea2
fix typo 2023-04-15 07:39:35 -07:00
David Lord
6931b25293
Merge pull request #5063 from pallets/cli-routes-domain
show subdomain or host in routes output
2023-04-14 09:45:20 -07:00
David Lord
84c007d34f
show subdomain or host in routes output 2023-04-14 09:43:00 -07:00
emisargent
182ce3dd15
Add a devcontainer configuration (#4969) 2023-04-13 10:03:49 -07:00
David Lord
49498a323b
Merge pull request #5059 from pallets/oidc-publish
use OIDC instead of token for publishing
2023-04-13 08:24:58 -07:00
David Lord
f7d9956c0f
use oidc instead of token 2023-04-13 08:18:14 -07:00
David Lord
59f81950fe
Merge pull request #5049 from pgjones/signals
support async signal subscribers
2023-04-13 08:08:27 -07:00
pgjones
8239765a44
allow async signal receivers 2023-04-13 08:05:42 -07:00
David Lord
a05c0c6b72
Merge pull request #5058 from pallets/require-blinker
blinker is required, signals are always available
2023-04-13 07:51:11 -07:00
David Lord
9cb1a7a52d
blinker is required, signals are always available 2023-04-13 07:39:24 -07:00
David Lord
e1e4e82096
Merge pull request #5034 from adamtheturtle/default-mimetype-optional
Allow Response subclasses to set default_mimetype as None
2023-04-12 13:43:23 -07:00
Adam Dangoor
b626a93879
Allow Response subclasses to set default_mimetype as None
This matches the type - see 92c6380248/src/werkzeug/sansio/response.py (L94).
2023-04-12 13:30:28 -07:00
David Lord
87698a2d5d
Merge pull request #5029 from lettow-humain/main
Appending missing parentheses
2023-04-12 13:29:05 -07:00
lettow-humain
c67bfe551d
fix parentheses 2023-04-12 13:19:54 -07:00
David Lord
c9a5660cfd
Merge pull request #5054 from pallets/session-domain
no cookie domain by default
2023-04-12 13:10:34 -07:00
David Lord
c24f8c8199
no cookie domain by default 2023-04-12 12:38:22 -07:00
David Lord
fa0ceb62f2
Merge branch '2.2.x' 2023-04-12 10:57:53 -07:00
David Lord
694183ce22
Merge pull request #5053 from pallets/werkzeug-compat
update test cookie handling for Werkzeug 2.3
2023-04-12 10:57:14 -07:00
David Lord
04c21387db
update test cookie handling for Werkzeug 2.3 2023-04-12 10:55:00 -07:00
David Lord
67c4c7bac2
ignore warning from pytest due to change in Python 3.12 alpha 2023-04-11 15:34:39 -07:00
David Lord
e39d78a0ad
Merge branch '2.2.x' 2023-04-11 15:33:44 -07:00
David Lord
a30b6e723c
update dependencies 2023-04-11 15:33:34 -07:00
David Lord
daf6966c89
Merge pull request #5037 from pamelafox/patch-1
Fix typo in appfactories.rst code block
2023-04-05 14:56:26 -07:00
David Lord
c4f754cda3
Merge pull request #5041 from pallets/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2023-04-04 07:00:49 -07:00
pre-commit-ci[bot]
d2a6f5c572
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/psf/black: 23.1.0 → 23.3.0](https://github.com/psf/black/compare/23.1.0...23.3.0)
2023-04-04 06:31:29 +00:00
David Lord
a361ef6368
Merge pull request #5038 from pallets/dependabot/github_actions/pypa/gh-action-pypi-publish-1.8.4
Bump pypa/gh-action-pypi-publish from 1.6.4 to 1.8.4
2023-04-03 06:19:09 -07:00
David Lord
c2688e4f06
Merge pull request #5040 from pallets/dependabot/github_actions/actions/cache-3.3.1
Bump actions/cache from 3.2.6 to 3.3.1
2023-04-03 06:18:57 -07:00
David Lord
e8178f7bfa
Merge pull request #5039 from pallets/dependabot/github_actions/actions/checkout-3.5.0
Bump actions/checkout from 3.3.0 to 3.5.0
2023-04-03 06:18:45 -07:00
dependabot[bot]
4909e8ff86
Bump actions/cache from 3.2.6 to 3.3.1
Bumps [actions/cache](https://github.com/actions/cache) from 3.2.6 to 3.3.1.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](69d9d449ac...88522ab9f3)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-01 16:57:11 +00:00
dependabot[bot]
6a6c83789f
Bump actions/checkout from 3.3.0 to 3.5.0
Bumps [actions/checkout](https://github.com/actions/checkout) from 3.3.0 to 3.5.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](ac59398561...8f4b7f8486)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-01 16:57:06 +00:00
dependabot[bot]
29676a273a
Bump pypa/gh-action-pypi-publish from 1.6.4 to 1.8.4
Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.6.4 to 1.8.4.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](c7f29f7ade...29930c9cf5)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-01 16:57:01 +00:00
Pamela Fox
15f2ca2c24
Update appfactories.rst
Remove unneeded backticks
2023-03-31 12:20:27 -07:00
David Lord
7ed89d3f9d
Merge pull request #5014 from evgenymozhaev/require-a-non-empty-name-for-blueprints
Require a non empty name for blueprints
2023-03-11 08:34:56 -08:00
Evgeny Mozhaev
b8b410014d
require a non-empty name for blueprints 2023-03-11 08:26:36 -08:00
David Lord
7ee9ceb71e
Merge branch '2.2.x' 2023-03-11 08:23:08 -08:00
David Lord
cac56a2b53
Merge pull request #5026 from pallets/werkzeug-compat
replace `werkzeug.urls` with `urllib.parse`
2023-03-11 08:21:58 -08:00
David Lord
c4b39ba2f3
replace werkzeug.urls with urllib.parse 2023-03-11 08:19:22 -08:00
David Lord
e7f8ae0166
Merge pull request #5025 from pallets/update-requirements
update requirements
2023-03-11 07:41:19 -08:00
David Lord
1432cddb13
update requirements 2023-03-11 07:38:14 -08:00
David Lord
c83f661427
Merge pull request #5024 from pallets/docs-sentry
remove broken link
2023-03-11 07:32:12 -08:00
David Lord
31022056ae
remove broken link 2023-03-11 07:30:21 -08:00
David Lord
a5f30b157d
Merge pull request #5020 from gultas/patch-1
Update installation.rst
2023-03-08 11:04:53 -08:00
martinamca
0bc6be604d
Update installation.rst
The link to Blinker does not work.
2023-03-08 21:28:33 +03:00
David Lord
2f67e0fe4a
Merge pull request #5005 from pallets/dependabot/github_actions/slsa-framework/slsa-github-generator-1.5.0
Bump slsa-framework/slsa-github-generator from 1.4.0 to 1.5.0
2023-03-01 09:04:40 -08:00
David Lord
bc3ec352f0
Merge pull request #5006 from pallets/dependabot/github_actions/actions/cache-3.2.6
Bump actions/cache from 3.2.4 to 3.2.6
2023-03-01 09:02:06 -08:00
dependabot[bot]
b8eb83940c
Bump actions/cache from 3.2.4 to 3.2.6
Bumps [actions/cache](https://github.com/actions/cache) from 3.2.4 to 3.2.6.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](627f0f41f6...69d9d449ac)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-01 16:57:34 +00:00
dependabot[bot]
3cdcc729a7
Bump slsa-framework/slsa-github-generator from 1.4.0 to 1.5.0
Bumps [slsa-framework/slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator) from 1.4.0 to 1.5.0.
- [Release notes](https://github.com/slsa-framework/slsa-github-generator/releases)
- [Changelog](https://github.com/slsa-framework/slsa-github-generator/blob/main/CHANGELOG.md)
- [Commits](https://github.com/slsa-framework/slsa-github-generator/compare/v1.4.0...v1.5.0)

---
updated-dependencies:
- dependency-name: slsa-framework/slsa-github-generator
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-01 16:57:31 +00:00
David Lord
5cdfeae2e8
Merge branch '2.2.x' 2023-02-23 15:58:29 -08:00
David Lord
736b5f9ff8
update dependencies 2023-02-23 15:58:21 -08:00
David Lord
2ad4d8d717
Merge pull request #4992 from AntoineMath/file_mode 2023-02-23 11:13:18 -08:00
AntoineMath
b10b6d4af1
add text parameter to config.from_file 2023-02-23 11:10:21 -08:00
David Lord
4c288bc97e
Merge pull request #4998 from pallets/deprecate-locked_cached_property
deprecate `locked_cached_property`
2023-02-23 10:59:28 -08:00
David Lord
4256fc6304
deprecate locked_cached_property 2023-02-23 10:05:57 -08:00
David Lord
c690f529f2
Merge pull request #4997 from pallets/deprecate-got_first_request
deprecate `got_first_request`
2023-02-23 09:34:17 -08:00
David Lord
fc03d0dfab
setup method on registered blueprint is error 2023-02-23 09:29:36 -08:00
David Lord
2a33c17854
deprecate got_first_request property 2023-02-23 09:28:42 -08:00
David Lord
704b68948f
Merge pull request #4996 from pallets/deprecate-markupsafe-export
deprecate markupsafe exports
2023-02-23 08:59:37 -08:00
David Lord
9c02f07f9b
deprecate markupsafe exports 2023-02-23 08:55:01 -08:00
David Lord
1ee22e1736
Merge pull request #4995 from pallets/remove-deprecated
remove previously deprecated code
2023-02-23 08:45:38 -08:00
David Lord
6650764e97
remove previously deprecated code 2023-02-23 08:35:16 -08:00
David Lord
604de4b1dc
Merge branch '2.2.x' 2023-02-16 06:27:41 -08:00
David Lord
c4c7f504be
update dependencies 2023-02-16 06:27:25 -08:00
David Lord
ed5b240417
Merge branch '2.2.x' 2023-02-15 14:48:09 -08:00
David Lord
6a392afbb6
Merge pull request #4980 from pallets/release-2.2.3
release version 2.2.3
2023-02-15 14:44:24 -08:00
David Lord
41d4f62909
release version 2.2.3 2023-02-15 14:33:32 -08:00
David Lord
24df8fc89d
show 'run --debug' in docs
Reverts commit 4d69165ab6. Now that a
release has this option, it's ok to show it in the docs. It had been
reverted because the 2.2.x docs showed it before 2.2.3 was released.
2023-02-15 14:33:32 -08:00
David Lord
aa040c085c
run latest black format 2023-02-10 15:07:24 -08:00
David Lord
a18ae3d752
Merge branch '2.2.x' 2023-02-10 15:06:38 -08:00
David Lord
b945f988f9
Merge pull request #4973 from pallets/docs-lifetime
document the lifecycle of a flask application and request
2023-02-10 14:54:49 -08:00
David Lord
a6cd8f212e
document the lifecycle of a flask application and request 2023-02-10 14:48:02 -08:00
David Lord
f425c117e2
Merge pull request #4972 from pallets/docs-push-reqctx
fix test client arg for query string example
2023-02-10 10:53:02 -08:00
David Lord
ba2b3094d1
fix test client arg for query string example 2023-02-10 10:50:48 -08:00
David Lord
129568f7f4
Merge pull request #4971 from pallets/docs-blueprint-app-methods
point to app-scoped blueprint methods
2023-02-10 10:42:47 -08:00
David Lord
ab93222bd6
point to app-scoped blueprint methods 2023-02-10 10:38:44 -08:00
David Lord
d5527264f0
Merge pull request #4968 from pallets/docs-celery
rewrite celery docs, add example application
2023-02-10 09:35:31 -08:00
David Lord
3f195248dc
add celery example 2023-02-10 09:16:53 -08:00
David Lord
dca8cf013b
rewrite celery background tasks docs 2023-02-09 10:50:42 -08:00
David Lord
761e02ef67
Merge pull request #4966 from ivanovmg/fix/cmd-format
Fix command-line formatting
2023-02-08 18:44:10 -08:00
Maxim G. Ivanov
428d9430bc Fix command-line formatting 2023-02-09 09:38:57 +07:00
David Lord
4ddb3f73ba
Merge branch '2.2.x' 2023-02-07 07:18:54 -08:00
David Lord
dd2423ebde
Merge pull request #4963 from pallets/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2023-02-07 07:11:50 -08:00
pre-commit-ci[bot]
a15da89dbb [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2023-02-07 04:43:02 +00:00
pre-commit-ci[bot]
c1d01f6999
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/psf/black: 22.12.0 → 23.1.0](https://github.com/psf/black/compare/22.12.0...23.1.0)
2023-02-07 04:42:52 +00:00
David Lord
3502cc951b
Merge pull request #4952 from muffinmad/patch-1
Fix function argument name
2023-02-02 09:01:21 -08:00
David Lord
f45bc5995c
Merge pull request #4960 from owgreen/fix_appfactories_doc
Fix appfactories doc
2023-02-02 09:01:03 -08:00
owgreen
9abe28130d
fix doc 2023-02-02 08:57:38 -08:00
David Lord
88069bd417
Merge pull request #4959 from pallets/dependabot/github_actions/actions/cache-3.2.4
Bump actions/cache from 3.2.3 to 3.2.4
2023-02-01 08:55:09 -08:00
David Lord
f822891065
Merge pull request #4958 from pallets/dependabot/github_actions/actions/setup-python-4.5.0
Bump actions/setup-python from 4.4.0 to 4.5.0
2023-02-01 08:54:52 -08:00
dependabot[bot]
74c256872b
Bump actions/cache from 3.2.3 to 3.2.4
Bumps [actions/cache](https://github.com/actions/cache) from 3.2.3 to 3.2.4.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](58c146cc91...627f0f41f6)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-01 16:01:30 +00:00
dependabot[bot]
94a23a3e24
Bump actions/setup-python from 4.4.0 to 4.5.0
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4.4.0 to 4.5.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](5ccb29d877...d27e3f3d7c)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-01 16:01:23 +00:00
Andrii Kolomoiets
d93760d8bd
Fix function argument name 2023-01-23 17:01:49 +02:00
David Lord
ef85270d9a
Merge branch '2.2.x' 2023-01-20 13:50:23 -08:00
David Lord
39fc0c6bad
Merge pull request #4949 from pallets/publish-workflow
Publish workflow
2023-01-20 13:49:30 -08:00
David Lord
0b4b61146f
build, provenance, publish workflow 2023-01-20 13:45:15 -08:00
David Lord
99b34f7148
move and update flake8 config 2023-01-20 13:42:50 -08:00
David Lord
3a35977d5f
stop ignoring flake8 e402 2023-01-19 06:35:15 -08:00
David Lord
78b42b9ac2
Merge pull request #4947 from pallets/pyproject
switch to pyproject.toml
2023-01-18 10:38:38 -08:00
David Lord
261e4a6cf2
fix flake8 bugbear errors 2023-01-18 10:32:51 -08:00
David Lord
8f13f5b6d6
update docs and examples for pyproject
setup.py -> pyproject.toml
venv -> .venv
2023-01-18 10:32:51 -08:00
David Lord
6d6d986fc5
switch to pyproject.toml 2023-01-18 10:32:51 -08:00
David Lord
9da947a279
set workflow permissions 2023-01-09 12:45:16 -08:00
David Lord
3812a52e96
Merge branch '2.2.x' 2023-01-09 12:39:48 -08:00
David Lord
8bfc0581e7
Merge pull request #4942 from bhushan-mohanraj/patch-2
Clarify the docstring for `View.as_view`.
2023-01-09 11:11:02 -08:00
Bhushan Mohanraj
a748770199
clarify View.as_view docstring 2023-01-09 11:07:49 -08:00
David Lord
4a0f658897
Merge pull request #4943 from pallets/update-python
update tested python versions
2023-01-09 10:42:14 -08:00
David Lord
2a9d16d011
update tested python versions
test 3.11 final
test 3.12 dev
update for tox 4
2023-01-09 10:37:59 -08:00
David Lord
836866dc19
Merge pull request #4935 from pgjones/subdomain
Fix subdomain inheritance for nested blueprints
2023-01-04 14:06:35 -07: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
David Lord
fa1ee70668
Merge pull request #4933 from pallets/dependabot/github_actions/dessant/lock-threads-4
Bump dessant/lock-threads from 3 to 4
2023-01-03 08:24:17 -07:00
dependabot[bot]
bb1f83c265
Bump dessant/lock-threads from 3 to 4
Bumps [dessant/lock-threads](https://github.com/dessant/lock-threads) from 3 to 4.
- [Release notes](https://github.com/dessant/lock-threads/releases)
- [Changelog](https://github.com/dessant/lock-threads/blob/master/CHANGELOG.md)
- [Commits](https://github.com/dessant/lock-threads/compare/v3...v4)

---
updated-dependencies:
- dependency-name: dessant/lock-threads
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-01 16:01:00 +00:00
David Lord
74e5263c88
new run debug docs 2022-12-29 09:52:18 -08:00
David Lord
eeebb5adc7
Merge branch '2.2.x' 2022-12-29 09:51:58 -08:00
David Lord
4d69165ab6
revert run debug docs 2022-12-29 09:51:34 -08:00
David Lord
910179f9b0
Merge branch '2.2.x' 2022-12-24 15:31:07 -07:00
David Lord
229dcbb5ce
Merge pull request #4779 from greyli/add-debug-to-run
Add `--debug` option to flask run
2022-12-24 15:28:21 -07:00
Grey Li
bd26928fdb
Prefer flask run --debug in docs 2022-12-24 15:24:49 -07:00
Grey Li
4bc0e4943d
Add --debug option to flask run 2022-12-24 15:04:48 -07:00
Jonah Lawrence
79032ca5f1
Add .svg to select_jinja_autoescape (#4840)
As SVG files are a type of XML file and are similar in nearly
all aspects to XML, .svg should also be autoescaped.
2022-12-24 11:27:20 -07:00
David Lord
7464e17c5e
Merge branch '2.2.x' 2022-12-24 11:21:59 -07:00
David Lord
631b6dd546
Merge pull request #4921 from ivanovmg/fix/template_folder
Allow pathlib.Path for template_folder
2022-12-24 11:20:56 -07:00
Maxim G. Ivanov
09112cfc47
template_folder type allows pathlib 2022-12-24 11:17:52 -07:00
David Lord
d9e56c7f4b
Merge pull request #4920 from ivanovmg/fix/link
Fix URL "committing as you go"
2022-12-24 11:07:46 -07:00
Maxim G. Ivanov
677a046848
Fix URL "committing as you go" 2022-12-24 11:03:47 -07:00
David Lord
d8fe178aa6
Merge pull request #4920 from ivanovmg/fix/link
Fix URL "committing as you go"
2022-12-24 10:57:53 -07:00
Maxim G. Ivanov
6fcf6d00bd
Fix URL "committing as you go" 2022-12-24 10:56:00 -07:00
David Lord
55cdb420a0
Merge pull request #4926 from pallets/docs-inheritance
python 2 style inheritance clean up from docs
2022-12-24 10:36:40 -07:00
Asif Saif Uddin
1a68768e6b
python 2 style inheritance clean up from docs 2022-12-24 10:31:23 -07:00
David Lord
1373f70dc6
Merge pull request #4922 from pallets/update-requirements
update requirements
2022-12-24 10:25:43 -07:00
David Lord
8e3128b989
ignore flake8 b905 zip(strict=True) until python 3.10 2022-12-24 10:22:37 -07:00
David Lord
43bc7330ce
update requirements 2022-12-24 10:22:37 -07:00
Grey Li
d36a379a0f
Merge pull request #4913 from ivanovmg/fix/var-name 2022-12-22 21:48:45 +08:00
Maxim G. Ivanov
43ef559de3 Fix varname in docs 2022-12-22 21:28:18 +08:00
David Lord
dcdcac2f3a
Merge pull request #4907 from rayanth/patch-1
Update api.rst
2022-12-13 16:36:49 -08:00
rayanth
95b666871c
Update api.rst
Corrected typo in "tojson" example, `const names = {{ names|tojson }};` was `const names = {{ names|tosjon }};`
2022-12-13 13:27:38 -08:00
Grey Li
3d4acf0ca0
Merge pull request #4899 from pallets/pre-commit-ci-update-config 2022-12-10 13:42:03 +08:00
pre-commit-ci[bot]
3e932aa103
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/asottile/pyupgrade: v3.2.2 → v3.3.0](https://github.com/asottile/pyupgrade/compare/v3.2.2...v3.3.0)
2022-12-06 00:34:53 +00:00
David Lord
b5ec83b697
Merge pull request #4882 from Abdur-rahmaanJ/patch-4
Fix backtick not rendering.
2022-11-27 06:51:08 -08:00
David Lord
29697fffb4
Merge pull request #4883 from Dosenpfand/doc-extension-dev-2.2.x
Documentation: Fix class-based views example for Extension Development
2022-11-27 06:50:46 -08:00
Dosenpfand
9a294a6401 Fix class-based views example 2022-11-27 13:10:14 +01:00
Abdur-Rahmaan Janhangeer
d951a763fb
Fix backstick not rendering. 2022-11-27 13:51:09 +04:00
David Lord
066a35dd32
Merge branch '2.2.x' 2022-11-25 07:51:37 -08:00
David Lord
618fdc8600
Merge pull request #4879 from pallets/requirements
update requirements
2022-11-25 07:43:46 -08:00
David Lord
d178653b5f
update requirements 2022-11-25 07:39:54 -08:00
pre-commit-ci[bot]
9f99425aaf
[pre-commit.ci] pre-commit autoupdate (#4862)
updates:
- [github.com/peterdemin/pip-compile-multi: v2.4.6 → v2.5.0](https://github.com/peterdemin/pip-compile-multi/compare/v2.4.6...v2.5.0)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2022-11-07 20:38:32 -08:00
Grey Li
35c6595202
Merge pull request #4858 from pallets/pre-commit-ci-update-config 2022-11-01 09:41:21 +08:00
pre-commit-ci[bot]
9daddd1271
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/asottile/pyupgrade: v2.38.2 → v3.2.0](https://github.com/asottile/pyupgrade/compare/v2.38.2...v3.2.0)
- [github.com/asottile/reorder_python_imports: v3.8.3 → v3.9.0](https://github.com/asottile/reorder_python_imports/compare/v3.8.3...v3.9.0)
- [github.com/psf/black: 22.8.0 → 22.10.0](https://github.com/psf/black/compare/22.8.0...22.10.0)
2022-11-01 00:06:23 +00:00
Grey Li
2a54cfa5ce
Merge pull request #4847 from mhsmathew/patch-1 2022-10-30 23:00:37 +08:00
Jonah Lawrence
cc66213e57
Add .svg to select_jinja_autoescape (#4840)
As SVG files are a type of XML file and are similar in nearly 
all aspects to XML, .svg should also be autoescaped.
2022-10-30 14:55:51 +00:00
Mat Steininger
5dfd2126a6 Fixed inconsistent double spacing in docs/api.rst 2022-10-30 22:45:33 +08:00
David Lord
e7c82f9c47
Merge pull request #4833 from pallets/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2022-10-19 07:16:04 -07:00
David Lord
3dc6db9d0c
Merge pull request #4835 from TehBrian/2.2.x
fix typo in quickstart
2022-10-04 20:09:06 -07:00
TehBrian
75e92090ee
fix typo in quickstart 2022-10-04 21:12:13 -04:00
pre-commit-ci[bot]
c7da6d74a8
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/asottile/pyupgrade: v2.37.3 → v2.38.2](https://github.com/asottile/pyupgrade/compare/v2.37.3...v2.38.2)
- [github.com/asottile/reorder_python_imports: v3.8.2 → v3.8.3](https://github.com/asottile/reorder_python_imports/compare/v3.8.2...v3.8.3)
2022-10-03 23:30:28 +00:00
Yang Yang
0d8c8ba71b
Fix docstring of test_request_context (#4821)
Add missing `app.`.
2022-09-18 04:53:47 -07:00
Maksim Salau
9c3deeee96
Fix argument in register_api() in docs/view.rst (#4818) 2022-09-14 06:08:38 -07:00
waffle-stomper
2c78771238
Fix missing assignment in MethodView example (#4815) 2022-09-14 06:07:20 -07:00
David Lord
c34c84b690
Merge branch '2.2.x' 2022-09-11 06:33:56 -07:00
David Lord
7c01fbcd06
update requirements 2022-09-11 06:33:44 -07:00
pre-commit-ci[bot]
8811ae037a
[pre-commit.ci] pre-commit autoupdate (#4806)
updates:
- [github.com/psf/black: 22.6.0 → 22.8.0](https://github.com/psf/black/compare/22.6.0...22.8.0)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2022-09-07 12:07:20 -07:00
David Lord
00be8d24ac
Merge branch '2.2.x' 2022-09-02 08:53:04 -07:00
Isaac Woodruff
e7b2ce9a50
Add missing .dev to version (#4801) 2022-09-02 08:52:13 -07:00
David Lord
73b9bacbf7
Merge branch '2.2.x' 2022-08-27 06:04:55 -07:00
David Lord
ce6ad90ecf
remove heroku link 2022-08-27 06:03:46 -07:00
Kevin Kirsche
00bdc2b448
fix: remove obsolete zip_safe (#4783)
remove obsolete `zip_safe`
2022-08-22 09:05:52 -07:00
David Lord
212b72a1fe
start version 2.2.3 2022-08-22 09:00:33 -07:00
David Lord
56a95f6ff6
Merge pull request #4780 from tjrhines1/config-fix-docstring
Fix misrendered docstring
2022-08-21 07:56:09 -07:00
Thomas Rhines
746455d103 Fix misrendered docstring
The API reference for `flask.Config.from_mapping` needs a newline to separate
the summary from the return description.  I also wrapped the docstring at 72
characters as suggested in CONTRIBUTING.rst.
2022-08-21 10:24:03 -04:00
David Lord
e0c157f7ee
Merge pull request #4772 from DillonB07/patch-1
correct `waitress-serve` command
2022-08-17 09:24:58 -07:00
Dillon Barnes
86bf3f205f
Correct waitress-serve command 2022-08-17 17:00:25 +01:00
David Lord
2d3f72574d
fix typo 2022-08-15 12:37:11 -07:00
David Lord
d94634b1be
fix view docs 2022-08-15 07:34:50 -07:00
David Lord
1d07857b1d
fix typo 2022-08-15 07:29:34 -07:00
Grey Li
b0b27785ae
Merge pull request #4760 from oguzhancelikarslan/patch-1
Fix typo on qucikstart documentation
2022-08-13 10:22:10 +08:00
Oğuzhan Çelikarslan
77cdefccee Fix typo 2022-08-13 10:08:11 +08:00
Grey Li
062a096f40
Merge pull request #4758 from tautv/patch-1
Fix typo in docs/patterns/javascript.rst
2022-08-09 22:08:08 +08:00
Grey Li
5b2e9e946b
Merge pull request #4757 from prohde/fix-4756 2022-08-09 22:03:39 +08:00
tautv
22b6296830
Update javascript.rst
Spelling
2022-08-09 09:45:02 +01:00
Philipp Rohde
00b07c863e
fix typo
fixes #4756
2022-08-09 09:48:02 +02:00
David Lord
36af821edf
Merge branch '2.2.x' 2022-08-08 16:28:50 -07:00
David Lord
a1c478bc93
Merge pull request #4755 from pallets/release-2.2.2
release version 2.2.2
2022-08-08 16:24:25 -07:00
David Lord
43d2fff317
release version 2.2.2 2022-08-08 16:21:40 -07:00
David Lord
e9af7c23ae
Merge pull request #4754 from pallets/werkzeug-version
require werkzeug >= 2.2.2
2022-08-08 16:19:32 -07:00
David Lord
de16718b39
require werkzeug >= 2.2.2 2022-08-08 16:14:00 -07:00
David Lord
c779ac4f5f
Merge branch '2.2.x' 2022-08-08 10:28:08 -07:00
David Lord
6ab3cb8d0c
fix issue number 2022-08-08 10:27:57 -07:00
David Lord
87584e89fe
Merge branch '2.2.x' 2022-08-05 11:35:36 -07:00
David Lord
e3eaafb56e
Merge pull request #4749 from pallets/shell-env
remove env from shell banner
2022-08-05 11:35:15 -07:00
David Lord
e3df23374c
remove env from shell banner 2022-08-05 11:29:39 -07:00
David Lord
a0458efef6
refactor or remove old docs (#4748) 2022-08-05 11:28:22 -07:00
David Lord
795d3e25aa
Merge branch '2.2.x' 2022-08-04 07:33:17 -07:00
David Lord
45b2c99c1f
Merge pull request #4742 from pallets/env-default
fix default value of app.env
2022-08-04 07:27:50 -07:00
David Lord
a6a7a57380
fix default value of app.env 2022-08-04 07:24:20 -07:00
David Lord
4984753dbf
start version 2.2.2 2022-08-04 07:21:17 -07:00
David Lord
21aaf0ef9a
Merge branch '2.2.x' 2022-08-03 17:09:43 -07:00
David Lord
85f79e1a23
Merge pull request #4736 from pallets/release-2.2.1
release version 2.2.1
2022-08-03 16:51:22 -07:00
David Lord
52c54b2ce1
release version 2.2.1 2022-08-03 16:40:28 -07:00
David Lord
0d87b22314
update requirements 2022-08-03 16:39:35 -07:00
David Lord
723a3a6ffd
Merge pull request #4735 from pallets/json_encoder-warning
show deprecation warning when using json_encoder/decoder
2022-08-03 10:02:18 -07:00
David Lord
714ccefeca
show deprecation warning on json_encoder/decoder access 2022-08-03 09:22:03 -07:00
David Lord
9a1b25fce4
start version 2.2.1 2022-08-03 06:47:31 -07:00
David Lord
cb4ee20117
pre-commit updates latest release branch 2022-08-01 17:46:58 -07:00
David Lord
01dec18891
start version 2.3.0 2022-08-01 17:46:38 -07:00
David Lord
b17bb9ed56
Merge pull request #4710 from pallets/release-2.2.0
release version 2.2.0
2022-08-01 17:12:09 -07:00
David Lord
292c7e5c5d
release version 2.2.0 2022-08-01 17:09:49 -07:00
David Lord
f3bb9b2566
Merge branch '2.1.x' 2022-08-01 17:07:58 -07:00
David Lord
ac1bb97679
Merge pull request #4721 from pallets/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2022-08-01 17:07:27 -07:00
David Lord
cfd5783a98
Merge pull request #4722 from pallets/deprecate-config-attrs
deprecate config attributes
2022-08-01 17:04:12 -07:00
David Lord
bfdd37110c
deprecate config attributes 2022-08-01 16:58:55 -07:00
pre-commit-ci[bot]
6f9ef11286
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/asottile/pyupgrade: v2.37.1 → v2.37.3](https://github.com/asottile/pyupgrade/compare/v2.37.1...v2.37.3)
- [github.com/asottile/reorder_python_imports: v3.8.1 → v3.8.2](https://github.com/asottile/reorder_python_imports/compare/v3.8.1...v3.8.2)
- [github.com/PyCQA/flake8: 4.0.1 → 5.0.2](https://github.com/PyCQA/flake8/compare/4.0.1...5.0.2)
- [github.com/peterdemin/pip-compile-multi: v2.4.5 → v2.4.6](https://github.com/peterdemin/pip-compile-multi/compare/v2.4.5...v2.4.6)
2022-08-01 23:18:11 +00:00
David Lord
98ca00d545
Merge pull request #4720 from pallets/deprecate-env
deprecate `FLASK_ENV` and `app.env`
2022-08-01 15:19:16 -07:00
David Lord
30427a2090
remove FLASK_ENV from docs 2022-08-01 15:11:35 -07:00
David Lord
ef95998d79
deprecate FLASK_ENV 2022-08-01 15:11:21 -07:00
David Lord
4c08e3a2ba
update pycharm instructions 2022-08-01 11:39:31 -07:00
David Lord
3e5ca2902e
Merge pull request #4719 from pallets/remove-lazy-option
remove `__traceback_hide__`
2022-08-01 10:56:14 -07:00
David Lord
7d53a129cf
remove __traceback_hide__ 2022-08-01 10:52:12 -07:00
David Lord
633f421031
Merge pull request #4718 from pallets/remove-lazy-option
remove `--eager-loader/--lazy-loader` options
2022-08-01 10:44:31 -07:00
David Lord
5d8e35653f
refactor lazy loading
Remove the `--eager-loading/--lazy-loading` options and the
`DispatchingApp` middleware. The `run` command handles loading
exceptions directly. The reloader always prints out tracebacks
immediately and always defers raising the error.
2022-08-01 10:34:13 -07:00
David Lord
095651be9e
fix has_app_context and has_request_context 2022-07-25 07:35:17 -07:00
David Lord
02a0851252
Merge branch '2.1.x' 2022-07-24 19:37:30 -07:00
David Lord
363be75e84
remove reference links from changelog 2022-07-24 19:36:31 -07:00
David Lord
2869ddf50c
update blinker intersphinx link 2022-07-24 19:35:28 -07:00
David Lord
add53e190c
require Werkzeug 2.2 2022-07-24 18:42:11 -07:00
David Lord
900e11850a
Merge pull request #4695 from zr40/allow-typeddict-as-responsevalue
Allow TypedDict as a ResponseValue
2022-07-14 14:17:38 -07:00
Matthijs van der Vleuten
4bf7415a96
allow TypedDict as a response value 2022-07-14 14:15:05 -07:00
David Lord
76a6b4f2b5
Merge branch '2.1.x' 2022-07-13 14:03:01 -07:00
David Lord
4f01c68a4b
fix issue link 2022-07-13 14:02:50 -07:00
David Lord
48fe96588c
Merge branch '2.1.x' 2022-07-13 13:58:07 -07:00
David Lord
187d7179f6
Merge pull request #4694 from pallets/release-2.1.3
release version 2.1.3
2022-07-13 13:54:33 -07:00
David Lord
134aebe601
release version 2.1.3 2022-07-13 13:51:42 -07:00
David Lord
a7859c6947
Merge pull request #4693 from Yourun-proger/msg_app_ctx
error message for `render_template` outside app context
2022-07-13 13:50:05 -07:00
Yourun-Proger
58f3536a8f
error for render_template outside app context 2022-07-13 13:45:42 -07:00
David Lord
7096b2c4b1
update requirements 2022-07-13 13:39:51 -07:00
David Lord
67310ab496
Merge pull request #4692 from pallets/json-provider
add JSON provider interface
2022-07-13 09:55:00 -07:00
David Lord
69f9845ef2
add json provider interface 2022-07-13 07:42:52 -07:00
David Lord
c356c6da5f
Merge pull request #4687 from Jalkhov/patch-1
Fix CHANGES.rst typo
2022-07-11 16:50:10 -07:00
Pedro Torcatt
03b410066b
Fix docs/CHANGES.rst typo 2022-07-11 18:02:00 -04:00
David Lord
4696156278
Merge pull request #4686 from Jalkhov/main
Small grammatical suggestion
2022-07-10 04:36:55 -07:00
Pedro Torcatt
58ecacd271
Change Roll back by Rever 2022-07-10 07:22:56 -04:00
David Lord
5775d1e9b1
Merge pull request #4685 from pgjones/name
Change _cv_req -> _cv_request
2022-07-09 05:44:52 -07:00
pgjones
91044c4d76 Change _cv_req -> _cv_request
This is a clearer name for the variable.
2022-07-09 13:41:35 +01:00
David Lord
979e0adbac
fix pr link 2022-07-08 12:02:18 -07:00
David Lord
cbebdae698
Merge pull request #4682 from pallets/refactor-context-stack
remove use of `LocalStack`
2022-07-08 11:58:44 -07:00
David Lord
e0dad45481
update docs about contexts 2022-07-08 11:13:09 -07:00
David Lord
82c2e0366c
remove uses of LocalStack 2022-07-08 11:13:09 -07:00
David Lord
d597db67de
contexts no longer use LocalStack 2022-07-08 11:13:09 -07:00
David Lord
0b2f809f9b
access names as proxies directly 2022-07-08 11:13:09 -07:00
David Lord
89463cb77c
require Werkzeug 2.2 2022-07-08 11:13:09 -07:00
David Lord
94233fc8c0
Merge pull request #4681 from earlruby/patch-1
New URL for the Quart project
2022-07-08 10:28:01 -07:00
Earl C. Ruby III
6751f68560
New URL for the Quart project
The Quart project moved from Gitlab (https://gitlab.com/pgjones/quart) to Github (https://github.com/pallets/quart). There is a message at the top of the Gitlab page announcing the move.
2022-07-08 10:21:42 -07:00
David Lord
c757882808
Merge pull request #4680 from pgjones/typing-test
Add further typing tests
2022-07-08 06:41:56 -07:00
pgjones
2f1d1d6256 Add further typing tests
This should help ensure the app decorators are correctly typed.
2022-07-08 14:33:20 +01: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
cafe68e1ed
Merge pull request #4675 from tiesjan/2.1.x
Document serialization of Decimal in JSONEncoder
2022-07-06 05:33:05 -07:00
Ties Jan Hefting
9dfcb90c92
Document serialization of Decimal in JSONEncoder
The Flask JSONEncoder serializes Decimal types to strings, but this
behavior is missing from the docs. The docs are updated accordingly.
2022-07-06 11:47:50 +02:00
David Lord
d7482cd765
Merge branch '2.1.x' 2022-07-04 17:03:08 -07:00
David Lord
e4c4fd5771
Merge pull request #4674 from pallets/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2022-07-04 15:55:54 -07:00
pre-commit-ci[bot]
e9d0000fc1
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/asottile/pyupgrade: v2.32.1 → v2.34.0](https://github.com/asottile/pyupgrade/compare/v2.32.1...v2.34.0)
- [github.com/asottile/reorder_python_imports: v3.1.0 → v3.3.0](https://github.com/asottile/reorder_python_imports/compare/v3.1.0...v3.3.0)
- [github.com/psf/black: 22.3.0 → 22.6.0](https://github.com/psf/black/compare/22.3.0...22.6.0)
- [github.com/pre-commit/pre-commit-hooks: v4.2.0 → v4.3.0](https://github.com/pre-commit/pre-commit-hooks/compare/v4.2.0...v4.3.0)
2022-07-04 22:37:19 +00:00
David Lord
50df54e4c7
explain workflow 2022-07-04 08:35:36 -07:00
David Lord
559a8458c4
Merge pull request #4672 from greyli/return-list
Allow to return list as JSON
2022-07-02 21:48:06 -07:00
David Lord
60b845ebab
update typing tests for json 2022-07-02 21:41:37 -07:00
David Lord
f8cb0b0dd5
update docs about json 2022-07-02 21:41:37 -07:00
Grey Li
ca2bfbb0ac
Support returning list as JSON 2022-07-02 21:41:32 -07:00
David Lord
1626aff602
Merge branch '2.1.x' 2022-07-02 21:03:09 -07:00
David Lord
ab6a8b0330
relax routes cli match order 2022-07-02 21:02:00 -07:00
David Lord
c99f07d3e4
Merge pull request #4667 from pallets/remove-deprecated-code
Remove deprecated code
2022-07-01 14:14:37 -07:00
David Lord
c2810ffdd2
remove deprecated send_file argument names 2022-07-01 13:59:44 -07:00
David Lord
9e686d93b6
remove deprecated RequestContext.g 2022-07-01 13:44:31 -07:00
David Lord
96d39c87a8
Merge remote-tracking branch 'origin/2.1.x' 2022-07-01 13:32:50 -07:00
David Lord
6916697a98
Merge pull request #4666 from pallets/debug-context
new preserve context implementation
2022-07-01 12:35:24 -07:00
David Lord
84c722044a
new debug/test preserve context implementation 2022-07-01 12:01:44 -07:00
David Lord
57a95e82b7
Merge pull request #4665 from pallets/dependabot/github_actions/actions/setup-python-4
Bump actions/setup-python from 3 to 4
2022-07-01 09:45:43 -07:00
dependabot[bot]
2589328485
Bump actions/setup-python from 3 to 4
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 3 to 4.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 16:05:52 +00:00
David Lord
3635583ce2
Merge pull request #4662 from pallets/fix-run-skip
re-add flag to skip unguarded app.run from CLI
2022-06-29 21:21:52 -07:00
David Lord
5544d09477
re-add flag to skip unguarded app.run from CLI 2022-06-29 21:19:28 -07:00
David Lord
12d3f4fdf0
Merge pull request #4658 from pallets/docs-extension-dev
rewrite extension development docs
2022-06-28 16:38:09 -07:00
David Lord
b46bfcfa63
rewrite extension development docs 2022-06-28 16:28:33 -07:00
David Lord
0a01248b5c
Merge pull request #4654 from hankhank10/main 2022-06-28 06:27:24 -07:00
hankhank10
64ab59817d
show separate HTTP method route decorators in quickstart 2022-06-28 06:24:46 -07:00
David Lord
f6be300c42
Merge pull request #4652 from hankhank10/2.1.x 2022-06-23 06:00:33 -07:00
hankhank10
abcb6c9677
Update javascript.rst 2022-06-23 05:54:56 -07:00
David Lord
ab36542260
Merge pull request #4629 from pgjones/generate
allow view to return generator
2022-06-18 12:24:13 -07:00
pgjones
46433e9807
add generate_template and generate_template_string functions 2022-06-18 12:20:53 -07:00
pgjones
762382e436
view functions can return generators as responses directly 2022-06-18 11:25:05 -07:00
David Lord
7f2a0f4806
Merge pull request #4645 from kkirsche/patch-2
Use timezone aware datetime object on session
2022-06-17 12:05:19 -07:00
Kevin Kirsche
ed42e92928
session expiration datetime is UTC timezone-aware 2022-06-17 12:01:48 -07:00
David Lord
cec5f74110
Merge pull request #4647 from pallets/cli-app_context
with_appcontext lasts for the lifetime of the click context
2022-06-17 11:57:22 -07:00
David Lord
c9e000b9ce
with_appcontext lasts for the lifetime of the click context 2022-06-17 11:52:01 -07:00
David Lord
ae547270e9
Merge pull request #4646 from pallets/cli-app-env 2022-06-17 09:30:28 -07:00
David Lord
ab1fbef29a
prefer --app over FLASK_APP in docs 2022-06-17 09:26:26 -07:00
David Lord
99fa3c36ab
add --app, --env, --debug, and --env-file CLI options 2022-06-17 08:19:55 -07:00
David Lord
fe4003b3c9
Merge pull request #4642 from pallets/cli-nest
`FlaskGroup` can be nested
2022-06-15 14:17:45 -07:00
David Lord
aa801c431a
FlaskGroup can be nested 2022-06-15 14:09:56 -07:00
David Lord
4f03a769d4
edit some cli messages
dev server message doesn't show one of the lines in grey
app.run message uses click.secho instead of warning
2022-06-15 12:45:22 -07:00
David Lord
9c50b8fc1c
fix formatting 2022-06-13 06:08:45 -07:00
David Lord
97298e06fe
Merge branch '2.1.x' 2022-06-12 16:04:01 -07:00
David Lord
a9878c018b
remove mod_wsgi-standalone 2022-06-12 16:03:51 -07:00
David Lord
9139af1c62
Merge branch '2.1.x' 2022-06-12 14:10:51 -07:00
David Lord
b0a144d0c0
Merge pull request #4637 from pallets/docs-deploy
rewrite deployment docs
2022-06-12 14:03:55 -07:00
David Lord
2ea77c2782
rewrite deployment docs 2022-06-12 14:00:00 -07:00
David Lord
dcd1a1e0b6
Merge branch '2.1.x' 2022-06-11 14:16:51 -07:00
David Lord
9398630a8f
Merge pull request #4636 from pallets/docs-javascript 2022-06-11 14:03:01 -07:00
David Lord
2f3c87dcb8
rewrite javascript docs 2022-06-11 13:44:46 -07:00
David Lord
ebc0d30dd1
Merge pull request #4630 from mirskiy/docs-mention-relative
Update send_from_directory docstring to mention relative root for `directory`
2022-06-09 09:24:26 -07:00
Dan Mirsky
9934528c8f Update send_from_directory docstring 2022-06-09 09:12:10 -07:00
David Lord
6f6e3289da
remove javascript fetch polyfill 2022-06-08 07:30:29 -07:00
David Lord
db3187fd7a
Merge pull request #4624 from pallets/view-init-scope
add `View.init_every_request` attribute
2022-06-06 15:52:48 -07:00
David Lord
45174bf9a1
use __init_subclass__ instead of metaclass for MethodView 2022-06-06 15:48:36 -07:00
David Lord
bab5a65e6e
rewrite class-based view docs 2022-06-06 15:33:46 -07:00
David Lord
6e23239567
add View.init_every_request attribute 2022-06-06 15:11:01 -07:00
David Lord
aab1d9935e
Merge pull request #4621 from pallets/deprecate-before_first_request
deprecate before_first_request
2022-06-06 10:11:00 -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
c7f2ab8e7a
Merge pull request #4610 from eprigorodov/feature-4602-namespace-path 2022-06-06 09:26:53 -07:00
David Lord
b06df0a792
remove outdated instance path test 2022-06-06 09:17:53 -07:00
David Lord
3ba37d2afe
fix uninstalled package tests under tox 2022-06-06 08:24:05 -07:00
Evgeny Prigorodov
88bcf78439
instance_path for namespace packages uses path closest to submodule 2022-06-06 08:16:00 -07:00
David Lord
fb89745408
Merge pull request #4579 from lecovi/docs/#4574-test-typing 2022-06-05 15:54:08 -07:00
David Lord
48766754b8
add typing tests to mypy config 2022-06-05 15:49:41 -07:00
David Lord
5e40aa22af
Merge pull request #4620 from Numerlor/remove-extra-backtick
Remove extra backtick in docs
2022-06-05 15:45:22 -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
Numerlor
72cae9ce2b
Remove extra backtick 2022-06-05 02:57:49 +02:00
David Lord
696d7c620d
Merge pull request #4617 from nk9/2.1.x
Fix incorrect references to `query` in testing doc
2022-06-01 16:10:31 -07:00
Nick Kocharhook
5d31ce1031
Fix incorrect references to query in testing doc
The [EnvironBuilder doc](https://werkzeug.palletsprojects.com/en/2.1.x/test/#werkzeug.test.EnvironBuilder) shows that the correct name for the keyword argument is `query_string`, not `query`. Using `query` results in an error.

I've fixed the two places this appears in the testing doc.
2022-06-01 12:16:21 -07:00
lecovi
8c6f1d96de
add example code for testing typing tools 2022-06-01 11:34:51 -07:00
David Lord
9e2e1de2fc
Merge branch '2.1.x' 2022-06-01 11:27:08 -07:00
David Lord
21d32ee067
update requirements 2022-06-01 11:23:09 -07:00
David Lord
c6e3fc8072
Merge pull request #4613 from citramon/test_for_from_mapping_config_skip_not_upper
Add test config.from_mapping method: ignoring items with non-upper keys
2022-05-31 09:10:36 -07:00
Stanislav Bushuev
3ecebcdf8d Add test config.from_mapping method: ignoring items with non-upper keys 2022-05-31 17:51:39 +02:00
David Lord
83e9680649
Merge pull request #4603 from f3ndot/use-correct-response-type-for-after-request-callable
Fix type annotation for `after_request` callable type
2022-05-23 13:56:19 -07:00
David Lord
61f62e6005
access flask types through namespace alias 2022-05-23 13:21:22 -07:00
Justin Bull
8cb950671f
use bound typevar to accept Flask and Werkzeug Response classes 2022-05-23 13:21:22 -07:00
David Lord
a4f63e0390
start version 2.1.3 2022-05-23 10:54:02 -07:00
David Lord
60ac0c5092
Merge pull request #4595 from nkabrown/add-installation-tutorial-link
Add link to additional packaging info
2022-05-23 10:44:48 -07:00
Nathan Brown
c45c81938a
Add link to additional packaging info 2022-05-23 10:42:51 -07:00
David Lord
ab76703532
Merge pull request #4581 from lecovi/docs/#3871-celery-config
docs: new configuration format for celery
2022-05-23 10:19:59 -07:00
lecovi
9252be9c9e
docs: new configuration format for celery 2022-05-23 10:16:45 -07:00
David Lord
1888df3440
Merge remote-tracking branch 'origin/2.1.x' 2022-05-23 10:08:52 -07:00
David Lord
d506af1b1f
update requirements 2022-05-23 10:08:43 -07:00
David Lord
31aad113ff
Merge pull request #4606 from pallets/cli-imports
inline conditional imports for cli behaviors
2022-05-23 09:51:58 -07:00
David Lord
1232d69860
inline conditional imports for cli behaviors 2022-05-23 09:46:20 -07:00
David Lord
a52a7db6c9
Merge pull request #4577 from hallacy/hallacy/fix_4571
update setupmethod behavior
2022-05-23 09:12:45 -07:00
David Lord
e044b00047
avoid triggering setupmethod late in tests 2022-05-23 09:09:12 -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
David Lord
ca8e6217fe
Merge pull request #4596 from pallets/url_for-template
use app.url_for as template global
2022-05-15 08:54:26 -07:00
David Lord
69e2300608
use app.url_for as template global
avoid extra call from helpers.url_for
update changelog for method moves
2022-05-15 08:48:30 -07:00
David Lord
00e2aac937
Merge pull request #4580 from ionesu/move_url_for_to_the_flask_app_object
Move url_for to the Flask app object
2022-05-14 12:50:37 -07:00
David Lord
39f9363296
finish moving url_for to app
move entire implementation to app
make special build args actual keyword-only args
handle no app context in method
mention other config in server_name error
implicit external with scheme
use adapter.build url_scheme argument
rewrite documentation
2022-05-14 12:46:01 -07:00
Ivan Sushkov
92acd05d9b
add url_for method to app 2022-05-14 12:45:18 -07:00
David Lord
fac630379d
update app.redirect docs 2022-05-12 16:33:40 -07:00
David Lord
5512a66881
Merge pull request #4576 from dzcode/dzcode/4567/abort-implementation
Add 'aborter' and 'aborter_class' attrs to 'Flask' object
2022-05-12 13:45:37 -07:00
dzcode
eb5dd9f5ef
add aborter object to app 2022-05-12 13:29:54 -07:00
David Lord
a25d234cdd
Merge remote-tracking branch 'origin/2.1.x' 2022-05-11 09:39:26 -07:00
David Lord
542cf30e48
Merge pull request #4575 from thoagland/Issue_4569_add_redirect_to_Flask_App
add `app.redirect` method
2022-05-11 09:22:19 -07:00
Tim Hoagland
fdab801fbb
add redirect method to app 2022-05-10 11:02:24 -07:00
David Lord
e322f32e94
Merge pull request #4593 from pallets/remove-mailing-list
remove references to mailing list
2022-05-10 09:35:05 -07:00
David Lord
2381044d04
remove references to mailing list 2022-05-10 09:28:43 -07:00
David Lord
b5c1a4f1f0
Merge pull request #4591 from moondial-pal/docs-omit-becomingbigrst
Docs omit becomingbigrst
2022-05-10 09:19:03 -07:00
Luis Palacios
410a324ec4
remove becomingbig.rst 2022-05-10 09:16:44 -07:00
David Lord
587a49c1bf
Merge pull request #4585 from pallets/docs-cli-cwd
remove outdated dotenv docs
2022-05-04 07:07:40 -06:00
David Lord
11195f1083
remove outdated dotenv docs
The CLI does not change the working directory when loading a dotenv file.
2022-05-04 06:03:31 -07:00
David Lord
bd56d19b16
Merge pull request #4566 from citramon/improve_coverage 2022-05-03 12:17:03 -06:00
Stanislav Bushuev
a74e266474
skip coverage for TYPE_CHECKING 2022-05-03 12:11:55 -06:00
David Lord
127df57a06
Merge pull request #4560 from qingpeng9802/fix-old-behavior 2022-05-03 11:56:11 -06:00
Qingpeng Li
1e5dd43022
refactor error checks in register_error_handler
Co-authored-by: David Lord <davidism@gmail.com>
2022-05-03 11:52:11 -06:00
David Lord
2482cd4f53
Merge pull request #4578 from marian-vignau/Remove-Tab-directive-on-Contributing.rst
Remove tab directive on contributing.rst
2022-05-02 12:11:56 -06:00
Maria Andrea Vignau
9158d3b0b8 remove tab directive 2022-05-02 11:58:24 -06:00
David Lord
a0aa8de6bc
Merge pull request #4572 from DailyDreaming/linting 2022-05-02 10:29:38 -06:00
DailyDreaming
8ddbad9ccd Fix linting error.
Suppress mypy.

Suppress mypy error.

Suppress mypy error.
2022-05-02 09:11:07 -07:00
David Lord
f976d5bb88
Merge branch '2.1.x' 2022-04-28 10:48:05 -07:00
David Lord
50374e3cfe
Merge pull request #4558 from pallets/release-2.1.2
release version 2.1.2
2022-04-28 10:46:41 -07:00
David Lord
7b28a9057d
release version 2.1.2 2022-04-28 10:44:02 -07:00
David Lord
a0bb10b8d2
Merge pull request #4555 from pallets/pytest_raises_cleanup
clean up `pytest.raises` tests
2022-04-28 09:35:49 -07:00
David Lord
ef6c2b9e4a
clean up pytest.raises tests 2022-04-28 09:32:31 -07:00
David Lord
918fc07dd9
Merge branch '2.1.x' 2022-04-28 08:59:47 -07:00
David Lord
ef7d01f0a0
update requirements 2022-04-28 08:59:40 -07:00
David Lord
ff6290d4c7
Merge pull request #4551 from bbayles/patch-1 2022-04-25 09:03:29 -07:00
Bo Bayles
3fd24c1f6f Fix copy/paste error in wsgi-standalone.rst 2022-04-25 10:55:30 -05:00
David Lord
2b0b77cc1a
Merge branch '2.1.x' 2022-04-24 10:20:07 -07:00
David Lord
c395b13f9e
update requirements 2022-04-24 10:19:58 -07:00
David Lord
cb4f742543
Merge branch '2.1.x' 2022-04-24 10:14:53 -07:00
David Lord
2ec1193095
Merge pull request #4544 from bebleo/mark_run_cert_option_eager 2022-04-24 10:07:31 -07:00
James Warne
5050a18a00
evaluate --cert before --key 2022-04-24 10:01:40 -07:00
David Lord
dba2be9311
Merge pull request #4534 from rzimmerdev/main
Adapted input parameters type restriction for json.loads function - fixes #4519
2022-04-24 09:58:01 -07:00
Rafael Zimmer
eede1a3685
fix annotation for json.loads 2022-04-24 09:53:10 -07:00
David Lord
69f71b4d94
start version 2.1.2 2022-04-24 09:50:55 -07:00
David Lord
2b8b47817a
Merge pull request #4537 from MeViMo/2.1.x
Syntax error in testing.rst
2022-04-13 10:03:22 -07:00
MeViMo
4dd14ed039 Syntax error in testing.rst 2022-04-13 18:49:51 +02:00
David Lord
411dbb37e2
remove old test 2022-04-11 06:11:37 -07:00
David Lord
a03719b010
Merge branch '2.1.x' 2022-04-08 11:06:32 -07:00
David Lord
5334e28f6e
Merge pull request #4527 from MeViMo/main 2022-04-08 11:05:19 -07:00
MeViMo
19d7a0ef78
docs pass cli args as kwarg to test runner 2022-04-08 11:03:06 -07:00
David Lord
5c0b9a6af3
Merge pull request #4526 from lbm98/docfix 2022-04-08 11:02:45 -07:00
LarsMoons
e3c014f9aa
docs "Returning API Errors as JSON" return correct status code 2022-04-08 10:57:02 -07:00
David Lord
b9729a0879
Merge pull request #4518 from pallets/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2022-04-08 10:56:25 -07:00
David Lord
56414782ca
pre-commit update branch 2022-04-08 10:53:28 -07:00
pre-commit-ci[bot]
50bf3bba73
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/asottile/pyupgrade: v2.31.0 → v2.31.1](https://github.com/asottile/pyupgrade/compare/v2.31.0...v2.31.1)
- [github.com/asottile/reorder_python_imports: v2.7.1 → v3.0.1](https://github.com/asottile/reorder_python_imports/compare/v2.7.1...v3.0.1)
- [github.com/psf/black: 22.1.0 → 22.3.0](https://github.com/psf/black/compare/22.1.0...22.3.0)
- [github.com/peterdemin/pip-compile-multi: v2.4.3 → v2.4.5](https://github.com/peterdemin/pip-compile-multi/compare/v2.4.3...v2.4.5)
2022-04-08 10:53:20 -07:00
David Lord
f59574f611
Merge branch '2.1.x' 2022-04-01 13:55:05 -07:00
David Lord
0d4e71bfe1
Merge pull request #4517 from pallets/update-requirements
update requirements
2022-04-01 13:54:39 -07:00
David Lord
26555a85f1
update requirements 2022-04-01 13:44:13 -07:00
David Lord
f70abe634a
Merge pull request #4515 from pallets/dependabot/github_actions/actions/checkout-3
Bump actions/checkout from 2 to 3
2022-04-01 09:08:47 -07:00
dependabot[bot]
9f4f559f59
Bump actions/checkout from 2 to 3
Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-01 16:04:08 +00:00
David Lord
45fc77d926
Merge branch '2.1.x' 2022-03-30 14:39:31 -07:00
David Lord
188bd17ff1
Merge pull request #4511 from pallets/release-2.1.1
release version 2.1.1
2022-03-30 14:37:30 -07:00
David Lord
c6f297719e
release version 2.1.1 2022-03-30 14:35:07 -07:00
David Lord
a8f4ee1b66
Merge pull request #4510 from pallets/release-2.1.1
release version 2.1.1
2022-03-30 14:33:50 -07:00
David Lord
c419931f55
release version 2.1.1 2022-03-30 14:28:18 -07:00
David Lord
c3d0880e72
Merge pull request #4509 from pallets/importlib_metadata-min-version
set importlib_metadata minimum version
2022-03-30 14:23:02 -07:00
David Lord
d023d94371
set importlib_metadata minimum version 2022-03-30 14:10:12 -07:00
David Lord
5589915b38
start version 2.1.1 2022-03-30 14:01:10 -07:00
David Lord
b109b092a9
start version 2.2.0 2022-03-28 12:17:25 -07:00
David Lord
65b0eef303
Merge pull request #4500 from pallets/release-2.1.0
release version 2.1.0
2022-03-28 12:12:02 -07:00
David Lord
7d264d7dc5
release version 2.1.0 2022-03-28 12:09:35 -07:00
David Lord
f5ed54b031
ignore examples tests
causing an unexpected failure in CI
2022-03-28 12:09:35 -07:00
David Lord
cd4ab005a9
fix typing 2022-03-28 12:09:35 -07:00
David Lord
41aaaf7fa0
clean up unused function from prefixed_env pr 2022-03-25 12:24:31 -07:00
David Lord
2f5a2ab82e
Merge pull request #4479 from pgjones/env_config
Allow loading of environment variables into the config
2022-03-25 12:14:29 -07:00
David Lord
e75d575361
windows env vars are uppercase 2022-03-25 12:07:45 -07:00
David Lord
4eb5e9455b
more from_prefixed_env features
* support nested dict access with "__" separator
* don't specify separator in prefix
* catch exceptions for any loads function
2022-03-25 11:54:45 -07:00
pgjones
08a283af5e
Allow loading of environment variables into the config
This new method will pick out any environment variables with a certain
prefix and place them into the config named without the prefix. This
makes it easy to use environment variables to configure the app as is
now more popular than when Flask started.

The prefix should ensure that the environment isn't polluted and the
config isn't polluted by environment variables.

I've followed the dynaconf convention of trying to parse the
environment variable and then falling back to the raw value if parsing
fails.
2022-03-25 11:54:03 -07:00
David Lord
425a62686f
Merge pull request #4496 from pallets/werkzeug-relative-redirect
update tests to use relative redirects
2022-03-25 11:53:03 -07:00
David Lord
81c7ff7f8d
update tests for relative redirects 2022-03-25 11:48:26 -07:00
David Lord
ce7b884b73
Merge pull request #4492 from pallets/debug-messages
update some debug message behavior
2022-03-23 09:18:20 -07:00
David Lord
6578b493c8
better override for json BadRequest error 2022-03-23 09:13:45 -07:00
David Lord
0a300d007d
better replacement of original form KeyError 2022-03-23 08:26:22 -07:00
David Lord
c9a1f7ad65
don't intercept 307/308 routing redirects
These don't change the request body, so the debug error is no longer relevant.
2022-03-23 08:25:22 -07:00
David Lord
598afa0083
Merge pull request #4491 from octopoulpe/patch-1 2022-03-22 06:46:52 -07:00
octopoulpe
d80f41f57d
Update errorhandling.rst 2022-03-22 10:29:00 +01:00
David Lord
7abcf57f54
Merge pull request #4488 from pallets/typing-context-exit
accurate type for `__exit__`
2022-03-15 08:48:47 -07:00
David Lord
faaa5594b2
accurate type for __exit__ 2022-03-15 08:44:09 -07:00
David Lord
cb7cd1e79b
Merge pull request #4487 from pallets/typing-errorhandler
relax `errorhandler` function arg type
2022-03-15 08:36:16 -07:00
David Lord
190dd4df86
don't use AnyStr for ResponseValue type 2022-03-15 08:32:15 -07:00
David Lord
8886328822
relax errorhandler function arg type 2022-03-15 08:32:15 -07:00
David Lord
0ef1e65f6a
Merge pull request #4486 from uedvt359/pr-deletecookie
Preserve HttpOnly flag when deleting session cookie
2022-03-15 06:38:35 -07:00
uedvt359
b707bf443a
Preserve HttpOnly flag when deleting session cookie
fixes #4485
2022-03-15 06:35:29 -07:00
David Lord
b655a9db30
Merge pull request #4477 from tusharsadhwani/decorator-types
Add better types for app decorators
2022-03-08 06:50:25 -08:00
Tushar Sadhwani
af34b8c9e7 Add better types for app decorators 2022-03-08 20:13:30 +05:30
David Lord
8122973f8a
Merge pull request #4473 from pallets/dependabot/github_actions/actions/setup-python-3
Bump actions/setup-python from 2 to 3
2022-03-01 08:49:14 -08:00
dependabot[bot]
7dc26a1f41
Bump actions/setup-python from 2 to 3
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 2 to 3.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-01 16:04:16 +00:00
David Lord
4843590c4a
Merge pull request #4461 from pallets/cli-lazy-context
lazy loading preserves click context
2022-02-22 19:13:29 -08:00
David Lord
aa13521d42
lazy loading preserves click context 2022-02-22 19:04:03 -08:00
David Lord
3897a51801
Merge pull request #4454 from colincadams/patch-3
Fix typing on `Flask.session_interface`
2022-02-19 07:12:40 -08:00
David Lord
642ca6ea68
Merge branch '2.0.x' 2022-02-17 16:26:16 -08:00
David Lord
ad13dbc826
pin setuptools for reorder_python_imports 2022-02-17 16:26:06 -08:00
Colin Adams
6f79cb8a23
Fix typing on app.session_interface 2022-02-16 21:12:01 -08:00
David Lord
b6a8ccd2cf
Merge branch '2.0.x' 2022-02-14 12:06:57 -08:00
David Lord
ef557b3ff2
Merge pull request #4449 from pallets/release-2.0.3
release version 2.0.3
2022-02-14 11:46:23 -08:00
David Lord
702d973b1f
release version 2.0.3 2022-02-14 11:34:37 -08:00
David Lord
c15f74cea6
Merge pull request #4448 from pallets/testing-docs
rewrite testing docs
2022-02-13 14:09:07 -08:00
David Lord
761d7e1652
rewrite testing docs 2022-02-13 14:06:51 -08:00
David Lord
48ee204dd5
Merge pull request #4189 from mgu/feat/use-exclude-patterns-reloader
Add `exclude-patterns` option to `flask run` CLI
2022-02-09 12:53:19 -08:00
Mickaël Guérin
beae1249f7
add exclude-patterns option to flask run 2022-02-09 12:44:03 -08:00
David Lord
e06dad62f6
Merge pull request #4445 from pallets/override-redirect
overriding FlaskClient.open works with redirects
2022-02-09 11:39:48 -08:00
David Lord
1be65b1b69
overriding FlaskClient.open works with redirects 2022-02-09 11:13:03 -08:00
David Lord
7c5f17a55e
update requirements 2022-02-09 07:39:33 -08:00
David Lord
e37e87140e
Merge branch '2.0.x' 2022-02-09 07:37:43 -08:00
David Lord
d6496c8e29
Merge pull request #4443 from pallets/update-requirements
update requirements, stop using dependabot
2022-02-08 12:36:55 -08:00
David Lord
1fd8654719
stop using dependabot for python, too noisy 2022-02-08 12:26:25 -08:00
David Lord
925674761e
cache pip with setup-python action 2022-02-08 12:26:25 -08:00
David Lord
426a1e25b7
fix pytest 7 warnings 2022-02-08 12:26:25 -08:00
David Lord
6f7d99ce4b
use pip-compile-multi for requirements 2022-02-08 12:26:25 -08:00
David Lord
bc094dbe6a
Merge pull request #4432 from sfermigier/main
Match typing declaration with implementation.
2022-02-08 10:27:11 -08:00
David Lord
694eb84f41
reword changelog for importlib.resources 2022-02-08 10:26:21 -08:00
David Lord
17c46b2ddd
Merge pull request #4420 from K900/main
cli: use importlib.metadata instead of pkg_resources
2022-02-08 10:24:57 -08:00
David Lord
528db86f85
Merge pull request #4442 from pallets/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2022-02-08 07:39:59 -08:00
pre-commit-ci[bot]
436c7afc83
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/asottile/reorder_python_imports: v2.6.0 → v2.7.1](https://github.com/asottile/reorder_python_imports/compare/v2.6.0...v2.7.1)
- [github.com/psf/black: 21.12b0 → 22.1.0](https://github.com/psf/black/compare/21.12b0...22.1.0)
2022-02-07 21:19:46 +00:00
Stefane Fermigier
9a134da31b Match typing declaration with implementation. 2022-01-27 11:43:42 +01:00
K900
751d85f3de cli: use importlib.metadata instead of pkg_resources 2022-01-17 19:36:57 +03:00
David Lord
fdac8a5404
Merge pull request #4417 from pallets/remove-as_tuple
remove deprecated as_tuple parameter from test_client
2022-01-14 09:38:02 -08:00
David Lord
aab064fee1
remove deprecated as_tuple parameter from test_client 2022-01-14 09:34:07 -08:00
David Lord
de4b2807d3
Merge pull request #4397 from cameronthecoder/main
Remove X-XSS-Protection suggestion
2022-01-14 08:34:55 -08:00
Cameron Dahl
08ad8aabfe
Remove X-XSS-Protection suggestion 2022-01-14 08:32:36 -08:00
David Lord
981a94df68
Merge pull request #4412 from otherJL0/main
Adding Fish commands to docs
2022-01-14 08:29:30 -08:00
otherJL0
afe77feef3
Adding Fish commands to docs 2022-01-14 08:26:50 -08:00
David Lord
d03df1fff3
Merge branch '2.0.x' 2022-01-13 14:43:23 -08:00
David Lord
66f2ac6696
update tool config 2022-01-13 14:42:36 -08:00
David Lord
e103747c54
Merge branch '2.0.x' 2022-01-13 11:10:12 -08:00
David Lord
a025ee3f25
update requirements 2022-01-13 11:10:06 -08:00
David Lord
660994efc7
Merge branch '2.0.x' 2021-12-22 20:07:07 -07:00
David Lord
9e50ad55ae
pin os and python version in rtd build 2021-12-22 20:06:08 -07:00
David Lord
0fb5c2f034
Merge branch '2.0.x' 2021-12-22 20:02:52 -07:00
David Lord
1a1c7ea618
pin os and python version in rtd build
(cherry picked from commit 93a7f08bbc)
2021-12-22 20:02:25 -07:00
David Lord
93a7f08bbc
pin os and python version in rtd build 2021-12-22 19:58:07 -07:00
David Lord
990a95fbca
Merge pull request #4382
Fix the command for checking port on macOS in server docs
2021-12-22 18:24:48 -08:00
Grey Li
0122a4f34f
Fix the command for checking port on macOS in server docs 2021-12-22 18:59:28 -07:00
David Lord
6389c07530
Merge pull request #4348 from Yourun-proger/fix_msg
Fix error message for `after_this_request` when used outside request context
2021-12-22 17:49:30 -08:00
David Lord
b1a00ebc4c
update error message for after_this_request and copy_current_request_context 2021-12-22 18:44:37 -07:00
Yourun-Proger
633449a36c
fix error message 2021-12-22 18:35:17 -07:00
David Lord
7b0c82dfdc
Merge pull request #4350 from olliemath/patch-1
Only use a custom JSONDecoder if needed
2021-12-22 17:10:24 -08:00
olliemath
a841cfabb5
Only use a custom JSONDecoder if needed
The default JSONDecoder adds no extra functionality to `json.loads`, but using a custom class in the function call you off of an optimized fast path in pypy (it adds some overhead in cpython, but I think it's minimal). This change sticks with the default loading behaviour unless the user has specifically opted in to customising it.

Co-authored-by: David Lord <davidism@gmail.com>
2021-12-22 18:07:04 -07:00
David Lord
9504de9dd0
Merge pull request #4390 from pallets/dependabot/github_actions/dessant/lock-threads-3
Bump dessant/lock-threads from 2 to 3
2021-12-22 15:56:45 -08:00
David Lord
9e00becf3a
update option names for v3 2021-12-22 15:53:23 -08:00
David Lord
79b3cecc3d
updates go to maintenance branch 2021-12-22 15:45:44 -08:00
dependabot[bot]
a65683a65c
Bump dessant/lock-threads from 2 to 3
Bumps [dessant/lock-threads](https://github.com/dessant/lock-threads) from 2 to 3.
- [Release notes](https://github.com/dessant/lock-threads/releases)
- [Changelog](https://github.com/dessant/lock-threads/blob/master/CHANGELOG.md)
- [Commits](https://github.com/dessant/lock-threads/compare/v2...v3)

---
updated-dependencies:
- dependency-name: dessant/lock-threads
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-22 23:43:55 +00:00
David Lord
2952e6a323
update github actions 2021-12-22 15:43:28 -08:00
David Lord
c627b5e773
updates go to maintenance branch 2021-12-22 15:43:13 -08:00
David Lord
edac7e3a56
Merge branch '2.0.x' 2021-12-22 15:21:31 -08:00
David Lord
c5ca175004
Merge pull request #4389 from pallets/update-requirements
update requirements
2021-12-22 15:20:12 -08:00
David Lord
9d36623db1
update requirements 2021-12-22 15:16:48 -08:00
David Lord
624ed4de72
Merge pull request #4384 from jugmac00/patch-1
fix typo
2021-12-15 20:31:59 -08:00
Jürgen Gmach
f16524ea1d
fix typo 2021-12-16 04:28:09 +01:00
David Lord
776bf09fdf
Merge pull request #4343 from pallets/address-already-in-use
document "Adddress already in use" error
2021-11-16 09:05:33 -08:00
David Lord
2e10fc24a1
document address already in use error 2021-11-16 09:04:18 -08:00
David Lord
9fe21310bb
replace nbsp characters 2021-11-16 08:34:55 -08:00
David Lord
9486b6cf57
Merge pull request #4342 from pallets/deprecate-req-ctx-g
deprecate `RequestContext.g`
2021-11-16 07:38:42 -08:00
David Lord
c8ddb948f6
deprecate RequestContext.g 2021-11-16 07:35:02 -08:00
David Lord
04c6a85518
Merge pull request #4303 from pgjones/cpy_ensure
`copy_current_request_context` can decorate async functions
2021-11-16 06:34:30 -08:00
pgjones
47e4bd5059
copy_current_request_context can decorate async functions 2021-11-16 06:31:51 -08:00
David Lord
6b0c8cdac1
Merge branch '2.0.x' 2021-11-16 06:30:19 -08:00
David Lord
d086a512d7
Merge pull request #4318 from eprigorodov/patch-1
document session object lifetime
2021-11-16 06:22:50 -08:00
David Lord
282d8621dd
document session lifetime and possible concurrency issues
Co-authored-by: Evgeny Prigorodov <eprigorodov@gmail.com>
2021-11-16 06:19:01 -08:00
David Lord
c8bf420483
Merge pull request #4310 from HenryKobin/import-error-verbose
made ImportError verbose in cli.py
2021-11-15 14:03:47 -08:00
Henry Kobin
e679a85b80
made ImportError verbose in cli.py 2021-11-15 14:00:23 -08:00
David Lord
b831e8507c
Merge pull request #4298 from delicb/fix/issue4295
fix errorhandler type check
2021-11-15 13:37:42 -08:00
Bojan Delić
46b39e2698
fix errorhandler type check 2021-11-15 13:35:24 -08:00
David Lord
ea66c68553
Merge branch '2.0.x' 2021-11-15 13:26:06 -08:00
David Lord
372066983f
Merge pull request #4341 from pallets/test-min-dev
test against minimum/dev versions of Pallets libraries
2021-11-15 13:24:49 -08:00
David Lord
564bb27efa
deprecate as_tuple 2021-11-15 13:13:18 -08:00
David Lord
a2258dd05d
exclude greenlet tests on python 3.11 2021-11-15 13:09:04 -08:00
David Lord
4e8787b915
test min/dev versions of pallets deps 2021-11-15 13:08:34 -08:00
David Lord
7860c1de87
remove click 7 tox env 2021-11-15 06:46:25 -08:00
David Lord
7620cb70db
Merge pull request #4337 from pallets/remove-deprecated-code
remove deprecated code
2021-11-12 09:54:10 -08:00
David Lord
15a3e82823
extend deprecation for renamed send_file params 2021-11-12 09:52:16 -08:00
David Lord
48f2afbf90
same blueprint cannot be registered with same name 2021-11-12 09:52:16 -08:00
David Lord
f8cdc78ce1
remove deprecated total_seconds 2021-11-12 09:52:16 -08:00
David Lord
b7501776a1
remove deprecated safe_join 2021-11-12 09:52:16 -08:00
David Lord
218534a9f2
remove deprecated json encoding parameter 2021-11-12 09:52:16 -08:00
David Lord
2bd7aed1a4
remove deprecated config.from_json 2021-11-12 09:52:16 -08:00
David Lord
e21e003f62
remove deprecated script_info factory arg 2021-11-12 09:52:16 -08:00
David Lord
ea93a52d7d
Merge pull request #4335 from pallets/drop-python-3.6
drop Python 3.6
2021-11-11 18:37:43 -08:00
David Lord
df806c8035
update docs about gevent/eventlet/greenlet 2021-11-11 18:32:07 -08:00
David Lord
1b552d0b01
remove ContextVar compat 2021-11-11 16:12:08 -08:00
David Lord
e609dddd60
drop Python 3.6 2021-11-11 16:11:43 -08:00
David Lord
86009452fb
Merge pull request #4332 from vinzid/patch-1
Correct the actual unescaped character
2021-11-07 06:20:43 -08:00
Chenwei Xiao
a2e79eefc9 Correct the actual unescaped character
`&raquo;` should be unescaped to `»` after `striptags`.

Ref: https://flask.palletsprojects.com/en/2.0.x/api/#flask.Markup.striptags
2021-11-07 10:40:52 +08:00
David Lord
3c36d043e5
Merge branch '2.0.x' 2021-11-05 09:18:57 -07:00
David Lord
7a5aa570c0
Merge pull request #4331 from pallets/test-python-versions
test Python 3.10 and 3.11
2021-11-05 09:18:35 -07:00
David Lord
1f40c77f1d
test Python 3.10 and 3.11 2021-11-05 09:13:55 -07:00
David Lord
0ae0f5957f
Merge branch '2.0.x' 2021-11-01 12:41:10 -07:00
David Lord
303a1e6c41
Merge pull request #4326 from pallets/update-requirements
update requirements
2021-11-01 12:40:52 -07:00
David Lord
860431f7e0
update requirements 2021-11-01 12:38:38 -07:00
Ryan Nevius
225ff3ea6c Fix example SECRET_KEY generation code
Removes the extra `)` in: `print(secrets.token_hex())`
2021-10-18 10:41:39 +02:00
David Lord
ded812b0cd
Merge pull request #4302 from karintou8710/old-print
Fixes old print statement in signal and SQLite pages
2021-10-16 11:52:50 -07:00
karintou8710
21def4e05c Fixes old print statement in some documentation pages 2021-10-16 02:04:07 +09:00
David Lord
c5ed6c5e77
Merge pull request #4301 from kkirsche/secret_key_via_secrets
use secrets module for SECRET_KEY generation in docs
2021-10-13 08:39:29 -07:00
Kevin Kirsche
58a08a1d73
use secrets instead of os.urandom 2021-10-13 08:12:51 -07:00
David Lord
44bc286c03
Merge branch '2.0.x' 2021-10-05 09:15:54 -07:00
David Lord
8ddf80c3ea
Merge pull request #4294 from pallets/flaky-lazy-test
allow lazy loading test to fail on pypy
2021-10-05 09:15:30 -07:00
David Lord
b2b60450f7
allow lazy loading test to fail on pypy 2021-10-05 09:11:00 -07:00
David Lord
fb82e3cba6
Merge branch '2.0.x' 2021-10-05 08:07:04 -07:00
David Lord
5a1c5eb5c0
Merge pull request #4293 from pallets/flaky-lazy-test
try to address flakiness of lazy loading test
2021-10-05 08:06:49 -07:00
David Lord
6d65595a3c
try to address flakiness of lazy loading test 2021-10-05 08:03:30 -07:00
David Lord
1cf43e08e3
Merge branch '2.0.x' 2021-10-04 07:36:44 -07:00
David Lord
6f7762538b
Merge pull request #4287 from pallets/release-2.0.2
release version 2.0.2
2021-10-04 07:31:29 -07:00
David Lord
174fe4453a
release version 2.0.2 2021-10-04 07:26:47 -07:00
David Lord
5684f48f70
Merge branch '2.0.x' 2021-10-03 20:39:19 -07:00
David Lord
6d637f0fdb
Merge pull request #4230 from matipau/blueprint-fix
Fix callback order for nested blueprints
2021-10-03 20:38:28 -07:00
David Lord
3f6cdbd8b3
use similar code for all callback-applying methods
avoid building nested chain iterables
avoid triggering defaultdict when looking up registries
apply functions as they are looked up
2021-10-03 20:36:21 -07:00
Matthias Paulsen
166a2a6207
Fix callback order for nested blueprints
Handlers registered via url_value_preprocessor, before_request,
context_processor, and url_defaults are called in downward order: First
on the app and last on the current blueprint.

Handlers registered via after_request and teardown_request are called
in upward order: First on the current blueprint and last on the app.
2021-10-03 20:27:24 -07:00
David Lord
4346498c85
Merge pull request #4285 from Makonede/patch-1
fix list numbering
2021-10-01 19:52:05 -07:00
Makonede
7685851594
fix list numbering 2021-10-01 19:46:54 -07:00
David Lord
f8c881b887
Merge pull request #4267 from sprutner/patch-1
Update reqcontext.rst
2021-10-01 10:18:07 -07:00
Seth Rutner
1a40d9b976
fix grammar in links to app and request context 2021-10-01 10:16:20 -07:00
David Lord
b4094b35ef
Merge pull request #4269 from Jalkhov/patch-1
Fix grammatical error
2021-10-01 10:07:27 -07:00
Pedro Torcatt
22933a8cb4
fix docs for Flask.test_client_class 2021-10-01 10:01:54 -07:00
David Lord
56c8bddf6b
Merge pull request #4271 from KPLauritzen/b/broken-link-flaskwtf
Fix broken link to Flask-WTF
2021-10-01 09:59:34 -07:00
Kasper Primdal Lauritzen
3a78f501e9
Fix broken link to Flask-WTF 2021-10-01 09:57:25 -07:00
David Lord
f4a2c35691
Merge branch '2.0.x' 2021-10-01 09:51:09 -07:00
David Lord
3b83d0c75b
Merge pull request #4284 from pallets/update-requirements
Update requirements
2021-10-01 09:50:53 -07:00
David Lord
42a6da2da3
update requirements 2021-10-01 09:46:38 -07:00
David Lord
34ff7d73a7
Merge pull request #4283 from pallets/except-chain
use exception chaining
2021-10-01 09:42:17 -07:00
David Lord
6a4bf9eec1
use exception chaining
fixes flake8-bugbear B904
2021-10-01 09:39:10 -07:00
Pedro Torcatt
aa1d34dc51
Fix grammatical error (#4268)
* Fix grammatical error

* Update scaffold.py

* Update scaffold.py
2021-09-22 10:12:36 -07:00
Grey Li
ca0033c11a
Merge pull request #4266 from kkirsche/patch-1
fix: typo docs/debugging.rst:72
2021-09-15 08:50:07 +08:00
Kevin Kirsche
9d9108fe25
fix: typo docs/debugging.rst:72
docs/debugging.rst:72: controled ==> controlled
2021-09-14 12:29:42 -04:00
David Lord
24aab7a08d
Merge branch '2.0.x' 2021-09-08 16:05:33 -07:00
David Lord
313a70da6e
update requirements 2021-09-08 16:04:26 -07:00
David Lord
7c7b583603
update pre-commit hooks 2021-09-08 16:03:56 -07:00
Mindiell
e1dce5c39a
Fix typo in docs (#4261) 2021-09-08 10:00:36 +02:00
Grey Li
6f852d0d22
Merge pull request #4257 from pallets/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2021-09-07 08:31:30 +08:00
pre-commit-ci[bot]
4a37b627ae
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/asottile/pyupgrade: v2.23.3 → v2.25.0](https://github.com/asottile/pyupgrade/compare/v2.23.3...v2.25.0)
- [github.com/psf/black: 21.7b0 → 21.8b0](https://github.com/psf/black/compare/21.7b0...21.8b0)
2021-09-06 19:06:50 +00:00
Grey Li
d01d26e521
Merge pull request #4255 from pallets/dependabot/pip/pytest-6.2.5
Bump pytest from 6.2.4 to 6.2.5
2021-09-01 16:59:56 +08:00
dependabot[bot]
c58ff55e19
Bump pytest from 6.2.4 to 6.2.5
Bumps [pytest](https://github.com/pytest-dev/pytest) from 6.2.4 to 6.2.5.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/6.2.4...6.2.5)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-01 08:41:42 +00:00
Grey Li
048709c8e7
Merge pull request #4254 from pallets/dependabot/pip/tox-3.24.3
Bump tox from 3.24.1 to 3.24.3
2021-09-01 16:40:46 +08:00
Grey Li
d7199c8785
Merge pull request #4253 from pallets/dependabot/pip/pre-commit-2.14.1
Bump pre-commit from 2.14.0 to 2.14.1
2021-09-01 16:40:16 +08:00
Grey Li
e4373eba1c
Merge pull request #4252 from pallets/dependabot/pip/cryptography-3.4.8
Bump cryptography from 3.4.7 to 3.4.8
2021-09-01 16:39:47 +08:00
dependabot[bot]
6d32d34233
Bump tox from 3.24.1 to 3.24.3
Bumps [tox](https://github.com/tox-dev/tox) from 3.24.1 to 3.24.3.
- [Release notes](https://github.com/tox-dev/tox/releases)
- [Changelog](https://github.com/tox-dev/tox/blob/master/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/tox/compare/3.24.1...3.24.3)

---
updated-dependencies:
- dependency-name: tox
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-01 08:03:32 +00:00
dependabot[bot]
f6e4e8ab9d
Bump pre-commit from 2.14.0 to 2.14.1
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 2.14.0 to 2.14.1.
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/master/CHANGELOG.md)
- [Commits](https://github.com/pre-commit/pre-commit/compare/v2.14.0...v2.14.1)

---
updated-dependencies:
- dependency-name: pre-commit
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-01 08:03:07 +00:00
dependabot[bot]
b5bdcb4602
Bump cryptography from 3.4.7 to 3.4.8
Bumps [cryptography](https://github.com/pyca/cryptography) from 3.4.7 to 3.4.8.
- [Release notes](https://github.com/pyca/cryptography/releases)
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/3.4.7...3.4.8)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-01 08:02:40 +00:00
nabbisen
fafc132dcb
Update cherokee links in docs/deploying (#4249) 2021-08-29 09:21:36 -04:00
David Lord
53eef278ef
Merge remote-tracking branch 'origin/2.0.x' 2021-08-14 05:21:56 -07:00
David Lord
3261a9451a
Merge pull request #4234 from greyli/upload-docs
Remove the mention of Flask-Uploads in the uploading docs
2021-08-14 05:21:11 -07:00
Grey Li
84aa8706c0
Remove the mention of Flask-Uploads in uploading docs 2021-08-14 05:10:45 -07:00
David Lord
a430c43736
Merge remote-tracking branch 'origin/2.0.x' 2021-08-10 07:05:38 -07:00
David Lord
ae5ad9e1ae
add type stub packages 2021-08-10 07:05:23 -07:00
David Lord
d4b540eb7d
install type stubs from requirements 2021-08-10 07:02:55 -07:00
David Lord
13c0eef54c
Merge remote-tracking branch 'origin/2.0.x' 2021-08-10 07:01:36 -07:00
David Lord
4820737188
Merge pull request #4232 from pallets/update-requirements
Update requirements
2021-08-10 06:59:35 -07:00
David Lord
31ce7d61cd
add type stub packages 2021-08-10 06:51:41 -07:00
David Lord
78e82a3ef7
update pre-commit hooks 2021-08-10 06:50:09 -07:00
David Lord
d9133e9369
update requirements 2021-08-10 06:49:38 -07:00
David Lord
7e40882e02
Merge remote-tracking branch 'origin/2.0.x' 2021-08-10 06:33:45 -07:00
David Lord
9c91bb3ce2
Merge pull request #4227 from esadek/pip_link
update pip link
2021-08-10 06:18:38 -07:00
Emil Sadek
9830fd8a80
update pip link 2021-08-10 06:07:21 -07:00
David Lord
afc13b9390
Merge remote-tracking branch 'origin/2.0.x' 2021-08-05 19:48:47 -07:00
David Lord
ef3a82a282
Merge pull request #4174 from na2shell/fix_4170
cli loader handles kwargs in app factory
2021-08-05 19:37:03 -07:00
na2shell
9f0da9b770
cli loader handles kwargs in app factory 2021-08-05 19:32:43 -07:00
David Lord
c3f923d0e0
Merge pull request #4169 from Rohan-Salwan/dev
fix raising error during cli lazy loading
2021-08-05 19:17:52 -07:00
David Lord
2305b056c3
add test for lazy loading error 2021-08-05 19:15:31 -07:00
Rohan salwan
aa6dd09c2c
correctly handle raising deferred errors in cli lazy loading 2021-08-05 19:14:51 -07:00
David Lord
66d9d4fa8d
Merge pull request #4160 from default-303/decimal_fix
json support for Decimal objects
2021-08-05 18:40:44 -07:00
default-303
892ae95509
jsonify encodes decimal to str 2021-08-05 18:36:13 -07:00
David Lord
06cf349bb8
Merge pull request #4152 from Yourun-proger/fix
`static_folder` can be a `pathlib.Path` object
2021-08-05 18:18:04 -07:00
Yourun-Proger
9a2adfba4d
static_folder can be a pathlib.Path 2021-08-05 18:16:20 -07:00
David Lord
187f6ce409
Merge pull request #4139 from awijaya22/issue4099
Avoid race condition in example app
2021-08-05 18:04:51 -07:00
Angeline
5119657547
safer check for existing user in tutorial
Co-authored-by: David Lord <davidism@gmail.com>
2021-08-05 18:01:55 -07:00
David Lord
50b7dcbab3
Merge pull request #4131 from starlightknown/docstring
added return type all in from_ * modules
2021-08-05 17:42:08 -07:00
Karuna Tata
e18ed45c88
document return value for config loading methods 2021-08-05 17:38:24 -07:00
David Lord
a0afb6f375
Merge pull request #4190 from yuxiaoy1/docs
Improve code example of api & jQuery docs
2021-08-05 16:55:51 -07:00
David Lord
5dfa67ed5a
Merge pull request #4221 from kaushikk25/patch-1
docs in quickstart.rst in use wrong variable name.
2021-08-05 08:55:28 -07:00
kaushik kothiya
858cc9cace
Wrong variable name use
File upload section upload_file function in  file request parameter variable name is "file". but file save method in secure_filename function in use "f.filename".
2021-08-05 08:52:42 -07:00
Grey Li
0826be48ed
Merge pull request #4214 from pallets/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2021-08-03 10:29:25 +08:00
pre-commit-ci[bot]
f2b1dc45bd
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/asottile/pyupgrade: v2.20.0 → v2.23.1](https://github.com/asottile/pyupgrade/compare/v2.20.0...v2.23.1)
- [github.com/asottile/reorder_python_imports: v2.5.0 → v2.6.0](https://github.com/asottile/reorder_python_imports/compare/v2.5.0...v2.6.0)
- [github.com/psf/black: 21.6b0 → 21.7b0](https://github.com/psf/black/compare/21.6b0...21.7b0)
2021-08-02 18:50:27 +00:00
Grey Li
e248e09399
Merge pull request #4208 from pallets/dependabot/pip/tox-3.24.1
Bump tox from 3.23.1 to 3.24.1
2021-08-01 16:51:44 +08:00
Grey Li
625595cb1a
Merge pull request #4209 from pallets/dependabot/pip/sphinx-4.1.2
Bump sphinx from 4.0.2 to 4.1.2
2021-08-01 16:51:05 +08:00
Grey Li
4550beb695
Merge pull request #4210 from pallets/dependabot/pip/python-dotenv-0.19.0
Bump python-dotenv from 0.18.0 to 0.19.0
2021-08-01 16:50:58 +08:00
Grey Li
f5f51cd09c
Merge pull request #4211 from pallets/dependabot/pip/asgiref-3.4.1
Bump asgiref from 3.4.0 to 3.4.1
2021-08-01 16:50:46 +08:00
dependabot[bot]
c0f583fdc1
Bump asgiref from 3.4.0 to 3.4.1
Bumps [asgiref](https://github.com/django/asgiref) from 3.4.0 to 3.4.1.
- [Release notes](https://github.com/django/asgiref/releases)
- [Changelog](https://github.com/django/asgiref/blob/main/CHANGELOG.txt)
- [Commits](https://github.com/django/asgiref/commits/3.4.1)

---
updated-dependencies:
- dependency-name: asgiref
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-01 08:05:42 +00:00
dependabot[bot]
3e507a70ca
Bump python-dotenv from 0.18.0 to 0.19.0
Bumps [python-dotenv](https://github.com/theskumar/python-dotenv) from 0.18.0 to 0.19.0.
- [Release notes](https://github.com/theskumar/python-dotenv/releases)
- [Changelog](https://github.com/theskumar/python-dotenv/blob/master/CHANGELOG.md)
- [Commits](https://github.com/theskumar/python-dotenv/compare/v0.18.0...v0.19.0)

---
updated-dependencies:
- dependency-name: python-dotenv
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-01 08:05:05 +00:00
dependabot[bot]
7a3b8bbb89
Bump sphinx from 4.0.2 to 4.1.2
Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 4.0.2 to 4.1.2.
- [Release notes](https://github.com/sphinx-doc/sphinx/releases)
- [Changelog](https://github.com/sphinx-doc/sphinx/blob/4.x/CHANGES)
- [Commits](https://github.com/sphinx-doc/sphinx/compare/v4.0.2...v4.1.2)

---
updated-dependencies:
- dependency-name: sphinx
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-01 08:04:22 +00:00
dependabot[bot]
bb3217b350
Bump tox from 3.23.1 to 3.24.1
Bumps [tox](https://github.com/tox-dev/tox) from 3.23.1 to 3.24.1.
- [Release notes](https://github.com/tox-dev/tox/releases)
- [Changelog](https://github.com/tox-dev/tox/blob/master/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/tox/compare/3.23.1...3.24.1)

---
updated-dependencies:
- dependency-name: tox
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-01 08:03:36 +00:00
David Lord
e7b16b5ef2
Merge pull request #4193 from Elahi-cs/sql-fix
Small SQL formatting fix
2021-07-07 10:59:04 -07:00
Elahi-cs
3127c304ec Small SQL formatting fix 2021-07-07 19:41:11 +02:00
Frank Yu
85c35bd615
Fix link in ASGI docs (#4191)
* Fix link in ASGI docs

* Improve the wording of ASGI docs

Co-authored-by: Grey Li <withlihui@gmail.com>
2021-07-07 19:26:24 +08:00
Frank Yu
29c09a92c4
Omit the type attribute of script tag 2021-07-07 15:18:04 +08:00
Frank Yu
922e91b278
Omit the type attribute of script tag 2021-07-07 15:16:29 +08:00
Adrian Moennich
7a73171edc Merge branch '2.0.x' 2021-07-06 22:06:20 +02:00
Adrian Moennich
6e1b72096d Fix typo in docs 2021-07-06 22:05:31 +02:00
Grey Li
8e62bf6b17
Merge pull request #4187 from pallets/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2021-07-06 08:19:53 +08:00
pre-commit-ci[bot]
f9ccca97e4
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/asottile/pyupgrade: v2.15.0 → v2.20.0](https://github.com/asottile/pyupgrade/compare/v2.15.0...v2.20.0)
- [github.com/psf/black: 21.5b1 → 21.6b0](https://github.com/psf/black/compare/21.5b1...21.6b0)
- [github.com/pre-commit/pre-commit-hooks: v3.4.0 → v4.0.1](https://github.com/pre-commit/pre-commit-hooks/compare/v3.4.0...v4.0.1)
2021-07-05 22:11:00 +00:00
Grey Li
28507154fa
Merge pull request #4185 from pallets/dependabot/pip/mypy-0.910
Bump mypy from 0.812 to 0.910
2021-07-01 18:54:54 +08:00
Grey Li
9fa8b0f7ad Fix typing import issues 2021-07-01 18:43:35 +08:00
Grey Li
7b3bb7b13f
Merge pull request #4182 from pallets/dependabot/pip/python-dotenv-0.18.0
Bump python-dotenv from 0.17.1 to 0.18.0
2021-07-01 18:12:32 +08:00
Grey Li
c6d8beeb9e
Merge pull request #4181 from pallets/dependabot/pip/pip-tools-6.2.0
Bump pip-tools from 6.1.0 to 6.2.0
2021-07-01 18:09:16 +08:00
dependabot[bot]
72078148c0
Bump mypy from 0.812 to 0.910
Bumps [mypy](https://github.com/python/mypy) from 0.812 to 0.910.
- [Release notes](https://github.com/python/mypy/releases)
- [Commits](https://github.com/python/mypy/compare/v0.812...v0.910)

---
updated-dependencies:
- dependency-name: mypy
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-01 10:07:58 +00:00
dependabot[bot]
c9796f85c7
Bump python-dotenv from 0.17.1 to 0.18.0
Bumps [python-dotenv](https://github.com/theskumar/python-dotenv) from 0.17.1 to 0.18.0.
- [Release notes](https://github.com/theskumar/python-dotenv/releases)
- [Changelog](https://github.com/theskumar/python-dotenv/blob/master/CHANGELOG.md)
- [Commits](https://github.com/theskumar/python-dotenv/compare/v0.17.1...v0.18.0)

---
updated-dependencies:
- dependency-name: python-dotenv
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-01 10:06:57 +00:00
dependabot[bot]
ae53c32048
Bump pip-tools from 6.1.0 to 6.2.0
Bumps [pip-tools](https://github.com/jazzband/pip-tools) from 6.1.0 to 6.2.0.
- [Release notes](https://github.com/jazzband/pip-tools/releases)
- [Changelog](https://github.com/jazzband/pip-tools/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jazzband/pip-tools/compare/6.1.0...6.2.0)

---
updated-dependencies:
- dependency-name: pip-tools
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-01 10:06:46 +00:00
Grey Li
e145f9c6ec
Merge pull request #4183 from pallets/dependabot/pip/asgiref-3.4.0
Bump asgiref from 3.3.4 to 3.4.0
2021-07-01 18:05:48 +08:00
dependabot[bot]
d0f19f7905
Bump asgiref from 3.3.4 to 3.4.0
Bumps [asgiref](https://github.com/django/asgiref) from 3.3.4 to 3.4.0.
- [Release notes](https://github.com/django/asgiref/releases)
- [Changelog](https://github.com/django/asgiref/blob/main/CHANGELOG.txt)
- [Commits](https://github.com/django/asgiref/commits)

---
updated-dependencies:
- dependency-name: asgiref
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-01 10:05:36 +00:00
Grey Li
01e804a6e1
Merge pull request #4184 from pallets/dependabot/pip/sphinx-tabs-3.1.0
Bump sphinx-tabs from 3.0.0 to 3.1.0
2021-07-01 18:03:57 +08:00
dependabot[bot]
6fe9235f86
Bump sphinx-tabs from 3.0.0 to 3.1.0
Bumps [sphinx-tabs](https://github.com/executablebooks/sphinx-tabs) from 3.0.0 to 3.1.0.
- [Release notes](https://github.com/executablebooks/sphinx-tabs/releases)
- [Changelog](https://github.com/executablebooks/sphinx-tabs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/executablebooks/sphinx-tabs/compare/v3.0.0...v3.1.0)

---
updated-dependencies:
- dependency-name: sphinx-tabs
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-01 08:03:44 +00:00
Grey Li
7023145f79
Merge pull request #4175 from greyli/views-docs
Fix typo in views docs
2021-06-27 11:52:54 +08:00
Grey Li
ba6db2e307 Merge remote-tracking branch 'origin/2.0.x' into main 2021-06-26 23:35:24 +08:00
Grey Li
c224832acc Fix typo in docs/views.rst 2021-06-26 22:15:43 +08:00
David Lord
49cbb77528
Merge pull request #4165 from yuxiaoy1/patch-1
Change flask.xxx to plain version in testing docs
2021-06-21 10:07:33 -07:00
Frank Yu
35eb582bf3
Change flask.xxx to plain version in testing docs 2021-06-20 23:20:14 +08:00
David Lord
d426b58e57
Merge pull request #4155 from yuxiaoy1/patch-1
Fix bad link in templating docs
2021-06-20 06:45:54 -07:00
David Lord
5261aeb7c7
Merge pull request #4156 from yuxiaoy1/patch-4
Improve the code example in testing docs
2021-06-20 06:45:37 -07:00
Frank Yu
7b696e076a
Update testing.rst 2021-06-18 22:18:15 +08:00
Frank Yu
5fa7d2efe7
Update templating.rst 2021-06-18 20:15:02 +08:00
Frank Yu
f353d126d1
Update docs of rendering templates (#4153)
* Update docs of rendering templates

* Improve the grammar

Co-authored-by: Grey Li <withlihui@gmail.com>
2021-06-18 10:10:29 +08:00
Grey Li
f8ca80ce89
Merge pull request #4147 from greyli/update-contributing-guide
Update contributing guide
2021-06-15 08:49:29 +08: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
Grey Li
34027d8d87 Improve the contributing guide 2021-06-14 14:20:04 +08:00
David Lord
399b851ed7
Merge pull request #4142 from Hugo0/patch-1
Update celery.rst
2021-06-08 10:06:35 -07:00
Hugo Montenegro
92bed66194
Update celery.rst
small typo
2021-06-08 19:01:07 +02:00
pgjones
63893a427b Improve the changelog entry
The fix to the teardown_request also applies to all teardown_*
methods.
2021-06-06 11:09:03 +01:00
David Lord
aac67289e5
Merge pull request #4122 from pallets/dependabot/pip/requirements/urllib3-1.26.5
Bump urllib3 from 1.26.4 to 1.26.5 in /requirements
2021-06-01 19:09:24 -07:00
dependabot[bot]
1b10e085d8
Bump urllib3 from 1.26.4 to 1.26.5 in /requirements
Bumps [urllib3](https://github.com/urllib3/urllib3) from 1.26.4 to 1.26.5.
- [Release notes](https://github.com/urllib3/urllib3/releases)
- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)
- [Commits](https://github.com/urllib3/urllib3/compare/1.26.4...1.26.5)

---
updated-dependencies:
- dependency-name: urllib3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-02 01:54:49 +00:00
Pascal Corpet
6a4e7e948d improve typing for app.errorhandler decorator 2021-06-01 19:25:27 +01:00
pre-commit-ci[bot]
5205cd4ea9 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2021-06-01 18:08:19 +00:00
Miguel Grinberg
270eb2df2a Support View and MethodView instances with async handlers 2021-06-01 18:08:19 +00:00
laggardkernel
491ea32803 Optimize loop in Flask._find_error_handler() 2021-06-01 15:50:20 +00:00
David Lord
cd0086bc4b
Merge pull request #4121 from pallets/dependabot/pip/pre-commit-2.13.0
Bump pre-commit from 2.12.1 to 2.13.0
2021-06-01 06:33:50 -07:00
dependabot[bot]
5d0104f67e
Bump pre-commit from 2.12.1 to 2.13.0
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 2.12.1 to 2.13.0.
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/master/CHANGELOG.md)
- [Commits](https://github.com/pre-commit/pre-commit/compare/v2.12.1...v2.13.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-01 08:04:58 +00:00
laggardkernel
0ce270d1f3 Update doc about minimal Python version for async support 2021-05-30 11:03:49 +00:00
Adrian Moennich
6f5870a791 Merge remote-tracking branch 'upstream/2.0.x' 2021-05-29 20:55:23 +02:00
default-303
8e589daaf2
Fix typing of jinja decorators (#4109) 2021-05-29 20:54:35 +02:00
Marat Sharafutdinov
a960236117 Fix type annotation for before_request and before_app_request decorators 2021-05-25 18:29:52 +00:00
Pascal Corpet
f7adb2c813 improve typing for teardown_request 2021-05-24 19:28:57 +00:00
Grey Li
d81aa70106
Merge pull request #4100 from greyli/fix-typo
Fix typo in docs/tutorial/index.rst
2021-05-24 16:36:56 +08:00
Grey Li
aa6fbf2f5a Fix typo in docs/tutorial/index.rst 2021-05-24 16:33:02 +08:00
David Lord
7161776824
Merge branch '2.0.x' 2021-05-21 08:56:18 -07:00
David Lord
e22021d531
start version 2.0.2.dev0 2021-05-21 08:55:31 -07:00
David Lord
bc90801c2a
Merge pull request #4091 from pallets/release-2.0.1
release version 2.0.1
2021-05-21 08:52:24 -07:00
David Lord
fe2d744b53
release version 2.0.1 2021-05-21 08:50:31 -07:00
David Lord
9f606a8cbb
Merge pull request #4090 from pallets/stream-type
improve typing for `stream_with_context`
2021-05-21 08:48:02 -07:00
David Lord
7ab934f6bc
improve typing for stream_with_context 2021-05-21 08:42:44 -07:00
David Lord
6b1c4e9769
Merge pull request #4087 from greyli/gitignore
Add venv and .venv to .gitignore
2021-05-21 07:10:50 -07:00
David Lord
255461d895
Merge pull request #4074 from pgjones/bp
blueprints are registered with nested names, can change registered name
2021-05-21 07:09:02 -07: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
David Lord
67b0b7e30d cache blueprint path calculation 2021-05-21 15:04:18 +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
Grey Li
a541c2ac8b Fix view decorators docs 2021-05-21 12:11:03 +00:00
Grey Li
36872e7bd4 Add venv and .venv to .gitignore 2021-05-21 16:58:58 +08:00
Alex Hedges
a82cc31af8 Update CHANGES.rst 2021-05-21 08:09:05 +00: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
8796b2a784 Use TypeVar for setupmethod()
TypeVar is needed to preserve function signatures. The type cast for
update_wrapper is needed because wapper_func can not use the full
signature that f does.
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
Oleksis Fraga Menéndez
0d594b8c0f
Add update pip and setuptools section (#4061)
* Add update pip and setuptools section

* Simplify the command to upgrade pip

Co-authored-by: Grey Li <withlihui@gmail.com>
2021-05-21 12:33:09 +08:00
David Lord
83f7efa047
Merge branch '2.0.x' 2021-05-20 21:05:59 -07:00
David Lord
0cfce9a0ec
Merge pull request #4084 from pallets/update-theme
Update theme
2021-05-20 21:05:36 -07:00
David Lord
9889ca8bca
update pallets and sphinx requirements 2021-05-20 21:03:33 -07:00
David Lord
cfda270899
update pallets-sphinx-themes 2021-05-20 21:03:02 -07:00
David Lord
69e6d59ac8
Merge pull request #4081 from pallets/config-json
re-add deprecated `Config.from_json` method
2021-05-20 13:52:09 -07:00
David Lord
10425fb9b1
re-add deprecated Config.from_json method 2021-05-20 13:50:13 -07:00
David Lord
b5518e23f5
Merge pull request #4072 from pallets/typeshed
use _typeshed.wsgi instead of wsgiref.types
2021-05-17 16:06:10 -07:00
David Lord
afc907fd0d
use _typeshed.wsgi instead of wsgiref.types 2021-05-17 16:03:12 -07:00
David Lord
19b905eeef
Merge pull request #4066 from dannysepler/pathlib-in-test
Add pathlib in cli tests
2021-05-17 08:51:30 -07:00
Danny Sepler
1b5f21e015
Add pathlib in cli tests 2021-05-17 08:46:36 -07:00
David Lord
1c3052377b
Merge pull request #4063 from pgjones/bp-fix
Bp fix
2021-05-17 07:56:20 -07: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
David Lord
f64fff6476
Merge pull request #4057 from rafaVls/unused-escape-import
Unused escape import
2021-05-14 13:54:21 -07:00
Rafael Aviles
9c186ccfe8 Use escape function in return statement for username and subpath. 2021-05-14 13:23:34 -07:00
David Lord
6e0fb11717
Merge pull request #4056 from pallets/converter-session
converters have access to session
2021-05-14 08:23:44 -07:00
David Lord
9039534eee
Merge pull request #4055 from pallets/converter-session
converters have access to session
2021-05-14 08:17:37 -07:00
David Lord
a7b02b3a07
converters have access to session 2021-05-14 08:11:09 -07:00
David Lord
636f195bb5
Merge branch '2.0.x' 2021-05-13 18:47:43 -07:00
David Lord
8648750997
Merge branch '1.1.x' into 2.0.x 2021-05-13 18:47:06 -07:00
David Lord
1ca199f9b3
Merge pull request #4051 from pallets/release-1.1.4
release version 1.1.4
2021-05-13 18:44:46 -07:00
David Lord
64a5d7a018
release version 1.1.4 2021-05-13 18:22:56 -07:00
David Lord
5f8d3ea2fc
Merge pull request #4049 from brettlangdon/fix.os.fspath
Use compat fspath instead of os.fspath in static_folder
2021-05-13 18:19:46 -07:00
brettlangdon
3ace642ef3
Use compat fspath instead of os.fspath
When 7ba35c4 was cherry-picked it introduced the
usage of os.fspath which is not supported on
Python <3.6
2021-05-13 18:17:00 -07:00
David Lord
1ce0f774c9
Merge branch '2.0.x' 2021-05-13 16:36:10 -07:00
David Lord
5bd959fbec
Merge branch '1.1.x' into 2.0.x 2021-05-13 16:34:58 -07:00
David Lord
c04b0de558
Merge pull request #4048 from pallets/release-1.1.3
Release 1.1.3
2021-05-13 16:24:21 -07:00
David Lord
661bbcdb90
release version 1.1.3 2021-05-13 16:22:57 -07:00
David Lord
ae647b5750
Merge pull request #4047 from pallets/maximum-versions
set maximum versions for 1.1.x to avoid new major versions
2021-05-13 16:20:28 -07:00
David Lord
6d8b4ce9d0
set maximum versions of pallets dependencies 2021-05-13 16:16:45 -07:00
David Lord
4240ace597
Merge remote-tracking branch 'origin/2.0.x' 2021-05-13 16:01:23 -07:00
David Lord
f3551c8b90
Merge pull request #4036 from greyli/fix-nesting-bp
Fix url_prefix argument for nesting blueprint
2021-05-13 15:27:41 -07:00
Grey Li
e93704fbfd
fix url_prefix argument when nesting blueprints 2021-05-13 15:02:13 -07:00
David Lord
08e459e823
Merge pull request #4045 from pallets/blueprint-name-dot
blueprint name may not contain a dot
2021-05-13 14:34:28 -07:00
David Lord
7c5261407d
blueprint name may not contain a dot 2021-05-13 14:31:50 -07:00
David Lord
d8c37f4372
Merge pull request #4026 from greyli/improve-type-hints
Improve type hints for send_file and send_from_directory
2021-05-13 13:35:12 -07:00
Grey Li
d5aadba4d3
improve type hints for send_file and send_from_directory 2021-05-13 13:33:07 -07:00
David Lord
6414df9756
Merge pull request #4042 from pallets/update-typing
Update typing
2021-05-13 13:09:49 -07:00
David Lord
25884c433f
fix typing that wasn't available in Python 3.6.0 2021-05-13 13:06:32 -07:00
David Lord
6fe7f45725
inform mypy that g has arbitrary attributes 2021-05-13 13:06:32 -07:00
David Lord
2baaa8fd8e
fix annotation for g object 2021-05-13 11:36:05 -07:00
David Lord
89475e5d1e
mark top-level names as exported 2021-05-13 11:36:05 -07:00
Grey Li
c121e8cea7
Merge pull request #4034 from oleksis/2.0.x
Fix Fork link
2021-05-13 16:00:48 +08:00
oleksis
1492160887 Fix Fork link 2021-05-13 03:54:41 -04:00
David Lord
d906c71e99
Merge pull request #4019 from greyli/re-add-filename
Re-add filename parameter for send_from_directory
2021-05-12 10:23:08 -07:00
Grey Li
fc82dd50e3
Re-add filename param for send_from_directory
Add a deprecation warning for the old name
2021-05-12 10:15:55 -07:00
David Lord
80d9519a9c
Merge pull request #4021 from andrewjroth/patch-1
Added Google Cloud Run as a Hosted option
2021-05-12 06:40:57 -07:00
Andrew J Roth
2889ea4dd9
Added Google Cloud Run as a Hosted option 2021-05-12 09:14:34 -04:00
Grey Li
d575de5159 Fix typo in the example of nesting bp docs 2021-05-12 07:51:21 +00:00
Grey Li
57b19fda54 Fix typo in the example of nesting bp docs 2021-05-12 07:49:34 +00:00
David Lord
22d82e70b3
Merge remote-tracking branch 'origin/2.0.x' 2021-05-11 16:33:46 -07:00
David Lord
48325dbfb8
Merge pull request #4011 from ThiefMaster/fix-sphinx-build
Install sphinx 4.1-dev from git
2021-05-11 16:33:24 -07:00
Adrian Moennich
2ddbceeaa9 Install sphinx 4.1-dev from git
Otherwise docs builds are broken due to sphinx-doc/sphinx#9216
2021-05-12 01:06:49 +02:00
David Lord
19f458f9cd
Merge remote-tracking branch 'origin/2.0.x' 2021-05-11 15:26:38 -07:00
David Lord
15b2241b51
Merge pull request #4010 from pallets/default-branch
rename default branch in files
2021-05-11 15:24:15 -07:00
David Lord
52adf2ec21
rename default branch in files 2021-05-11 15:18:41 -07:00
David Lord
905e5c23e8
Merge pull request #4008 from pallets/update-click
update click minimum version
2021-05-11 14:56:25 -07:00
David Lord
80a4e62096
update click minimum version 2021-05-11 14:55:09 -07:00
David Lord
2846abaefe
start version 2.1.0.dev0 2021-05-11 14:48:48 -07:00
David Lord
6fb1101f70
start version 2.0.1.dev0 2021-05-11 14:48:08 -07:00
David Lord
2f0c62f5e6
Merge pull request #4007 from pallets/release-2.0.0
Release 2.0.0
2021-05-11 14:43:42 -07:00
David Lord
f8e63d3991
release version 2.0.0 2021-05-11 14:41:52 -07:00
David Lord
1403d35e2a
update type annotations 2021-05-11 14:41:52 -07:00
David Lord
3a5532b4ed
update pallets projects minimum versions 2021-05-11 14:33:44 -07:00
David Lord
f8f0caf5c6
update requirements 2021-05-11 14:28:21 -07:00
David Lord
9c1e7f6cdc
Merge pull request #4005 from pallets/pre-commit-ci-schedule
update pre-commit monthly
2021-05-11 07:07:12 -07:00
David Lord
8b72f6abd7
update pre-commit monthly 2021-05-11 06:57:24 -07:00
David Lord
28262c34c6
Merge pull request #3999 from greyli/improve-cli-docs
Improve CLI docs
2021-05-10 23:50:04 -07:00
Grey Li
531671c9c5
Improve the wording of using FLASK_APP 2021-05-10 22:58:19 -07:00
David Lord
2c88e8a0aa
Merge pull request #4003 from pallets/autodoc-typehints
show type hints in description
2021-05-10 22:51:02 -07:00
David Lord
79ac96f123
show type hints in description 2021-05-10 22:45:42 -07:00
David Lord
e1b3a053ba
Merge pull request #4002 from pallets/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2021-05-10 13:41:53 -07:00
pre-commit-ci[bot]
95e5843ad5
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/asottile/pyupgrade: v2.14.0 → v2.15.0](https://github.com/asottile/pyupgrade/compare/v2.14.0...v2.15.0)
- [github.com/psf/black: 21.4b2 → 21.5b1](https://github.com/psf/black/compare/21.4b2...21.5b1)
- [github.com/PyCQA/flake8: 3.9.1 → 3.9.2](https://github.com/PyCQA/flake8/compare/3.9.1...3.9.2)
2021-05-10 20:25:42 +00:00
David Lord
3c9b85469e
Merge pull request #3992 from pallets/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2021-05-03 11:13:36 -07:00
pre-commit-ci[bot]
c93a2d76d5
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/asottile/pyupgrade: v2.13.0 → v2.14.0](https://github.com/asottile/pyupgrade/compare/v2.13.0...v2.14.0)
- [github.com/psf/black: 21.4b0 → 21.4b2](https://github.com/psf/black/compare/21.4b0...21.4b2)
2021-05-03 17:21:04 +00:00
David Lord
d7ac6f5bcf
Merge pull request #3991 from pallets/release-2.0.0rc2
release version 2.0.0rc2
2021-05-03 07:13:43 -07:00
David Lord
e2b7d1056c
release version 2.0.0rc2 2021-05-03 07:02:42 -07:00
David Lord
47f0e799db
Merge pull request #3989 from pgjones/async
Async improvements
2021-05-03 06:23:00 -07:00
pgjones
2889da67cb
Remove the async helper method
It is better to encourage users to utilise the app ensure_sync method
(or the newely added async_to_sync method) so that any extensions that
alter these methods take affect throughout the users code.

With the helper method users code fix parts of their code to the
asgiref async_to_sync ignoring any extension changes.
2021-05-03 06:18:41 -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
cb13128cf0
Remove context copying from run_async function
This was required with the previous implementation of Werkzeug's
locals which didn't persist across threads. However as the current
implementation uses ContextVars which do persist the context copying
is no longer required.
2021-05-03 06:15:39 -07:00
Grey Li
188f4785ad
Merge pull request #3976 from greyli/update-changelog
Update changelog for #3932
2021-05-03 08:09:40 +08:00
Joshua Bronson
8bfce88e39
Minor docs fixes. (#3988) 2021-05-02 16:05:08 -04:00
David Lord
98fbb6a3a7
Merge pull request #3986 from pallets/dependabot/pip/python-dotenv-0.17.1
Bump python-dotenv from 0.17.0 to 0.17.1
2021-05-01 05:08:44 -07:00
dependabot[bot]
467d2e2a43
Bump python-dotenv from 0.17.0 to 0.17.1
Bumps [python-dotenv](https://github.com/theskumar/python-dotenv) from 0.17.0 to 0.17.1.
- [Release notes](https://github.com/theskumar/python-dotenv/releases)
- [Changelog](https://github.com/theskumar/python-dotenv/blob/master/CHANGELOG.md)
- [Commits](https://github.com/theskumar/python-dotenv/compare/v0.17.0...v0.17.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-01 08:02:41 +00:00
David Lord
0c198dffc3
Merge pull request #3985 from greyli/async-note
Add tips for using async on Windows on Python 3.8
2021-04-29 10:11:09 -07:00
Grey Li
ec044a24e1 Add tips for using async on Windows on Python 3.8 2021-04-29 10:59:26 +08:00
dependabot[bot]
83b2f8f0f1
Merge pull request #3984 from pallets/dependabot/pip/pre-commit-2.12.1 2021-04-28 20:59:01 +00:00
dependabot[bot]
36e6ec45a9
Bump pre-commit from 2.12.0 to 2.12.1
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 2.12.0 to 2.12.1.
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/master/CHANGELOG.md)
- [Commits](https://github.com/pre-commit/pre-commit/compare/v2.12.0...v2.12.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-28 20:54:53 +00:00
David Lord
0d63f1021d
Merge pull request #3983 from pallets/dependabot/add-v2-config-file
Upgrade to GitHub-native Dependabot
2021-04-28 13:53:29 -07:00
dependabot-preview[bot]
d124214129
Upgrade to GitHub-native Dependabot 2021-04-28 16:46:45 +00:00
Grey Li
9be01564f2 Update changelog for #3932 2021-04-28 14:20:44 +08:00
David Lord
77db3d5ede
Merge pull request #3972 from ThiefMaster/click-7
Allow using Click 7 with a DeprecationWarning
2021-04-27 07:58:25 -07:00
David Lord
1ccf063f80
Merge pull request #3971 from ThiefMaster/get-root-path
Move get_root_path back to flask.helpers
2021-04-27 07:55:26 -07:00
Adrian Moennich
26a6cc0f94 Allow using Click 7 with a DeprecationWarning
As long as popular libraries (e.g. Celery) require click 7, depending
on Click 8 in Flask makes it hard to test the latest version (and its
other dependencies) in existing applications.
2021-04-27 16:45:06 +02:00
Adrian Moennich
10b0d6b33f Move get_root_path back to flask.helpers
Many libraries use it so the move is somewhat disruptive.
2021-04-27 16:42:16 +02:00
David Lord
1a8549debb
Merge pull request #3973 from pgjones/typing 2021-04-27 07:32:10 -07:00
Grey Li
b8ddd52a0d
Merge pull request #3974 from pallets/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2021-04-27 09:47:43 +08:00
pre-commit-ci[bot]
b373e7a456
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/asottile/pyupgrade: v2.12.0 → v2.13.0](https://github.com/asottile/pyupgrade/compare/v2.12.0...v2.13.0)
- [github.com/asottile/reorder_python_imports: v2.4.0 → v2.5.0](https://github.com/asottile/reorder_python_imports/compare/v2.4.0...v2.5.0)
- [github.com/psf/black: 20.8b1 → 21.4b0](https://github.com/psf/black/compare/20.8b1...21.4b0)
2021-04-26 17:21:56 +00: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
f405c6f19e Initial typing support
This enables type checking in CI and marks the project as typed.
2021-04-26 17:20:24 +01:00
David Lord
e6e75e5547
changelog for bumped pallets versions 2021-04-24 07:31:16 -07:00
Grey Li
c791f6312b
Fix typo in issue template 2021-04-22 20:34:55 +08:00
David Lord
03db9194d8
Merge pull request #3967 from pgjones/docs 2021-04-17 07:34:56 -07:00
pgjones
f74cce164e Update documentation on asyncio background tasks
This has been an early question from users, so best to explain.
2021-04-17 15:13:33 +01:00
pgjones
1c3b53c5db Update the docs on serving with ASGI
Whilst it has been possible to serve via an ASGI server for a while
(using WSGI to ASGI middleware/adapters) it hasn't added much. Now
though it makes sense to recommend the asgiref adapter as it
integrates with the same event loop used for async route handlers
etc...
2021-04-17 11:30:22 +01:00
David Lord
34eb0dad15
Merge pull request #3965 from pallets/release-2.0.0rc1
Release 2.0.0rc1
2021-04-16 08:52:35 -07:00
David Lord
7df5db7b0c
release version 2.0.0rc1 2021-04-16 08:45:26 -07:00
David Lord
07000942da
update minimum install requirements 2021-04-16 08:45:04 -07:00
David Lord
afda0ed9f2
update deprecated pre-commit hook 2021-04-16 08:44:30 -07:00
David Lord
078a3c3631
update requirements 2021-04-16 08:44:18 -07:00
David Lord
e00a4a4b44
update pallets-sphinx-themes 2021-04-16 08:43:31 -07:00
David Lord
6f09b4b5ed
Merge remote-tracking branch 'origin/1.1.x' into release-2.0.0rc1 2021-04-16 08:37:56 -07:00
David Lord
39887ee4df
Merge pull request #3964 from pgjones/fix
Fix wrapped view function comparison
2021-04-16 06:28:53 -07:00
pgjones
5c6a0f0c12 Fix wrapped view function comparison
Wrapped functions are not comparable, see
https://bugs.python.org/issue3564, therefore a marker is used to note
when the function has been sync wrapped to allow comparison with the
wrapped function instead.

This ensures that multiple route decorators work without raising
exceptions i.e.,

    @app.route("/")
    @app.route("/a")
    async def index():
        ...

works.
2021-04-16 12:34:51 +01:00
David Lord
fab26dcbe9
Merge pull request #3963 from pallets/deprecate-helpers
deprecate `helpers.total_seconds`
2021-04-15 23:18:39 -07:00
David Lord
ec27677f95
remove _os_alt_seps 2021-04-15 23:14:53 -07:00
David Lord
85b430a366
deprecate total_seconds 2021-04-15 23:14:53 -07:00
David Lord
f3ed1322a6
Merge pull request #3962 from pallets/cached-property
locked_cached_property subclasses Werkzeug's cached_property
2021-04-15 23:14:24 -07:00
David Lord
5a7a4ab4c5
locked_cached_property subclasses cached_property 2021-04-15 23:07:28 -07:00
David Lord
8ab4967703
consistent versions and deprecation messages 2021-04-15 15:58:24 -07:00
David Lord
16f51ef799
Merge pull request #3960 from pallets/shell-interactive-hook
shell calls sys.__interativehook__
2021-04-14 10:06:50 -07:00
David Lord
32272da9ac
shell calls sys.__interativehook__
This will set up readline tab and history completion by default.
2021-04-14 10:01:32 -07:00
David Lord
64213fc021
Merge pull request #3923 from pgjones/nested
Nested blueprints
2021-04-14 09:30:48 -07: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
85dce2c836
Merge pull request #3957 from pgjones/fix
Bugfix iscoroutinefunction with Python3.7
2021-04-12 11:47:24 -07:00
pgjones
6d5ccdefe2 Bugfix iscoroutinefunction with Python3.7
See this Python bug https://bugs.python.org/issue33261. The
iscoroutinefunction doesn't recognise partially wrapped coroutine
functions as coroutine functions - which is problematic as the
coroutines will be called as if they are sync, which results in
un-awaited coroutines.
2021-04-12 19:38:42 +01:00
David Lord
5f03ad3004
Merge pull request #3958 from pallets/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2021-04-12 10:24:22 -07:00
pre-commit-ci[bot]
08693ae917
[pre-commit.ci] pre-commit autoupdate 2021-04-12 17:12:29 +00:00
David Lord
1a79d2d235
Merge pull request #3412 from pgjones/async
Add `async` support
2021-04-07 05:32:20 -07:00
David Lord
dc3e9c0cc3
update async docs 2021-04-06 15:33:06 -07:00
David Lord
61fbae8664
skip async tests if asgiref isn't installed 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
dependabot-preview[bot]
9ddef0144f
Merge pull request #3955 from pallets/dependabot/pip/urllib3-1.26.4 2021-04-06 17:49:45 +00:00
dependabot-preview[bot]
285a873ce9
[Security] Bump urllib3 from 1.26.3 to 1.26.4
Bumps [urllib3](https://github.com/urllib3/urllib3) from 1.26.3 to 1.26.4. **This update includes a security fix.**
- [Release notes](https://github.com/urllib3/urllib3/releases)
- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)
- [Commits](https://github.com/urllib3/urllib3/compare/1.26.3...1.26.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-06 17:46:53 +00:00
pgjones
c6c6408c3f
Raise a runtime error if run_async is called without real ContextVars
Werkzeug offers a ContextVar replacement for Python < 3.7, however it
doesn't work across asyncio tasks, hence it makes sense to error out
rather than find there are odd bugs.

Note the docs build requires the latest (dev) Werkzeug due to this
change (to import ContextVar from werkzeug.local).
2021-04-06 09:35:10 -07:00
pgjones
6979265fa6
Add async support
This allows for async functions to be passed to the Flask class
instance, for example as a view function,

    @app.route("/")
    async def index():
        return "Async hello"

this comes with a cost though of poorer performance than using the
sync equivalent.

asgiref is the standard way to run async code within a sync context,
and is used in Django making it a safe and sane choice for this.
2021-04-06 09:35:10 -07:00
David Lord
85b8fab268
Merge pull request #3952 from pallets/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2021-04-05 10:24:22 -07:00
pre-commit-ci[bot]
70b58c82d9
[pre-commit.ci] pre-commit autoupdate 2021-04-05 17:10:21 +00:00
David Lord
ecb3450f19
Merge pull request #3943 from pallets/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2021-03-22 10:50:37 -07:00
pre-commit-ci[bot]
06fd6aca27
[pre-commit.ci] pre-commit autoupdate 2021-03-22 17:04:33 +00:00
David Lord
1672c5f565
Merge pull request #3939 from kangetsu121/fix_link_and_typo
Docs: fix a broken link
2021-03-16 10:16:59 -07:00
kangetsu121
6eeaa2e50d fix a broken link 2021-03-16 16:30:54 +00:00
David Lord
020331522b
Merge pull request #3937 from pallets/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2021-03-15 11:36:59 -07:00
pre-commit-ci[bot]
46d8e90f29
[pre-commit.ci] pre-commit autoupdate 2021-03-15 17:00:57 +00:00
David Lord
510c38cc63
Merge pull request #3933 from pallets/more-scaffold
more work on Scaffold base class
2021-03-10 11:02:16 -08:00
David Lord
3dfc12e8d8
only extend on first registration 2021-03-10 10:51:06 -08:00
David Lord
ef52e3e4a3
remove redundant _register_error_handler 2021-03-10 10:38:17 -08:00
David Lord
25ab05e6a2
remove old note about InternalServerError 2021-03-10 10:38:16 -08:00
David Lord
7029674775
rewrite Scaffold docs 2021-03-10 10:38:16 -08:00
David Lord
9f7c602a84
move _PackageBoundObject into Scaffold 2021-03-10 10:38:13 -08:00
David Lord
3316604822
Merge pull request #3932 from greyli/set-encoding
Set default encoding to UTF-8 for load_dotenv
2021-03-10 06:30:24 -08:00
Grey Li
33145c3699 Set default encoding to UTF-8 for load_dotenv 2021-03-10 21:40:29 +08:00
David Lord
6d9d79c70d
Merge pull request #3918 from pgjones/defaultdict 2021-03-08 10:15:26 -08:00
pgjones
83d358d2c4
remove _blueprint_order, dicts are ordered
This code originates from supporting Python 2.4. Dicts are ordered in
supported Pythons as of 3.6. An OrderedDict could be used to indicate
that order matters, but is not since we don't rely on the implementation
differences.
2021-03-08 09:58:12 -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
David Lord
5fea7caba2
Merge pull request #3907 from pgjones/sugar
Add syntatic sugar for route registration
2021-03-08 08:57:58 -08:00
pgjones
705e52684a
Add syntatic sugar for route registration
This takes a popular API whereby instead of passing the HTTP method as
an argument to route it is instead used as the method name i.e.

    @app.route("/", methods=["POST"])

is now writeable as,

    @app.post("/")

This is simply syntatic sugar, it doesn't do anything else, but makes
it slightly easier for users.

I've included all the methods that are relevant and aren't auto
generated i.e. not connect, head, options, and trace.
2021-03-08 08:55:14 -08:00
dependabot-preview[bot]
82d69cd06c
Merge pull request #3926 from pallets/dependabot/pip/sphinx-3.5.1 2021-03-01 15:25:15 +00:00
dependabot-preview[bot]
e4e66186c3
Merge pull request #3925 from pallets/dependabot/pip/tox-3.22.0 2021-03-01 15:22:59 +00:00
dependabot-preview[bot]
1748bb02eb
Bump sphinx from 3.4.3 to 3.5.1
Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 3.4.3 to 3.5.1.
- [Release notes](https://github.com/sphinx-doc/sphinx/releases)
- [Changelog](https://github.com/sphinx-doc/sphinx/blob/3.x/CHANGES)
- [Commits](https://github.com/sphinx-doc/sphinx/compare/v3.4.3...v3.5.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-01 15:17:54 +00:00
dependabot-preview[bot]
6e7869ec49
Bump tox from 3.21.4 to 3.22.0
Bumps [tox](https://github.com/tox-dev/tox) from 3.21.4 to 3.22.0.
- [Release notes](https://github.com/tox-dev/tox/releases)
- [Changelog](https://github.com/tox-dev/tox/blob/master/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/tox/compare/3.21.4...3.22.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-01 15:15:58 +00:00
David Lord
4846e25e92
Merge pull request #3917 from greyli/fix-date-parse
update json.dumps for http_date changes
2021-02-25 09:51:58 -08:00
Grey Li
49b7341a49
update json.dumps for http_date changes 2021-02-25 09:45:55 -08:00
David Lord
dcd3b5c8f8
Merge pull request #3922 from pallets/consistency
various cleanup for consistency between projects
2021-02-24 10:35:16 -08:00
David Lord
0c7cbe2d11
move version to setup.cfg 2021-02-24 10:09:50 -08:00
David Lord
9e7d3a6b69
docs rename changelog to changes 2021-02-24 10:09:38 -08:00
David Lord
3cd615a1d6
update project links 2021-02-24 10:09:15 -08:00
David Lord
aee3f3fee9
Merge pull request #3916 from greyli/fix-extdev-docs
Remove the mention of Flask-OAuth in the extension dev docs
2021-02-19 07:21:18 -08:00
Grey Li
76abbe9062 Remove the mention of Flask-OAuth in the extension dev docs 2021-02-19 22:59:09 +08:00
David Lord
8d9501598f
use rtd to build docs for prs
skip code tests when only docs change
2021-02-16 08:36:14 -08:00
David Lord
adeaf27e76
Merge pull request #3904 from pallets/update-project
update project files
2021-02-08 18:32:18 -08:00
David Lord
b496d8b7cb
update contributing guide 2021-02-08 18:26:37 -08:00
David Lord
3c00658772
update requirements 2021-02-08 18:23:10 -08:00
David Lord
dbe76bb75d
add security policy
copy from pallets/.github repo
github was using docs/security.rst by mistake
2021-02-08 18:20:48 -08:00
David Lord
571e638e2a
update issue templates 2021-02-08 18:17:45 -08:00
David Lord
bfd4dc6d30
update test config 2021-02-08 18:17:45 -08:00
David Lord
ee089488ad
Merge pull request #3901 from pallets/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2021-02-08 18:17:33 -08:00
pre-commit-ci[bot]
3fe23bf899
[pre-commit.ci] pre-commit autoupdate 2021-02-08 18:12:19 -08:00
David Lord
ff3fb96896
Merge pull request #3903 from pallets/update-werkzeug
fix tests for latest Werkzeug
2021-02-08 18:11:47 -08:00
David Lord
0ee1b0b5d9
remove test relying on Werkzeug Local internals 2021-02-08 18:04:02 -08:00
David Lord
192f4ae0b2
Merge pull request #3895 from pallets/jinja-tojson
use Jinja's tojson filter
2021-02-01 22:57:42 -08:00
David Lord
b473e7c97c
use Jinja's tojson filter 2021-02-01 22:48:09 -08:00
David Lord
fdf5d11b51
Merge pull request #3794 from mbpreble/open-session-request-endpoint-none
Ensure session_interface.open_session is called after URL matching
2021-02-01 20:45:02 -08:00
Matthew Preble
01621485fd
Ensure session_interface.open_session is called after URL matching (#3776) 2021-02-01 20:41:17 -08:00
David Lord
15f0fc2d24
Merge pull request #3883 from tonydelanuez/clarify-got-request-exception
Doc update: Clarify got_request_exception signal docs
2021-02-01 20:31:57 -08:00
Tony De La Nuez
451c1f87f3
got_request_exception only sends unhandled exceptions
Co-authored-by: David Lord <davidism@gmail.com>
2021-02-01 20:28:10 -08:00
David Lord
6355f12176
Merge pull request #3893 from pallets/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2021-02-01 19:59:58 -08:00
pre-commit-ci[bot]
d55ee5b917
[pre-commit.ci] pre-commit autoupdate 2021-02-01 19:55:24 -08:00
dependabot-preview[bot]
93261454e6
Merge pull request #3887 from pallets/dependabot/pip/packaging-20.9 2021-02-02 03:49:49 +00:00
dependabot-preview[bot]
fb5f04a8c7
Bump packaging from 20.8 to 20.9
Bumps [packaging](https://github.com/pypa/packaging) from 20.8 to 20.9.
- [Release notes](https://github.com/pypa/packaging/releases)
- [Changelog](https://github.com/pypa/packaging/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pypa/packaging/compare/20.8...20.9)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-02 03:45:39 +00:00
dependabot-preview[bot]
8b28c218c9
Merge pull request #3886 from pallets/dependabot/pip/jinja2-2.11.3 2021-02-02 03:44:56 +00:00
dependabot-preview[bot]
6c828c3bba
Merge pull request #3889 from pallets/dependabot/pip/pytest-6.2.2 2021-02-02 03:43:43 +00:00
dependabot-preview[bot]
e783424fbb
Merge pull request #3888 from pallets/dependabot/pip/sphinx-3.4.3 2021-02-02 03:42:43 +00:00
dependabot-preview[bot]
510268e914
Bump pytest from 6.2.1 to 6.2.2
Bumps [pytest](https://github.com/pytest-dev/pytest) from 6.2.1 to 6.2.2.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/6.2.1...6.2.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-02 03:41:04 +00:00
dependabot-preview[bot]
096ac67b97
Merge pull request #3891 from pallets/dependabot/pip/greenlet-1.0.0 2021-02-02 03:39:08 +00:00
dependabot-preview[bot]
296bd2f4cc
Bump jinja2 from 2.11.2 to 2.11.3
Bumps [jinja2](https://github.com/pallets/jinja) from 2.11.2 to 2.11.3.
- [Release notes](https://github.com/pallets/jinja/releases)
- [Changelog](https://github.com/pallets/jinja/blob/master/CHANGES.rst)
- [Commits](https://github.com/pallets/jinja/compare/2.11.2...2.11.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-02 03:37:53 +00:00
dependabot-preview[bot]
7eebe22cf5
Bump sphinx from 3.4.1 to 3.4.3
Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 3.4.1 to 3.4.3.
- [Release notes](https://github.com/sphinx-doc/sphinx/releases)
- [Changelog](https://github.com/sphinx-doc/sphinx/blob/3.x/CHANGES)
- [Commits](https://github.com/sphinx-doc/sphinx/compare/v3.4.1...v3.4.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-02 03:37:40 +00:00
dependabot-preview[bot]
d1b36ced14
Merge pull request #3892 from pallets/dependabot/pip/pre-commit-2.10.0 2021-02-02 03:35:58 +00:00
dependabot-preview[bot]
963f68abf4
Merge pull request #3890 from pallets/dependabot/pip/sphinx-tabs-2.0.0 2021-02-02 03:35:44 +00:00
dependabot-preview[bot]
c52ffa8ae7
Bump sphinx-tabs from 1.3.0 to 2.0.0
Bumps [sphinx-tabs](https://github.com/executablebooks/sphinx-tabs) from 1.3.0 to 2.0.0.
- [Release notes](https://github.com/executablebooks/sphinx-tabs/releases)
- [Changelog](https://github.com/executablebooks/sphinx-tabs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/executablebooks/sphinx-tabs/compare/v1.3.0...v2.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-02 03:33:21 +00:00
dependabot-preview[bot]
5ecbf1e333
Bump greenlet from 0.4.17 to 1.0.0
Bumps [greenlet](https://github.com/python-greenlet/greenlet) from 0.4.17 to 1.0.0.
- [Release notes](https://github.com/python-greenlet/greenlet/releases)
- [Changelog](https://github.com/python-greenlet/greenlet/blob/master/CHANGES.rst)
- [Commits](https://github.com/python-greenlet/greenlet/compare/0.4.17...1.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-02 03:33:16 +00:00
dependabot-preview[bot]
b379bd4a78
Bump pre-commit from 2.9.3 to 2.10.0
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 2.9.3 to 2.10.0.
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/master/CHANGELOG.md)
- [Commits](https://github.com/pre-commit/pre-commit/compare/v2.9.3...v2.10.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-02 03:33:13 +00:00
dependabot-preview[bot]
557e2147dd
Merge pull request #3885 from pallets/dependabot/pip/tox-3.21.3 2021-02-02 03:31:20 +00:00
dependabot-preview[bot]
78bcf1d8c6
Bump tox from 3.20.1 to 3.21.3
Bumps [tox](https://github.com/tox-dev/tox) from 3.20.1 to 3.21.3.
- [Release notes](https://github.com/tox-dev/tox/releases)
- [Changelog](https://github.com/tox-dev/tox/blob/master/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/tox/compare/3.20.1...3.21.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-02 03:27:50 +00:00
David Lord
9f7ac04aaf
Merge pull request #3894 from pallets/update-werkzeug
Update for recent changes in Pallets libraries
2021-02-01 19:20:20 -08:00
David Lord
81ba6c24ef
remove Jinja 'autoescape' and 'with' extensions 2021-02-01 19:14:58 -08:00
David Lord
055cdc2625
click detects program name when run as module 2021-01-29 11:29:36 -08:00
David Lord
64206c13c2
simplify InternalServerError.original_exception 2021-01-29 11:26:17 -08:00
David Lord
eb42655c46
simplify BadRequestKeyError.show_exception 2021-01-29 11:03:33 -08:00
David Lord
14f56363a4
rename send_file add_etags to etag 2021-01-29 10:52:48 -08:00
David Lord
1936ca8a2e
remove BaseRequest and BaseResponse 2021-01-29 10:52:48 -08:00
David Lord
fdba0d2526
remove JSONMixin 2021-01-29 10:52:48 -08:00
David Lord
d887d32f4d
Merge pull request #3880 from elliott-king/patch-2
Docs update: clarify json error handling
2021-01-27 10:00:02 -08:00
Elliott King
7068d0983a
Clarify json error handling 2021-01-27 12:08:02 -05:00
Grey Li
7f206913e1
Merge pull request #3866 from greyli/improve-readme-example
Update the example in README
2021-01-06 18:57:31 -06:00
David Lord
c676c2c4f3
Merge pull request #3861 from greyli/fix-pytest
Silence pytest warnings for exception propagation test
2021-01-06 07:47:29 -08:00
Grey Li
54ae1cb0e9 Update the example in README 2021-01-06 23:31:22 +08:00
Grey Li
2fab8a31ae Fix broken func directives in docstrings 2021-01-04 10:32:01 +08:00
Grey Li
7d2ba3e1fc Merge remote-tracking branch 'origin/1.1.x' 2021-01-04 10:14:36 +08:00
Grey Li
444550ab0c
Merge pull request #3862 from huimingz/patch-1
Document json.loads parameter description error
2021-01-03 19:52:36 -06:00
huimingz
aff21fd8bc Document parameter description error
The loads function has the wrong 'kwargs' parameter description
2021-01-04 09:45:01 +08:00
Grey Li
da8865bd64 Bump pytest from 6.1.2 to 6.2.1 2021-01-03 14:10:26 +08:00
Grey Li
eb41e7e417 Silence pytest warnings for exception propagation test 2021-01-03 13:57:45 +08:00
dependabot-preview[bot]
d42eac90f6
Merge pull request #3859 from pallets/dependabot/pip/packaging-20.8 2021-01-01 09:54:18 +00:00
dependabot-preview[bot]
a7cf23a234
Bump packaging from 20.4 to 20.8
Bumps [packaging](https://github.com/pypa/packaging) from 20.4 to 20.8.
- [Release notes](https://github.com/pypa/packaging/releases)
- [Changelog](https://github.com/pypa/packaging/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pypa/packaging/compare/20.4...20.8)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-01 09:51:33 +00:00
dependabot-preview[bot]
959c64e8ce
Merge pull request #3857 from pallets/dependabot/pip/pip-tools-5.5.0 2021-01-01 09:49:25 +00:00
dependabot-preview[bot]
d1a21022e0
Bump pip-tools from 5.3.1 to 5.5.0
Bumps [pip-tools](https://github.com/jazzband/pip-tools) from 5.3.1 to 5.5.0.
- [Release notes](https://github.com/jazzband/pip-tools/releases)
- [Changelog](https://github.com/jazzband/pip-tools/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jazzband/pip-tools/compare/5.3.1...5.5.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-01 09:46:36 +00:00
dependabot-preview[bot]
50eb6e579f
Merge pull request #3856 from pallets/dependabot/pip/pre-commit-2.9.3 2021-01-01 09:45:22 +00:00
dependabot-preview[bot]
27a36f1446
Merge pull request #3855 from pallets/dependabot/pip/sphinx-3.4.1 2021-01-01 09:44:48 +00:00
dependabot-preview[bot]
2622739771
Bump pre-commit from 2.8.2 to 2.9.3
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 2.8.2 to 2.9.3.
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/master/CHANGELOG.md)
- [Commits](https://github.com/pre-commit/pre-commit/compare/v2.8.2...v2.9.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-01 09:42:25 +00:00
dependabot-preview[bot]
e4c70eff77
Bump sphinx from 3.2.1 to 3.4.1
Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 3.2.1 to 3.4.1.
- [Release notes](https://github.com/sphinx-doc/sphinx/releases)
- [Changelog](https://github.com/sphinx-doc/sphinx/blob/3.x/CHANGES)
- [Commits](https://github.com/sphinx-doc/sphinx/compare/v3.2.1...v3.4.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-01 09:42:01 +00:00
Grey Li
de0af03862 Merge remote-tracking branch 'origin/1.1.x' 2020-12-30 21:00:49 +08:00
jordivandooren
7d3ae48d57
fix explanation of wheel name (#3848)
* fix explanation of wheel name

* Improve the description of wheel filename format

Co-authored-by: Grey Li <withlihui@gmail.com>
2020-12-30 18:57:37 +08:00
Grey Li
9b62405f34
Merge pull request #3854 from pallets/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2020-12-22 13:51:15 +08:00
pre-commit-ci[bot]
cab8121d8f
[pre-commit.ci] pre-commit autoupdate 2020-12-21 16:44:52 +00:00
Grey Li
28a3eb106c
Merge pull request #3842 from pallets/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2020-11-24 10:51:40 +08:00
pre-commit-ci[bot]
cd3a93a9c1
[pre-commit.ci] pre-commit autoupdate 2020-11-23 17:15:58 +00:00
Pedro Lourenço
0855252f8c
Fix ci environment command syntax (#3836) 2020-11-17 09:58:43 -08:00
Pedro Lourenço
d6b974f821
update deprecated set-env ci command (#3835) 2020-11-17 09:38:38 -08:00
pre-commit-ci[bot]
11798fd01b [pre-commit.ci] pre-commit autoupdate 2020-11-16 10:05:02 -08:00
David Lord
b2464883ce
reduce lock schedule to daily 2020-11-14 05:38:05 -08:00
David Lord
f325b8b5be
add lock threads workflow 2020-11-13 16:28:13 -08:00
David Lord
bbb273bb76
Merge pull request #3828 from pallets/move-send-file
move send_file and send_from_directory to Werkzeug
2020-11-05 09:33:13 -08:00
David Lord
dc11cdb4a4
move send_file and send_from_directory to Werkzeug
The implementations were moved to Werkzeug, Flask's functions become
wrappers around Werkzeug to pass some Flask-specific values.

cache_timeout is renamed to max_age. SEND_FILE_MAX_AGE_DEFAULT,
app.send_file_max_age_default, and app.get_send_file_max_age defaults
to None. This tells the browser to use conditional requests rather than
a 12 hour cache.

attachment_filename is renamed to download_name, and is always sent if
a name is known.

Deprecate helpers.safe_join in favor of werkzeug.utils.safe_join.

Removed most of the send_file tests, they're tested in Werkzeug.

In the file upload example, renamed the uploaded_file view to
download_file to avoid a common source of confusion.
2020-11-05 09:27:52 -08:00
David Lord
15a49e7297
Merge branch '1.1.x' 2020-11-04 18:25:37 -08:00
Sarthak Vineet Kumar
577eec198a
updated doc for mod_wsgi (#3751)
Co-authored-by: Sarthak <sarthak@MacBook.local>
2020-11-04 18:20:36 -08:00
Mathurshan Vimalesvaran
22987b6817
include samesite and secure when removing session cookie (#3726) 2020-11-04 18:16:05 -08:00
David Lord
7a444c5dab
update tests for new werkzeug client (#3827)
Flask's client.open mirrors Werkzeug's for processing an existing
environ.

Always test with latest code for other Pallets projects. This will
be changed back once the new versions are released.
2020-11-04 18:00:21 -08:00
David Lord
373f0dd82e
update requirements (#3823) 2020-11-01 05:30:02 -08:00
dependabot-preview[bot]
3b57c19e3b
Bump pytest from 6.1.1 to 6.1.2 (#3818)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 6.1.1 to 6.1.2.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/6.1.1...6.1.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-11-01 05:21:41 -08:00
dependabot-preview[bot]
aa0c9493c6
Bump tox from 3.20.0 to 3.20.1 (#3819)
Bumps [tox](https://github.com/tox-dev/tox) from 3.20.0 to 3.20.1.
- [Release notes](https://github.com/tox-dev/tox/releases)
- [Changelog](https://github.com/tox-dev/tox/blob/master/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/tox/compare/3.20.0...3.20.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-11-01 05:21:27 -08:00
dependabot-preview[bot]
f7e33f240e
Bump sphinx-tabs from 1.1.13 to 1.3.0 (#3822)
Bumps [sphinx-tabs](https://github.com/executablebooks/sphinx-tabs) from 1.1.13 to 1.3.0.
- [Release notes](https://github.com/executablebooks/sphinx-tabs/releases)
- [Changelog](https://github.com/executablebooks/sphinx-tabs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/executablebooks/sphinx-tabs/compare/v1.1.13...v1.3.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-11-01 05:21:10 -08:00
dependabot-preview[bot]
65de6ccc0f
Bump pre-commit from 2.7.1 to 2.8.2 (#3821)
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 2.7.1 to 2.8.2.
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/master/CHANGELOG.md)
- [Commits](https://github.com/pre-commit/pre-commit/compare/v2.7.1...v2.8.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-11-01 05:20:48 -08:00
David Lord
8ad9b41850
Merge pull request #3814 from lielfr/jsonencoder_html_test 2020-10-31 20:20:16 -07:00
David Lord
6def8a4a48
test json.dumps for object with __html__ method 2020-10-31 20:18:25 -07:00
David Lord
a0e2aca770
move json tests to separate file 2020-10-31 20:16:24 -07:00
Viet Hung Nguyen
7c20611cdd
mkstemp returns a file descriptor (#3809) 2020-10-31 20:09:57 -07:00
David Lord
06495e791b
Merge pull request #3785 from tirkarthi/add-py39 2020-10-31 20:05:25 -07:00
David Lord
2676973cd7
remove pre-commit job, using pre-commit.ci now 2020-10-31 20:03:27 -07:00
David Lord
1c6dc15420
fix response bases order 2020-10-31 19:19:11 -07:00
Karthikeyan Singaravelan
76467527d6
test Python 3.9 2020-10-31 19:14:02 -07:00
Sebastian Höffner
5d60cce242
Updating external_url_handler example to Python 3 (#3816) 2020-10-29 09:33:20 -07:00
Bart Broere
070a0c1c75
removing outdated xhtml information (#3802) 2020-10-21 14:13:41 -07:00
Grey Li
1035efc7d6
Add command switch tabs for Bash, CMD and Powershell with sphinx-tabs (#3714)
* Enable Sphinx extension sphinx-tabs

* Add command tabs for all export commands

* Add command tabs for all venv commands

Fix trim spaces
2020-10-15 14:08:37 -07:00
dependabot-preview[bot]
c5a5d9b30b
Bump pytest from 6.0.2 to 6.1.1 (#3790)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 6.0.2 to 6.1.1.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/6.0.2...6.1.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-10-15 14:03:39 -07:00
Jamiu Salimon
9d824db41c
Update the signature of the teardown function (#3730)
Co-authored-by: David Lord <davidism@gmail.com>
2020-10-15 14:02:54 -07:00
David Lord
967b235035
Merge pull request #3728 from nphilipp/master--discover-app-factory-deterministically
Discover app factory deterministically
2020-10-15 14:01:14 -07:00
Paul Sanders
8c6baeedab
parametrize some tests (#3786) 2020-10-11 19:16:17 -07:00
Henry Kobin
fa5aebc842
updated Sentry link (#3788) 2020-10-11 19:15:19 -07:00
Matěj Volf
bdf7083cfd
refer to encoder instead of decoder 2020-10-07 08:06:29 -07:00
Bogdan Opanchuk
8efea0ccbb
Break reference cycle created by default in Flask instances.
Flask instances with static folders were creating a reference cycle
via their "static" view function (which held a strong reference back
to the Flask instance to call its `send_static_file` method). This
prevented CPython from freeing the memory for a Flask instance
when all external references to it were released.

Now use a weakref for the back reference to avoid this.

Co-authored-by: Joshua Bronson <jab@users.noreply.github.com>
2020-10-03 10:05:05 -04:00
dependabot-preview[bot]
4e8b020494
Merge pull request #3773 from pallets/dependabot/pip/greenlet-0.4.17 2020-10-01 08:26:44 +00:00
dependabot-preview[bot]
84a4669e54
Bump greenlet from 0.4.16 to 0.4.17
Bumps [greenlet](https://github.com/python-greenlet/greenlet) from 0.4.16 to 0.4.17.
- [Release notes](https://github.com/python-greenlet/greenlet/releases)
- [Changelog](https://github.com/python-greenlet/greenlet/blob/master/NEWS)
- [Commits](https://github.com/python-greenlet/greenlet/compare/0.4.16...0.4.17)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-01 08:24:03 +00:00
sblondon
7e312c421e
aesthetic: add a space after a comma (#3771) 2020-09-28 07:21:13 -07:00
miquelvir
598c56c498
fix grammar (#3769) 2020-09-28 06:21:59 -07:00
Ebram Shehata
12a4d15546
Update quickstart.rst (#3767) 2020-09-25 16:52:00 -07:00
girst
de464c03e1
Correct Sentry advertisement (not Free Software) (#3758) 2020-09-15 09:20:10 -07:00
dependabot-preview[bot]
e0d7d402e1
Merge pull request #3756 from pallets/dependabot/pip/pytest-6.0.2 2020-09-14 08:21:19 +00:00
dependabot-preview[bot]
ad10d12177
Bump pytest from 6.0.1 to 6.0.2
Bumps [pytest](https://github.com/pytest-dev/pytest) from 6.0.1 to 6.0.2.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/6.0.1...6.0.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-14 08:18:57 +00:00
dependabot-preview[bot]
baaf864237
Merge pull request #3754 from pallets/dependabot/pip/tox-3.20.0 2020-09-07 08:20:06 +00:00
dependabot-preview[bot]
983af125ac
Bump tox from 3.19.0 to 3.20.0
Bumps [tox](https://github.com/tox-dev/tox) from 3.19.0 to 3.20.0.
- [Release notes](https://github.com/tox-dev/tox/releases)
- [Changelog](https://github.com/tox-dev/tox/blob/master/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/tox/compare/3.19.0...3.20.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-07 08:17:58 +00:00
Ryuichi Watanabe
a1fb8f143f
update cache action to v2 (#3749) 2020-08-30 18:53:09 -07:00
ongopongo
5bfe236fb5
fix typo in flask shell help (#3744) 2020-08-26 09:20:21 -07:00
dependabot-preview[bot]
6d3f87ee07
Merge pull request #3742 from pallets/dependabot/pip/pre-commit-2.7.1 2020-08-24 08:19:34 +00:00
dependabot-preview[bot]
0885e68beb
Bump pre-commit from 2.6.0 to 2.7.1
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 2.6.0 to 2.7.1.
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/master/CHANGELOG.md)
- [Commits](https://github.com/pre-commit/pre-commit/compare/v2.6.0...v2.7.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-24 08:17:04 +00:00
Joshua Bronson
fe55f92cdc
Fix pre-commit cache key in GitHub Actions. (#3740)
Fix pre-commit cache key to include full Python version as per
https://github.com/pre-commit/pre-commit/issues/1575#issuecomment-678792700
and https://pre-commit.com/#github-actions-example
2020-08-23 21:52:28 -04:00
Joshua Bronson
8952a17871
Merge pull request #3739 from WolframAlph/typo-fix
fixed #3738 typo in src/flask/blueprints.py
2020-08-23 08:18:26 -04:00
WolframAlph
1f1b65a625 fixed #3738 typo in src/flask/blueprints.py 2020-08-23 08:56:24 +02:00
dependabot-preview[bot]
e071734b4e
Merge pull request #3734 from pallets/dependabot/pip/sphinx-3.2.1 2020-08-17 08:37:21 +00:00
dependabot-preview[bot]
7be45a4c5b
Bump sphinx from 3.2.0 to 3.2.1
Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 3.2.0 to 3.2.1.
- [Release notes](https://github.com/sphinx-doc/sphinx/releases)
- [Changelog](https://github.com/sphinx-doc/sphinx/blob/3.x/CHANGES)
- [Commits](https://github.com/sphinx-doc/sphinx/compare/v3.2.0...v3.2.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-17 08:34:56 +00:00
Nils Philippsen
cf3089a8f8 Discover app factory deterministically
Commit 2ae740dd49 probably inadvertently
changed to iterate over a set of "create_app", "make_app" to discover
application factory functions. As sets don't guarantee order,
differences in the implementation of the type can make it
non-deterministic which factory function is used if a project implements
both. Revert to using a tuple.

Signed-off-by: Nils Philippsen <nils@redhat.com>
2020-08-13 10:44:43 +02:00
dependabot-preview[bot]
1a9059dd3a
Merge pull request #3725 from pallets/dependabot/pip/sphinx-3.2.0 2020-08-10 08:12:04 +00:00
dependabot-preview[bot]
1a6621ed84
Bump sphinx from 3.1.2 to 3.2.0
Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 3.1.2 to 3.2.0.
- [Release notes](https://github.com/sphinx-doc/sphinx/releases)
- [Changelog](https://github.com/sphinx-doc/sphinx/blob/3.x/CHANGES)
- [Commits](https://github.com/sphinx-doc/sphinx/compare/v3.1.2...v3.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-10 08:09:48 +00:00
Grey Li
5bf8cc225f
Merge pull request #3722 from pallets/dependabot/pip/tox-3.19.0
Bump tox from 3.18.1 to 3.19.0
2020-08-07 19:49:33 +08:00
dependabot-preview[bot]
7eeb0c8d22
Bump tox from 3.18.1 to 3.19.0
Bumps [tox](https://github.com/tox-dev/tox) from 3.18.1 to 3.19.0.
- [Release notes](https://github.com/tox-dev/tox/releases)
- [Changelog](https://github.com/tox-dev/tox/blob/master/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/tox/compare/3.18.1...3.19.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-07 11:47:17 +00:00
Grey Li
fd0f89ebf3
Merge pull request #3723 from greyli/fix-intersphinx-link
Fix bad intersphinx link
2020-08-07 19:19:53 +08:00
Grey Li
414b30b2ec Fix bad intersphinx link 2020-08-07 19:01:42 +08:00
dependabot-preview[bot]
eb865f8c24
Merge pull request #3716 from pallets/dependabot/pip/pip-tools-5.3.1 2020-08-03 09:03:22 +00:00
dependabot-preview[bot]
045abd6c04
Bump pip-tools from 5.3.0 to 5.3.1
Bumps [pip-tools](https://github.com/jazzband/pip-tools) from 5.3.0 to 5.3.1.
- [Release notes](https://github.com/jazzband/pip-tools/releases)
- [Changelog](https://github.com/jazzband/pip-tools/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jazzband/pip-tools/compare/5.3.0...5.3.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-03 09:00:22 +00:00
David Lord
632f85b653
Merge pull request #3709 from MLH-Fellowship/3215-flask-blueprint
Common API Between Flask + Blueprint
2020-08-01 07:48:57 -07:00
yk396
b146a13f63
extract common Flask/Blueprint API to Scaffold base class
Co-authored-by: Chris Nguyen <chrisngyn99@gmail.com>
2020-08-01 07:45:58 -07:00
dependabot-preview[bot]
216d97c21a
Merge pull request #3713 from pallets/dependabot/pip/pytest-6.0.1 2020-07-31 08:45:49 +00:00
dependabot-preview[bot]
ce7ee648b3
Bump pytest from 6.0.0 to 6.0.1
Bumps [pytest](https://github.com/pytest-dev/pytest) from 6.0.0 to 6.0.1.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/6.0.0...6.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-31 08:43:34 +00:00
David Lord
6638432457
Merge pull request #3711 from pallets/cli-loading-error
cleaner message when CLI can't load app
2020-07-30 18:48:45 -07:00
David Lord
253570784c
cleaner message when CLI can't load app
When loading the app fails for the --help command, only the error
message is shown, then the help text. The full traceback is shown for
other exceptions. Also show the message when loading fails while
getting a command, instead of only "command not found". The error
message goes to stderr to match other error behavior, and is in red
with an extra newline to make it more obvious next to the help text.

Also fixes an issue with the test_apps fixture that caused an imported
app to still be importable after the test was over and the path was
reset. Now the module cache is reset as well.
2020-07-30 18:36:55 -07:00
dependabot-preview[bot]
fd0a608449
Merge pull request #3706 from pallets/dependabot/pip/tox-3.18.1 2020-07-29 08:40:48 +00:00
dependabot-preview[bot]
2a388c4dc0
Bump tox from 3.18.0 to 3.18.1
Bumps [tox](https://github.com/tox-dev/tox) from 3.18.0 to 3.18.1.
- [Release notes](https://github.com/tox-dev/tox/releases)
- [Changelog](https://github.com/tox-dev/tox/blob/master/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/tox/compare/3.18.0...3.18.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-29 08:37:24 +00:00
dependabot-preview[bot]
fc0aa7ac97
Merge pull request #3705 from pallets/dependabot/pip/pytest-6.0.0 2020-07-29 08:32:40 +00:00
dependabot-preview[bot]
6ff7004db0
Bump pytest from 5.4.3 to 6.0.0
Bumps [pytest](https://github.com/pytest-dev/pytest) from 5.4.3 to 6.0.0.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/5.4.3...6.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-29 08:29:51 +00:00
David Lord
37551e6798
Merge pull request #3699 from MartinThoma/style
remove unnecessary docstrings from tests
2020-07-28 19:44:23 -07:00
David Lord
36e6fc8ab8
Merge pull request #3669 from ebonnecab/error-docs
Error Docs Revision/Consolidation
2020-07-28 14:17:36 -07:00
David Lord
89d1487b2e
rewrite debugging docs, move to separate page 2020-07-28 11:20:34 -07:00
David Lord
d25ee22e34
reduce section on http status codes
formatting in sentry section
2020-07-28 11:07:02 -07:00
David Lord
ba118b4543
adjust header levels and spacing
use code-block consistently
2020-07-28 10:46:22 -07:00
David Lord
2db3c9a72e
rewrite external debuggers section 2020-07-28 07:59:19 -07:00
David Lord
0db95259db
normalize sentence spacing 2020-07-28 07:57:24 -07:00
David Lord
f31a8ce4bc
Merge pull request #3704 from jackwardell/no-self-required
swapping self.assert_equal for assert
2020-07-28 07:10:13 -07:00
jackwardell
daf9ec790a swapping self.assert_equal for assert
self.assert_equal is not in a class and is ambiguous. Beginners might copy and paste this example and not understand it.
2020-07-28 14:23:00 +01:00
dependabot-preview[bot]
a3d423e5ec
Merge pull request #3702 from pallets/dependabot/pip/pip-tools-5.3.0 2020-07-27 08:34:35 +00:00
dependabot-preview[bot]
3f8ff0d181
Bump pip-tools from 5.2.1 to 5.3.0
Bumps [pip-tools](https://github.com/jazzband/pip-tools) from 5.2.1 to 5.3.0.
- [Release notes](https://github.com/jazzband/pip-tools/releases)
- [Changelog](https://github.com/jazzband/pip-tools/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jazzband/pip-tools/compare/5.2.1...5.3.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-27 08:31:10 +00:00
Martin Thoma
75a9b74650
DOC: Remove unnecessary docstrings 2020-07-26 15:47:12 +02:00
Ebonne Cabarrus
569c88d721
more changes to consolidated error handling docs 2020-07-24 09:25:07 -07:00
David Lord
21c3df31de
Merge pull request #3594 from jackwardell/consolidating-error-pages-docs
consolidate error handling docs
2020-07-24 09:23:20 -07:00
jackwardell
59b0b85835
consolidate error handling docs
Remove apierrors.rst and errorpages.rst from patterns and integrate the
content into errorhandling.rst, along with other changes and extra
content.
2020-07-24 09:15:43 -07:00
dependabot-preview[bot]
165f059a73
Merge pull request #3695 from pallets/dependabot/pip/tox-3.18.0 2020-07-24 08:03:51 +00:00
dependabot-preview[bot]
eb96acec46
Bump tox from 3.17.1 to 3.18.0
Bumps [tox](https://github.com/tox-dev/tox) from 3.17.1 to 3.18.0.
- [Release notes](https://github.com/tox-dev/tox/releases)
- [Changelog](https://github.com/tox-dev/tox/blob/master/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/tox/compare/3.17.1...3.18.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-24 08:01:01 +00:00
David Lord
2fa8eb3cfe
Merge pull request #3684 from MLH-Fellowship/3628-duplicate-headers
make_response uses headers.update
2020-07-23 16:57:19 -07:00
Christopher Nguyen
7b09a0904c
change make_response to use headers.update 2020-07-23 16:53:39 -07:00
David Lord
6f2fdc5ac4
Merge pull request #3694 from pallets/disable-lowest
remove lowest version test until next release
2020-07-23 16:52:52 -07:00
David Lord
19a0db6d14
remove lowest version test until next release
The next major release will depend on the next major releases of all
the other libraries, which is equivalent to devel right now.
2020-07-23 16:50:00 -07:00
Grey Li
f32f19162c
Merge pull request #3691 from greyli/update-discord-links
Update Discord invite links
2020-07-21 12:16:19 +08:00
Grey Li
1580aa30cb Update Discord invite links 2020-07-21 12:11:17 +08:00
Joshua Bronson
a40c381ffd
Merge pull request #3560 from greyli/fix-env-chdir
Stop change CWD to .env/.flaskenv location
2020-07-18 13:14:09 -04:00
dependabot-preview[bot]
65a0a4b585
Merge pull request #3687 from pallets/dependabot/pip/tox-3.17.1 2020-07-16 08:23:45 +00:00
dependabot-preview[bot]
77e33c4de6
Bump tox from 3.17.0 to 3.17.1
Bumps [tox](https://github.com/tox-dev/tox) from 3.17.0 to 3.17.1.
- [Release notes](https://github.com/tox-dev/tox/releases)
- [Changelog](https://github.com/tox-dev/tox/blob/master/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/tox/compare/3.17.0...3.17.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-16 08:21:32 +00:00
dependabot-preview[bot]
d0d7b796c4
Merge pull request #3686 from pallets/dependabot/pip/tox-3.17.0 2020-07-15 08:11:44 +00:00
dependabot-preview[bot]
6ef9dafe4d
Bump tox from 3.16.1 to 3.17.0
Bumps [tox](https://github.com/tox-dev/tox) from 3.16.1 to 3.17.0.
- [Release notes](https://github.com/tox-dev/tox/releases)
- [Changelog](https://github.com/tox-dev/tox/blob/3.17.0/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/tox/compare/3.16.1...3.17.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-15 08:08:41 +00:00
David Lord
4e854ee496
Merge pull request #3681 from pallets/fix-typo
fix typo
2020-07-08 08:36:14 -07:00
David Lord
aab20ad431
fix typo 2020-07-08 08:26:21 -07:00
David Lord
a12a34100a
Merge pull request #3680 from pallets/feature/doc-fixes
Some small doc fixes
2020-07-08 06:56:11 -07:00
Armin Ronacher
4a1acc8b5f Some small doc fixes 2020-07-08 15:53:43 +02:00
Joshua Bronson
b82c2e611a
Merge pull request #3678 from jab/1.1.x-pathlib-static-folder
Cherry-pick 7ba35c4 from master (support pathlib.Path for static_folder)
2020-07-06 13:51:17 -04:00
Joshua Bronson
b724832872 Cherry-pick 7ba35c4 from master (support pathlib.Path for static_folder) 2020-07-06 13:47:57 -04:00
Joshua Bronson
cf5b1d0283
Merge pull request #3579 from jab/pathlib-for-static_folder
Officially support using pathlib.Path for static_folder.
2020-07-06 13:45:03 -04:00
Joshua Bronson
7ba35c4d4f Restore support for using pathlib.Path for static_folder.
* No longer causes AttributeError: 'PosixPath' object has no
  attribute 'rstrip'.

* This was broken by e6178fe489
  which was released in 1.1.2.

* Add a regression test that now passes.

See #3557.
2020-07-06 08:55:19 -04:00
dependabot-preview[bot]
b82cca7283
Merge pull request #3677 from pallets/dependabot/pip/sphinx-3.1.2 2020-07-06 08:45:55 +00:00
dependabot-preview[bot]
5f6586ae6d
Bump sphinx from 3.1.1 to 3.1.2
Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 3.1.1 to 3.1.2.
- [Release notes](https://github.com/sphinx-doc/sphinx/releases)
- [Changelog](https://github.com/sphinx-doc/sphinx/blob/3.x/CHANGES)
- [Commits](https://github.com/sphinx-doc/sphinx/compare/v3.1.1...v3.1.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-06 08:43:21 +00:00
dependabot-preview[bot]
38a0d404b7
Merge pull request #3676 from pallets/dependabot/pip/python-dotenv-0.14.0 2020-07-06 08:41:38 +00:00
dependabot-preview[bot]
7fbb4f78da
Bump python-dotenv from 0.13.0 to 0.14.0
Bumps [python-dotenv](https://github.com/theskumar/python-dotenv) from 0.13.0 to 0.14.0.
- [Release notes](https://github.com/theskumar/python-dotenv/releases)
- [Changelog](https://github.com/theskumar/python-dotenv/blob/master/CHANGELOG.md)
- [Commits](https://github.com/theskumar/python-dotenv/compare/v0.13.0...v0.14.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-06 08:38:44 +00:00
Grey Li
e403e9ea97 Update changelog for load dotenv behaivour change 2020-07-05 09:38:48 +08:00
Grey Li
84cbfc0698 Stop change CWD to .env/.flaskenv location 2020-07-05 09:37:03 +08:00
Grey Li
3fe5eecc2b
Merge pull request #3674 from DeepOde/master
Added very small clarification to quickstart.rst
2020-07-05 08:28:28 +08:00
Grey Li
718afcc107
Improve wording of tip for Unique URLs chapter 2020-07-05 08:25:48 +08:00
Deep R. Ode
8074cbdc47
Added very small clarification to quickstart.rst 2020-07-03 15:55:56 +05:30
David Lord
47e165d6d5
Merge pull request #3673 from stat1c-void/pr-api.rst-request-link-20200702
API docs - changed flask.request description
2020-07-02 14:38:18 -07:00
Sergei
7d7e8eef23
API docs - changed flask.request description
- the link should point to the flask's Request
 - longer description is unnecessary, as it's all explained above in flask.Request
2020-07-02 23:54:40 +03:00
dependabot-preview[bot]
0a3e91b782
Merge pull request #3671 from pallets/dependabot/pip/pre-commit-2.6.0 2020-07-02 08:21:01 +00:00
dependabot-preview[bot]
1f5a5dce43
Bump pre-commit from 2.5.1 to 2.6.0
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 2.5.1 to 2.6.0.
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/master/CHANGELOG.md)
- [Commits](https://github.com/pre-commit/pre-commit/compare/v2.5.1...v2.6.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-02 08:18:52 +00:00
David Lord
634e901966
update metadata 2020-07-01 09:09:12 -07:00
dependabot-preview[bot]
2b517a18d2
Merge pull request #3668 from pallets/dependabot/pip/tox-3.16.1 2020-06-30 08:08:52 +00:00
dependabot-preview[bot]
cdc5a49333
Bump tox from 3.16.0 to 3.16.1
Bumps [tox](https://github.com/tox-dev/tox) from 3.16.0 to 3.16.1.
- [Release notes](https://github.com/tox-dev/tox/releases)
- [Changelog](https://github.com/tox-dev/tox/blob/master/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/tox/compare/3.16.0...3.16.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-30 08:06:52 +00:00
dependabot-preview[bot]
fe992ca992
Merge pull request #3667 from pallets/dependabot/pip/tox-3.16.0 2020-06-29 08:37:22 +00:00
dependabot-preview[bot]
d74a8626e0
Bump tox from 3.15.2 to 3.16.0
Bumps [tox](https://github.com/tox-dev/tox) from 3.15.2 to 3.16.0.
- [Release notes](https://github.com/tox-dev/tox/releases)
- [Changelog](https://github.com/tox-dev/tox/blob/master/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/tox/compare/3.15.2...3.16.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-29 08:34:57 +00:00
Joshua Bronson
3349c4914d
Merge pull request #3662 from lgiordani/remove-debug-from-examples
Removed misleading DEBUG variable from examples
2020-06-24 12:56:41 -04:00
Leonardo Giordani
2254adf845 Simplified version of file-based database 2020-06-23 15:14:03 +01:00
Leonardo Giordani
26ec470afb Fixed trailing whitespace 2020-06-23 15:06:37 +01:00
Leonardo Giordani
efbd721f20 Changed example DATABASE_URI values 2020-06-23 14:56:51 +01:00
Leonardo Giordani
aec07a1cb5 Removed misleading DEBUG variable from examples 2020-06-21 09:29:45 +01:00
David Lord
9075da126c
Merge pull request #3659 from iomintz/patch-1
[docs] streaming contents: use app.response_class
2020-06-18 07:23:49 -07:00
iomintz
92f648b04e
[docs] streaming contents: use app.response_class
Examples should use app.response_class to encourage code that doesn't need to be changed should the response class be customized later on.
2020-06-17 22:00:35 -05:00
dependabot-preview[bot]
ecd07d6804
Merge pull request #3651 from pallets/dependabot/pip/sphinx-3.1.1 2020-06-15 08:57:27 +00:00
dependabot-preview[bot]
710ac0db51
Bump sphinx from 3.1.0 to 3.1.1
Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/sphinx-doc/sphinx/releases)
- [Changelog](https://github.com/sphinx-doc/sphinx/blob/3.x/CHANGES)
- [Commits](https://github.com/sphinx-doc/sphinx/compare/v3.1.0...v3.1.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-15 08:55:11 +00:00
David Lord
a54f6ee648
update contributing guide 2020-06-11 19:19:49 -07:00
dependabot-preview[bot]
3ee366a199
Merge pull request #3649 from pallets/dependabot/pip/pre-commit-2.5.1 2020-06-10 08:46:05 +00:00
dependabot-preview[bot]
ee28a13009
Bump pre-commit from 2.5.0 to 2.5.1
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 2.5.0 to 2.5.1.
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/master/CHANGELOG.md)
- [Commits](https://github.com/pre-commit/pre-commit/compare/v2.5.0...v2.5.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-10 08:43:09 +00:00
dependabot-preview[bot]
18a7751c7b
Merge pull request #3648 from pallets/dependabot/pip/pip-tools-5.2.1 2020-06-10 08:41:31 +00:00
dependabot-preview[bot]
a753fd601d
Bump pip-tools from 5.2.0 to 5.2.1
Bumps [pip-tools](https://github.com/jazzband/pip-tools) from 5.2.0 to 5.2.1.
- [Release notes](https://github.com/jazzband/pip-tools/releases)
- [Changelog](https://github.com/jazzband/pip-tools/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jazzband/pip-tools/compare/5.2.0...5.2.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-10 08:38:26 +00:00
dependabot-preview[bot]
fcc0d6ebd9
Merge pull request #3647 from pallets/dependabot/pip/pre-commit-2.5.0 2020-06-09 08:24:18 +00:00
dependabot-preview[bot]
f6d5daac46
Bump pre-commit from 2.4.0 to 2.5.0
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 2.4.0 to 2.5.0.
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/master/CHANGELOG.md)
- [Commits](https://github.com/pre-commit/pre-commit/compare/v2.4.0...v2.5.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-09 08:21:52 +00:00
dependabot-preview[bot]
d4f443d8d0
Merge pull request #3645 from pallets/dependabot/pip/sphinx-3.1.0 2020-06-08 14:18:55 +00:00
dependabot-preview[bot]
3207777cd4
Bump sphinx from 3.0.4 to 3.1.0
Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 3.0.4 to 3.1.0.
- [Release notes](https://github.com/sphinx-doc/sphinx/releases)
- [Changelog](https://github.com/sphinx-doc/sphinx/blob/3.x/CHANGES)
- [Commits](https://github.com/sphinx-doc/sphinx/compare/v3.0.4...v3.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-08 14:16:11 +00:00
dependabot-preview[bot]
bcb4f2fd93
Merge pull request #3644 from pallets/dependabot/pip/tox-3.15.2 2020-06-08 14:14:52 +00:00
dependabot-preview[bot]
347383b1bc
Bump tox from 3.15.1 to 3.15.2
Bumps [tox](https://github.com/tox-dev/tox) from 3.15.1 to 3.15.2.
- [Release notes](https://github.com/tox-dev/tox/releases)
- [Changelog](https://github.com/tox-dev/tox/blob/master/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/tox/compare/3.15.1...3.15.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-08 08:44:30 +00:00
David Lord
eec29a8fc3
Merge pull request #3603 from jeffwidman/patch-1
Fix docs link for Flask-Uploads
2020-06-07 17:03:35 -07:00
David Lord
6eeb912a63
Merge remote-tracking branch 'origin/1.1.x' 2020-06-07 16:50:17 -07:00
David Lord
88c9c68e17
Merge pull request #3633 from kx-chen/add-copy-paste-security
security.rst: Add section on copy/paste security
2020-06-07 16:47:12 -07:00
David Lord
51686f5ab4
expand section on copy/paste security 2020-06-07 16:45:31 -07:00
Alan Swenson
c59e019f5c
update code-block typo (#3642) 2020-06-05 21:48:37 -07:00
Kai Chen
0b6a05f541
add section on copy/paste security 2020-06-05 08:51:21 -07:00
David Lord
c347921830
Merge pull request #3640 from pallets/dependabot/pip/greenlet-0.4.16
Bump greenlet from 0.4.15 to 0.4.16
2020-06-05 07:42:54 -07:00
dependabot-preview[bot]
c2f2d9754b
Bump greenlet from 0.4.15 to 0.4.16
Bumps [greenlet](https://github.com/python-greenlet/greenlet) from 0.4.15 to 0.4.16.
- [Release notes](https://github.com/python-greenlet/greenlet/releases)
- [Changelog](https://github.com/python-greenlet/greenlet/blob/master/NEWS)
- [Commits](https://github.com/python-greenlet/greenlet/compare/0.4.15...0.4.16)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-05 08:29:19 +00:00
Grey Li
42817f032a
Merge pull request #3636 from pallets/dependabot/pip/pytest-5.4.3
Bump pytest from 5.4.2 to 5.4.3
2020-06-03 20:27:22 +08:00
dependabot-preview[bot]
8075be8261
Bump pytest from 5.4.2 to 5.4.3
Bumps [pytest](https://github.com/pytest-dev/pytest) from 5.4.2 to 5.4.3.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/5.4.2...5.4.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-03 08:52:47 +00:00
dependabot-preview[bot]
fd348ba8cb
Bump pip-tools from 5.1.2 to 5.2.0 (#3627)
Bumps [pip-tools](https://github.com/jazzband/pip-tools) from 5.1.2 to 5.2.0.
- [Release notes](https://github.com/jazzband/pip-tools/releases)
- [Changelog](https://github.com/jazzband/pip-tools/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jazzband/pip-tools/compare/5.1.2...5.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-05-28 08:53:14 -07:00
dependabot-preview[bot]
9eae42b9e1
Bump sphinx from 3.0.3 to 3.0.4 (#3624)
Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 3.0.3 to 3.0.4.
- [Release notes](https://github.com/sphinx-doc/sphinx/releases)
- [Changelog](https://github.com/sphinx-doc/sphinx/blob/3.x/CHANGES)
- [Commits](https://github.com/sphinx-doc/sphinx/compare/v3.0.3...v3.0.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-05-27 06:46:57 -07:00
David Lord
330a3e3ddb
Merge pull request #3621 from pallets/github-actions
use GitHub Actions for CI
2020-05-23 14:12:22 -07:00
David Lord
2344cd6ebf
use GitHub Actions for CI 2020-05-23 14:06:54 -07:00
David Lord
51c87e6199
Merge pull request #3620 from pallets/requirements
use pip-compile to pin dev requirements
2020-05-23 14:05:38 -07:00
David Lord
eea31f29a5
use pip-compile to pin dev requirements 2020-05-23 14:03:11 -07:00
David Lord
8e2fb4633e
reformat contributing doc 2020-05-23 13:48:24 -07:00
David Lord
295e1e759f
add EditorConfig 2020-05-23 13:25:06 -07:00
David Lord
5b1d47f7e4
Merge pull request #3616 from pallets/rtd-config
add readthedocs config
2020-05-18 15:04:40 -07:00
David Lord
cdf0b5bc79
add readthedocs config 2020-05-18 14:59:31 -07:00
Jeff Widman
c432d8b2bc
Fix docs link for Flask-Uploads 2020-05-08 12:42:52 -07:00
David Lord
d091bb00c0
Merge pull request #3574 from jackwardell/adding-error-message-to-assert
Adding error message to an assert
2020-04-16 10:52:06 -07:00
jackwardell
846ee2c62e
add assert message for errorhandler exception type 2020-04-16 10:49:42 -07:00
David Lord
2062d984ab
Merge pull request #3564 from pallets/cli-ast-parse
use ast to parse FLASK_APP
2020-04-07 18:01:55 -07:00
David Lord
ff2f71379b
use ast to parse FLASK_APP
enables keyword arguments to factory functions
2020-04-07 17:54:51 -07:00
David Lord
0d04b40d13
Merge pull request #3563 from pallets/deprecate-script-info-arg
deprecate passing script_info to factory
2020-04-07 15:57:45 -07:00
David Lord
fcac7f11cf
deprecate passing script_info to factory 2020-04-07 15:54:36 -07:00
David Lord
7e3b8abf99
update docs requirements
remove duplicate docs
2020-04-07 14:39:18 -07:00
David Lord
e69b49bd3d
Merge pull request #3562 from pallets/remove-simplejson
Remove simplejson and deprecate encoding options
2020-04-07 13:40:39 -07:00
David Lord
756902cca1
update json docs 2020-04-07 13:37:14 -07:00
David Lord
8b5f760b72
deprecate JSON encoding options
make consistent with built-in json module
2020-04-07 12:32:27 -07:00
David Lord
c43edfc7c0
remove simplejson
- remove encoding detection backport, json.loads supports it directly
- use str.translate instead of multiple str.replace
2020-04-07 09:55:39 -07:00
David Lord
024f0d384c
move package metadata to setup.cfg 2020-04-04 14:50:21 -07:00
David Lord
171aabc87d
remove unused ref directives
replace page refs with doc directives
2020-04-04 12:57:14 -07:00
David Lord
f2f027d1fb
remove unused module docstrings 2020-04-04 12:28:08 -07:00
David Lord
cd8a374504
Merge pull request #3554 from pallets/drop-python2
Drop Python 2
2020-04-04 12:13:35 -07:00
David Lord
2ae740dd49
f-strings everywhere 2020-04-04 12:10:00 -07:00
David Lord
524fd0bc8c
apply pyupgrade 2020-04-04 12:10:00 -07:00
David Lord
57d628ca74
remove more compat code 2020-04-04 12:10:00 -07:00
David Lord
662c245795
remove _compat module 2020-04-04 12:10:00 -07:00
David Lord
1263d3bd14
remove deprecated code 2020-04-04 12:10:00 -07:00
David Lord
a0a61acdec
drop support for Python 2.7 and 3.5 2020-04-04 12:09:55 -07:00
David Lord
7673835b3d
remove Python 2 from docs 2020-04-04 12:05:44 -07:00
David Lord
96b4dcafc3
Merge branch '1.1.x' 2020-04-03 10:25:51 -07:00
David Lord
93dd1709d0
release version 1.1.2 2020-04-03 10:10:38 -07:00
David Lord
4024a4a89c
update deprecation versions 2020-04-03 10:02:40 -07:00
David Lord
f991a89810
Merge pull request #3541 from jeenuv/clarify-static
Clarify that static_folder must be a relative path
2020-04-03 07:33:20 -07:00
Jeenu Viswambharan
4548e00dba
clarify static_folder is relative to root_path 2020-04-03 07:28:44 -07:00
David Lord
3d61fc4428
Merge pull request #3529 from pgkrit/master
Move HTML escaping example back to Variable Rules.
2020-04-02 12:55:49 -07:00
David Lord
57f9623b08
move html escaping to dedicated section 2020-04-02 12:49:00 -07:00
David Lord
c6a619af83
update CLI docs IDE integration 2020-04-02 12:09:04 -07:00
David Lord
037ae3f024
Merge remote-tracking branch 'origin/1.1.x' 2020-04-02 11:56:30 -07:00
David Lord
ac9589ca72
Merge pull request #3530 from valleygtc/docs-fix
docs: testing.rst function def missing colon
2020-04-02 11:55:01 -07:00
David Lord
aad99260d9
Merge pull request #3537 from shanavas786/master
Update deprecated for config.from_json
2020-04-02 11:54:25 -07:00
Joshua Bronson
bcf0a95216
Merge pull request #3544 from mattc41190/patch-2
Grammar and clarity fix
2020-03-25 10:39:45 -04:00
mattc41190
1736e01ea0
Grammar and clarity fix 2020-03-25 09:20:55 -05:00
Joshua Bronson
80a597b7f9
Merge pull request #3543 from mattc41190/patch-1
itty bitty typo
2020-03-24 11:17:25 -04:00
mattc41190
8fc723c7c2
itty bitty typo 2020-03-24 09:54:32 -05:00
Shanavas M
e047dd6a32
Update deprecated for config.from_json 2020-03-18 12:37:51 +05:30
David Lord
c47c8c4389
Merge pull request #3536 from gnumoksha/patch-2
docs: update "Deploying on Google App Engine"
2020-03-16 15:26:49 -07:00
Tobias Sette
d115d843e6
docs: update "Deploying on Google App Engine"
Use the documentation for Python 3 instead of Python 2, which is deprecated.
2020-03-16 19:18:53 -03:00
David Lord
29d33203d0
Merge pull request #3524 from jeffwidman/patch-2
Remove deprecated `license_file` option
2020-03-11 07:40:06 -07:00
David Lord
bac908ef35
Merge pull request #3513 from kevinanew/master
Make code more easy to read
2020-03-11 07:31:20 -07:00
kevinanew
d5f88dafaf
refactor variable choices into if blocks 2020-03-11 07:24:38 -07:00
gutianci
ceed993d63 docs: testing.rst function def missing colon 2020-03-05 18:31:21 +08:00
Peter G Kritikos
56e75eace5 Move HTML escaping example back to Variable Rules.
Demonstration of markupsafe's escape function was in the Minimal
Application example, but the minimal example does not accept user
input.
2020-03-04 18:50:36 -05:00
Jeff Widman
9311a823a7
Remove deprecated license_file option
Starting with wheel 0.32.0 (2018-09-29), the `license_file` option is
deprecated in favor of `license_files`.

https://wheel.readthedocs.io/en/stable/news.html

The wheel will continue to include `LICENSE`, it is now included
automatically:

https://wheel.readthedocs.io/en/stable/user_guide.html#including-license-files-in-the-generated-wheel-file

See https://github.com/FactoryBoy/factory_boy/pull/696 for inspiration and more discussion.
2020-03-02 10:21:15 -08:00
David Lord
fd3fca2aa0
Merge pull request #3521 from ongopongo/patch-1
Fix property name in description
2020-02-28 12:18:04 -08:00
ongopongo
1d45539000
Fix property name in description
Previously, the description referred to a property named `original_error`.
However, both the code sample that followed it _and_ the Werkzeug
documentation refer to it as `original_exception` instead.

In this commit, I change the description to use the same property name
as is used in the code sample and the Werkzeug documentation.

Here's a link to the Werkzeug documentation of that property:
- https://werkzeug.palletsprojects.com/en/1.0.x/exceptions/#werkzeug.exceptions.InternalServerError.original_exception
2020-02-28 12:09:51 -08:00
kylepollina
37f582dbb1
Fix typo in docs (#3517) 2020-02-27 23:22:03 +01:00
David Lord
64ba43411f
Merge remote-tracking branch 'origin/1.1.x' 2020-02-15 10:40:32 -08:00
David Lord
a75315028c
Merge pull request #3456 from frostming/bugfix/3452
Fix a bug that the static endpoint will unexpectedly catch all
2020-02-12 07:09:32 -08:00
Frost Ming
e6178fe489
Handle different sep across os 2020-02-12 13:17:03 +08:00
David Lord
909b9751ee
Merge remote-tracking branch 'origin/1.1.x' 2020-02-10 18:41:07 -08:00
David Lord
71b7468634
Merge pull request #3460 from yingshaoxo/patch-1
static_folder and static_url_path can be different
2020-02-10 18:40:25 -08:00
yingshaoxo
7e068145df
pass static_url_path along with static_folder 2020-02-10 18:33:32 -08:00
David Lord
07556da918
Merge remote-tracking branch 'origin/1.1.x' 2020-02-10 18:29:43 -08:00
frostming
d4076cf07c
strip the ending slash for static_url_path 2020-02-10 18:19:25 -08:00
David Lord
c12d9f8b49
Merge pull request #3480 from candleindark/patch-2
Incorrect grammar
2020-02-10 18:13:24 -08:00
David Lord
8973b58955
Merge pull request #3473 from greyli/fix-doc-import
Add missing import for escape in doc
2020-02-10 18:12:50 -08:00
David Lord
b074a2eec9
Merge pull request #3492 from pallets/cryptography
CLI checks for cryptography library
2020-02-10 17:56:11 -08:00
Grey Li
571e92b317
add import for escape in quickstart
import escape from markupsafe instead of flask
2020-02-10 17:53:11 -08:00
Isaac To
b80eaf2c99
Incorrect grammar
The original sentence has incorrect grammar
2020-02-10 17:47:42 -08:00
David Lord
bcde664f9a
cli checks for cryptography library 2020-02-10 17:34:19 -08:00
David Lord
982663d063
Merge pull request #3462 from gpakosz/outdated-doc
Remove comment about extensions being reviewed by the core team
2020-02-10 17:29:09 -08:00
David Lord
986871bf4e
Merge pull request #3453 from noviluni/remove_redundant_parentheses
fix docstring and remove redundant parentheses
2020-02-10 17:28:14 -08:00
David Lord
28d09ae0fc
Merge pull request #3437 from RDIL/patch-1
Updated Issue Template
2020-02-10 17:27:51 -08:00
Marc Hernandez Cabot
5da342e4dd
fix docstring and remove redundant parentheses 2020-02-10 17:03:52 -08:00
Gregory Pakosz
aa1d4cb840
remove approved extensions in foreword 2020-02-10 17:00:53 -08:00
Reece Dunham
e6ac789554
mention discord in issue template 2020-02-10 16:53:51 -08:00
David Lord
ab6e630194
Merge branch '1.1.x' 2020-02-10 16:44:33 -08:00
David Lord
ef27c1b749
Merge branch '1.0.x' into 1.1.x 2020-02-10 16:43:49 -08:00
David Lord
d92b64aa27
clean up merge 2020-02-10 16:36:40 -08:00
David Lord
a3e4395a42
Merge pull request #3498 from raymond-devries/3445-traceback-for-none
View returned none exception contains endpoint name
2020-02-10 13:15:24 -08:00
raymond-devries
900fa2f795 Feature request #3445. 2020-02-10 13:09:53 -08:00
Armin Ronacher
5ceb0a59dd Merge branch '1.1.x' 2020-02-10 20:37:28 +01:00
Armin Ronacher
9b424e9da9 Merge branch '1.0.x' into 1.1.x 2020-02-10 20:37:21 +01:00
Armin Ronacher
2f8086e8c8 Merge remote-tracking branch 'origin/0.12.x' into 1.0.x 2020-02-10 20:36:55 +01:00
Armin Ronacher
79c71f24e4 0.12.6.dev 2020-02-10 20:32:11 +01:00
Armin Ronacher
191710cbda Bump version number to 0.12.5 2020-02-10 20:30:59 +01:00
Armin Ronacher
8086ce8b9f Changelog for 0.12.5 2020-02-10 20:30:54 +01:00
Armin Ronacher
85db0135cb
Pin Werkzeug < 1.0 for 0.12 (#3497) 2020-02-10 20:27:39 +01:00
David Lord
e7dc413944
Merge pull request #3496 from lathamfell/update-gitignore
Add .vscode to .gitignore
2020-02-10 11:17:58 -08:00
Latham Fell
6627c5a3d2 Add vscode settings dir to .gitignore 2020-02-10 11:09:04 -08:00
David Lord
0834da832a
Merge branch '1.1.x' 2020-02-10 10:16:20 -08:00
David Lord
63b40254e9
xfail __main__ instance test interacting with tox 2020-02-10 10:16:08 -08:00
David Lord
2c66746a37
Merge branch '1.1.x' 2020-02-09 15:21:13 -08:00
David Lord
8d5234e4c7
next version 1.2.0 2020-02-09 15:20:23 -08:00
David Lord
de4be03b5d
Merge pull request #3479 from candleindark/patch-2
A better expression for the intended meaning
2020-02-06 12:07:33 -08:00
Isaac To
bb66b61d1d
A better expression for the intended meaning 2020-02-06 12:04:49 -08:00
David Lord
0a8be38058
Merge pull request #3478 from candleindark/patch-1
This is a typo.
2020-02-06 10:57:30 -08:00
Isaac To
ce08807a8b
This is a typo. 2020-02-06 10:52:59 -08:00
Adrian
38eb5d3b49
Remove comment about extension backwards compat
0.7 was a long time ago; there's no reason for extension to supports such old versions.
2019-11-25 00:38:50 +01:00
David Lord
25a5d30311
Merge pull request #3427 from greyli/update-old-links
Update old pocoo links everywhere
2019-11-19 09:37:21 -08:00
Grey Li
a3415fc6dc
Use https for pallets URL 2019-11-19 09:32:35 -08:00
Grey Li
ef434ea998
Replace old pocoo links everywhere
pocco.org -> palletsprojects.com
2019-11-19 09:32:35 -08:00
David Lord
d49cfb35d4
Merge pull request #3435 from pallets/send-file-text
send_file doesn't allow StringIO
2019-11-19 09:08:07 -08:00
David Lord
980168d084
send_file doesn't allow StringIO 2019-11-19 08:52:12 -08:00
David Lord
2659f0a5e6
Merge pull request #3406 from erfanio/f-string-docs
Change docs to use f-strings
2019-11-18 19:09:30 -08:00
David Lord
b5d9084f15
Merge branch '1.1.x' 2019-11-18 19:07:23 -08:00
David Lord
26dac4fd77
fix test pipeline display name 2019-11-18 19:06:57 -08:00
David Lord
af5743f6bd
Merge pull request #3401 from Jamim/feature/python-3.8
Declare support for Python 3.8
2019-11-18 19:05:01 -08:00
David Lord
824e548036
add 3.8 to pipelines 2019-11-18 18:57:43 -08:00
Aliaksei Urbanski
33d9f9fa08
declare support for Python 3.8 2019-11-18 18:26:46 -08:00
David Lord
0586188f22
Merge pull request #3425 from homeworkprod/patch-1
Update `versionadded` for `Config.from_file`
2019-11-18 18:23:39 -08:00
David Lord
bfa9aceb03
Merge pull request #3434 from pallets/eager-load
lazy load app on reload only
2019-11-18 18:22:38 -08:00
David Lord
a671e47921
rewrite the development server docs 2019-11-18 18:02:12 -08:00
David Lord
240a11052b
lazy load app on reload only 2019-11-18 17:54:46 -08:00
David Lord
a83d6d2528
Merge remote-tracking branch 'origin/1.1.x' 2019-11-18 17:54:20 -08:00
Jochen Kupperschmidt
1feb69d595
Update versionadded for Config.from_file
According to the change log at https://github.com/pallets/flask/blob/master/CHANGES.rst, the release `Config.from_file` will be published with is now 2.0.0 rather than 1.2.0.
2019-11-13 23:13:56 +01:00
Joshua Bronson
a250997f75
Merge pull request #3414 from thiagojobson/master
Fix typo in documentation
2019-11-02 18:40:20 -04:00
Thiago J. Barbalho
4f6b310513
Fix typo 2019-11-02 20:56:35 +00:00
David Lord
42942ec291
Merge pull request #3410 from haneybarg/bad_request
[BUG FIX] Test test_send_from_directory_bad_request fails in Python 3.8.
2019-10-28 18:26:16 -07:00
Fernanda Guimarães
c367a86cc5 Test test_send_from_directory_bad_request no longer fails in Python 3.8. 2019-10-28 21:37:25 -03:00
David Lord
1234eb0f9f
Merge pull request #3408 from lamby/943674-flask-please-make-the-build-reproducible
Make the documentation build reproducibly
2019-10-28 07:59:00 -07:00
Chris Lamb
3ddf7fd2c2 Make the documentation build reproducibly
Whilst working on the Reproducible Builds effort [0] we noticed that
flask could not be built reproducibly.

This is because it includes an absolute build directory in the
documentation as the "json_module" attribute points to a Python class/
module which has a string representation including its path.

This commit skips this (inherited) member from the documentation.

(This was originally filed in Debian as #943674 [1].)

 [0] https://reproducible-builds.org/
 [1] https://bugs.debian.org/943674
2019-10-28 09:16:53 +00:00
erfanio
07caa44224 Change docs to use f-strings 2019-10-26 17:19:00 +11:00
David Lord
8f422d2b5e
Merge pull request #3398 from pgjones/toml
Support loading configuration from text files
2019-10-18 09:28:37 -07:00
David Lord
aac0f585b9
clean up config.from_file docs 2019-10-18 09:24:58 -07:00
pgjones
829aa65e64
Support loading configuration from text files
TOML is a very popular format now, and is taking hold in the Python
ecosystem via pyproject.toml (among others). This allows toml config
files via,

    app.config.from_file("config.toml", toml.loads)

it also allows for any other file format whereby there is a loader
that takes a string and returns a mapping.
2019-10-18 09:15:47 -07:00
David Lord
7df10cd8e0
Merge pull request #3395 from decaz/patch-1
Update reqcontext.rst
2019-10-14 14:00:01 -07:00
Marat Sharafutdinov
468705df17
Update reqcontext.rst 2019-10-14 23:48:48 +03:00
David Lord
200ce9bd39
Merge pull request #3369 from doronhorwitz/get-cookie-name
get_cookie_name in SessionInterface for easier overriding in SecureCookieSessionInterface
2019-10-12 19:20:31 -07:00
Doron Horwitz
0c0b31a789
get_cookie_name in SessionInterface for easier overriding in SecureCookieSessionInterface 2019-10-12 19:12:27 -07:00
David Lord
4bceeccfff
Merge pull request #3391 from pallets/explain-escape
explain escape at top of quickstart
2019-10-12 19:03:34 -07:00
David Lord
413778afc1
explain escape at top of quickstart
* introduce escape, and explain why it's omitted in examples
* clean up imports in examples
2019-10-12 18:53:47 -07:00
David Lord
9bdc42d300
Merge pull request #3381 from seeksort/request-context-typo
fix typo in request context docs
2019-10-08 09:11:18 -07:00
Kristin Faner
af970bd20f
fix typo in request context docs 2019-10-08 09:06:01 -07:00
Mellcap Zhao
941bc9ff60 Fix link to header in CONTRIBUTING (#3382) 2019-10-06 13:26:00 -07:00
David Lord
a3f07829ca
Merge branch '1.1.x' 2019-09-24 06:44:36 -07:00
David Lord
7fdd0df6ec
Merge branch '1.0.x' into 1.1.x 2019-09-24 06:44:18 -07:00
David Lord
563ef469f7
Merge branch '0.12.x' into 1.0.x 2019-09-24 06:43:25 -07:00
David Lord
e007949017
Merge pull request #3376 from pallets/migrate-docs
update docs for new theme
2019-09-24 06:41:48 -07:00
David Lord
4ed20657c6
update docs for new theme 2019-09-24 06:35:10 -07:00
David Lord
4a8e75b10a
Merge pull request #3344 from hharutyunyan/fix-the-contibution-docs
Fix the contibution docs
2019-09-23 12:24:08 -07:00
David Lord
599f32c7a4
Merge pull request #3346 from bearnun/master
Update logging.rst
2019-09-23 12:22:05 -07:00
bearnun
2ceae5f8a5
mention default logging level 2019-09-23 12:17:46 -07:00
David Lord
6429bf19a0
Merge branch '1.1.x' 2019-09-23 12:11:18 -07:00
David Lord
5f5e8e5339
Merge branch '1.0.x' into 1.1.x 2019-09-23 12:10:55 -07:00
David Lord
e17c3423bd
Merge pull request #3375 from pallets/ext-py-version
reword extension python version item
2019-09-23 12:10:30 -07:00
David Lord
6cde195c88
reword extension python version item 2019-09-23 11:59:59 -07:00
David Lord
40eadfc52a
Merge branch '1.1.x' 2019-09-23 08:38:29 -07:00
David Lord
746d9181d7
Merge branch '1.0.x' into 1.1.x 2019-09-23 08:38:11 -07:00
David Lord
06507ed4e4
Merge pull request #3374 from pallets/ext-docs
Remove old things from docs
2019-09-23 08:33:50 -07:00
David Lord
e01b68e7ee
update patterns, snippets, extensions docs 2019-09-23 08:19:40 -07:00
David Lord
12666af6b5
Merge pull request #3349 from nathanmp/master
Update testing.rst
2019-09-02 09:05:05 -07:00
Nathan McKinley-Pace
2ec150af02
Update testing.rst
It now describes how to install flaskr using pip so that all tests pass.
2019-09-02 11:31:34 -04:00
hharutyunyan
9b94e14638 Updating contribution docs. Added the link with a guide to install pre-commit and made the pre-commit installation command a code block. 2019-08-29 02:44:00 +04:00
Joshua Bronson
908a364996
Merge pull request #3343 from gruentee/patch-1
fix typo: base on -> based on
2019-08-25 15:36:19 -04:00
Constantin
b839beb23d
fix typo: base on -> based on 2019-08-25 20:33:41 +02:00
David Lord
db061cf736
Merge pull request #3332 from Eido95/patch-1
docs: Change max content length value to megabyte
2019-08-24 09:09:32 -07:00
Joshua Bronson
96726f6a04
Merge pull request #3336 from arnavb/patch-1
Fix typo in pop documentation
2019-08-15 21:30:05 -04:00
Arnav Borborah
553b26f857
Fix typo in pop documentation 2019-08-15 21:05:33 -04:00
Eido95
b33e89935a
docs: Change max content length value to megabyte
16 * 1024 * 1024 = 16 MiB (Mebibyte)
16 * 1000 * 1000 = 16 MB (Megabyte)

The example is in megabytes, not in mebibytes.
2019-08-13 11:02:56 +03:00
Chris Zimmerman
353d891561 fixed typo in logging docstring (#3328)
* fixed typo in logging docstring

* second typo fix
2019-08-09 14:47:17 -04:00
David Lord
33db535108
Merge branch '1.1.x' 2019-08-01 13:35:52 -07:00
David Lord
b3b38285a4
fix stylecheck 2019-08-01 13:35:38 -07:00
David Lord
0adbaf270a
Merge branch '1.1.x' 2019-08-01 13:08:34 -07:00
David Lord
02cfee8461
Merge branch '1.0.x' into 1.1.x 2019-08-01 13:08:12 -07:00
David Lord
ca0acbaa53
Merge pull request #3317 from csirmazbendeguz/patch-1
Fix typo in urlprocessors.rst
2019-08-01 13:07:52 -07:00
Csirmaz Bendegúz
28ffe15349
Fix typo in urlprocessors.rst 2019-08-01 12:58:07 -07:00
David Lord
c074422cfd
Merge pull request #3321 from greyli/fix-gh-link-generator
Fix github link generator for docs
2019-08-01 12:56:30 -07:00
Grey Li
2a8ebc4411 Fix github link generator for docs 2019-08-01 22:49:31 +08:00
David Lord
b7f6fae9b3
Merge pull request #3315 from linchiwei123/cleanup
clean up outdated code
2019-07-25 11:33:36 -07:00
linchiwei123
a0a49e1c9e clean up outdated code 2019-07-24 15:50:37 +08:00
David Lord
fb4aab5d89
Merge branch '1.1.x' 2019-07-22 13:31:24 -07:00
David Lord
c42803f168
Merge branch '1.0.x' into 1.1.x 2019-07-22 13:31:05 -07:00
David Lord
d0df619263
Merge pull request #3305 from greyli/update-extension-doc
Update outdated extension doc
2019-07-22 13:30:43 -07:00
Grey Li
90004a83be
Update outdated extension doc
Remove links and descriptions relate to abandoned "Flask Extension
Registry" in documentation
2019-07-22 13:23:57 -07:00
Joshua Bronson
7d0293d37c
Merge pull request #3308 from MakDon/master
Add version '3.7' and a comma in "Running the test" of contributing guide.
2019-07-21 12:03:13 -04:00
makdon
3628cbceaf Add version '3.7' and a comma in "Running the test" of contributing guide. 2019-07-21 21:25:29 +08:00
David Lord
722d5e610a
Merge branch '1.1.x' 2019-07-10 12:44:57 -07:00
David Lord
ded3d642a7
pass sys.argv to flask cli 2019-07-10 12:44:04 -07:00
David Lord
d694eb443a
Merge pull request #3299 from pallets/click-args
pass sys.argv to flask cli
2019-07-10 12:42:58 -07:00
David Lord
c478e5d52f
pass sys.argv to flask cli 2019-07-10 11:45:20 -07:00
David Lord
3fb368a444
Merge pull request #3298 from matrixise/patch-1
Documentation: Use Python 3.5+
2019-07-10 10:28:19 -07:00
Stéphane Wirtel
98a26cfb42 Documentation: Use Python 3.5+ 2019-07-10 19:03:10 +02:00
David Lord
901661c1a4
Merge branch '1.1.x' 2019-07-08 11:04:16 -07:00
David Lord
ffc68840f8
release version 1.1.1 2019-07-08 10:58:12 -07:00
David Lord
1a6696da70
Merge pull request #3292 from pallets/deprecate-json-available
restore and deprecate json_available
2019-07-08 10:37:16 -07:00
David Lord
1617202d91
restore and deprecate json_available 2019-07-08 10:26:12 -07:00
Joshua Bronson
008d3388b9
Merge pull request #3290 from aadibajpai/master
Comment out helpful tips in ISSUE_TEMPLATE so they're visible only when editing
2019-07-07 15:43:25 -04:00
Aadi Bajpai
e4c7033a34
Comment out helpful tips in issue_template.md 2019-07-08 01:07:45 +05:30
Aadi Bajpai
73d997f0fc
Update ISSUE_TEMPLATE.md 2019-07-07 20:55:52 +05:30
David Lord
1b4ace9ba5
release version 1.1.0 2019-07-04 16:04:42 -07:00
David Lord
8a78fdb09c
Merge branch '1.0.x' 2019-07-04 16:01:14 -07:00
David Lord
626b5cc166
release version 1.0.4 2019-07-04 15:33:46 -07:00
David Lord
2844fdb82e
Merge branch '1.0.x' 2019-07-03 12:23:16 -07:00
David Lord
c07475935c
Merge pull request #3285 from ThiefMaster/dotenv-msg-stderr
Move dotenv warning to stderr
2019-07-03 10:15:32 -07:00
ThiefMaster
975f979269 Move dotenv warning to stderr 2019-07-03 15:08:10 +02:00
David Lord
6d0e79b33a
Merge pull request #3284 from pallets/logger-warning
show warning for old logger config
2019-07-02 11:43:47 -07:00
David Lord
b08e35e4ab
show warning for old logger config 2019-07-02 11:39:00 -07:00
David Lord
6665c91e6f
Merge pull request #3282 from pallets/logger-name
use app.name as app.logger name
2019-07-01 17:42:51 -07:00
David Lord
df470aecb9
use app.name as app.logger name 2019-07-01 14:56:18 -07:00
David Lord
465da9f610
Merge branch '1.0.x' 2019-07-01 11:57:00 -07:00
David Lord
cf4923bf58
Merge pull request #3274 from abhinavsagar/patch-1
Fix typo
2019-07-01 11:31:48 -07:00
Abhinav Sagar
3aff003c45
Update cli.py 2019-07-01 11:01:01 -07:00
David Lord
b05a685a03
Merge branch '1.0.x' 2019-07-01 10:54:31 -07:00
David Lord
043443d2d3
Merge pull request #3278 from asottile/importlib_spec
Fixes for PEP451 import loaders and pytest 5.x
2019-07-01 10:47:33 -07:00
Anthony Sottile
a5ecdfa7a5
Fixes for PEP451 import loaders and pytest 5.x
- pytest 5.x drops python2 compatibility and therefore only implements PEP 451
- pytest 5.x made the repr of `ExcInfo` less confusing (fixed tests depending
  on the old format)
2019-07-01 10:43:06 -07:00
David Lord
afd6250bab
Merge branch '1.0.x' 2019-07-01 09:52:06 -07:00
David Lord
b9c2267272
fix tests link 2019-07-01 09:49:40 -07:00
David Lord
5a04590e9c
Merge pull request #3281 from asottile/utf8_changes
Make the changelog UTF-8 compatible
2019-07-01 09:38:43 -07:00
Anthony Sottile
ac302fb607 Make the changelog UTF-8 compatible 2019-07-01 07:36:20 -07:00
David Lord
2675076cb7
Merge pull request #3273 from pallets/utf8-filename
send_file quotes ":/" in UTF-8 filename
2019-06-27 08:04:31 -07:00
David Lord
54cbb4e642
send_file quotes ":/" in UTF-8 filename 2019-06-27 07:55:22 -07:00
David Lord
2a2134974c
Merge branch '1.0.x' 2019-06-26 14:46:10 -07:00
David Lord
6ed68f015a
Merge pull request #3272 from pallets/keyerror
don't clear BadRequestKeyError args
2019-06-26 14:43:36 -07:00
David Lord
871e6d6a9d
don't clear BadRequestKeyError args 2019-06-26 14:34:03 -07:00
David Lord
1351d0a565
Merge branch '1.0.x' 2019-06-23 16:57:52 -07:00
David Lord
dbe51dc09d
remove union merge attr 2019-06-23 16:25:40 -07:00
David Lord
31d3c7e719
Merge pull request #3270 from pallets/metadata
update project metadata
2019-06-23 15:43:47 -07:00
David Lord
cb6272ccc8
fix docks linkcheck 2019-06-23 15:37:51 -07:00
David Lord
28b35c55a1
update docs config 2019-06-23 12:27:25 -07:00
David Lord
7d77958000
use sphinx-issues, rewrap changelog 2019-06-23 12:25:38 -07:00
David Lord
24498afed5
standardize project metadata 2019-06-22 13:10:50 -07:00
David Lord
e666f7a69c
standardize license and copyright 2019-06-22 13:09:09 -07:00
David Lord
6cd92ebc32
Merge pull request #3269 from pallets/command-name
use dashes for command names
2019-06-21 09:07:05 -07:00
David Lord
146df0f9e8
use dashes for command names 2019-06-21 08:47:27 -07:00
David Lord
185d7cbab2
Merge pull request #3266 from pallets/internal-server-error-type
always pass InternalServerError instance to 500 handler
2019-06-21 08:33:59 -07:00
David Lord
54519ef028
document behavior of very generic error handlers 2019-06-21 08:22:35 -07:00
David Lord
9054f6d639
always pass InternalServerError instance to 500 handler 2019-06-19 14:52:25 -07:00
David Lord
2fa30f6a9e
Merge pull request #3104 from eladm26/adding_models_converter
moving match_request to RequestContext.push to enable ModelConverter
2019-06-13 12:46:53 -07:00
David Lord
c65863912b
move url matching after opening session 2019-06-13 12:40:01 -07:00
Elad Moshe
1ff98a2d21
wait until app ctx is ready before matching url
`RequestContext.match_request` is moved from `__init__` to `push`. This
causes matching to happen later, when the app context is available.
This enables URL converters that use things such as the database.
2019-06-13 08:32:23 -07:00
David Lord
d5fea5fa1d
Merge pull request #3253 from aligoren/document-get-exc-class-and-code
Added :param to the _get_exc_class_and_code method docstring
2019-06-12 14:10:42 -07:00
David Lord
6ec98f0749
reword _get_exc_class_and_code docstring 2019-06-12 14:09:57 -07:00
aligoren
d8d74b0cc8
document _get_exc_class_and_code params 2019-06-12 14:08:45 -07:00
David Lord
53f5fd234b
Merge pull request #3248 from Vicolatope/document-blueprint-parameters
Added :param to the Blueprint concstructor docstring
2019-06-12 14:02:56 -07:00
David Lord
571b9f54e7
reword Blueprint class docstring 2019-06-12 14:01:49 -07:00
vdanain
b89bf9e6d7
document Blueprint params 2019-06-12 12:09:01 -07:00
David Lord
f7f1d9de3d
Merge pull request #3260 from LBWright/error-handling
adds api error handling example to documentation
2019-06-12 11:07:04 -07:00
David Lord
4b519f0e33
reword api error section 2019-06-12 11:02:53 -07:00
Logan Wright
7bc965fada
adds api error handling documentation 2019-06-12 10:54:12 -07:00
David Lord
29111a3259
Merge branch '1.0.x' 2019-06-12 10:41:11 -07:00
David Lord
8a7d080085
remove codecov 2019-06-12 10:35:35 -07:00
David Lord
46a67b6789
Merge pull request #3261 from pallets/fix-server-name-warnings
fix tests failing with server name warnings
2019-06-12 08:17:25 -07:00
David Lord
dbd4520ccb
fix tests failing with server name warnings
After pallets/werkzeug#1577, mismatched configured and real server
names will show a warning in addition to raising 404. This caused
tests that did this deliberately to fail.

This patch removes the pytest fixture we were using to fail on
warnings, instead using the standard `-Werror` option. This speeds
up the tests by ~3x.
2019-06-10 14:05:33 -07:00
David Lord
d4b688bd03
Merge pull request #3247 from pallets/join-strings
fix string concats left over by black
2019-06-01 12:28:29 -04:00
David Lord
53c893b646
fix string concats left over by black 2019-06-01 09:22:20 -07:00
David Lord
3db4697959
Merge pull request #3246 from pallets/reorder-imports
apply reorder-python-imports pre-commit config
2019-06-01 12:12:49 -04:00
David Lord
43483683b2
apply reorder-python-imports pre-commit config 2019-06-01 09:07:20 -07:00
David Lord
ab8d60d826
Merge pull request #3245 from pallets/src-dir
move to src directory
2019-06-01 11:10:33 -04:00
David Lord
ca278a8694
move to src directory 2019-06-01 08:06:16 -07:00
David Lord
09392e0348
Merge remote-tracking branch 'origin/1.0.x' 2019-06-01 06:53:29 -07:00
David Lord
48d0e86313
Merge pull request #3241 from jon-stumpf/jss-updates
Add pre-commit config for flake8
2019-06-01 09:36:23 -04:00
Jon S. Stumpf
b46f5942a5
address flake8 issues 2019-06-01 06:31:35 -07:00
Jon S. Stumpf
549fed29ea
add pre-commit config for flake8 2019-06-01 09:13:46 -04:00
David Lord
b61cbf8ab4
Merge pull request #3244 from paulgb/master
Clarify documentation about how url_for uses configuration values (#2759)
2019-06-01 08:59:01 -04:00
David Lord
13b689bba6
Merge pull request #3242 from cslecrone/3211-ssl-import
"#3211: Don't require ssl module"
2019-06-01 08:57:06 -04:00
cslecrone
1718f1934c
don't require ssl module for flask cli 2019-05-31 17:27:52 -04:00
David Lord
6369537a49
Merge pull request #3243 from DiegoAlbertoTorres/docs
Guard against missing request context in logging docs.
2019-05-31 16:47:32 -04:00
Paul Butler
a3272941ce Clarify documentation about how url_for uses configuration values (#2759) 2019-05-31 15:33:06 -04:00
Diego Alberto Torres Quintanilla
45b2e7702d Guard against missing request context in logging docs. 2019-05-31 14:54:03 -04:00
David Lord
6e995f2379
Merge pull request #3240 from ultimecia7/docfix
Fix testing documentation to demonstrate using test client with teardown
2019-05-31 14:06:54 -04:00
David Lord
5e15850532
Merge pull request #3232 from lordmauve/environbuilder
Convert make_test_environ_builder into class (fixes #3207)
2019-05-31 13:58:40 -04:00
David Lord
cd4023d9d2
Merge pull request #3237 from scrosby/fix-3218
Move python properties to decorator syntax
2019-05-31 13:44:22 -04:00
ultimecia7
d981cc678a Fix testing documentation to demonstrate using test client with teardown 2019-05-31 13:18:54 -04:00
Daniel Pope
e45370b994 Fix name of kwargs parameter 2019-05-31 18:05:25 +01:00
Daniel Pope
c7f56c5a55 Create json_dumps() method on new EnvironBuilder 2019-05-31 18:05:25 +01:00
Daniel Pope
976dfedaa9 Convert make_test_environ_builder into class (fixes #3207) 2019-05-31 18:05:25 +01:00
David Lord
91e53da054
Merge pull request #3236 from lordmauve/no-cligroup-empty
Do not register empty CLI groups from Blueprint
2019-05-31 13:05:00 -04:00
David Lord
524f9c32c7
Merge pull request #3233 from rtilk89/unused_werkzerg_import
Issue #3226: Remove unused werkzeug datastructure import
2019-05-31 12:58:44 -04:00
David Lord
94e057224c
Merge pull request #3239 from gokcegrbl/GH-3227
Comment on bare except usage in _compat.py
2019-05-31 12:56:43 -04:00
David Lord
52f9aa7ed6
Merge pull request #3235 from johnzeringue/better-return-type-error
Better error message when view return type is not supported
2019-05-31 12:50:59 -04:00
gokcegrbl
1b526c837e Comment on bare except usage in _compat.py
(Fixes pallets/flask#3227)
2019-05-31 16:27:51 +00:00
John Zeringue
8bb7185284 Better error message when view return type is not supported
Before, returning a `bool` from a route caused the error

```
[2019-05-31 10:08:42,216] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
  File "/Users/johnzeringue/Documents/ts-open/flask/flask/app.py", line 2070, in make_response
    rv = self.response_class.force_type(rv, request.environ)
  File "/Users/johnzeringue/Documents/ts-open/flask/env/lib/python3.7/site-packages/werkzeug/wrappers/base_response.py", line 269, in force_type
    response = BaseResponse(*_run_wsgi_app(response, environ))
  File "/Users/johnzeringue/Documents/ts-open/flask/env/lib/python3.7/site-packages/werkzeug/wrappers/base_response.py", line 26, in _run_wsgi_app
    return _run_wsgi_app(*args)
  File "/Users/johnzeringue/Documents/ts-open/flask/env/lib/python3.7/site-packages/werkzeug/test.py", line 1119, in run_wsgi_app
    app_rv = app(environ, start_response)
TypeError: 'bool' object is not callable

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/johnzeringue/Documents/ts-open/flask/flask/app.py", line 2393, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/johnzeringue/Documents/ts-open/flask/flask/app.py", line 1906, in full_dispatch_request
    return self.finalize_request(rv)
  File "/Users/johnzeringue/Documents/ts-open/flask/flask/app.py", line 1921, in finalize_request
    response = self.make_response(rv)
  File "/Users/johnzeringue/Documents/ts-open/flask/flask/app.py", line 2078, in make_response
    reraise(TypeError, new_error, sys.exc_info()[2])
  File "/Users/johnzeringue/Documents/ts-open/flask/flask/_compat.py", line 39, in reraise
    raise value.with_traceback(tb)
  File "/Users/johnzeringue/Documents/ts-open/flask/flask/app.py", line 2070, in make_response
    rv = self.response_class.force_type(rv, request.environ)
  File "/Users/johnzeringue/Documents/ts-open/flask/env/lib/python3.7/site-packages/werkzeug/wrappers/base_response.py", line 269, in force_type
    response = BaseResponse(*_run_wsgi_app(response, environ))
  File "/Users/johnzeringue/Documents/ts-open/flask/env/lib/python3.7/site-packages/werkzeug/wrappers/base_response.py", line 26, in _run_wsgi_app
    return _run_wsgi_app(*args)
  File "/Users/johnzeringue/Documents/ts-open/flask/env/lib/python3.7/site-packages/werkzeug/test.py", line 1119, in run_wsgi_app
    app_rv = app(environ, start_response)
TypeError: 'bool' object is not callable
The view function did not return a valid response. The return type must be a string, tuple, Response instance, or WSGI callable, but it was a bool.
```

Now, it returns the more readable

```
[2019-05-31 10:36:19,500] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
  File "/Users/johnzeringue/Documents/ts-open/flask/flask/app.py", line 2400, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/johnzeringue/Documents/ts-open/flask/flask/app.py", line 1907, in full_dispatch_request
    return self.finalize_request(rv)
  File "/Users/johnzeringue/Documents/ts-open/flask/flask/app.py", line 1922, in finalize_request
    response = self.make_response(rv)
  File "/Users/johnzeringue/Documents/ts-open/flask/flask/app.py", line 2085, in make_response
    " {rv.__class__.__name__}.".format(rv=rv))
TypeError: The view function did not return a valid response. The return type must be a string, dict, tuple, Response instance, or WSGI callable, but it was a bool.
```

Fixes #3214
2019-05-31 11:58:49 -04:00
Scott Crosby
55ad09c902 Move python properties to decorator syntax 2019-05-31 10:53:30 -05:00
Daniel Pope
f25b5000fd Do not register empty CLI groups from Blueprint
(Fixes #3224)
2019-05-31 16:49:01 +01:00
David Lord
14e9291380
Merge pull request #3234 from tomowind/issue_3225
#3225: document "del tb"
2019-05-31 10:58:44 -04:00
Sang Min Park
2a97d4a706 #3225: document 2019-05-31 10:55:08 -04:00
Ryan Thielke
cd14adbc1e Issue #3226: Remove unused werkzeug datastructure import 2019-05-31 09:52:53 -05:00
Joshua Bronson
6ac4b93779
Close issues from commit messages in CONTRIBUTING 2019-05-31 09:57:21 -04:00
Joshua Bronson
af1b2ea1d1
Merge pull request #3231 from pallets/jab-precommit
Add pre-commit install-hooks to first-time setup
2019-05-31 09:34:21 -04:00
Joshua Bronson
7ac2cbf63a
Add pre-commit install-hooks to first-time setup 2019-05-31 09:17:52 -04:00
David Lord
1250775a55
Merge pull request #3230 from lordmauve/azure-stylecheck
Enable stylecheck tox run on Azure pipelines (fixes #3228)
2019-05-31 08:21:24 -04:00
Daniel Pope
96b92ff9e8 Enable stylecheck tox run on Azure pipelines 2019-05-31 13:14:15 +01:00
David Lord
240e398c8d
Merge pull request #3229 from lordmauve/style-fix
Fix style issues on master using Black
2019-05-31 07:18:40 -04:00
Daniel Pope
a5ff3cd01b Fix style issues on master using Black 2019-05-31 11:57:28 +01:00
David Lord
2c68f86336
Merge pull request #3157 from fantix/fix-test-client-teardown
Fix teardown bug in FlaskClient
2019-05-25 14:09:17 -07:00
Fantix King
a71c167836
fix teardown bug in FlaskClient
* Fixes pytest-dev/pytest-flask#42
2019-05-25 14:03:28 -07:00
David Lord
754b729578
Merge pull request #3124 from elbeardmorez/fix_static_url_path
fix 'static_url_path' defaulting for empty paths
2019-05-25 11:23:00 -07:00
David Lord
ed9ab2d3b6
strip static url trailing slash at assignment 2019-05-25 11:18:40 -07:00
Pete Beardmore
a12bf290da
fix 'static_url_path' defaulting for empty paths
-prefix a path delimiter iff there's a path to delimit
-ensures a valid default static route rule is created on application
intialisation for the case 'static_folder=""' and implicit
'static_url_path'
2019-05-25 07:03:36 -07:00
David Lord
b83760675d
Merge pull request #2784 from doobeh/master
Add Blueprint level cli registration-- #1357
2019-05-24 14:47:48 -07:00
Anthony Plunkett
ec1ccd7530
Add Blueprint level cli command registration
Implements #1357.
Adds ability to register click cli commands onto blueprint.
2019-05-24 14:43:29 -07:00
David Lord
855d59b68b
Merge pull request #3111 from pgjones/master
Allow dictionaries return values as JSON
2019-05-24 10:39:11 -07:00
David Lord
1ecc341fe5
add quickstart about JSON responses 2019-05-24 10:28:12 -07:00
pgjones
7bf8366970
Allow dictionary return values as JSON
This supports an increasingly common usecase whereby JSON is the
primary response (rather than a templated string). Given Flask has a
short syntax for HTML reponses, it seems fitting that it should also
do so for JSON responses. In practice it allows,

     @app.route("/")
     def index():
         return {
             "api_stuff": "values",
         }
2019-05-24 09:48:55 -07:00
David Lord
2616d97f32
Merge pull request #2898 from rochacbruno/2897-Add-Extra-Files-to-CLI
Fix #2897 - Add `extra_files` option to `flask run` CLI
2019-05-24 07:32:45 -07:00
David Lord
e18cc4d71d
add SeparatedPathType to accept multiple paths
Multiple paths for the reloader's `--extra-files` are accepted as one
option, separated by ':'.
2019-05-24 07:19:56 -07:00
Bruno Rocha
2308cba407
Fix #2897 - Add extra_files option to flask run CLI 2019-05-23 10:47:41 -07:00
David Lord
4fe81d7c62
Merge pull request #3208 from singingwolfboy/fakesignal-connect-via
FakeSignal should stub connect_via method
2019-05-23 08:22:07 -07:00
Joshua Bronson
fe41c6c8ae
Merge pull request #3213 from jab/contributing
Add pre-commit to dev dependencies, document it and Black in CONTRIBUTING.
2019-05-23 10:55:06 -04:00
jab
33379155f6 Add pre-commit to dev dependencies, document it and pre-commit in CONTRIBUTING
Now that we have a Black pre-commit hook (#3138),
ensure pre-commit gets installed on ``pip install -e .[dev]``
and document use of Black (rather than "try to follow pep8")
in CONTRIBUTING.
2019-05-23 10:51:38 -04:00
David Baumgold
fcf2eb4753
FakeSignal should stub connect_via method 2019-05-23 07:44:57 -07:00
David Lord
d3e1fed777
Merge pull request #2939 from sharmaadarsh563/2937-correct-load_dotenv-return-value
Fix #2937: Ensure the consistency in load_dotenv's return type
2019-05-19 12:03:45 -07:00
Adarsh Sharma
db8cb31f2b
Fix #2937: Ensure the consistency in load_dotenv's return type 2019-05-19 11:58:39 -07:00
David Lord
d9fa28ba68
Merge pull request #2928 from vorelq/2926-default-port-overrides-zero
Fix #2926 `Default port overrides requesting a system assigned port`
2019-05-19 11:40:54 -07:00
vorelq
e1cc16f8be
Fix 0 port value being overriden by default
By explicitly comparing port value with None,
instead of using its bool() value.
2019-05-19 11:36:47 -07:00
David Lord
05102f63b8
Merge pull request #3069 from shidenggui/feature_allow_customizing_url_map
Allow customizing url map class
2019-05-18 21:57:09 -07:00
shidenggui
2a2a11b063
allow customizing url map class 2019-05-18 21:50:56 -07:00
David Lord
b0185a6205
Merge pull request #3195 from eruvanos/json_support_dataclass
Support dataclass in JSONEncoder (if available)
2019-05-18 21:44:21 -07:00
Eruvanos
6af14f058b
support dataclass in JSONEncoder 2019-05-18 21:37:54 -07:00
David Lord
dbd3840410
Merge pull request #3182 from qil026/issue-3134-url-join
Remove ending slash from static_url_path
2019-05-18 21:27:31 -07:00
Frankie Liu
2039e2e3b6
Remove ending slash from static_url_path 2019-05-18 21:23:14 -07:00
David Lord
7f98a28432
Merge pull request #3185 from EtiennePelletier/Flask-3022
Simplify flask.cli.main
2019-05-18 21:19:57 -07:00
EtiennePelletier
e0afff0e92
Simplify flask.cli.main
Werkzeug>=0.15's reloader now properly detects `python -m module`.
Fixes #3022
2019-05-18 21:15:09 -07:00
David Lord
5a49b96d0e
Merge pull request #3181 from EtiennePelletier/Flask-3125
Use Werkzeug's JSONMixin class (moved from Flask) and update tests
2019-05-18 21:10:12 -07:00
EtiennePelletier
8590d65a57
Use Werkzeug's JSONMixin class and update tests
Flask's JSONMixin class was moved to Werkzeug>=0.15

Co-authored-by: Jeffrey Eliasen <jeff@jke.net>
2019-05-18 20:57:26 -07:00
David Lord
d0bfb065e5
Merge pull request #3190 from EtiennePelletier/jinja2-977
Make jinja_options a dict rather than ImmutaleDict
2019-05-18 08:44:03 -07:00
David Lord
957f48a98d
use dict literal syntax for jinja_options
clarify docs about when jinja_options can be modified
2019-05-18 08:35:47 -07:00
EtiennePelletier
af3c24c7df
Make jinja_options a dict rather than ImmutaleDict
This allows changing jinja environment options from the flask app:
>>> app.jinja_options['undefined'] = jinja2.ChainableUndefined
2019-05-18 05:31:55 -07:00
David Lord
aade460f15
Merge pull request #3179 from Lee-W/MethodView-inheritance
Fix MethodView inheritance Error (#3138)
2019-05-17 14:18:40 -07:00
LeeW
1f3923a999
Inherit "methods" in MethodView
* Current behavior: If a base class inherits MethodView and child class
  inherits without overwriting "methods". The "methods" defined in base
  class would be ignored
* Fix: Inherit all the "methods" defined in base classes if "methods"
  variable is not overwritten
2019-05-17 13:57:06 -07:00
David Lord
8ef56c8c6d
Merge pull request #3174 from icreatedanaccount/master
Allow mode='rt' on open_resource() helper
2019-05-17 13:32:40 -07:00
David Lord
6dbcbdee35
add sphinx-issues 2019-05-17 13:26:54 -07:00
David Lord
6f703a564c
clean up open_resource and tests 2019-05-17 13:23:27 -07:00
icreatedanaccount
ad709be46e
Allow mode='rt' on open_resource() helper 2019-05-17 13:22:13 -07:00
David Lord
05a4e15ee4
Merge branch '1.0.x' 2019-05-17 11:13:08 -07:00
David Lord
99660cc409
release version 1.0.3 2019-05-17 10:57:51 -07:00
David Lord
3dc84ec460
Merge pull request #3206 from pallets/test-client-json
don't push app context for test client json
2019-05-17 09:04:37 -07:00
David Lord
a4f0f19796
don't push app context for test client json 2019-05-17 09:00:08 -07:00
David Lord
f2c854060a
Merge pull request #3169 from DamianSkrzypczak/3168-improve-warning-about-dev-server-use-in-production
Fix dev-server warning message readability (#3168)
2019-05-16 19:23:19 -07:00
DamianSkrzypczak
e2f4b53396
Fix dev-server warning message readability (#3168) 2019-05-16 19:03:08 -07:00
David Lord
ab3f922533
Merge pull request #3154 from brunoais/more-explicit-session-transaction
More explicit explanation: session testing
2019-05-16 18:17:45 -07:00
brunoais
6142aa64ae
More explicit explanation: session testing
Use a more explicit explanation on how to write code to test own code
when sessions are needed.
The previous code was not fully explicit that the client is supposed
to be called after the session transaction and not during.
2019-05-16 18:07:18 -07:00
David Lord
55801b5653
Merge pull request #3166 from mekarpeles/refactor/unused-url_join
removed unused reference to url_join
2019-05-16 17:56:30 -07:00
Michael E. Karpeles
ac78da0bb0
removed unused reference to url_join 2019-05-16 17:47:14 -07:00
David Lord
953284a8d0
Merge branch '1.0.x' 2019-05-16 17:37:05 -07:00
David Lord
814a7ea96f
Merge pull request #3204 from pallets/azure
azure pipelines ci on 1.0.x branch
2019-05-16 17:32:45 -07:00
David Lord
84f8e1634f
azure pipelines ci on 1.0.x branch 2019-05-16 14:32:21 -07:00
David Lord
bcf8cb1fd4
azure config, fix docs build 2019-05-16 12:45:03 -07:00
David Lord
2236ba980c
Merge branch '1.0.x' 2019-05-16 12:18:36 -07:00
David Lord
d68abe99f6
Merge pull request #3203 from vtbassmatt/patch-1
add Azure Pipelines to test coverage
2019-05-16 12:12:06 -07:00
Matt Cooper
af813d0d36
add Azure Pipelines to readme 2019-05-16 12:07:43 -07:00
David Lord
ded0f68c16
Merge pull request #3199 from alecbrooks/master
Fix various small spelling errors.
2019-05-16 11:54:34 -07:00
A Brooks
4e272fc042
Fix various small spelling errors. 2019-05-16 11:50:10 -07:00
David Lord
7f782ba84e
Merge pull request #3162 from chivalry/gunicorn-discovery-docs-update
Update documentation on gunicorn deployment and app discovery
2019-05-16 10:45:50 -07:00
Charles Ross
0df2620c5f
update docs on gunicorn deploy and app discovery 2019-05-16 10:45:03 -07:00
David Lord
00ca5b7328
Merge pull request #3159 from abhinavsagar/updatedoc
Improved CONTRIBUTING.rst
2019-05-16 10:23:17 -07:00
David Lord
e61fd5f6cb
add instructions for bug and feature branches 2019-05-16 10:22:21 -07:00
Abhinav
c2b4b745e9
add more git commands to contributing doc 2019-05-16 10:22:01 -07:00
David Lord
8609b7d840
Merge pull request #3142 from Tom-McDonald/3139-alter-deprecated-docs
Replaced deprecated sample code in proxy-setup docs
2019-05-16 09:55:30 -07:00
Tom-McDonald
994cd1db33
replaced deprecated sample code in proxy-setup docs 2019-05-16 09:54:49 -07:00
David Lord
bbedd64540
Merge pull request #3129 from adamchainz/fix_html_injection
Fix some HTML injection paths in examples
2019-05-16 09:52:13 -07:00
Adam Johnson
e5b0fe6841
Fix some HTML injection paths in examples
These are unlikely to be copy-pasted by users but it's best practice to avoid it and other examples do.
2019-05-16 09:50:58 -07:00
David Lord
eadb99eb93
Merge pull request #3137 from Abdur-rahmaanJ/patch-2
Update CONTRIBUTING.rst discord link + style info
2019-05-16 09:48:59 -07:00
David Lord
5e41e409bc
fix discord link, clean up 2019-05-16 09:47:56 -07:00
Abdur-Rahmaan Janhangeer
62fe1563ad
Update CONTRIBUTING.rst 2019-05-16 09:43:51 -07:00
David Lord
4091013ee1
Merge pull request #3118 from JBonser/master
Fix code snippet in config.rst for env vars Fixes #3117
2019-05-16 08:52:23 -07:00
jordan bonser
800c744fe7
improve env vars config example 2019-05-16 08:48:34 -07:00
David Lord
b765e0db50
Merge pull request #3196 from jakseb/fix-docs-paren
Fix misplaced paren in docs
2019-05-16 08:28:58 -07:00
David Lord
4260b7c2d3
Merge pull request #3172 from vtbassmatt/enhance-azure-pipelines
add test output and a run against Python RC
2019-05-16 07:36:02 -07:00
David Lord
c88e4634a5
Merge pull request #3096 from RyanSquared/master
helpers.py: Fix docs of url_for(..., _external=True)
2019-05-16 07:30:07 -07:00
RyanSquared
d23b160e6d
helpers.py: Fix docs of url_for(..., _external=True) 2019-05-16 06:54:20 -07:00
Sebastian Jakubiak
205c943ded Fix misplaced paren in docs 2019-05-13 22:22:40 +02:00
David Lord
49a0464e3c
Merge pull request #3191 from jaydarius/master
replace "otherwise" with "or" to complete the "either" statement in templates doc
2019-05-13 06:45:13 -07:00
jaydarius
42da151fc7 use or to complete the either statement 2019-05-08 10:59:55 -04:00
David Baumgold
1dda032b00
Merge pull request #3183 from singingwolfboy/pre-commit
Pre-commit: Black
2019-05-06 16:34:46 -04:00
David Baumgold
025589ee76 Reformat with black
https://github.com/python/black
2019-05-06 16:28:58 -04:00
David Baumgold
5b309831ec Set up pre-commit to run black
Call it automatically via tox
2019-05-06 16:28:54 -04:00
David Baumgold
819368a52d
Merge pull request #3175 from singingwolfboy/fix-rst-line-too-long
fix RST line too long
2019-05-06 15:23:35 -04:00
David Lord
5e378b4f28
Merge pull request #3178 from LindsayYoung/patch-1
Create CODE_OF_CONDUCT.md
2019-05-06 13:46:38 -04:00
Lindsay Young
b78a803f7d
Create CODE_OF_CONDUCT.md
Ticket is referenced in [#Issue 1](https://github.com/pallets/meta/issues/1) in the Meta repo.
Spoke with @davidism and the decision was to use Contributor Covenant. It has easy GitHub integration and quality text.

For context, Here is a comparison of different codes of conduct from geek feminism:
Contributor Covenant looks like it is a good default because it covers:

Descriptions of common but unacceptable behavior
Reporting instructions with contact information
Information about enforcement
Clear demarcation between anti-harassment policy and general community guidelines
2019-05-06 12:41:01 -04:00
David Baumgold
6606a4a238 fix RST line too long 2019-05-06 11:11:32 -04:00
David Lord
a07c60af0a
Merge pull request #3173 from pwlandoll/1.0-maintenance
Add link to official Discord chat server
2019-05-06 10:49:29 -04:00
Peter Landoll
29a47ae6ea Add link to official Discord chat server 2019-05-06 09:39:25 -04:00
Matt Cooper
41186d3fe2 make a "future" toxenv 2019-05-04 20:46:33 -04:00
Matt Cooper
8535503f4a do an allowed-failure the right way 2019-05-04 20:29:08 -04:00
Matt Cooper
459176a719 try moving junit into tox.ini 2019-05-04 16:59:10 -04:00
Matt Cooper
e8d838a551 add test output and a run against Python RC 2019-05-04 16:24:13 -04:00
David Lord
12ab9f9c0d
Set up Azure Pipelines (#3170)
initial Azure Pipelines setup
2019-05-04 10:51:57 -04:00
Matt Cooper
3257b1d13b one more todo 2019-05-04 10:40:10 -04:00
Matt Cooper
f9ee8349bc remove unsupported Python 2019-05-04 10:22:29 -04:00
Matt Cooper
f2df16247a add TODOs 2019-05-04 10:19:50 -04:00
Matt Cooper
af5fb14666 initial Azure Pipelines setup 2019-05-04 09:45:20 -04:00
David Lord
c5c8bbc7f6
Merge pull request #3155 from zabbal/master
Bump Jinja2 requirements
2019-04-15 11:28:17 -07:00
Max
de01dfb702 Bump Jinja2 requirements
The 2.10.1 version was released 2019-04-06 and contains important security fix.
This change allows flask users to avoid implicit insecure dependency.
2019-04-15 17:13:07 +02:00
David Lord
42b67a1f95
Merge pull request #3150 from greyli/fix-route-defaults-doc
[Doc] Fix typo in code example for route defaults
2019-04-11 19:11:21 -07:00
Grey Li
4df7b220fa Fix typo in URL defaults example 2019-04-12 09:45:58 +08:00
David Lord
5cb4b73167
Merge pull request #3113 from greyli/improve-doc-quickstart
doc: Improve description for valid view func return value
2019-03-06 05:40:22 -08:00
Grey Li
d838f1c918 doc: Improve description for valid view func return value
* improve wording.
* remove unnecessary spaces.
2019-03-06 10:34:21 +08:00
David Lord
86bf9dca72
Merge pull request #3103 from tbm/typos
Fix typos in the documentation
2019-02-24 06:33:44 -08:00
Martin Michlmayr
7b88b35747
Fix typos in the documentation 2019-02-24 10:40:23 +00:00
David Lord
c795adf684
Merge pull request #3101 from tbm/docs-formatting
Fix formatting issue in quickstart guide
2019-02-22 16:32:12 -08:00
Martin Michlmayr
5830388ee2
Fix formatting issue in quickstart guide
Due to a formatting issue in the reStructuredText input, the HTML
output produced a description list (<dl>) within the ordered list.
2019-02-23 00:02:01 +00:00
David Lord
0b5b4a66ef
Merge pull request #3082 from cclauss/patch-2
_compat.py: Use feature detection instead of version detection
2019-01-25 05:56:54 -08:00
cclauss
47bdf9f26f
_compat.py: Use feature detection instead of version detection
When run on Python 3, linters such as Pylint and Flake8 will correctly flag __unicode__ and __long__ as _undefined names_ because _compat.py does not currently follow the Python porting best practice [___use feature detection instead of version detection___](https://docs.python.org/3/howto/pyporting.html#use-feature-detection-instead-of-version-detection).  This PR allows this project to pass those tests without adding any linter directives.
2019-01-25 09:44:29 +01:00
Carson Ip
74691fbe01 Fix typo in CHANGES.rst (#3077) 2019-01-18 09:13:13 +01:00
venus
8c979698bd fix the typo 2019-01-12 21:42:06 +09:00
Hsiaoming Yang
33c89aab14
Merge pull request #3071 from bbbbx/master
fix the typo
2019-01-12 19:11:44 +09:00
venus
99ad1f3cae fix the typo 2019-01-12 14:51:04 +08:00
David Lord
d7a1b0157a
Merge pull request #3068 from pallets/method-override-encoding
remove encoding from method override pattern
2019-01-07 13:20:00 -08:00
David Lord
2c29495e6d
remove encoding from method override pattern 2019-01-07 13:09:36 -08:00
David Lord
a74864ec22
Merge remote-tracking branch 'origin/1.0-maintenance' 2019-01-07 10:00:10 -08:00
David Lord
ded7cbe429
Merge pull request #2986 from taion/do-not-handle-routing-exception
Do not handle RoutingExceptions with app error handlers
2019-01-07 09:58:32 -08:00
David Lord
662ce2151d
add changelog for GH-2986 2019-01-07 09:52:54 -08:00
Jimmy Jia
b92b2e6c74
Do not handle RoutingExceptions with app error handlers 2019-01-07 09:01:37 -08:00
David Lord
38a391815b
Merge pull request #2934 from garenchan/bugfix-#2933
Fix issue #2933: Make sure the attachment filename is text type.
2019-01-07 07:22:59 -08:00
garenchan
40118e785f
Make sure the attachment filename is text type.
If attachment filename is bytes type and contains non-ascii coded bytes,
then the following ASCII encoding process will trigger
UnicodeDecodeError exception.

Fix issue #2933.
2019-01-07 07:17:33 -08:00
David Lord
4f32c6d4e3
Merge pull request #2957 from IgnasiBosch/2943-bytesio-partial-content
Fix #2943: Allow bytesio partial content
2019-01-07 07:02:02 -08:00
David Lord
366f3f49af
add changelog for GH-2957 2019-01-07 06:56:20 -08:00
Ignasi Bosch
b570bf699c
Allow partial content on bytesio 2019-01-07 06:17:36 -08:00
David Lord
4f3dbb3f3b
Merge branch '1.0-maintenance' 2019-01-06 16:33:17 -08:00
David Lord
232e5c81bc
Merge pull request #2825 from eso31/fix-2824-issue
Fixes issue #2824 flask --version
2019-01-06 16:30:11 -08:00
David Lord
a0ccc47780
clean up flask --version code 2019-01-06 16:24:05 -08:00
Dilan Coss
3fd51c65fb
add werkzeug to flask --version 2019-01-06 16:11:03 -08:00
David Lord
ac6746d1be
Merge branch '1.0-maintenance' 2019-01-06 15:46:33 -08:00
David Lord
0f56c0cb04
Merge pull request #2964 from igortg/2907-docs-update-mongo-pattern
Docs: replace MongoKit by MongoEngine on docs
2019-01-06 15:43:14 -08:00
David Lord
edef8cb38b
simplify mongoengine doc, redirect from mongokit 2019-01-06 15:42:08 -08:00
Igor Ghisi
4e280b4142
Replace MongoKit by MongoEngine on docs
Docs chapter "Patterns for Flask" has a section dedicated to MongoKit,
but MongoKit lib seems unmaintained and is not compatible with recent
versions of PyMongo.

This commit replaces MongoKit guide with a new one using MongoEngine.

Closes #2907
2019-01-06 15:12:53 -08:00
David Lord
b2765893e6
Merge pull request #3067 from pallets/tutorial-flask-run
clarify where to call flask run from in tutorial
2019-01-06 15:11:30 -08:00
David Lord
d6151340bc
clarify where to call flask run from in tutorial 2019-01-06 15:10:38 -08:00
David Lord
8dd8e9b2f3
Merge pull request #2970 from stepharr/patch-1
AJAX with jQuery: Adding conjunction where for clarification
2019-01-06 15:06:19 -08:00
Stephon Harris
ab7f9e735f
Adding conjunction where for clarification 2019-01-06 15:05:54 -08:00
David Lord
7474a9cb8b
Merge pull request #2875 from nathanbegbie/patch-1
Update docs on larger applications WRT tutorial
2019-01-06 15:00:00 -08:00
nathanbegbie
b8e461e3d1
Update docs on larger applications wrt tutorial
The wording of the docs makes it sound like the tutorials use the simple structure for a flask application, which they no longer do.
This commit re-words the docs to make it clearer.
2019-01-06 14:53:03 -08:00
David Lord
1e616696c0
Merge pull request #2918 from garenchan/docs2
Docs: fix some typos in config.rst
2019-01-06 14:51:55 -08:00
garenchan
5409606c3b
Docs: fix some typos in config.rst 2019-01-06 14:45:10 -08:00
David Lord
914a033586
Merge pull request #2854 from dougthor42/update-docs-to-be-more-clear-about-from_config-instantiation-#2853
Update docs to be more clear about from config instantiation
2019-01-06 14:43:17 -08:00
Douglas Thor
830c77cb44
document that Config.from_object uses object as-is 2019-01-06 14:34:05 -08:00
David Lord
ff56126a45
Merge pull request #2913 from onovy/contributing-manifest
Install CONTRIBUTING.rst with MANIFEST.in
2019-01-06 10:51:51 -08:00
Ondřej Nový
a0ac95cc53
Install CONTRIBUTING.rst with MANIFEST.in
Without CONTRIBUTING.rst filoe, documentation is not buildable:
docs/contributing.rst:1: WARNING: Problems with "include" directive path:
InputError: [Errno 2] No such file or directory: 'CONTRIBUTING.rst'.
2019-01-06 10:50:08 -08:00
David Lord
1c92c02c4a
Merge pull request #3066 from pallets/no-osx
disable slow travis osx env
2019-01-06 10:45:14 -08:00
David Lord
537df96632
disable slow travis osx env 2019-01-06 10:43:53 -08:00
David Lord
3b45b82ec2
Merge branch '1.0-maintenance' 2019-01-06 10:36:54 -08:00
David Lord
a656025c3b
Merge pull request #3065 from pallets/fedora
use "-m virtualenv" in installation doc
2019-01-06 10:34:52 -08:00
David Lord
10d0ed68a3
Merge pull request #3056 from tirkarthi/fix-syntax-warning
Fix syntax warning in docstring
2019-01-06 10:25:47 -08:00
David Lord
40e064fa27
use "-m virtualenv" in installation doc 2019-01-06 10:25:16 -08:00
xtreak
b85425ac1b
remove syntax warning from docstring 2019-01-06 10:17:58 -08:00
David Lord
717f9d33ca
Merge pull request #3054 from tirkarthi/fix-py37-warnings
Fix DeprecationWarning on collections import in flask.sessions
2019-01-06 10:09:18 -08:00
xtreak
e4ebbd3f5b
Fix DeprecationWarning on collections import 2019-01-06 10:04:00 -08:00
David Lord
c9245609f4
Merge pull request #3051 from ExplodingCabbage/tojson-docs-fixes
[Docs] Improve tojson docs (additions, clarifications, & fixes)
2019-01-06 09:54:59 -08:00
Mark Amery
24325ecb69
Clarify and add detail to tojson docs
Fix some confusing and obsolete prose.
2019-01-06 09:44:09 -08:00
David Lord
6606f66857
Merge pull request #3049 from RohanTalip/scriptinfo-typo
Corrected a typo in a docstring: "Help object" --> "Helper object"
2019-01-06 09:16:29 -08:00
Rohan Talip
02df042416
Corrected a typo in a docstring: "Help object" --> "Helper object" 2019-01-06 09:10:28 -08:00
David Lord
aef4159588
Merge pull request #3031 from jseldess/fix-typos
Fix typos found while completing the Flask tutorial
2019-01-06 08:11:39 -08:00
Jesse Seldess
90aef1b2cf
Fix typos found while completing the Flask tutorial 2019-01-06 08:01:45 -08:00
David Lord
446cea9221
Merge pull request #3044 from garenchan/ci-test
Add Python 3.7 to CI.
2019-01-06 08:00:23 -08:00
David Lord
8a14c6d67d
use specific pypy versions for travis xenial
remove 3.6 from appveyor, reduce in tox
remove deprecated travis feature "sudo: false"
split docs and devel,lowest travis envs
remove osx py2 env in attempt to finish faster
move travis matrix to python key
2019-01-06 07:52:03 -08:00
garenchan
deb211cf13
Add Python 3.7 to CI. 2019-01-06 07:09:11 -08:00
David Lord
7e65f1c5f1
Merge pull request #3019 from colincadams/patch-2
Clarify prefixing of urls for blueprint endpoints
2019-01-06 07:07:59 -08:00
Colin Adams
4f638b9c28
Clarify prefixing of URLs for blueprint endpoints
Clarify that endpoint names are prefixed by the name of the blueprint,
but the URL is not automatically prefixed.
2019-01-06 06:58:38 -08:00
David Lord
80f14e30a2
Merge pull request #3011 from greyli/improve-cli-help-text
Use imperative tense for CLI help text
2019-01-06 06:38:14 -08:00
Grey Li
d0ceb16be9
Use imperative tense for CLI help text 2019-01-06 06:31:57 -08:00
David Lord
b78ebacca7
Merge pull request #2996 from alysivji/spa-docs
[Docs] Add Single-Page Web Application pattern
2019-01-06 06:26:07 -08:00
Aly Sivji
2b74cf9f2d
Add SPA pattern to docs 2019-01-06 06:19:55 -08:00
David Lord
4d37acad21
Merge pull request #3059 from mattrobenolt/fspath
Add support for PathLike objects in static file helpers
2019-01-05 15:44:53 -08:00
Matt Robenolt
25de45cbb6
Add support for PathLike objects in static file helpers
See: https://www.python.org/dev/peps/pep-0519/

This is mostly encountered with pathlib in python 3, but this API
suggests any PathLike object can be treated like a filepath with
`__fspath__` function.
2019-01-05 15:23:47 -08:00
David Lord
f7d50d4b67
Merge branch '1.0-maintenance' 2019-01-05 15:12:17 -08:00
David Lord
15c079f500
Merge pull request #3063 from pallets/key-error
clear KeyError in production for Werkzeug 0.15
2019-01-05 15:07:06 -08:00
David Lord
1096e226cc
Merge pull request #3064 from pallets/docs-fix
fix docs build
2019-01-05 15:06:41 -08:00
David Lord
8b567fea23
fix docs build 2019-01-05 14:59:25 -08:00
David Lord
49efc44233
clear KeyError in production for Werkzeug 0.15 2019-01-05 12:49:59 -08:00
David Lord
afb7e4ee5f
Merge pull request #3062 from EJEP/master
Add comment about using factory function in __init__.py
2019-01-04 14:35:14 -08:00
Emlyn Price
5e07e3a6ad Add comment about using factory function in __init__.py 2019-01-04 22:12:53 +00:00
David Lord
62621ba0fd
Merge pull request #3041 from obestwalter/patch-1
Fix typo in class name
2018-12-21 06:47:39 -08:00
Oliver Bestwalter
d8400d7cac
Fix typo in class name 2018-12-21 15:36:58 +01:00
David Lord
f2dd7eff8e
Merge pull request #3021 from CasterWxBlog/master
add classifiers
2018-12-08 11:20:27 -08:00
CasterWx
2611632c69 add classifiers 2018-12-08 12:45:20 +08:00
Hsiaoming Yang
d5665e4ba6
Merge pull request #2917 from garenchan/docs1
Docs: fix some errors in errorhandling.rst
2018-11-28 22:25:21 +09:00
David Lord
877da63462
Merge pull request #2993 from data-get/update-cache-documentation
Update documentation for users to use flask-caching instead of Werkzeug cache
2018-11-13 14:09:31 -05:00
David Lord
dcc02d6e7d
Merge pull request #2976 from cykerway/master
Fix inconsistency in testing doc.
2018-11-13 14:06:12 -05:00
Andrew Crouse
aec0cdc016
Update documentation for users to use flask-caching instead of the deprecated Werkzeug cache 2018-11-13 14:03:27 -05:00
David Lord
ca23b7b406
Merge pull request #2994 from jarek/werkzeug-640-exceptions-during-bind
Handle errors during create_url_adapter
2018-11-13 13:55:35 -05:00
Jarek Piórkowski
a5709e7850 Add changelog entry 2018-11-13 13:40:50 -05:00
Jarek Piórkowski
9b0bd91195 Correct tests
We've discovered that passing Unicode in Host actually works, except for
test client limitations on Python 2 - and the only things that don't
work are non-printable characters.
2018-11-13 13:09:16 -05:00
Jarek Piórkowski
ed9775fb77 Handle errors during create_url_adapter
If create_url_adapter raises (which it can if werkzeug cannot bind
environment, for example on non-ASCII Host header), we handle it as
other routing exceptions rather than raising through.

ref https://github.com/pallets/werkzeug/issues/640
2018-11-12 16:59:09 -05:00
Markus Unterwaditzer
339419117f
Fixes for sentry docs (#2991) 2018-11-07 21:04:10 +01:00
Adam Walsh
3bf80912cf Update sentry error handling documentation (#2990)
- Change examples to use the Sentry Python SDK: `sentry-sdk`
- Removed the app factory pattern example
- Added a custom exception handling example
2018-11-07 20:25:52 +01:00
Dave Chevell
e08bcf9f97 Fix #2935: Copy current session object in copy_current_request_context (#2936)
Add session to RequestContext.copy()
2018-11-03 20:32:24 -07:00
Cyker Way
43e2d7518d Fix inconsistency in testing doc. 2018-10-29 20:53:39 -04:00
David Lord
7e714bd28b
Merge pull request #2969 from codeaditya/update-links
Use https for external links wherever possible
2018-10-27 13:56:09 -07:00
Aditya
f05625eb82 Use https for external links wherever possible 2018-10-27 17:58:45 +05:30
David Lord
f7e7f2ab11
Merge pull request #2966 from jangjunha/fix-doc-deferredcallbacks
Docs: Fix deferredcallbacks.rst
2018-10-25 08:54:52 -07:00
jangjunha
eef6c34b57 Fix deferred callback doc 2018-10-26 00:33:12 +09:00
David Lord
0038a6796f
Merge pull request #2963 from garenchan/bugfix-#2961
Fix #2961:ignore colon followed by slash when split app_import_path
2018-10-24 09:06:39 -07:00
garenchan
c38499bbf2 ignore colon with slash when split app_import_path
Flask currently supports importing app through a combination of module
path and app variable name, such as '/usr/app.py:my_app'. When the
module path contains a colon, it will conflict with this import way and
a `flask.cli.NoAppException` will be raised.

A file path on a Windows system may contain a colon followed by a slash.
So we solved this problem on Windows by ignoring the colon followed by a
slash when we split app_import_path.

Fix issue #2961.
2018-10-24 23:47:41 +08:00
David Lord
70b45094ab
Merge pull request #2962 from garenchan/dev
Cache return values to avoid repeated function calls.
2018-10-23 08:27:46 -07:00
garenchan
9bc87d09c6 Cache return values to avoid repeated function calls. 2018-10-23 22:10:20 +08:00
moyosore
673772cac9 Fixed typo in app.py 2018-10-13 20:57:41 +02:00
Grey Li
d7eea1b49a
Fix typo in issue template 2018-09-30 08:21:17 +08:00
David Lord
9a2e6ead00
Merge pull request #2914 from garenchan/docs
Reduce unnecessary function calls.
2018-09-23 11:14:13 -07:00
garenchan
aa7e15dcba Reduce unnecessary function calls.
When propagate exceptions, the function call of "_find_error_handler"
makes no sense.
2018-09-23 16:40:35 +08:00
David Lord
0b7a74dda3
split code and output 2018-09-21 06:05:52 -07:00
Grey Li
393bd46085
Merge pull request #2916 from tombusby/patch-1
Make script output into comments to not break syntax highlighting
2018-09-21 18:33:56 +08:00
garenchan
357b710af2 Fix docs errors
1.Grammar error: 'return' should be 'returns'; 'would is' should be
'would be'.
2.Reloader is used to reload and fork process if modules were changed
rather than when an exception occurred.
3.The sample code is not concise enough.
2018-09-21 13:05:06 +08:00
Tom Busby
eae6440605
Make script output into comments to not break syntax highlighting
http://flask.pocoo.org/docs/1.0/quickstart/#url-building

In the URL Building section of the quickstart, the script output is shown right after the code.

This breaks syntax highlighting for the whole code-block. To fix this, I have made the output into comments.
2018-09-19 23:42:35 +02:00
Jarek Lipski
363205bdc3
fix @click.command example by adding parens
Otherwise the example fails with the following error: 
"name = name or cmd.name AttributeError: 'function' object has no attribute 'name'". 

More details: https://stackoverflow.com/a/51923415/4619705
2018-09-19 10:02:51 -07:00
David Lord
c92001d2fb
Merge pull request #2915 from loomchild/master
fix @click.command example by adding parens
2018-09-19 10:01:34 -07:00
Jarek Lipski
47dadcfe15
fix @click.command example by adding parens
Otherwise the example fails with the following error: 
"name = name or cmd.name AttributeError: 'function' object has no attribute 'name'". 

More details: https://stackoverflow.com/a/51923415/4619705
2018-09-19 18:55:12 +02:00
David Lord
19a0a7d771
Merge pull request #2912 from pallets/docs-theme
Update Sphinx conf for recent theme changes
2018-09-17 08:56:25 -07:00
David Lord
0f4c9f1d57
reformat sphinx config 2018-09-17 08:35:53 -07:00
David Lord
ba868d681a
update sphinx config 2018-09-17 08:35:28 -07:00
David Lord
d493e3e083
Merge pull request #2910 from garenchan/docs
fix issue: no theme named 'flask' found
2018-09-17 06:39:45 -07:00
chengkang
067c772588 remove DocVersion related 2018-09-17 21:05:53 +08:00
chengkang
3e86fd25e9 fix issue: no theme named 'flask' found 2018-09-17 16:18:52 +08:00
Grey Li
21b0aa6dd8 Add prefix for all commands in documentation (#2877)
* Add prefix for commands in docs

* Add prefix for commands in example's README
2018-09-09 17:41:56 +09:00
Alexis Benoist
b9b88b0cdf doc reqcontext fix teardown example (#2892)
* doc reqcontext fix teardown example

* remove comments
2018-08-25 00:12:15 +09:00
David Lord
7d9dcfa294
Merge pull request #2872 from cktan98/master
Fix grammatical error
2018-07-24 11:04:58 -07:00
cktan98
f45ceec31f Fix grammatical error 2018-07-25 01:57:30 +08:00
David Lord
345685c014
Merge pull request #2861 from jwflory/fix/uwsgi-docs
[docs] Fix broken Sphinx cross-references; use :doc: tags where necessary
2018-07-20 10:42:09 -07:00
David Lord
93e4b714a1
Merge pull request #2870 from jerr0328/docs-update-cli-scriptinfo
📚 Improve docs about ScriptInfo
2018-07-20 10:28:04 -07:00
Jeremy Mayeres
c7791bb526
📚 Improve docs about ScriptInfo
Improve documentation for the CLI using application factories and
how/when the ScriptInfo object is passed with Application Discovery
2018-07-20 19:20:04 +02:00
Justin W. Flory
e771016a5b
Fix broken cross-references; use :doc: tags where necessary 2018-07-11 10:12:18 -05:00
Justin W. Flory
72dfb67828
Make explicit call-out to contributing guidelines in README 2018-07-11 09:38:17 -05:00
David Lord
06b189b6be
Merge pull request #2850 from billfienberg/patch-1
Fix grammatical error: incorrect verb conjugation
2018-06-29 13:49:01 -07:00
Bill Fienberg
15b2301754
Fix grammatical error: incorrect verb conjugation
Before: >However, as a project *get* bigger

After: >However, as a project *gets* bigger
2018-06-29 14:35:44 -05:00
David Lord
0bb25eb367
Merge pull request #2848 from gcrsaldanha/use-itervalues
🎨 Use `itervalues` instead of `iteritems` when `key` is not necessary
2018-06-28 22:23:08 -07:00
Gabriel Saldanha
d5c465ddf4 🎨 Use itervalues instead of iteritems 2018-06-29 00:10:44 -03:00
David Lord
b6edad64aa
Merge pull request #2843 from gcrsaldanha/use-set-literal-in-docs
🎨 Use set literal instead of set method in file uploading example
2018-06-28 07:22:35 -07:00
David Lord
81c2a1e475
Merge pull request #2842 from gcrsaldanha/task/remove-deprecated-code
🔥 Remove code supposed to be removed at v1.0
2018-06-28 07:22:17 -07:00
David Lord
f4b0f64482
Merge pull request #2839 from jlara310/master
Typo in docs
2018-06-27 22:25:16 -07:00
Juan Lara
bb63298b71 Typo in docs
"keeps track on" -> "keeps track of"
2018-06-27 21:49:21 -07:00
Gabriel Saldanha
c5af1be70f 🎨 Use set literal instead of set method 2018-06-27 08:58:26 -03:00
Gabriel Saldanha
d362399e7e 🔥 Remove code supposed to be removed at v1.0 2018-06-27 08:23:44 -03:00
David Lord
827536e20a
Merge pull request #2837 from quamilek/update-docs
Update docs - add command for listing rules.
2018-06-20 06:50:59 -07:00
Kamil Wargula
c92c1e93c7
Update docs - add command for listing rules. 2018-06-20 14:39:08 +02:00
David Lord
7627d9ce13
Merge pull request #2834 from greyli/remove-unnecessary-period
Remove unnecessary period in documentation
2018-06-17 20:43:57 -07:00
Grey Li
27e67dafc0
Remove unnecessary period in documentation 2018-06-17 12:12:37 +08:00
David Lord
0559f7c86b
Merge pull request #2828 from greyli/patch-9
Update cli tips for .flaskenv
2018-06-15 12:50:15 -07:00
Grey Li
f036308442
Add cli tips for .flaskenv 2018-06-15 19:12:50 +08:00
ThiefMaster
161c43649d Merge branch '1.0-maintenance' 2018-06-14 13:31:40 +02:00
Adrian
1a9caedb49
Merge pull request #2765 from ThiefMaster/custom-cli-ignore-debug
Add option to not overwrite debug flag in cli
2018-06-14 13:31:00 +02:00
ThiefMaster
50227f0954 Add option to not overwrite debug flag in cli
This is mainly intended for custom CLIs that may load a config file
which already sets the debug flag and does not make use of the `FLASK_*`
env vars at all.
2018-06-14 13:25:05 +02:00
Hsiaoming Yang
b2ec6a33a2
Merge pull request #2827 from schafle/fix-2823
[Fixed 2823] Checking if .env is file before prompting to install dotenv
2018-06-14 10:12:20 +09:00
Suraj Chafle
076dddb2e1 Fixed 2823 2018-06-13 16:31:54 -07:00
Anthony Plunkett
673e5af658
Merge pull request #2826 from senarclens/master
add init-db call to flask tutorial's README.rst
2018-06-13 15:48:57 -04:00
Gerald Senarclens de Grancy
d0088e63d8 add init-db call to flask tutorial
otherwise the user is confronted with an unpleasant error
message when accessing the dev server the first time
2018-06-13 20:51:50 +02:00
Hsiaoming Yang
9c0e110e23
Merge pull request #2795 from dayiguizhen/master
Update CHANGES.rst
2018-06-03 18:39:17 +09:00
David Lord
b6a8f75c70
Merge pull request #2811 from greyli/test-routes-command-for-no-routes
Add test for routes command when no routes registered
2018-05-31 09:10:17 -07:00
Grey Li
4025e27b57 Add test for routes command when no routes registered 2018-05-31 11:43:51 +08:00
David Lord
b34c7174e7
update test envs
use pypy3
fix travis osx env
cache pip on appveyor
codecov on appveyor
2018-05-29 11:46:04 -07:00
Saul Urias
0b4296ff17 Fix typo in appcontext.rst 2018-05-29 19:11:30 +02:00
David Lord
8080ead523
Merge pull request #2807 from eso31/master
Test added for _AppCtxGlobals __repr__ method
2018-05-29 09:42:43 -07:00
Dilan Coss
8fa3ed13bf details fixed 2018-05-29 09:51:08 -06:00
Dilan Coss
8cdd01ea5d Test added for _AppCtxGlobals __repr__ method 2018-05-28 23:49:06 -06:00
David Lord
79fc8e5c31
Merge pull request #2806 from doobeh/uwsgi_doc_fix
Set uwsgi link to use :ref:
2018-05-28 12:25:06 -07:00
Anthony Plunkett
7cc71cccec Set uwsgi link to use :ref:
Fixes #2802
2018-05-28 15:10:55 -04:00
David Lord
99c56eaafa
Merge pull request #2804 from pallets/ascii-header
encode filenames as ascii instead of latin-1
2018-05-28 06:57:15 -07:00
David Lord
b51ab3ff2c
encode filenames as ascii instead of latin-1
latin-1 is allowed by pep3333, but that breaks gunicorn
2018-05-28 06:36:47 -07:00
David Lord
d22491a3fb
Merge pull request #2799 from bast/radovan/env
set FLASK_APP via env for portability across shells
2018-05-24 06:39:13 -07:00
Radovan Bast
4ce44340d4 set FLASK_APP via env for portability across shells
this does not work on fish (https://fishshell.com):
$ FLASK_APP=hello.py flask run

while this works (hopefully) on any shell:
$ env FLASK_APP=hello.py flask run
2018-05-24 14:57:11 +02:00
dayiguizhen
1955d6aace Add the link of pull so that it’s easy for readers to check the changes in code. 2018-05-22 18:39:35 +08:00
Hsiaoming Yang
54869a0017
Merge pull request #2793 from tiagocoutinho/patch-1
Update gevent wsgi documentation
2018-05-21 15:57:11 +09:00
Tiago Coutinho
c853d11fc5
Update gevent wsgi
gevent.wsgi is deprecated since gevent 1.1 and removed in gevent 1.3. 
gevent.pywsgi should be used instead
2018-05-21 08:10:16 +02:00
David Lord
027aeecf26
Merge pull request #2792 from greyli/patch-9
Fix typos in CHANGES.rst
2018-05-20 21:28:26 -07:00
Grey Li
9d0bc52329
Fix typos in CHANGES.rst 2018-05-21 10:26:14 +08:00
David Lord
401d7f9bb2
Merge pull request #2789 from briehanlombaard/fix-sslcontext-attribute-error
AttributeError: 'module' object has no attribute 'SSLContext'
2018-05-17 09:24:21 -04:00
Briehan Lombaard
a913b4dafd
SSLContext was added in Python 2.7.9 2018-05-17 06:18:42 -07:00
Hsiaoming Yang
cae037812b
Merge pull request #2786 from greyli/patch-9
[Docs] Make super() compatible for Python2
2018-05-16 23:44:52 +08:00
Grey Li
07b9ff6e77
Make super() compatible for Python2 2018-05-16 19:13:19 +08:00
David Lord
03036533f0
Merge pull request #2774 from nicolaiarocci/remove_osbolete_audit_shortcut_from_makefile
Remove now obsolete 'audit' command from Makefile
2018-05-13 09:18:08 -04:00
Nicola Iarocci
be8e0fcf10 Remove now obsolete 'audit' command from Makefile
When 'audit' was removed from setup.py, the corresponding shortcut was
left in the Makefile. This commit removes the audit shortcut from
Makefile.

Closes #2773.
2018-05-12 10:33:58 +02:00
David Lord
a35a97e49d
Merge branch '0.12-maintenance' into 1.0-maintenance 2018-05-08 20:31:10 -07:00
Daniel Opitz
1c2a2cd001
Fixed LaTeX errors on documentation PDF generation 2018-05-08 20:30:36 -07:00
David Lord
8c9df3f4eb
Merge pull request #2754 from danielopitz/master
Fixed LaTeX errors on documentation PDF generation
2018-05-08 20:27:16 -07:00
David Lord
72011908b5
Merge pull request #2764 from mgalgs/patch-1
docs: installation: Fix "now you can continue" link
2018-05-08 20:11:47 -07:00
David Lord
335dcf8ec4
clarify the section navigation in installation 2018-05-08 20:10:27 -07:00
Mitchel Humpherys
725f391399
docs: installation: Add link to Quickstart after install
Once Flask is installed many users will want to proceed to the next section
in the docs (Quickstart).  Add a link to the end of the Install section for
this.
2018-05-08 19:59:25 -07:00
Daniel Opitz
676efcc21a Fixed LaTeX errors on documentation PDF generation 2018-05-03 02:01:49 +02:00
David Lord
9bee619320
Merge branch '1.0-maintenance' 2018-05-02 07:28:38 -07:00
David Lord
939c77a39a
Bump version number to 1.0.3.dev 2018-05-02 07:16:58 -07:00
David Lord
dfd3619d6f
Bump version number to 1.0.2 2018-05-02 07:16:14 -07:00
David Lord
4dc3ba5281
release 1.0.2 2018-05-02 07:16:10 -07:00
David Lord
ad09134c8e
Merge pull request #2752 from greyli/patch-9
Check whether there are registered routes
2018-05-02 06:16:11 -07:00
Grey Li
b4e092600d
Check whether exist registered routes 2018-05-02 06:06:15 -07:00
David Lord
a6a6810d56
Merge pull request #2748 from pallets/fix-bp-route
Fix blueprint route for ""
2018-05-02 06:04:31 -07:00
David Lord
b21b4d1608
add more merge cases 2018-05-01 13:29:48 -07:00
Hsiaoming Yang
f7a3bdc6db
Fix blueprint route for "" 2018-05-01 14:35:55 +09:00
David Lord
35afec3f5a
Merge branch '1.0-maintenance' 2018-04-30 19:06:00 -07:00
David Lord
3fd7abec3c
fix project urls 2018-04-30 19:05:46 -07:00
Aaron Hall, MBA
5a75da5471
add missing port to localhost URL 2018-04-30 19:03:05 -07:00
David Lord
0be95569ba
Merge pull request #2747 from aaronchall/patch-1
add missing port to localhost URL
2018-04-30 19:02:07 -07:00
Aaron Hall, MBA
a6750079f8
add missing port to localhost URL 2018-04-30 21:28:53 -04:00
David Lord
c26a50b3b7
Merge branch '1.0-maintenance' 2018-04-29 19:37:05 -07:00
David Lord
9b6845f436
Merge branch '0.12-maintenance' into 1.0-maintenance 2018-04-29 19:36:30 -07:00
David Lord
639a2a1ea4
fix changelog link 2018-04-29 19:36:07 -07:00
David Lord
1fa9185c7e
Merge branch '1.0-maintenance' 2018-04-29 19:13:30 -07:00
David Lord
4f155fb647
start 1.0.2 changelog 2018-04-29 19:10:48 -07:00
David Lord
c9ab9ef5db
Bump version number to 1.0.2.dev 2018-04-29 19:09:23 -07:00
David Lord
a15795c99e
Bump version number to 1.0.1 2018-04-29 19:08:16 -07:00
David Lord
7567cc0d92
release 1.0.1 2018-04-29 18:46:54 -07:00
David Lord
6e1e3e03ca
check FLASK_SKIP_DOTENV in app.run 2018-04-29 18:45:50 -07:00
David Lord
81bde0db4b
Merge branch '0.12-maintenance' into 1.0-maintenance 2018-04-29 18:28:51 -07:00
David Lord
e8fd06a0a7
Bump version number to 0.12.5.dev 2018-04-29 18:24:00 -07:00
David Lord
5beb3be536
Bump version number to 0.12.4 2018-04-29 18:23:30 -07:00
David Lord
b147d42a27
release 0.12.4 2018-04-29 18:22:05 -07:00
David Lord
73bf519dad
Merge pull request #2746 from pallets/2742-empty-url-prefix
allow empty prefix and no lead slash in bp route
2018-04-29 15:46:58 -07:00
David Lord
f13870731c
allow empty prefix and no lead slash in bp route 2018-04-29 15:32:12 -07:00
David Lord
6b2127b1e0
Merge pull request #2745 from dmarasquin/patch-1
Update quickstart.rst
2018-04-29 14:57:24 -07:00
Daiana Marasquin
104808b480
fix syntax error and typo in quickstart.rst 2018-04-29 14:51:13 -07:00
David Lord
6f84cf4e4b
Merge pull request #2724 from pallets/issue-2722
Use env var to disable loading dotenv
2018-04-29 14:27:05 -07:00
David Lord
5965cb7e1c
rename to FLASK_SKIP_DOTENV, add docs, test 2018-04-29 14:20:17 -07:00
Hsiaoming Yang
bac5d6b9f4
Use FLASK_DONT_LOAD_ENV flag to disable load .env 2018-04-28 07:19:06 -07:00
David Lord
4c8ec8f555
Merge pull request #2739 from pallets/2735-abort-debug
Only trap key errors by default in debug, not all BadRequest errors
2018-04-28 07:01:42 -07:00
David Lord
b573a86977
trap key errors in debug, not all 400 errors 2018-04-28 06:51:08 -07:00
David Lord
27d56c1df5
Merge pull request #2738 from pallets/2731-bp-prefix-slash
merge slashes between blueprint prefix and rule
2018-04-27 12:46:37 -07:00
David Lord
4d0cdf95e6
merge slashes between blueprint prefix and rule 2018-04-27 12:40:06 -07:00
David Lord
5239458f28
Merge pull request #2727 from red-alert/master
error on file upload document
2018-04-27 11:12:50 -07:00
David Lord
d4fb9d564e
Merge pull request #2737 from jesseops/master
fix #2736 - remove explicit check for list as a return value in make_response
2018-04-27 11:06:54 -07:00
Yao Long
9b6878af5a
document error on fileupload
after file uploaded, it should redirect for uploaded_file page instead
of upload page
2018-04-27 11:04:35 -07:00
Jesse Roberts
3666a584fd
fix #2736 - allow lists to be passed through to response_class init 2018-04-27 10:49:56 -07:00
Vik
9394c389bf
Update config.rst
Fix Debug Default: By default Debug is only True when ENV is 'development'
2018-04-27 10:17:43 -07:00
David Lord
32e813f728
Merge pull request #2729 from Dunstrom/2601-internal-error-when-requesting-route-with-url-part-equals-defaults
Added short note about Werkzeug redirect behaviour
2018-04-27 10:11:41 -07:00
David Lord
5d00869aa5
expand explantion about default redirects 2018-04-27 09:57:30 -07:00
Hsiaoming Yang
ea316d232a
Merge pull request #2733 from kivS/patch-1
Fixed Debug default value in the docs
2018-04-27 23:50:39 +09:00
David Lord
78b56dbf2c
Revert "Add python_requires metadata for PyPI"
This reverts commit a22d143f96.
2018-04-27 07:41:19 -07:00
wim glenn
a22d143f96
Add python_requires metadata for PyPI 2018-04-27 07:39:42 -07:00
Vik
ad1ce2721b
Update config.rst
Fix Debug Default: By default Debug is only True when ENV is 'development'
2018-04-27 15:37:13 +01:00
David Lord
4d4294e94e
format changelog 2018-04-27 07:34:20 -07:00
ThiefMaster
f7ac3a7620 Merge branch '1.0-maintenance' 2018-04-27 13:57:39 +02:00
ThiefMaster
6663bf1f7d Fix registering partials as view functions 2018-04-27 13:44:07 +02:00
Hampus Dunström
a2536e1bdb Added short note about Werkzeug redirect behaviour 2018-04-27 11:40:12 +02:00
David Lord
3f81582d5d
fix docs index sidebar 2018-04-26 15:15:55 -07:00
David Lord
8ceff653c5
fix docs index sidebar 2018-04-26 15:15:31 -07:00
David Lord
08ef4d03d8
fix docs index sidebar 2018-04-26 15:15:05 -07:00
David Lord
9ed0d068ca
start 1.0.1 changelog 2018-04-26 14:14:44 -07:00
David Lord
ba33500b82
start 1.1 changelog 2018-04-26 14:14:11 -07:00
David Lord
0997e7c8d1
fix docs logo 2018-04-26 14:07:19 -07:00
David Lord
0f3b9d731b
Merge pull request #2721 from wimglenn/wimglenn-patch-1
Add `python_requires` metadata for PyPI
2018-04-26 14:02:05 -07:00
wim glenn
fafb827a46
Exclude 3.3 aswell. 2018-04-26 15:50:48 -05:00
wim glenn
732c5b0509
Add python_requires metadata for PyPI 2018-04-26 15:47:42 -05:00
David Lord
987b0098d8
fix docs logo 2018-04-26 13:06:15 -07:00
David Lord
d60f213fdb
Bump version number to 1.0.1.dev 2018-04-26 12:31:25 -07:00
David Lord
79d3ff9baa
Bump version number to 1.1.dev 2018-04-26 12:30:40 -07:00
David Lord
46a71071ed
Bump version number to 1.0 2018-04-26 12:29:03 -07:00
David Lord
9d0b163362
release 1.0 2018-04-26 12:28:26 -07:00
David Lord
291f3c338c
Bump version number to 1.0 2018-04-26 12:25:54 -07:00
David Lord
36e68a439a
release 1.0 2018-04-26 12:22:45 -07:00
David Lord
216151c8a3
Merge branch '0.12-maintenance' 2018-04-26 12:18:06 -07:00
David Lord
23047a71fd
Bump version number to 0.12.4.dev 2018-04-26 12:14:22 -07:00
David Lord
1a9e58e8c9
Bump version number to 0.12.3 2018-04-26 12:12:11 -07:00
David Lord
63deee0a8b
release 0.12.3 2018-04-26 12:12:03 -07:00
David Lord
062745b23f
Merge pull request #2720 from pallets/setup-link
Add project_urls so that PyPI will show GitHub stats.
2018-04-26 12:07:01 -07:00
David Lord
5c8110de25
ensure order of project urls 2018-04-26 11:57:21 -07:00
Hsiaoming Yang
10a77a5430
Add project_urls so that PyPI will show GitHub stats. 2018-04-26 11:30:37 -07:00
David Lord
22992a0d53
add donate link 2018-04-26 07:46:50 -07:00
David Lord
2ede0b8ba9
add donate link 2018-04-26 07:44:59 -07:00
David Lord
4137aecca9
add donate link 2018-04-26 06:05:13 -07:00
David Lord
44dc32243e
add donate link 2018-04-26 06:03:33 -07:00
Hsiaoming Yang
4df5f82914
Merge pull request #2719 from greyli/patch-9
Fix typo in docs
2018-04-24 09:57:32 +09:00
Grey Li
7df3524bb9
Fix typo in docs 2018-04-24 08:09:08 +08:00
David Lord
d0214c9b4c
use name of license 2018-04-23 09:04:05 -07:00
David Lord
0123e65787
Merge pull request #2717 from filipefilardi/master
Add LICENSE in README
2018-04-23 09:02:23 -07:00
Filipe Filardi
86a9177f4b
Add LICENSE in README 2018-04-23 09:00:41 -07:00
Hsiaoming Yang
64ac1b0d36 Revert "Close tag on js examples."
This reverts commit b7f6ff4f0b.
2018-04-21 15:12:06 +09:00
Hsiaoming Yang
b7f6ff4f0b
Close tag on js examples. 2018-04-21 14:48:15 +09:00
David Lord
93698b509b
document cli option env vars
closes #2713
2018-04-20 13:25:04 -07:00
David Lord
324b4ea255
Merge pull request #2711 from pope1ni/session-serializer-fixes
Minor session serializer fixes.
2018-04-19 06:57:11 -07:00
Nick Pope
eaedb9320c Fix index example for TaggedJSONSerializer.register()
Made the example use a keyword, rather than a positional argument, as
the intent here is to show how to insert a tag with higher precedence.
As a positional argument, this would have been passed to ``force``
instead of ``index``.
2018-04-19 14:16:11 +01:00
Nick Pope
fc6a1d9354 Fix default index for TaggedJSONSerializer.register()
Change the default value of ``index`` to ``None`` in ``register()`` so
that it is possible to insert a new tag as the penultimate item in the
order list.
2018-04-19 14:16:11 +01:00
David Lord
16549370fd
fix changelog indentation 2018-04-18 23:03:17 -07:00
David Lord
e102e5cb33
Merge pull request #2707 from rochacbruno/lazy_loader_message
Add a message `Serving Flask app (module "app.py" will be lazily loaded)` to `flask run` related to #2706
2018-04-18 13:45:35 -07:00
David Lord
80a9e0edf6
app.run is not lazy
use click.echo for banner messages
2018-04-18 13:39:55 -07:00
David Lord
be46acb871
add changelog for docs theme and tutorial 2018-04-18 13:21:16 -07:00
David Lord
84efe4de77
enable intersphinx 2018-04-18 13:10:56 -07:00
David Lord
0ff3f722c1
Merge pull request #2710 from davidism/0.12-docs-theme
backport #2709 use theme provided by pallets-sphinx-themes
2018-04-18 13:07:36 -07:00
David Lord
679bf0014f
use theme provided by pallets-sphinx-themes 2018-04-18 13:06:08 -07:00
David Lord
5fba092c22
Merge pull request #2709 from davidism/docs-theme
use theme provided by pallets-sphinx-themes
2018-04-18 12:13:04 -07:00
David Lord
49a38ed999
use theme provided by pallets-sphinx-themes 2018-04-18 12:05:31 -07:00
Bruno Rocha
8f5168cb31 Add explicit (lazy loading) message to flask run related to #2706 2018-04-18 13:42:46 -03:00
David Lord
3a0ea726bd
move coveragerc to setup.cfg 2018-04-12 12:37:35 -07:00
David Lord
1e84c67beb
clean up js example 2018-04-12 12:17:14 -07:00
David Lord
746b91dfce
Merge pull request #2699 from pallets/javascript
add javascript ajax example
2018-04-12 11:28:49 -07:00
David Lord
fce1885f76
add javascript ajax example 2018-04-12 11:06:02 -07:00
David Lord
b354c37e57
add changelog for 0.12.3 2018-04-10 13:10:53 -07:00
David Lord
b178e89e44
Merge pull request #2695 from pallets/backport-2691-json-encoding
detect UTF encodings when loading json
2018-04-10 12:58:45 -07:00
David Lord
0e1e9a04aa
detect UTF encodings when loading json 2018-04-10 12:55:01 -07:00
David Lord
aab4c8c745
Merge pull request #2694 from pallets/backport-2359-cli-warning
backport #2359 fix python -m import warning
2018-04-10 12:31:52 -07:00
David Lord
18c9db4794
be smarter about adding ".cli" to reloader command
python -m flask.cli raises an import warning on > 2.6
it's only needed on 2.6, "flask" works otherwise
2018-04-10 12:27:26 -07:00
David Lord
d8bf589d48
Merge pull request #2693 from davidism/max-cookie-size
add Response.max_cookie_size config
2018-04-10 11:26:15 -07:00
David Lord
1ed756a523
add Response.max_cookie_size config 2018-04-10 11:17:18 -07:00
David Lord
465b48ed4e
Merge pull request #2691 from pallets/json-encoding
detect UTF encodings when loading json
2018-04-10 09:47:14 -07:00
David Lord
ab4142215d
detect UTF encodings when loading json 2018-04-10 09:34:59 -07:00
David Lord
0cbe698958
Merge pull request #2665 from fprocess/2651-get_json's-silent-option-weird-side-effect
Fix the bug of cache function in `get_json` method.
2018-04-09 03:00:14 -07:00
fphonor
171eb28c95
get_json separate cache depending on silent arg 2018-04-09 02:52:40 -07:00
David Lord
8c0d8c1c14
Merge pull request #2662 from greyli/patch-9
Add tips for 413 connection reset issue
2018-04-09 01:37:32 -07:00
Grey Li
2f9be68a81
Add tips for 413 connection reset issue 2018-04-09 01:30:15 -07:00
David Lord
abba4b2a74
Merge pull request #2686 from davidism/bp-static
document blueprint static folder without prefix
2018-04-09 01:27:25 -07:00
David Lord
46dc14664f
document blueprint static folder without prefix 2018-04-09 01:11:46 -07:00
David Lord
c3e2ff2afa
Merge pull request #2676 from davidism/tutorial
rewrite tutorial docs and example
2018-04-09 01:09:03 -07:00
David Lord
c3dd7b8e4c
rewrite tutorial docs and example 2018-04-09 00:53:25 -07:00
David Lord
16d83d6bb4
Merge pull request #2685 from davidism/app-context-docs
rework context docs
2018-04-09 00:22:16 -07:00
David Lord
2411707492
rework context docs 2018-04-09 00:02:38 -07:00
David Lord
47a00864c3
Merge pull request #2668 from pallets/tip-dotenv
Add tip for dotenv
2018-03-22 12:06:05 -07:00
Hsiaoming Yang
08e61ea200
Add tip for dotenv 2018-03-23 00:04:05 +09:00
Hsiaoming Yang
cc51ace823
Fix logs for simple example on readme 2018-03-22 23:44:36 +09:00
David Lord
a2ea18693c
Update README.rst 2018-03-06 07:36:58 -08:00
David Lord
095d36a884
Merge pull request #2652 from greyli/patch-8
Add documentation link in README
2018-03-05 16:45:00 -08:00
Grey Li
f739149456
Add documentation link in README 2018-03-06 07:50:46 +08:00
David Lord
d72612d11e
Merge pull request #2647 from pallets/docs-extensions
remove old extension docs
2018-02-28 08:03:04 -08:00
David Lord
4462cc57c8
rewrite extension docs
remove old extension patterns
remove flask.ext from api docs
2018-02-28 07:52:03 -08:00
David Lord
cc6c618f4d
Merge pull request #2646 from pallets/test-app-name
don't use Flask(__name__) in conftest
2018-02-28 07:00:15 -08:00
David Lord
5f42989ce3
don't use Flask(__name__) in conftest 2018-02-28 06:50:49 -08:00
David Lord
624895620a
ignore pytest cache 2018-02-24 08:23:12 -08:00
David Lord
b0c1da1e7e
Merge pull request #2637 from pallets/quickstart-unique-urls
rewrite quickstart Unique URLs section
2018-02-24 08:10:25 -08:00
David Lord
303a3d24a6
rewrite quickstart Unique URLs section 2018-02-24 08:03:30 -08:00
David Lord
b16592aba0
Merge pull request #2629 from zcchen/master
prevent double slash /a//b when blueprint prefix ends with slash
2018-02-23 16:00:30 -08:00
David Lord
401423df06
only strip one slash when registering blueprint
add test and changelog
2018-02-23 15:47:06 -08:00
zcchen
0887245bfd
Add re.sub for blueprint add_url_rule handler, prevent '/a//b/'(blueprint.url_prefix='/a/' and the route is '/b/') happened. 2018-02-23 15:47:06 -08:00
David Lord
f808c20139
Merge pull request #2635 from pallets/feature/server-name-routing
Require opt-in for subdomain matching
2018-02-23 08:47:20 -08:00
David Lord
82f0d120de
use subdomain arg in url_map.bind_to_environ
rename new subdomain test, parametrize
test allowing subdomains as well as ips
add subdomain_matching param to docs
add some references to docs
add version changed to create_url_adapter
2018-02-23 08:39:31 -08:00
Armin Ronacher
8cec2010c0
Do not enable subdomain matching by default
Updated tests for new subdomain matching
Added a test to validate matching behavior
2018-02-23 07:53:27 -08:00
David Lord
4a7db66474
Merge pull request #2636 from pallets/test-cli-runner
add test_cli_runner for testing app.cli commands
2018-02-19 16:14:11 -08:00
David Lord
cf5525f98a
add test_cli_runner for testing app.cli commands 2018-02-19 15:34:46 -08:00
Hsiaoming Yang
79f34f1769
Merge pull request #2630 from anowlcalledjosh/2627-test_request_context-docs
Fix docs for test_request_context
2018-02-13 10:33:08 +09:00
Josh Holland
575021c07b
Fix docs for test_request_context
Fixes #2627.
2018-02-12 22:26:02 +00:00
David Lord
4309c7c6ea
Merge pull request #2624 from pallets/metadata
update metadata
2018-02-08 13:12:25 -08:00
David Lord
a9a078c93f
install python in travis osx env 2018-02-08 13:04:19 -08:00
David Lord
310fbfcf64
revert copyright year to project start
add copyright header to files
2018-02-08 12:43:30 -08:00
David Lord
9bf5c3b3a3
update project metadata
new readme
readme as setup.py long_description
links in changes
git in authors
add travis osx env
break out docs build in travis
remove python_requires for now
2018-02-08 12:43:22 -08:00
David Lord
f9c6f389ac
Merge pull request #2622 from pallets/versions
bump dependency versions
2018-02-06 08:14:09 -08:00
David Lord
af32ea0b94
bump dependency versions 2018-02-06 08:03:09 -08:00
David Lord
8c2c802f19
Merge pull request #2611 from pallets/cli-test-docs
document testing cli commands
2018-01-28 18:56:45 -08:00
David Lord
ae30fe7de0
document testing cli commands 2018-01-28 18:48:39 -08:00
David Lord
94aaa24579
Merge pull request #2610 from pallets/cli-syntaxerror
add note about syntax errors in custom scripts
2018-01-28 14:48:38 -08:00
David Lord
7fb2ddcaf6
add note about syntax errors in custom scripts
mention pycharm version support
2018-01-28 14:41:47 -08:00
David Lord
72115ec84b
Merge pull request #2609 from pallets/nightly-travis
allow nightly to fail on travis
2018-01-28 14:16:33 -08:00
David Lord
8bddd3bf4d
allow nightly to fail on travis 2018-01-28 12:06:59 -08:00
David Lord
03a2996bb8
Merge pull request #2530 from pallets/feature/factory-detection
Improved bad factory error handling
2018-01-28 11:27:07 -08:00
David Lord
2cba0d77ee
use traceback to detect call more reliably 2018-01-28 11:20:42 -08:00
David Lord
83b5625f0c
Merge pull request #2603 from greyli/patch-8
Update cli help for FLASK_ENV
2018-01-23 15:39:42 -08:00
David Lord
8a1f3626c5
fix changelog list formatting 2018-01-23 15:37:33 -08:00
David Lord
213afec771
add rst extension for changelog
fix changelog version
2018-01-23 15:34:52 -08:00
David Lord
e21abd9da5
Merge pull request #2607 from FadhelC/SameSite-cookie-feature
Added support for cookie SameSite attribute
2018-01-23 15:20:16 -08:00
Grey Li
0570393bc4
Update cli help for FLASK_ENV 2018-01-23 15:17:35 -08:00
David Lord
382b13581e
clean up samesite docs 2018-01-23 15:11:50 -08:00
David Lord
8ff0cef6b9
Merge pull request #2606 from pallets/run-ssl
add HTTPS support for flask run command
2018-01-23 10:09:42 -08:00
David Lord
2beedabaaf
add HTTPS support for flask run command 2018-01-23 10:03:53 -08:00
Fadhel_Chaabane
db5735c3ce Changed Werkzeug min version to 0.14 to support SameSite cookie's attribute 2018-01-23 15:02:07 +00:00
Fadhel_Chaabane
a1d9ebe4ab New Feature: Added Support for cookie's SameSite attribute. 2018-01-23 13:57:50 +00:00
David Lord
22708b048d
Merge pull request #2596 from Nickatak/master
Fix for docs issue #2595
2018-01-14 20:07:43 -08:00
Nickatak
a9646716d2 Fix typo in example. 2018-01-14 16:02:43 -08:00
David Lord
c3a997864e
Merge pull request #2593 from pallets/env-docs
clean up FLASK_ENV docs
2018-01-10 15:46:42 -08:00
David Lord
87c2e121e0
clean up FLASK_ENV docs [ci skip] 2018-01-10 15:46:11 -08:00
David Lord
2949306b7b
Merge pull request #2592 from pallets/tests-env
reset standard os env after each test
2018-01-10 14:01:59 -08:00
David Lord
8bdf820e9b
reset standard os env after each test 2018-01-10 13:53:45 -08:00
David Lord
f2cf4d0449
Merge pull request #2591 from pallets/run-behavior
match run command behavior in app.run
2018-01-10 12:14:44 -08:00
David Lord
3738f7ff99
match run command behavior in app.run
output extra server information
handle env var changed by load_dotenv
enable threading by default
2018-01-10 12:02:13 -08:00
Armin Ronacher
2433522d29
Add Support for FLASK_ENV (#2570)
This introduces environments to Flask
2018-01-06 17:07:56 +01:00
Hsiaoming Yang
60eecb547d Remove python 2.6 and 3.3 everywhere. (#2583) 2018-01-06 10:49:50 +01:00
Hsiaoming Yang
22e072379b cleanup werkzeug import (#2582) 2018-01-06 10:49:01 +01:00
David Lord
eebc0edfdd
Merge pull request #2558 from pallets/appveyor
add appveyor configuration
2018-01-05 13:32:57 -08:00
David Lord
333865ea34
windows python 2 doesn't provide inet_pton 2018-01-05 13:27:31 -08:00
David Lord
ffca68fc86
fix windows failure to remove temp file 2018-01-05 12:36:01 -08:00
David Lord
40745bb338
Merge pull request #2581 from pallets/config-enotdir
silence ENOTDIR when loading config file
2018-01-05 07:55:41 -08:00
David Lord
06f96df67e
silence ENOTDIR when loading config file 2018-01-05 07:40:51 -08:00
David Lord
26f413e1e5
Merge pull request #2580 from pallets/session-attrs
improve documentation for session attributes
2018-01-04 13:04:29 -08:00
David Lord
54f3d2131d
Merge pull request #2541 from nsiregar/#2535_update_pycharm_instruction
update pycharm instructions
2018-01-04 12:56:38 -08:00
David Lord
0a33954555
improve documentation for session attributes
add test for session attributes
2018-01-04 12:56:18 -08:00
David Lord
c11fe5d007
smaller, optimized image
reword / reformat the docs
fix tox build directory
2018-01-04 12:34:25 -08:00
David Lord
c2bac6de8c
Merge pull request #2565 from greyli/patch-6
Docs: Update CLI for factory pattern
2018-01-04 09:39:47 -08:00
David Lord
3012d20a3f
cleanup 2018-01-04 07:29:15 -08:00
David Lord
2bec58fd6e
Merge pull request #2577 from pallets/jsonify-str
Use string concat in jsonify
2018-01-03 13:17:59 -08:00
David Lord
f7983ae96a
concat newline in jsonify
ref pallets/werkzeug#1130
2018-01-03 13:06:14 -08:00
Grey Li
94fd3edf31
Docs: Update CLI for factory pattern 2017-12-20 20:50:45 +08:00
David Lord
eab030f9f5
Merge pull request #2559 from pallets/fix-appveyor
Better appveyor config
2017-12-17 13:11:53 -08:00
Hsiaoming Yang
411b08ff8b Better appveyor config 2017-12-17 02:43:06 +09:00
David Lord
e296a67a08
add appveyor configuration 2017-12-16 07:33:38 -08:00
David Lord
a43a439c7a
Merge pull request #2536 from greyli/patch-4
Docs: update built-in server description
2017-12-16 07:08:31 -08:00
David Lord
05e3840cc2
Merge pull request #2555 from pallets/deprecate-26-33
remove tests and docs for python 2.6 and 3.3
2017-12-16 07:06:54 -08:00
David Lord
28d0f66c1f
remove tests and docs for python 2.6 and 3.3 2017-12-16 07:00:00 -08:00
Hsiaoming Yang
b786585b8f
Merge pull request #2556 from accraze/patch-1
Fix sentry raven install docs
2017-12-16 23:13:55 +09:00
Andy Craze
1cdfe0e5e9
Fix sentry raven install docs
The documentation for installing Sentry's raven client was incorrect. It should state that the client must be installed with the extra flask dependencies as mentioned in getsentry/raven-python#1075
2017-12-14 19:45:09 -08:00
David Lord
27a7171d42
Merge pull request #2554 from camilojimenez/2550-some-tests-fail
fix non-passing tests for logging on pytest >= 3.3.0
2017-12-14 12:21:34 -08:00
David Lord
604cc758fb
use config fixture, get plugin via unregister 2017-12-14 12:20:03 -08:00
Camilo
33fa580947 restore the logging plugin only if it was active to begin with 2017-12-14 09:40:34 -05:00
David Lord
db56e38666
Merge pull request #2553 from greyli/patch-6
Docs: Escape backslash for display
2017-12-14 05:33:32 -08:00
Camilo
e30c39fe78 fix non-passing tests for logging on pytest > 3.3.0 2017-12-14 01:55:22 -05:00
Grey Li
58ea360d43
Docs: Add missing backslash 2017-12-14 14:38:37 +08:00
Hsiaoming Yang
4c9bf6e4b5
Merge pull request #2552 from greyli/patch-6
Docs: Fixed typo
2017-12-14 14:26:56 +09:00
Grey Li
8a5e389da0
Docs: Fixed typo 2017-12-14 11:08:33 +08:00
David Lord
4556ab2e06
Merge pull request #2548 from morenoh149/patch-1
Fix docs, how to get db connection in pattern
2017-12-08 12:59:46 -08:00
Harry Moreno
2d2c0169d4
Fix docs, how to get db connection in pattern
The docs are inaccurately suggestion a db connection would be available at `g.db`, after calling `get_db()` a connection will be available at `g._database` but even then I think instructing the user to use `get_db()` is the best way forward.
2017-12-08 15:18:02 -05:00
Vladimir Kroz
d08d96acbc Fix code example for HTTP Methods
`return` is required to make 'http methods' example work
2017-12-05 17:59:04 +01:00
Ngalim Siregar
5892a6f2c5 Update PyCharm image
add highlighted area to pycharm image
2017-12-03 17:05:20 +09:00
Ngalim Siregar
601cd90fdb
update pycharm instructions 2017-12-03 16:37:52 +09:00
Hsiaoming Yang
9520fbdcb2 Rename GitHub templates to md. They are Markdown. 2017-12-02 09:17:18 +01:00
Grey Li
602c771327
Docs: update built-in server description 2017-12-01 16:03:52 +08:00
David Lord
d6df70de80
include tox.ini in sdist
#2531
2017-11-26 12:50:36 -08:00
Adrian Moennich
777cc17de3 Fix broken test 2017-11-25 00:53:43 +01:00
Adrian Moennich
eb1c2faf9f Merge remote-tracking branch 'upstream/0.12-maintenance' 2017-11-25 00:44:07 +01:00
ThiefMaster
c52e1b7388 Fix ValueError for some invalid Range requests
fixes #2526
2017-11-25 00:37:49 +01:00
Armin Ronacher
1a2dc6f205 Fixed tests for python 3 2017-11-25 00:18:10 +01:00
Armin Ronacher
2ef2000a39
Enable threads by default for the dev server (#2529)
Enable threads by default for dev server
2017-11-25 00:17:09 +01:00
Armin Ronacher
c23a63a185 Improved bad factory error handling 2017-11-25 00:05:57 +01:00
David Lord
d24bb9ee32
Merge pull request #2525 from proog/docs-twisted-port
Docs: update Twisted Web example
2017-11-22 16:35:47 -08:00
Per Mortensen
110a752565 Update Twisted Web example 2017-11-22 22:40:23 +01:00
David Lord
3a2f396265
Merge pull request #2515 from domandinho/domandinho_2515
Minor fix in flaskr example README
2017-11-09 14:10:10 -08:00
domandinho
50964fb4ab Minor fix in flaskr example README 2017-11-09 22:52:24 +01:00
David Lord
470112dd6e
Merge pull request #2500 from BogdanAlexandru/patch-1
Improvements in the final sections of appfactories.rst
2017-10-30 13:48:29 -07:00
David Lord
a35fc3cd6b Merge pull request #2504 from hugovk/patch-1
Remove IRC notifications from Travis CI
2017-10-25 04:09:41 -07:00
hugovk
f8321de369 Remove IRC notifications 2017-10-25 09:03:27 +03:00
Roy Crihfield
e3c853e604 Fix typo in cli.py (#2502) 2017-10-24 08:10:12 +02:00
Bogdan Alexandru Marginean
b89cf95816 Update appfactories.rst 2017-10-19 22:32:47 +03:00
Radoslav Gerganov
9291ead32e Fix typo in logging.rst (#2492)
Remove extra parenthesis from RequestFormatter constructor.
2017-10-13 13:53:50 +02:00
David Lord
82e66848e8 Merge pull request #2491 from mrnom/patch-1
Fix grammar/typos
2017-10-11 07:03:32 -07:00
Mrn Om
c352714478 Fix grammar/typos 2017-10-11 16:47:26 +03:00
David Lord
0932d8f428 Merge pull request #2490 from davidism/cli-review
Rewrite CLI errors and docs
2017-10-10 11:59:28 -07:00
David Lord
9bc329c0c9
rewrite cli docs
reflects the current FLASK_APP detection
2017-10-10 11:10:20 -07:00
David Lord
5436dddf64
rewrite cli errors
consistent order for arguments to load functions
refactor find_app_by_string to flow better
more cli loader tests
2017-10-10 07:04:53 -07:00
David Lord
8020d5eac9 Merge pull request #2450 from Caratpine/master
Blueprint view function name should not contain dots
2017-10-09 08:18:34 -07:00
Caratpine
2f57a0b917
Blueprint view function name should not contain dots 2017-10-09 08:12:34 -07:00
Henry Chladil
0a1090890f Add additional information in the url_rule docs (#2467)
If a user is making use of the errorhandler(405) decorator, and
they wish to include an Allow header (as per HTTP spec), they may
be confused to find that url_rule is None. This doc change aims to
clarify that because the request was never successfully matched,
it was never bound to a URL rule and to access the valid methods,
they must examine routing_exception.
2017-10-07 19:52:44 +02:00
David Lord
7e4e6eced3 Merge pull request #2475 from greyli/patch-4
Fix typo in comment
2017-09-28 11:00:48 -07:00
David Lord
3a8cc37663
install argparse for 2.6
closes #2476
2017-09-28 10:59:21 -07:00
Grey Li
851ca95778 Fix typo in comment 2017-09-23 22:26:48 +08:00
Markus Unterwaditzer
f071562ec0 Merge pull request #2470 from ImgBotApp/imgbot
[ImgBot] optimizes images
2017-09-12 12:55:41 +02:00
ImgBotApp
ff8f525fb3 [ImgBot] optimizes images
\docs\_static\no.png (18.3%))
\docs\_static\touch-icon.png (64.21%))
\docs\_static\flaskr.png (8.32%))
\docs\_static\pycharm-runconfig.png (14.65%))
\docs\_static\debugger.png (2.79%))
\docs\_static\flask.png (30.15%))
\docs\_static\yes.png (13%))
\docs\_static\logo-full.png (29.33%))
2017-09-12 04:24:35 +00:00
Jaap Broekhuizen
62a6aabc8d Mention Flask instead of Jinja in the issue template
For people not really comfortable with the flask ecosystem this can be really confusing.
2017-09-06 13:31:57 +02:00
Brett Johnson
e4928323f2 Update App Engine link
Point to an authoritative site for Flask on App Engine that is maintained.
2017-08-30 14:58:05 -07:00
Alejandro Mantecon Guillen
154c621237 Update debugger and flaskr screenshots (#2454) 2017-08-25 15:36:26 +02:00
Arie Marie 'Thomas' Dalleis
7c51019985 Fix typos and formatting 2017-08-15 16:05:48 +02:00
David Lord
ad7ed87f5e Merge pull request #2446 from chuanma/master
replace @pytest.yield_fixture by @pytest.fixture
2017-08-14 15:05:49 -07:00
Chuan Ma
5888d76342 pytest.yield_fixture deprecated in pytest 3.0+.
It's suggested to use pytest.fixture directly,
and flask already requires 'pytest>=3'.
2017-08-14 10:25:24 -04:00
Hsiaoming Yang
7d4703e98a Merge pull request #2442 from hallazzang/patch-1
corrected indentations for pypi description
2017-08-14 14:01:46 +08:00
Hsiaoming Yang
330792e10b Merge pull request #2445 from brennv/add-version-warning
Add version warning to Flaskr tutorial
2017-08-14 14:01:10 +08:00
Brennan Vincello
7640a1f1c9 Add version warning 2017-08-10 21:51:02 -07:00
hallazzang
392989aaa7 corrected indentations for pypa description 2017-08-06 09:06:19 +09:00
David Lord
97ad085912
fix links 2017-08-01 08:47:56 -07:00
David Lord
1c35b98f0b
fix code block 2017-08-01 08:39:42 -07:00
David Lord
2efb565fbc
mention that session signature checks max age
add expiration to cookie security docs
closes #2422
2017-08-01 08:28:32 -07:00
David Lord
ed1f604727 Update CHANGES 2017-07-31 13:58:50 -07:00
David Lord
c74f46979a Merge pull request #2436 from davidism/logging
Simplify logging
2017-07-31 13:23:45 -07:00
David Lord
66b1b752da
simplify logging configuration
single default handler and formatter
don't remove handlers
configure level once using setLevel
document logging
reorganize logging tests
2017-07-31 12:49:03 -07:00
David Lord
85fa8aabf5 Merge pull request #2430 from erebus1/env_url_scheme_fix
make_test_environ_builder: use url_scheme from path if provided
2017-07-29 13:09:17 -07:00
David Lord
a89bdb3395
prefer the url's scheme over the kwarg
tabs -> spaces
add test
add changelog
2017-07-29 13:03:08 -07:00
David Lord
417bc336de
egg_info -R flag is gone 2017-07-27 07:32:03 -07:00
Igor Kasianov
241673fd15 make_test_environ_builder: use url_scheme from path if provided
When providing https url in path ("https://example.com/")
we hope that we will get https scheme in environment
2017-07-27 14:50:27 +03:00
David Lord
851eaa4db7 Merge pull request #2416 from davidism/dotenv
Add .env support
2017-07-16 13:55:18 -07:00
David Lord
491d331e6e
load env vars using python-dotenv 2017-07-16 13:37:51 -07:00
asmith26
8e2ef5bde3 Fix typo in docs (#2419) 2017-07-16 21:07:25 +02:00
David Lord
77b98a2762 Merge pull request #2414 from davidism/cli-load-local-package
FLASK_APP doesn't require .py extension for local packages
2017-07-14 19:59:51 -07:00
David Lord
fb845b9032
allow local packages in FLASK_APP
don't require .py extension in FLASK_APP
add tests for nested package loading
parametrize cli loading tests
2017-07-14 19:49:05 -07:00
David Lord
59f7966e31 support passing environ to test client (#2412)
closes #2411
2017-07-13 08:42:53 -07:00
David Lord
817903c9c1 Merge pull request #2409 from bijanvakili/clarify-app-teardown
Clarify docs and tests for exception handling in Flask.teardown_appcontext()
2017-07-10 07:20:01 -07:00
David Lord
9560f22bb6
clean up 2017-07-10 07:10:47 -07:00
Bijan Vakili
a417e41d27 Update documentation and regression tests to clarify that Flask.teardown_appcontext() only receives unhandled exceptions 2017-07-07 17:34:44 -07:00
William Horton
5909e26fba Remove unused import from test_basic (#2403) 2017-06-30 17:28:48 +02:00
David Lord
8207b1563e
fix formatting
-R is no longer an egg_info option
closes #2400
[ci skip]
2017-06-28 19:55:39 -07:00
David Lord
6162ecef19
detox breaks docs test env for some reason
[ci skip]
2017-06-28 08:06:28 -07:00
David Lord
01e2d80660
one more secret key in docs 2017-06-28 08:02:51 -07:00
David Lord
d13e41ddef Merge pull request #2399 from davidism/docs-secret-key
clean up secret key docs
2017-06-28 08:00:08 -07:00
David Lord
465922e5f1
clean up secret key docs
consistent key across docs and examples
consistent key across tests, set in conftest
2017-06-28 07:58:06 -07:00
David Lord
641fdeaf98 Merge pull request #2398 from miguelgrinberg/app-not-found-error-fix
fix variable substitution in error message
2017-06-27 07:50:20 -07:00
Miguel Grinberg
4f30cb7c57
fix variable substitution in error message 2017-06-27 07:27:10 -07:00
David Lord
cce6e7dccc Merge pull request #2397 from davidism/request-json
Un-deprecate Request.json
2017-06-26 09:47:36 -07:00
David Lord
5bc0d15359
un-deprecate request.json 2017-06-26 09:34:26 -07:00
David Lord
1172728a68 Merge pull request #2396 from davidism/remove-script
Remove old 0.7 upgrade script
2017-06-26 09:23:06 -07:00
David Lord
e0cd80c6bf
remove old upgrade script 2017-06-26 09:22:03 -07:00
David Lord
bce8ec75eb Merge pull request #2395 from davidism/remove-ext
Remove deprecated flask.ext
2017-06-26 09:18:21 -07:00
David Lord
715a9a3e7b
remove deprecated flask.ext 2017-06-26 08:47:28 -07:00
David Lord
4c564779d1 Merge pull request #2394 from davidism/remove-deprecated
Remove deprecated code
2017-06-26 08:29:43 -07:00
David Lord
89c87240b6
changelog for deprecations 2017-06-26 08:07:54 -07:00
David Lord
723e665004
remove deprecated Request.module 2017-06-26 07:46:33 -07:00
David Lord
d63c2bc417
remove deprecated Flask.static_path 2017-06-26 07:45:29 -07:00
David Lord
9491bf8695
remove deprecated Flask.error_handlers 2017-06-26 07:39:35 -07:00
David Lord
c5d3f806d7 Merge pull request #2393 from JohnMoutafis/2385-remove-deprecated-code
Remove deprecated code from app.py
2017-06-26 07:35:20 -07:00
John Moutafis
e9386a7273 Remove deprecated request_globals_class _get and _set methods. 2017-06-26 11:48:29 +03:00
John Moutafis
75327c0a85 Remove deprecated init_jinja_globals. 2017-06-23 17:53:38 +03:00
Anthony Plunkett
45c8fb3f3f Merge pull request #2381 from trirpi/documentation-sqlite-uri-bug
sqlite uri connection string should be triple slashed for in-memory example.
2017-06-16 15:38:33 -04:00
trirpi
bfc2ee7dfd removed bug in memory sqlite uri 2017-06-16 21:15:33 +02:00
David Lord
29c055a2b4 Merge pull request #2378 from miguelgrinberg/default-flask-app
Import app from wsgi.py or app.py if FLASK_APP is not defined
2017-06-16 07:00:26 -07:00
David Lord
448368e226
style cleanup
[ci skip]
2017-06-16 06:59:37 -07:00
Miguel Grinberg
0b80acb25c
document wsgi.py and app.py default modules 2017-06-15 12:15:38 -07:00
Miguel Grinberg
7c40aa9e50
Import app from wsgi.py or app.py if FLASK_APP is not defined
Fixes #2376
2017-06-15 11:27:50 -07:00
David Lord
d625d41104 Merge pull request #2374 from astralblue/json_encode_non_utc_datetimes
Correctly JSON-encode datetimes aware of non-UTC timezones
2017-06-14 18:42:15 -07:00
Eugene M. Kim
63ccdada1b Actually hand-spin and use a tzinfo subclass
This is for Python 2.x compatibility.

Suggested-by: David Lord <davidism@gmail.com>
2017-06-14 14:23:13 -07:00
Eugene M. Kim
f803760275 Re-revert to not using pytz
Will spin a tzinfo subclass.
2017-06-14 14:14:18 -07:00
Eugene M. Kim
34050630d6 Skip aware datetime tests if pytz is unavailable 2017-06-14 14:08:42 -07:00
Eugene M. Kim
eb9618347c Use pytz again for tests
This is because datetime.timezone is Python 3 only.  The only
alternative would be to hand-spin a datetime.tzinfo subclass, an
overkill.

This reverts commit 0e6cab3576.
2017-06-14 13:57:40 -07:00
Eugene M. Kim
5b38fe2fbe Merge branch 'master' of github.com:pallets/flask into json_encode_non_utc_datetimes 2017-06-14 13:11:53 -07:00
Eugene M. Kim
0e6cab3576 Rewrite test_jsonify_aware_datetimes without pytz 2017-06-14 13:06:26 -07:00
David Lord
1e112cccaa Merge pull request #2373 from davidism/reload_templates_run_debug
Reconfigure app when debug is set by run command
2017-06-14 12:56:42 -07:00
Eugene M. Kim
d41e2e6a5d Correctly encode aware, non-UTC datetime objects
http_date() requires timetuple in UTC, but JSONEncoder.default() was
passing a local timetuple instead.
2017-06-14 12:40:53 -07:00
David Lord
4d2a3ab2e0
test no debug flag doesn't reconfigure
test templates_auto_reload property instead of config
use app fixture in test
2017-06-14 12:31:56 -07:00
Eugene M. Kim
d75d83defd Add UTs for #2372
test_encode_aware_datetime() fails for non-UTC timezones due to the bug.
2017-06-14 12:22:09 -07:00
David Lord
4fc48200a5
reconfigure the app from run command and method
extract templates_auto_reload to property
continues #1910
closes #1907
2017-06-14 12:08:25 -07:00
David Lord
9e39c506e0
Merge branch 'master' into reload_templates_run_debug 2017-06-14 09:58:33 -07:00
David Lord
2c97ed985e Merge pull request #2371 from davidism/register_blueprint-doc
document `Flask.register_blueprint` arguments
2017-06-14 07:41:44 -07:00
David Lord
fe1bf3c821
document the blueprint param too 2017-06-14 07:26:48 -07:00
David Lord
0f7b3a4f26
document Flask.register_blueprint arguments
closes #1809
2017-06-14 07:16:55 -07:00
David Lord
e97f6e22e6 Merge pull request #2370 from tony/patch-2
Add docutils label for class-based views
2017-06-13 06:28:18 -07:00
David Lord
75c4ea24c2 Merge pull request #2369 from tony/patch-1
Add docutils label for templates page
2017-06-13 06:27:46 -07:00
Tony Narlock
91fd33dbd9 Add docutils label for class-based views 2017-06-12 16:15:52 -05:00
Tony Narlock
66e9dc9df2 Add docutils label for templates page 2017-06-12 16:07:24 -05:00
grahamlutz
cf425403c8 Remove duplicate word from docstring 2017-06-10 14:53:40 +02:00
David Lord
094b116c7f Merge pull request #2366 from tristanfisher/master
Add basic how-to on using envvars for config
2017-06-09 10:30:31 -07:00
David Lord
01d2f725d3
formatting
[ci skip]
2017-06-09 10:28:54 -07:00
tristan fisher
53ff054fd3 Fixes grammar and phrasing on envvar how-to 2017-06-09 10:54:47 -04:00
tristan fisher
067686b471 Add basic how-to on using envvars for config 2017-06-09 10:19:08 -04:00
David Lord
9d82993422 Merge pull request #2364 from davidism/xss-note
mention csp for javascript: uri xss
2017-06-06 09:22:49 -07:00
David Lord
15756da1f0
mention csp for javascript: uri xss
closes #2174
[ci skip]
2017-06-06 09:21:44 -07:00
David Lord
45946028e7 Merge pull request #2363 from davidism/inherited-members
document inherited attributes for Flask and Blueprint
2017-06-06 07:52:55 -07:00
David Lord
235c830759
document inherited attributes for Flask and Blueprint
closes #480
[ci skip]
2017-06-06 07:51:52 -07:00
David Lord
b80cf057fc Merge pull request #2362 from davidism/remove-error-handler-cache
Remove error handler cache
2017-06-05 06:34:49 -07:00
David Lord
b5f4c52150
don't cache error handlers for exception mro
closes #2267, closes #1433
2017-06-05 06:24:08 -07:00
David Lord
5c12acefbb
failing test 2017-06-05 06:14:13 -07:00
David Lord
706e67ed9e Merge pull request #2361 from greyli/patch-3
Include flask.json package in setup()
2017-06-05 05:03:50 -07:00
Grey Li
16396248b8 Include flask.json package in setup() 2017-06-05 16:11:16 +08:00
David Lord
f29fa0d56b Merge pull request #2359 from davidism/cli-warning
Be smarter about adding ".cli" to reloader command
2017-06-04 12:38:34 -07:00
David Lord
12c45f06a5
remove unused import 2017-06-04 12:38:10 -07:00
David Lord
fa7e8d6073
be smarter about adding ".cli" to reloader command
python -m flask.cli raises an import warning on > 2.6
it's only needed on 2.6, "flask" works otherwise
closes #2357
2017-06-04 12:26:21 -07:00
David Lord
63129e8426 Merge pull request #2358 from davidism/json-mixin
JSON support for test client and Response
2017-06-04 12:02:40 -07:00
David Lord
e97253e4c1
clean up JSON code and docs 2017-06-04 11:44:00 -07:00
David Lord
dbc70c9274
Merge remote-tracking branch 'remotes/origin/master' into json-mixin 2017-06-04 09:42:39 -07:00
David Lord
3b678b7927 Merge pull request #2354 from davidism/stream-session
Only open session if request does not have open session
2017-06-03 12:26:15 -07:00
David Lord
6637e20174
only open session if request hasn't been pushed yet
closes #1348
2017-06-02 11:12:18 -07:00
David Lord
5978a0f55f
failing test for streaming session 2017-06-02 11:07:53 -07:00
David Lord
49f3e96844 Merge pull request #2353 from grantwwu/patch-1
Clarify documentation for json parsing
2017-06-02 10:23:51 -07:00
David Lord
217d5f9bc0
mention mimetype and is_json 2017-06-02 10:17:40 -07:00
David Lord
62406e667c Merge pull request #2352 from davidism/json-object-hook
Make session serializer extensible
2017-06-02 10:07:57 -07:00
David Lord
fd8b95952c
add tests for flask.json.tag 2017-06-02 10:01:30 -07:00
Grant Wu
daf85d3725 Clarify documentation for json parsing
Documentation does not currently mention that is_json accepts mimetypes that are not strictly application/json.
2017-06-02 12:00:54 -04:00
David Lord
9bee2500dd
finish documentation
[ci skip]
2017-06-02 08:09:37 -07:00
David Lord
bbd15d53ad
docs style cleanup
[ci skip]
2017-06-02 07:03:22 -07:00
David Lord
ca176cb903
pass serializer at tag init instead of to each method
split tagged dict and passthrough into separate cases
add docstrings
2017-06-02 06:36:13 -07:00
David Lord
5e1ced3c05
make session serializer extensible
support serializing 1-item dicts with tag as key
refactor serializer into flask.json.tag module
continues #1452, closes #1438, closes #1908
2017-06-01 22:47:23 -07:00
David Lord
ea2e9609bc
Merge branch 'master' into json-object-hook 2017-06-01 06:40:27 -07:00
David Lord
c7f433c49b Merge pull request #2350 from davidism/errorhandler
show nice message when registering error handler for unknown code
2017-05-31 21:04:21 -07:00
David Lord
859d9a9d5c
show nice message when registering error handler for unknown code
clean up error handler docs
closes #1837
2017-05-31 18:04:08 -07:00
David Lord
9049755e3f Merge pull request #2348 from davidism/bad-request
make debugging bad key errors easier
2017-05-29 19:53:18 -07:00
David Lord
8f3563cf79
fix operator precedence 2017-05-29 19:46:33 -07:00
David Lord
42905b8a55
set description for trap as well as debug
test for key error description
2017-05-29 19:41:07 -07:00
David Lord
045dccaefb
make debugging bad key errors easier
* TRAP_BAD_REQUEST_ERRORS is enabled by default in debug mode
* BadRequestKeyError has the key in the description in debug mode

closes #382
2017-05-29 19:08:25 -07:00
David Lord
fb90c310b9 Merge pull request #2347 from davidism/session-interface
deprecate app session methods in favor of session_interface
2017-05-29 13:42:06 -07:00
David Lord
b9c8c9bad1
deprecate app session methods in favor of session_interface
ref #1182
2017-05-29 13:35:02 -07:00
David Lord
abf54c8182
fix some config names in new doc 2017-05-29 10:29:06 -07:00
David Lord
b7eca826aa Merge pull request #2346 from davidism/2345-vary
use existing response.vary property to set vary header
2017-05-29 10:16:29 -07:00
David Lord
b8eba0a3fa
use existing response.vary property to set vary header
closes #2345
2017-05-29 10:09:24 -07:00
David Lord
5797416544 Merge pull request #2344 from davidism/application-root
APPLICATION_ROOT defaults to '/'
2017-05-28 14:17:56 -07:00
David Lord
4a53840df0
APPLICATION_ROOT defaults to '/' 2017-05-28 14:08:53 -07:00
David Lord
60feecc26c
reformat config from table to linkable sections 2017-05-28 14:04:18 -07:00
David Lord
399ac3c54f
update changelog
[ci skip]
2017-05-28 11:52:01 -07:00
David Lord
90389140cc Merge pull request #2343 from davidism/tests
update development resources
2017-05-28 10:42:16 -07:00
David Lord
3c7625e8c0
update development resources
fix tox to test examples again
add detox tox env for faster testing
clean up makefile, add tox target
add extra group for installing dev requirements
clean up contributing doc, build with docs
expand issue template
add pull request template
2017-05-28 10:26:07 -07:00
David Lord
a37f675ccb
Merge remote-tracking branch 'origin/0.10-maintenance'
refactor make_test_environ_builder
2017-05-28 07:25:15 -07:00
David Lord
aeb82a404f Merge pull request #2342 from jrbaez01/issue/#2341-accept-one-default-argument
#2341: Accept default argument value when args lenght equal 1
2017-05-27 18:09:35 -07:00
Junior Báez
4f689c41d9 #2341: Accept default argument value when args lenght equal 1 2017-05-27 18:02:18 -04:00
David Lord
6a8c8c3484
set example app names directly 2017-05-27 12:47:44 -07:00
Kenneth Reitz
135f85a191 Merge pull request #2340 from pallets/reduce-ci-matrix
Reduce ci matrix
2017-05-27 10:52:45 -07:00
Kenneth Reitz
1ee439adff Merge branch 'master' into reduce-ci-matrix 2017-05-27 13:46:18 -04:00
David Lord
d2a46dc56d
fix doc build error 2017-05-27 10:43:57 -07:00
Kenneth Reitz
fe2974b7a4 try py 2017-05-27 13:41:16 -04:00
Kenneth Reitz
4ef3500db1 reduce the number of builds 2017-05-27 13:37:41 -04:00
David Lord
8eff9bda3d
clean up security header docs
[ci skip]
2017-05-27 10:09:23 -07:00
David Lord
11f463f1bd
flaskr correct app name 2017-05-27 08:44:07 -07:00
Kenneth Reitz
a4869eb4d2 Merge pull request #2338 from pallets/cleanup-2326
cleanup #2326
2017-05-26 06:17:40 -07:00
Kenneth Reitz
7c0b36f146 cleanup #2326 2017-05-26 09:16:45 -04:00
Kenneth Reitz
e26cc8f904 i think this is how this works now 2017-05-25 18:01:52 -04:00
Kenneth Reitz
a63a4cb034 Merge pull request #2228 from wgwz/improve-flaskr
Add blueprint and the app factory pattern into the flaskr example
2017-05-25 15:00:03 -07:00
Kenneth Reitz
cf926b8e73 Update CHANGES 2017-05-25 17:57:55 -04:00
Kenneth Reitz
090109b637 Merge pull request #2326 from HndrkMkt/#2264-handle-app-factory-in-FLASK_APP
Handle app factory with arguments in FLASK_APP
2017-05-25 14:57:17 -07:00
Kenneth Reitz
63ddf2d479 Merge pull request #1887 from zevaverbach/patch-1
enumerates the states in which code is executed...
2017-05-25 14:47:20 -07:00
Kenneth Reitz
c72e7c7c70 Merge pull request #1621 from Ostrovski/0.10-maintenance
Allow to specify subdomain and/or url_scheme in app.test_request_cont…
2017-05-25 14:45:34 -07:00
Kenneth Reitz
3acec5f801 Merge pull request #2309 from aqt01/master
Add http headers security notes
2017-05-25 14:44:23 -07:00
Lowell Abbott
fcfd031460 Add capitalize and other details 2017-05-25 14:42:42 -07:00
Kenneth Reitz
e6740ec2f3 Merge branch 'master' into improve-flaskr 2017-05-25 14:40:52 -07:00
Kenneth Reitz
386ac92bdd use alabaster 2017-05-25 17:38:26 -04:00
Kenneth Reitz
4eca29f68b Merge pull request #2080 from pallets/sphinx_theme
switch to packaged sphinx theme
2017-05-25 14:36:06 -07:00
Kenneth Reitz
d911c897ee Merge branch 'master' into master 2017-05-25 14:22:53 -07:00
Kenneth Reitz
31174fecd2 resolve merge conflicts 2017-05-25 17:21:32 -04:00
Kenneth Reitz
90854c756a resolve merge conflicts 2017-05-25 17:15:53 -04:00
Hendrik Makait
48c2925664 Factor in code review comments and refactor functions to be more naturally split. 2017-05-25 11:28:20 -07:00
David Lord
cb94f4c5d3 Merge pull request #2322 from nnja/dont_overwrite_vary_header
Don't overwrite Vary header when setting for cookie access
2017-05-25 10:46:45 -07:00
David Lord
bdf31cd423
extract patch_vary_header to helpers 2017-05-25 10:26:02 -07:00
Hendrik Makait
7a1a594b26 Factor out call_factory_from_regex function 2017-05-25 10:11:42 -07:00
Hendrik Makait
7106fb6357 Handle app factory with arguments in FLASK_APP 2017-05-25 10:11:42 -07:00
David Lord
a4ae7f4d3c Merge pull request #2334 from zebpalmer/master
Docs sidebar missing space
2017-05-25 10:06:53 -07:00
Zeb Palmer
749ef01831 Missing Space
Smallest PR ever, but that missing space has been annoying me for a very long time.
2017-05-25 10:53:43 -06:00
David Lord
c5be20b53c Merge pull request #2332 from doobeh/pycharm-config
PyCharm Run Configuration Guide
2017-05-25 09:52:46 -07:00
David Lord
9f61ed99da Merge pull request #2333 from D4D3VD4V3/patch-1
Fixed typo in docs
2017-05-25 08:24:51 -07:00
Dave
7e14f6706a Fix typo 2017-05-25 10:04:10 +05:30
Nina Zakharenko
e7cd68ba58 Don't overwrite Vary header when setting for cookie access #2317 2017-05-24 20:05:11 -07:00
Anthony Plunkett
f52f3ef31d PyCharm Run Configuration Guide 2017-05-24 18:50:25 -07:00
Christian Stade-Schuldt
4ec1fbc9f5 More DRYing up the test suite (#2325) 2017-05-24 17:27:36 -07:00
Dave Morse
50c6df7098 Minor edits to tutorial for clarity. (#2330) 2017-05-24 17:00:20 -07:00
David Lord
471c7f3220 Merge pull request #2331 from davidism/less-travis
Reduce test envs, add coverage reports, other test fixups
2017-05-24 15:57:56 -07:00
David Lord
65b22926f7
reduce number of tox and travis envs
bump minimum werkzeug version to fix tests
cache pip pacakges on travis
collect branch coverage
collect coverage of test code
report coverage across envs
test building docs
enable codecov integration
2017-05-24 15:41:35 -07:00
David Lord
c62b614d9c Merge pull request #2324 from rzelayafavila/2313-refactor-gevent-tests-into-class
Fix for Issue 2313 - refactoring gevent tests into class
2017-05-23 17:31:44 -07:00
David Lord
849fc4b90c Merge pull request #2323 from dawran6/test-fixture
Cleanup test_blueprint.py to use test fixtures
2017-05-23 17:14:57 -07:00
David Lord
89aaac7fe0 Merge pull request #2321 from dawran6/test-bp-url
Add test for Blueprint app-wide url processing
2017-05-23 17:14:23 -07:00
Rene A. Zelaya
d29dbe14cf Correcting name of GreenletContextCopying test class (to start with 'Test'), making it extend object, and also having the test methods in it include 'self' as first argument. 2017-05-23 16:51:50 -07:00
Rene A. Zelaya
f40617029a Merge remote-tracking branch 'pallets/master' into 2313-refactor-gevent-tests-into-class 2017-05-23 16:45:47 -07:00
Rene A. Zelaya
2eb28165a9 Bundling 'test_greenlet_context_copying' functions into a new class in tests/test_reqctx.py. 2017-05-23 16:45:11 -07:00
Randy Liou
c03a82713a Cleanup test_blueprint.py to use test fixtures
Modify several tests to use the app and client test fixtures.
2017-05-23 16:42:14 -07:00
Randy Liou
3fce4898f8 Add test for Blueprint app-wide url processing
The test add coverage for methods: Blueprint.app_url_defaults, and
Blueprint.app_url_preprocessing. This PR increases the coverage of
blueprint module by 2%.
2017-05-23 16:26:53 -07:00
David Lord
39f7aaa416 Merge pull request #2319 from HndrkMkt/#2266-support-create-app-without-script-info
Support `create_app` without script_info or with script_info as named argument
2017-05-23 16:24:29 -07:00
David Lord
964c5c5aca
add changelog
[ci skip]
2017-05-23 16:24:07 -07:00
David Lord
701faf0724 Merge pull request #2320 from markshannon/fix-click-dependency-info
Update click dependency info.
2017-05-23 16:20:59 -07:00
David Lord
38df3df735
shorten cli factory name
[ci skip]
2017-05-23 16:19:41 -07:00
David Lord
a11212377d
add lowest click version to tox
add devel click version to tox
add devel markupsafe version to tox
2017-05-23 16:08:46 -07:00
David Lord
898c8621b1 Merge pull request #2315 from leviroth/powershell-docs
Added documentation for PowerShell environment variables
2017-05-23 15:33:59 -07:00
Mark Shannon
d05862574f Update click dependency info. 2017-05-23 15:29:37 -07:00
Christian Stade-Schuldt
5b0b9717da DRYing up the test suite using pytest fixtures (#2306)
* add fixtures to conftest.py

* use fixtures in test_appctx.py

* use fixtures in test_blueprints.py

* use fixtures in test_depreciations.py

* use fixtures in test_regressions.py

* use fixtures in test_reqctx.py

* use fixtures in test_templating.py

* use fixtures in test_user_error_handler.py

* use fixtures in test_views.py

* use fixtures in test_basics.py

* use fixtures in test_helpers.py

* use fixtures in test_testing.py

* update conftest.py

* make docstrings  PEP-257 compliant

* cleanup

* switch dictonary format

* use pytest parameterization for test_json_as_unicode
2017-05-23 15:18:39 -07:00
Hendrik Makait
ae41df9a77 Check if app factory takes script_info argument and call it with(out) script_info as an argument depending on that 2017-05-23 13:48:42 -07:00
David Lord
81c2440a05 Merge pull request #2318 from bovarysme/fix-testing-docs
Fix a small oversight in the testing docs
2017-05-23 13:31:56 -07:00
bovarysme
fe27d04cc1 Fix a small oversight in the testing docs 2017-05-23 22:22:16 +02:00
David Lord
ce813ae521 Merge pull request #2316 from ka7eh/automatic-options-in-views
Adds provide_automatic_options to Class-based Views
2017-05-23 12:46:31 -07:00
Lowell Abbott
09a0d2ebd1 Re-order by semantic. Fix link on flask-talismand and re-word many concepts 2017-05-23 12:26:43 -07:00
David Lord
a037762781 Merge pull request #2311 from bovarysme/use-yield-syntax
Use the yield syntax in pytest's fixtures
2017-05-23 12:00:34 -07:00
David Lord
e206764955 Merge pull request #2314 from cerickson/errorhandler
Added support for generic HTTPException handlers on app and blueprints
2017-05-23 11:51:17 -07:00
kaveh
75f537fb87 Adds provide_automatic_options to Class-based Views 2017-05-23 11:51:13 -07:00
David Lord
cd593bf117 Merge pull request #2307 from neilvictorgrey/master
For Issue #2286: Update unittest references
2017-05-23 11:50:31 -07:00
David Lord
8858135043 Update testing.rst 2017-05-23 11:50:14 -07:00
Levi Roth
954d9ca0b8 Added documentation for PowerShell environment variables 2017-05-23 14:30:39 -04:00
David Lord
54a18a5e94 Merge pull request #2305 from sorech02/updating_contributing_rst
Updating contributing rst
2017-05-23 11:19:57 -07:00
David Lord
532ca2e089
reorganize git instructions 2017-05-23 11:18:48 -07:00
cerickson
361dba7e3a removed dupe text from merge 2017-05-23 10:49:01 -07:00
cerickson
48f7b9394c Merge branch 'errorhandler' of https://github.com/cerickson/flask into errorhandler 2017-05-23 10:46:56 -07:00
cerickson
4f815015b8 Added support for generic HTTPException handlers on app and blueprints
Error handlers are now returned in order of blueprint:code, app:code,
blueprint:HTTPException, app:HTTPException, None

Corresponding tests also added.

Ref issue #941, pr #1383, #2082, #2144
2017-05-23 10:45:42 -07:00
cerickson
637eae5489 Added support for generic HTTPException handlers on app and blueprints
Error handlers are now returned in order of blueprint:code, app:code,
blueprint:HTTPException, app:HTTPException, None

Corresponding tests also added.

Ref issue #941, pr #1383, #2082, #2144
2017-05-23 10:37:36 -07:00
Florian Sachs
668061a5fc Register errorhandlers for Exceptions
Allow a default errorhandler by registering
an errorhandler for HTTPException

tests included
2017-05-23 10:34:31 -07:00
bovarysme
5963cb5a51 Use the yield syntax in pytest's fixtures 2017-05-23 18:21:29 +02:00
Christopher Sorenson
2339f1f24e
making some updates to the CONTRIBUTING.rst 2017-05-23 08:56:27 -07:00
David Lord
c8e56d5807 Merge pull request #2303 from MikeTheReader/master
Added tests for make_response and get_debug_flag to improve coverage of helpers.py
2017-05-23 08:34:22 -07:00
MikeTheReader
7c882a457b Replace double quotes with single quotes 2017-05-23 07:59:53 -07:00
MikeTheReader
cd412b20dc Parameterize test_get_debug_flag 2017-05-23 07:51:57 -07:00
Lowell Abbott
ee7cb9d6b2 Suggest only one package, change the sourcecode block to none 2017-05-23 01:54:06 -07:00
Lowell Abbott
c47f4530a1 Erased duplicated links on title 2017-05-22 23:54:28 -07:00
Lowell Abbott
98b0f96a98 Fix typos, semantics and some other corrections 2017-05-22 23:48:35 -07:00
Andrey Kislyuk
11d2eec3ac Fix refactoring error in static_folder docstring (#2310) 2017-05-22 23:46:22 -07:00
Lowell Abbott
8459cedaa9 Add security headers notes 2017-05-22 20:52:02 -07:00
MikeTheReader
fd4a363657 Modifications based on review 2017-05-22 20:49:37 -07:00
Neil Grey
378a11f992 For Issue #2286: Updating test_flaskr to use yield inside fixture 2017-05-22 18:22:08 -07:00
Tully Rankin
65b61aa7c2 Added uWSGI and example usage to stand-alone WSGI containers documentation (#2302) 2017-05-22 18:08:40 -07:00
David Lord
5b96e00972 Merge pull request #2301 from dawran6/test-bp-request-process
Add coverage for Blueprint request process methods
2017-05-22 18:06:31 -07:00
Neil Grey
4e9d51b39b For Issue #2286: Fixing indenting of test_login_logout 2017-05-22 17:42:30 -07:00
Neil Grey
65fc888172 For Issue #2286: Replaces references to unittest in the documentation with pytest 2017-05-22 17:36:55 -07:00
Randy Liou
d8d712a0de Add coverage for Blueprint teardown request method
Test the following methods in the Blueprint object: teardown_request,
and teardown_app_request.
This PR increases the coverage of blueprint module by 3%.
2017-05-22 16:58:04 -07:00
Randy Liou
a690ae27a3 Add coverage for Blueprint request process methods
Add test to cover following methodss to the Blueprint object:
before_request, after_request, before_app_request,
before_app_first_request, after_app_request.
This PR increases the coverage of flask.blueprints by 6%.
2017-05-22 16:58:04 -07:00
MikeTheReader
6f49089a62 Added tests for make_response and get_debug_flag to improve coverage of helpers.py 2017-05-22 16:15:48 -07:00
David Lord
0c94908956 Merge pull request #2297 from HndrkMkt/#2265-auto-detect-create-app-function
Auto-detect create_app() in find_best_app() #2265
2017-05-22 16:13:27 -07:00
David Lord
01ddf54b87
adjust for loop style 2017-05-22 16:12:23 -07:00
David Lord
7ecdbcfa2b
show error if multiple Flask instances are detected
add changelog
2017-05-22 15:48:08 -07:00
David Lord
a693f22a5a Merge pull request #2299 from dawran6/test-bp-template_global
Add coverage for Blueprint.add_app_template_global
2017-05-22 15:29:46 -07:00
David Lord
99208f1512 Merge pull request #2300 from tullyrankin/resort-wsgi-deploy-docs
Moved WSGI Standalone first in deployment documentation
2017-05-22 15:28:43 -07:00
Tully Rankin
2b96052240 Moved mod_wsgi under uwsgi in TOC deployment docs. 2017-05-22 15:13:31 -07:00
Tully Rankin
d7d21f5559 Moved WSGI-Standalone above mod_wsgi in deployment documentation. 2017-05-22 14:48:24 -07:00
Randy Liou
7ce01ab9b4 Add coverage for Blueprint.add_app_template_global
This tests the Blueprint.add_app_template_global mothod, which internally
calls the Blueprint.app_template_global method. The methods are used to
registering a function to the jinja template environment.
This PR increases the test coverage for module flask.blueprint by 4%.
2017-05-22 14:33:58 -07:00
Hendrik Makait
b4eb6534d5 Remove unnecessary checks and reformat NoAppException messages 2017-05-22 14:26:00 -07:00
Anton Sarukhanov
4cd0299aff Merge branch 'master' into makecov 2017-05-22 14:14:40 -07:00
David Lord
e706b5e544 Merge pull request #2298 from dawran6/test-bp-context
Add coverage for Blueprints.(app_)context_processor
2017-05-22 14:01:59 -07:00
Randy Liou
136dbf7de0 Add coverage for Blueprints.(app_)context_processor
Test both context_processor and app_context_processor functions.
Two context parameters are added into the context: one added to
the blueprint locally; another added to the app globally. The test
asserts the behaviors in both blueprint scope and the app scope.
The coverage for flask.blueprints is increased by 3%.
2017-05-22 13:09:22 -07:00
David Lord
a0e38a8cf1 Merge pull request #2295 from dawran6/test-blueprints
Add coverage for Blueprint.app_errorhandler
2017-05-22 12:30:52 -07:00
Hendrik Makait
ced719ea18 Auto-detect create_app and make_app factory functions 2017-05-22 12:30:18 -07:00
David Lord
88b0213357 Merge pull request #2296 from tullyrankin/debugger-documentation-1625
Added reference and link to Werkzeug debugger documentation
2017-05-22 12:28:06 -07:00
Tully Rankin
50b73f967b Removed the version number out of the documenation link to Werkzeug. 2017-05-22 12:19:52 -07:00
Tully Rankin
409dd15c10 Added link to using Werkzeug debugger in quickstart documentation. 2017-05-22 12:14:52 -07:00
Randy Liou
9fddecd4d9 Add coverage for Blueprint.app_errorhandler
This test case registers an application-wise error handler from
a Blueprint. Verifies the error handler by aborting the flask app
from the application itself as well as from another registered
Blueprint.
2017-05-22 12:00:04 -07:00
David Lord
f962720f7a Merge pull request #2293 from tullyrankin/debug-mode-2261
Debug mode 2261
2017-05-22 11:43:57 -07:00
Tully Rankin
041c68f48b Updated request context documentation. 2017-05-22 11:28:58 -07:00
Tully Rankin
c590e820aa Updated documentation. Replaced term development mode with debug mode. #2261 2017-05-22 11:25:02 -07:00
David Lord
b11f7354d1 Merge pull request #2288 from davidism/vary-cookies
Set "Vary: Cookie" header when session is accessed
2017-05-20 13:45:48 -07:00
David Lord
5d9dd0b379
set session accessed for setdefault 2017-05-20 13:00:17 -07:00
David Lord
ae133aa173
reorder session cookie checks to deleted, accessed, modified 2017-05-20 12:11:37 -07:00
David Lord
e2f4c0ac16
Merge branch 'master' into vary-cookies 2017-05-19 09:44:06 -07:00
Markus Unterwaditzer
a558d47ee2 Merge branch '0.12-maintenance' 2017-05-16 08:40:31 +02:00
Markus Unterwaditzer
f347d3c59e Bump to dev version 2017-05-16 08:40:08 +02:00
Markus Unterwaditzer
571334df8e Bump version number to 0.12.2 2017-05-16 08:39:30 +02:00
Markus Unterwaditzer
bb83ae9843 Release 0.12.2 2017-05-16 08:39:28 +02:00
Markus Unterwaditzer
dc9c5ef65a Merge branch '0.12-maintenance' 2017-05-16 08:34:53 +02:00
David Lord
f7c35bf0d5 safe_join on Windows uses posixpath
fixes #2033
closes #2059
2017-05-16 08:34:37 +02:00
David Lord
f0a6dcfbb8 Merge pull request #2284 from davidism/windows-safe_join
safe_join on Windows uses posixpath
2017-05-15 17:11:34 -07:00
David Lord
2a65794306
safe_join on Windows uses posixpath
fixes #2033
closes #2059
2017-05-15 16:58:01 -07:00
David Lord
88120e9e9d Merge pull request #2055 from geoffreybauduin/celery-documentation
Updated Celery pattern
2017-05-15 12:41:13 -07:00
David Lord
d5a88bf0d3
explain when to use a task queue
remove deprecated abstract attr from celery
add explanation of example task
[ci skip]
2017-05-15 12:40:09 -07:00
David Lord
f13e3fc352
Merge branch 'master' into celery-documentation 2017-05-15 12:17:09 -07:00
David Lord
ff361d32a9 Merge pull request #2282 from davidism/session-cookie-domain
Refactor session cookie domain
2017-05-13 22:13:53 -07:00
David Lord
f75ad9fca2
refactor session cookie domain logic
cache result of session cookie domain
add warnings for session cookie domain issues
add changelog
2017-05-13 21:59:00 -07:00
José Oliveira
c3d49e29ea
show warning if session cookie domain is ip
closes #2007
2017-05-13 21:47:43 -07:00
David Lord
716edfdb29 Merge pull request #2279 from davidism/docs-after_this_request
Clean up deferred callback doc
2017-05-11 22:50:29 -07:00
David Lord
cc59f2b204
clean up deferred callback doc
remove doc about writing after_this_request
[ci skip]
2017-05-11 22:48:21 -07:00
David Lord
0420cb21db Merge pull request #1965 from vioan/master
Added a missing module to import statement
2017-05-11 22:38:36 -07:00
David Lord
c01ddc59b7 Merge pull request #2277 from jlara310/master
Improve quickstart's Routing section
2017-05-11 22:32:00 -07:00
David Lord
2592f927a0
wrap lines
tighten up wording
remove any converter from quickstart
use correct rst code syntax
2017-05-11 22:31:19 -07:00
David Lord
9dd0a0a29f Merge pull request #2278 from davidism/installation-docs
Rewrite installation docs
2017-05-11 14:37:31 -07:00
David Lord
1fb43e3be4
rewrite installation docs
discuss python version
discuss all dependencies
prefer python 3 in instructions
[ci skip]
2017-05-11 14:34:09 -07:00
David Lord
a80eab70ba Update CONTRIBUTING.rst
basic pytest can't handle examples, pass tests dir
2017-05-11 12:35:03 -07:00
Xephyr826
dfb03c5673 Improve Routing section
Edited the entire section for clarity and concision. I rewrote sentences
to make them shorter and to reduce ambiguity.

Added a code sample to show the path converter type

Removed the HTTP method overview. Although it was well written, the
overview wasn't necessary in the quickstart. Readers can easily find an
overview elsewhere.
2017-05-10 22:38:22 -07:00
David Lord
5b83f11398 Merge pull request #2213 from runartrollet/doc_virtenv_p3
Issue #2212: documentation: virtualenv and python3
2017-05-09 11:04:23 -07:00
David Lord
9b734d1436 Merge pull request #2276 from pigletfly/master
Removed unused import
2017-05-09 10:19:51 -07:00
wangbing
160999e882 Removed unused import 2017-05-10 00:34:36 +08:00
David Lord
d2a0b2911b Merge pull request #2210 from Larivact/patch-2
Clarify APPLICATION_ROOT documentation
2017-05-09 08:47:23 -07:00
David Lord
17685da8c0 Merge pull request #1942 from jmsdvl/fix-1935
clarify blueprint 404 error handling in docs
2017-05-09 08:44:58 -07:00
David Lord
255375d72c Merge pull request #2271 from davidism/collapse-changelogs
Collapse old changelog directives
2017-05-04 18:42:33 -07:00
David Lord
75b85656dd
optionally enable sphinxcontrib.log_cabinet
collapses old changelog directives
closes #1704
closes #1867
2017-05-04 18:24:04 -07:00
David Lord
7bd54e9bd6 Merge pull request #2077 from liebald/patch-1
Mention existence of register_error_handler in errorpages.rst
2017-04-30 08:48:22 -07:00
David Lord
011a4b1899
clean up error handler docs 2017-04-30 08:20:13 -07:00
Benjamin Liebald
6032c94aeb
Mention existence of register_error_handler in errorpages.rst
See https://github.com/pallets/flask/issues/1837 for context.
2017-04-30 07:55:54 -07:00
David Lord
39d55525ac Merge pull request #2259 from davidism/routes-command
Add routes command
2017-04-26 10:43:18 -07:00
David Lord
7ad79583b9
add sort by match order
sort by endpoint by default
combine sort flags
sort methods
ignore HEAD and OPTIONS methods by default
rearrange columns
use format to build row format string
rework tests
add changelog
2017-04-26 10:26:59 -07:00
David Lord
717e45ab15
Merge branch 'master' into routes-command 2017-04-25 13:13:10 -07:00
David Lord
71b7c4f5f8 Merge pull request #2258 from davidism/preprocess_request-docs
Clean up preprocess_request docs
2017-04-25 12:06:39 -07:00
David Lord
501f043125
clean up preprocess_request docs
[ci skip]
2017-04-25 12:03:08 -07:00
David Lord
bc7dae3d5a
Merge branch 'master' into AvivC-improve-docs-in-Flask.preprocess_request 2017-04-25 09:43:18 -07:00
David Lord
970a8009f1 Merge pull request #2256 from davidism/refactor-make_response
refactor make_response to be easier to follow
2017-04-25 08:46:22 -07:00
David Lord
697f7b9365
refactor make_response to be easier to follow
* be explicit about how tuples are unpacked
* allow bytes for status value
* allow Headers for headers value
* use TypeError instead of ValueError
* errors are more descriptive
* document that view must not return None
* update documentation about return values
* test more response types
* test error messages

closes #1676
2017-04-25 08:30:48 -07:00
David Lord
46f83665ef
clean up blueprint json support
add changelog for #1898
2017-04-24 10:16:50 -07:00
David Lord
74b3f7e04c Merge pull request #1898 from RaHus/per_blueprint_jsoncoding_#1710
Per blueprint jsoncoding #1710
2017-04-24 10:16:20 -07:00
David Lord
8d515a644f Merge pull request #2254 from davidism/pop-context-on-session-error
Ensure error while opening session pops context
2017-04-22 14:43:21 -07:00
David Lord
13754b6d11
ensure error while opening session pops context
errors will be handled by the app error handlers
closes #1538, closes #1528
2017-04-22 13:57:04 -07:00
David Lord
f22da31e7f Merge pull request #2191 from SergioDS/master
Updated documentation for being able to use init_db method
2017-04-21 11:45:16 -07:00
David Lord
9b892e2225 Merge pull request #2252 from davidism/method-view-inheritance
Continue #1936: Add the ability to combine MethodViews
2017-04-21 11:16:18 -07:00
David Lord
648344d4e8
use mro to collect methods
ignore methods attr unless explicitly set
add changelog
2017-04-21 10:43:02 -07:00
David Lord
0d9d3d8f92
Merge branch 'master' into figome-multiple-inheritance 2017-04-21 10:33:29 -07:00
David Lord
9569e8c956 Merge pull request #2249 from davidism/provide-automatic-options
Continue #1489: Add kwarg to disable auto OPTIONS on add_url_rule
2017-04-21 08:31:11 -07:00
David Lord
97e2cd0a5a
update changelog
move test next to existing test, rename
reword / reflow param doc
2017-04-21 07:26:30 -07:00
David Lord
8ad4f476aa
Merge branch 'master' into jrmccarthy-master 2017-04-21 07:03:46 -07:00
David Lord
f4a1ca8fc8 Merge pull request #2017 from rocambolesque/patch-1
Add scheme to url_build error handler parameters
2017-04-20 09:10:27 -07:00
David Lord
e50767cfca
add test for build error special values 2017-04-20 08:52:37 -07:00
rocambolesque
19fbe3a18f
Add scheme to url_build error handler parameters 2017-04-20 08:30:07 -07:00
Sobolev Nikita
7481844c98 Fix typo in app.py (#2248) 2017-04-19 07:46:33 +02:00
David Lord
f0c714a01b Merge pull request #1886 from dawran6/test_bp_endpoint_dec
Enhance code coverage for Blueprint.endpoint
2017-04-14 09:22:12 -07:00
David Lord
4ff84d537a
get mtime in utc 2017-04-14 05:30:03 -07:00
David Lord
cfd3e50ab6
use app.testing property instead of config 2017-04-14 05:26:29 -07:00
David Lord
5b9b180191 Merge pull request #2117 from accraze/testing-docs-fix
Added missing testing config
2017-04-13 16:45:24 -07:00
David Lord
03857cc48a
use app.testing property instead of config 2017-04-13 16:32:44 -07:00
accraze
1caa9de628
Added missing testing config
fixes #1302
2017-04-13 16:27:58 -07:00
David Lord
7005c2d534 Merge pull request #2242 from davidism/utcfromtimestamp
get mtime in utc
2017-04-13 15:14:26 -07:00
David Lord
bf6910a639
get mtime in utc 2017-04-13 14:55:56 -07:00
David Lord
78cb96fde0 Merge pull request #2238 from davidism/bugfix/latin1-filename
filename can be latin-1, not just ascii
2017-04-12 10:12:30 -07:00
David Lord
09b49104f3
filename can be latin-1, not just ascii
only normalize basic name when utf-8 header is needed
ref #2223
2017-04-12 09:59:25 -07:00
ka7
e13eaeeaf2 Fix typo in docs (#2237) 2017-04-11 21:44:32 +02:00
David Lord
aafb80c527
add changelog for #2223 2017-04-08 11:08:08 -07:00
David Lord
8b45009dbc Merge pull request #2223 from antlarr/master
Fix send_file's attachment_filename to work with non-ascii filenames
2017-04-08 10:54:20 -07:00
David Lord
f790ab7177
need to test against raw header
parsing prefers the last value parsed for the option
2017-04-08 10:33:06 -07:00
David Lord
c1973016ea
style cleanup
break out header parts in test
test for no filename* parameter for ascii header
2017-04-07 18:02:31 -07:00
Antonio Larrosa
d50a5db5ed Keep using only filename if it's valid ascii 2017-04-07 20:34:52 +02:00
jab
00d6e339ec Change Flask.__init__ to accept two new keyword arguments, host_matching and static_host. (#1560)
This enables host_matching to be set properly by the time the constructor adds
the static route, and enables the static route to be properly associated with
the required host.

Previously, you could only enable host_matching once your app was already
instantiated (e.g. app.url_map.host_matching = True), but at that point
the constructor would have already added the static route without host matching
and an associated host, leaving the static route in a broken state.

Fixes #1559.
2017-04-07 16:31:54 +02:00
Grey Li
ec18fe9477 Add example for virtualenv integration in cli docs (#2234) 2017-04-07 07:10:43 -07:00
David Lord
d04d36842b Merge pull request #2231 from asilversempirical/patch-1
Update out of date jsonify documentation
2017-04-06 08:31:25 -07:00
asilversempirical
d76d68cd38 Update out of date jsonify documentation
https://github.com/pallets/flask/pull/2193 changed the conditions for when jsonify pretty prints, but this comment wasn't updated.
2017-04-06 11:26:01 -04:00
Adam Geitgey
ae1ac2053b Correct imports in file upload example (#2230)
The example code uses `flash` but doesn't import it. So the code as written doesn't work.

This simply adds `flash` to the list of imports in the sample code.
2017-04-04 22:26:40 +02:00
Kyle Lawlor
54b6fc8de6 Add in a fixture utilizing app factory 2017-04-02 12:29:37 -04:00
Kyle Lawlor
8cf32bca51 Adds in blueprints and an application factory 2017-04-01 20:37:19 -04:00
Markus Unterwaditzer
de555c82ce Merge branch '0.12-maintenance' 2017-03-31 18:44:33 +02:00
Markus Unterwaditzer
c935eaceaf Revert "Handle BaseExceptions (#2222)"
This reverts commit 1d4448abe3.
2017-03-31 18:44:14 +02:00
Markus Unterwaditzer
07a705888c Bump to dev version 2017-03-31 18:43:52 +02:00
Markus Unterwaditzer
a34d0e6878 Bump version number to 0.12.1 2017-03-31 18:43:36 +02:00
Markus Unterwaditzer
f7d6d4d4f6 Prepare for 0.12.1 2017-03-31 18:43:34 +02:00
Markus Unterwaditzer
80c7db638c Correct changelog 2017-03-31 18:41:10 +02:00
Markus Unterwaditzer
c28a168f35 Merge branch 'Diggsey-db-handle-baseexceptions' into 0.12-maintenance 2017-03-31 18:40:55 +02:00
Diggory Blake
6f7847e3c4 Make test more idiomatic 2017-03-31 18:40:46 +02:00
Diggory Blake
d0e2e7b66c Add test and changes 2017-03-31 18:40:46 +02:00
Diggory Blake
12c49c75fb Handle BaseExceptions 2017-03-31 18:40:46 +02:00
Diggory Blake
1d4448abe3 Handle BaseExceptions (#2222)
* Handle BaseExceptions

* Add test and changes

* Make test more idiomatic
2017-03-31 18:07:43 +02:00
Antonio Larrosa
bf023e7dc0 Remove unidecode dependency and use unicodedata instead
I found a way to remove the unidecode dependency without sacrificing
much by using unicodedata.normalize .
2017-03-30 17:32:21 +02:00
Antonio Larrosa
6ef45f30ab Fix previous commits to work with python 2 and python 3
Also, parse_options_header seems to interpret filename* so we better
test the actual value used in the headers (and since it's valid
in any order, use a set to compare)
2017-03-24 20:05:01 +01:00
David Lord
19d7e6532f Merge pull request #2217 from edbrannin/patch-1
shorten output when ImportError due to app bug.
2017-03-24 08:59:00 -07:00
Antonio Larrosa
0049922f2e Fix send_file to work with non-ascii filenames
This commit implements https://tools.ietf.org/html/rfc2231#section-4 in
order to support sending unicode characters. Tested on both Firefox and
Chromium under Linux.

This adds unidecode as a dependency, which might be relaxed by using
.encode('latin-1', 'ignore') but wouldn't be as useful.

Also, added a test for the correct headers to be added.

Previously, using a filename parameter to send_file with unicode characters, it
failed with the next error since HTTP headers don't allow non latin-1 characters.
Error on request:
Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/werkzeug/serving.py", line 193, in run_wsgi
    execute(self.server.app)
  File "/usr/lib/python3.6/site-packages/werkzeug/serving.py", line 186, in execute
    write(b'')
  File "/usr/lib/python3.6/site-packages/werkzeug/serving.py", line 152, in write
    self.send_header(key, value)
  File "/usr/lib64/python3.6/http/server.py", line 509, in send_header
    ("%s: %s\r\n" % (keyword, value)).encode('latin-1', 'strict'))
UnicodeEncodeError: 'latin-1' codec can't encode character '\uff0f' in position 58: ordinal not in range(256)

Fixes #1286
2017-03-23 17:30:48 +01:00
Ed Brannin
6e5250ab5d Fix CLI test for ImportError -> NoAppException 2017-03-21 16:17:09 -04:00
Ed Brannin
7a7a163ff1 shorten output when ImportError due to app bug.
Before:
```
C:\dev\tmp>py -2 -m flask run
Traceback (most recent call last):
  File "C:\Python27\lib\runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "C:\Python27\lib\runpy.py", line 72, in _run_code
    exec code in run_globals
  File "c:\dev\sourcetree\flask\flask\__main__.py", line 15, in <module>
    main(as_module=True)
  File "c:\dev\sourcetree\flask\flask\cli.py", line 523, in main
    cli.main(args=args, prog_name=name)
  File "c:\dev\sourcetree\flask\flask\cli.py", line 383, in main
    return AppGroup.main(self, *args, **kwargs)
  File "C:\Python27\lib\site-packages\click\core.py", line 697, in main
    rv = self.invoke(ctx)
  File "C:\Python27\lib\site-packages\click\core.py", line 1066, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "C:\Python27\lib\site-packages\click\core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "C:\Python27\lib\site-packages\click\core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "C:\Python27\lib\site-packages\click\decorators.py", line 64, in new_func
    return ctx.invoke(f, obj, *args[1:], **kwargs)
  File "C:\Python27\lib\site-packages\click\core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "c:\dev\sourcetree\flask\flask\cli.py", line 433, in run_command
    app = DispatchingApp(info.load_app, use_eager_loading=eager_loading)
  File "c:\dev\sourcetree\flask\flask\cli.py", line 153, in __init__
    self._load_unlocked()
  File "c:\dev\sourcetree\flask\flask\cli.py", line 177, in _load_unlocked
    self._app = rv = self.loader()
  File "c:\dev\sourcetree\flask\flask\cli.py", line 238, in load_app
    rv = locate_app(self.app_import_path)
  File "c:\dev\sourcetree\flask\flask\cli.py", line 91, in locate_app
    __import__(module)
  File "C:\dev\tmp\error.py", line 1, in <module>
    import whatisthisidonteven
ImportError: No module named whatisthisidonteven
```

After:
```
C:\dev\tmp>py -2 -m flask run
Usage: python -m flask run [OPTIONS]

Error: There was an error trying to import the app (error):
Traceback (most recent call last):
  File "c:\dev\sourcetree\flask\flask\cli.py", line 91, in locate_app
    __import__(module)
  File "C:\dev\tmp\error.py", line 1, in <module>
    import whatisthisidonteven
ImportError: No module named whatisthisidonteven```
2017-03-21 15:22:15 -04:00
Runar Trollet Kristoffersen
889c0ed196 Issue #2212: documentation: virtualenv and python3 2017-03-19 18:01:23 +01:00
Larivact
2995366dde Clarify APPLICATION_ROOT #1714 2017-03-17 05:41:20 +01:00
David Lord
6efea346dd Merge pull request #2209 from svenstaro/print-stacktrace-on-cli-error
Print a stacktrace on CLI error (closes #2208)
2017-03-16 13:43:01 -07:00
Sven-Hendrik Haase
ed17bc1710 Add test to showcase that printing a traceback works 2017-03-16 20:56:12 +01:00
Sven-Hendrik Haase
ad42d88fb2 Remove useless pass 2017-03-16 14:42:16 +01:00
Sven-Hendrik Haase
5b7fd9ad88 Print a stacktrace on CLI error (closes #2208) 2017-03-16 14:37:58 +01:00
Jan Ferko
1add1f8a02 Use print function in quickstart (#2204)
Example in URL Building section uses `print` statement
instead of `print` function, which causes syntax error
when example is run on Python 3.
2017-03-13 13:58:24 +01:00
John Bodley
46e8427d81 Document run() host defaulting to SERVER_NAME 2017-03-11 18:59:34 +01:00
Ben
7a5e8ef38e Fix broken link (#2202) 2017-03-08 20:26:38 +01:00
Hsiaoming Yang
a7f1a21c12 Don't rely on X-Requested-With for pretty print json response (#2193)
* Don't rely on X-Requested-With for pretty print json response

* Fix test cases for pretty print json patch

* Fix gramma error in docs for pretty print json config

* Add changelog for JSONIFY_PRETTYPRINT_REGULAR
2017-03-07 10:09:46 +09:00
Static
f5adb61b28 Fix typos/grammar in docs (#2201) 2017-03-06 14:05:59 +01:00
Elton Law
06112a555a Close <li> tag in tutorial (#2199)
Change was merged in the example code but wasn't changed in the docs. c54d67adee
2017-03-05 13:07:49 +01:00
Adrian
d9a28434af Fix typo 2017-03-04 22:32:23 +01:00
Grey Li
c43560777a Add tips for debug config with flask cli (#2196)
* Add tips for debug config with flask cli

`app.debug` and `app.config['DEBUG']` are not compatible with the `flask` script.

* Grammar fix

* Grammar fix
2017-03-04 11:29:04 +01:00
Sebastian Kalinowski
fca5577a00 Remove extra HTML tag from fileupload docs (#2141) 2017-02-28 14:05:09 +09:00
Sergio Díaz Sánchez
af11098057 Updated documentation for being able to use init_db method 2017-02-28 00:13:45 +01:00
Josh Rowe
8a8a608152 Move object_hook outside loads method so class can be extend and reused 2017-02-23 15:25:52 +00:00
Timothy John Perisho Eccleston
dc5f48f587 Fix typo in docs/tutorial/templates.rst (#2186) 2017-02-18 07:41:58 +01:00
Nick Ficano
eaba4a73aa Fix typo in file header (jsonimpl => json) 2017-02-15 17:55:56 +01:00
Jeff Widman
bb0e755c80 Migrate various docs links to https (#2180)
Also fixed a few outdated links
2017-02-11 10:43:11 +01:00
Jeff Widman
5efb163237 bdist_wheel replaces wheel (#2179)
https://packaging.python.org/distributing/#universal-wheels
2017-02-10 12:19:59 +01:00
Markus Unterwaditzer
89798ea7dd Remove examples dir again 2017-02-09 18:35:21 +01:00
vojtekb
95db82f8f7 py.test => pytest (#2173)
py.test => pytest
2017-02-09 18:34:16 +01:00
Markus Unterwaditzer
9e2807da76 Merge pull request #2175 from swanhtet1992/patch-1
Update 4.4.3 HTTP Methods Example
2017-02-09 15:29:58 +01:00
Swan Htet Aung
f84fdadda9 Update 4.4.3 HTTP Methods Example
Otherwise it produces `ValueError: View function did not return a response`.
2017-02-09 18:01:12 +06:30
Armin Ronacher
c9b33d0e86 Convert Flask.run into a noop when run from the CLI 2017-01-29 12:26:52 +01:00
David Lord
42fbbb4cbb
add test and changelog for SERVER_NAME app.run default
ref #2152
2017-01-17 14:08:33 -08:00
Raphael Deem
1636a4c410 use SERVER_NAME to set host and port in app.run() (#2152) 2017-01-17 13:22:16 -08:00
Jeff Widman
fe7910ccd5 Update docs that request is an object, not a class (#2154)
Cleanup sphinx formatting to show that `request` is an object, not a class. The actual class name is `Request`.

Based on discussion [here](https://github.com/pallets/flask/pull/2151#issuecomment-272699147).
2017-01-17 20:20:07 +01:00
Kim Blomqvist
3fc8be5a4e Disable debug when FLASK_DEBUG=False (#2155)
Convert FLASK_DEBUG envvar to lower before test if in tuple
2017-01-17 07:15:51 -08:00
Markus Unterwaditzer
47e8410117 Merge pull request #2131 from wgwz/add-larger-app-ex
Add larger app ex
2017-01-15 05:56:12 +01:00
Dennis Chen
9900a72fe7 Fix Request Reference (#2151)
Points flask.Request to appropriate place in the documentation.
2017-01-14 21:58:45 +01:00
David Lord
6c9ff85c3f Merge pull request #2149 from onovy/master
Use SOURCE_DATE_EPOCH for copyright year to make build reproducible
2017-01-13 05:30:22 -08:00
Ondřej Nový
9dcfd05d29 Use SOURCE_DATE_EPOCH for copyright year to make build reproducible
Details: https://wiki.debian.org/ReproducibleBuilds/TimestampsProposal
2017-01-13 10:54:55 +01:00
David Lord
22c613b8c4 Merge pull request #2148 from drewja/master
Added python3.6 support for tests
2017-01-10 10:07:26 -08:00
Andrew Arendt
01b992b1a1 Added python3.6 support for tests 2017-01-10 11:20:53 -06:00
Adrian Moennich
88111ae6bf Do not suggest deprecated flask.ext.* 2017-01-10 13:12:18 +01:00
Bryce Guinta
09973a7387 Fix fastcgi lighttpd example documentation. (#2138)
Add a trailing slash to the dummy path in the fastcgi lighttpd setup
documentation. Omitting a trailing slash leads to unintended behavior.
2017-01-01 18:51:21 -08:00
wgwz
1b7258f816 Provides a link to the examples src
- moved the link towards the top for better visibility
2016-12-31 18:51:00 -05:00
wgwz
46c1383919 Remove unneccessary arg in client fixture 2016-12-31 12:37:39 -05:00
wgwz
92fa444259 Moves largerapp into patterns dir and add test
- also adds this pattern into tox for testing
2016-12-31 12:08:25 -05:00
Markus Unterwaditzer
49386ee69e Inherit Werkzeug docs (#2135)
Fix #2132
2016-12-31 16:31:44 +01:00
Markus Unterwaditzer
71c534d2c6 Merge branch '0.12-maintenance' 2016-12-30 22:46:26 +01:00
Markus Unterwaditzer
b0820bce59 Merge branch 'pawl-fix_import_error' into 0.12-maintenance
Fix #2133
2016-12-30 22:46:03 +01:00
Paul Brown
31e25facd3 update change log 2016-12-30 22:45:53 +01:00
Paul Brown
0832e77b14 prevent NoAppException when ImportError occurs within imported module 2016-12-30 22:45:53 +01:00
Markus Unterwaditzer
582a878ad9 Init 0.13 changelog 2016-12-30 22:29:08 +01:00
wgwz
949771adf5 Add reference to largerapp src in docs 2016-12-30 13:42:14 -05:00
wgwz
e49b73d2cf Adds the largerapp from the docs as an example 2016-12-30 13:42:05 -05:00
Gábor Lipták
079d752cec Update Flask-SQLAlchemy link (#2126) 2016-12-28 16:11:33 +01:00
Markus Unterwaditzer
f18fe15e6d Merge branch '0.12-maintenance' 2016-12-26 03:51:12 +01:00
Markus Unterwaditzer
789715adb9 Fix config.from_pyfile on Python 3 (#2123)
* Fix config.from_pyfile on Python 3

Fix #2118

* Support Python 2.6

* Fix tests on Python 2
2016-12-26 03:50:47 +01:00
Markus Unterwaditzer
22cf57154a Merge branch '0.12-maintenance' 2016-12-25 16:36:17 +01:00
Markus Unterwaditzer
8cd0b03bee Bump to dev 0.12.1 2016-12-25 16:35:30 +01:00
Markus Unterwaditzer
caf6b8c314 Changelog stub for 0.12.1 2016-12-25 16:35:06 +01:00
Markus Unterwaditzer
b2e0886f48 Bump to dev version 2016-12-21 21:22:26 +01:00
Markus Unterwaditzer
1042d9d23f Bump version number to 0.12 2016-12-21 21:22:08 +01:00
Markus Unterwaditzer
45c45ea73c Version 0.12 2016-12-21 21:19:53 +01:00
Jiri Kuncar
36425d5f91 Ignore cache on request.get_json(cache=False) call (#2089)
* Test cache argument of Request.get_json

* Ignore cache on request.get_json(cache=False) call

Removes usage of `_cached_json` property when `get_json` is called with
disabled cache argument. (closes #2087)
2016-12-21 21:08:38 +01:00
Raphael Deem
0e79aba40d use dict instead of if/else logic (#2093) 2016-12-21 21:07:57 +01:00
Hopsken
7f28837167 Update README for minitwit (#2119)
add step 2 to run minitwit
2016-12-21 21:07:09 +01:00
Sven-Hendrik Haase
0ba1a872b7 Style the flask command consistently (#2120)
It's done like this in other parts of this doc.
2016-12-21 21:06:48 +01:00
Sven-Hendrik Haase
ccb562854e Remove wrong comma (#2116) 2016-12-19 05:37:34 -08:00
Markus Unterwaditzer
7fca843b5f Merge pull request #2088 from ezramorris/patch-1
Add link to AWS EB Flask tutorial
2016-11-18 15:38:31 +01:00
ezramorris
4a8bf651d9 Add link to AWS EB Flask tutorial 2016-11-17 14:01:30 +00:00
Markus Unterwaditzer
7e1a13ffbd Fix import error 2016-11-15 11:58:44 +01:00
Jannis Leidel
4cf4229355 Fix rST rendering of env var (#2085)
This was broken in ad011bc32d (diff-fd40cf2be7711772de9d8316da038cceR263)
2016-11-15 11:57:09 +01:00
Giles Thomas
281c9c3ff9 Added a link to instructions for PythonAnywhere (#2081) 2016-11-07 10:10:02 -08:00
David Lord
08d6de73a8
switch to packaged sphinx theme 2016-11-03 23:01:10 -07:00
Alex Kahan
2647fc7112 Parameterizing test (#2073) 2016-11-03 10:11:24 -07:00
Markus Unterwaditzer
a4ed3d2806 Use tox from make test 2016-11-02 17:56:59 +01:00
Tery Lim
ec9717502f Update errorhandling.rst (#2075)
Fix LogRecord class reference.
2016-11-01 21:04:20 -07:00
Tery Lim
bbe58a4944 Update errorhandling.rst (#2074) 2016-11-01 19:58:22 -07:00
Shandy Brown
9685d14eaa Correct grammar (#2061) 2016-11-01 18:52:54 -07:00
Clenimar Filemon
77af942b98 Capitalize occurrences of 'flask' (#2067) 2016-11-01 18:52:32 -07:00
Philippe Ombredanne
11809bf1d2 Add license_file to setup.cfg metadata (#2024)
Without this, the LICENSE file is never included in the built wheels: this makes it harder for users to comply with the license.
With this addition a file LICENSE.txt will be created in the `xxx.dist-info` directory with the content of the `license_file` file, e.g. the top level LICENSE.
2016-11-01 13:11:53 -07:00
Martijn Pieters
de1652467b Remove busy-work. (#2072)
It is entirely sufficient to walk the MRO of the exception class, no need to check for classes re-appearing later on, no need to add the MRO of any superclass.

* Python refuses point-blank to create a class with a circular MRO.
* All classes in a superclass MRO *already* appear in the MRO of the derived type. Re-adding the contents of a superclass MRO is doing double work.
2016-11-01 07:35:17 -07:00
Alex Kahan
6478d7bb99 Adding coverage generation to tox (#2071)
* Adding coverage generation to tox

* Removing test directory from coverage command

* Adding back  to pytest command
2016-10-31 23:10:27 +01:00
Clenimar Filemon
cb30a3b562 Update docstring for errorhandler() (#2070) 2016-10-31 17:41:38 +01:00
Markus Unterwaditzer
2b8fef4fe7 Merge branch '0.11-maintenance' 2016-10-30 14:35:15 +01:00
Kyle Lawlor
fa087c8929 Fixes import statement in flaskr (#2068)
- `from flaskr.flaskr import app` in flaskr/__init__.py
  causes an import error with Python 2
- The relative import now used works for py2 and py3
2016-10-30 14:34:49 +01:00
Ionuț Ciocîrlan
2cc76628d2 Fix grammar in docs 2016-10-24 13:20:54 +02:00
Cody
d25c801a3b add 'caution' section to docs, workaround for zero-padded file modes (#2057)
Fix #2029
2016-10-14 10:13:42 +02:00
David Lord
cdbd63d7de Windows venv is Scripts, capital S
closes #2056
2016-10-12 12:14:49 -07:00
Michael Recachinas
bd5e297aa9 Default environ (#2047)
* Add init to FlaskClient

This addresses #1467. The init in the subclass
can now take in `environ_base`, which will then get
passed to `make_test_environ_builder` and to
`EnvironBuilder` via keyword args.

This should provide the default environment capability
on `app.test_client()` init.

* Add kwarg `environ_base` to `make_test_environ_builder` call

This change now passes `environ_base` from either
`kwargs` in `FlaskClient.open` or `FlaskClient.environ_base`
if passed into the init.

* Fix assignment reference typo

* Add default `environ_base` to `FlaskClient.__init__`

* Set default kwargs for `environ_base` in `FlaskClient.open`

* Remove specific environ_base kwarg since its in kwargs

* Add docstring to FlaskClient detailing environ_base

* Document app.test_client default environ in CHANGES

* Re-word environ_base changes in FlaskClient docstring

* Add client.environ_base tests

* Mention preset default environ in `app.test_client`

* Add versionchanged directive to docstring in FlaskClient
2016-10-12 08:54:24 +02:00
Geoffrey Bauduin
2b03eca1b7 Updated Celery pattern
The given pattern caused Celery to lose the current Context
2016-10-11 15:27:48 +02:00
Hassam
cd13a5cf62 Fix #2051: Fix flaskr import in flaskr/__init__.py (#2052) 2016-10-08 20:34:56 +02:00
Michael Recachinas
49ecc88d99 Remove -a/--app from Quickstart documentation (#2046)
* Remove `-a/--app` from Quickstart documentation

As mentioned in #2009, simplifying the CLI saw the removal of the `-a/--app` flag. Therefore, the only way to specify the module to import is by setting `FLASK_APP`.

* Remove misleading `either` from CLI help

The CLI help details how to run the application, but still uses the phrasing "either through the `FLASK_APP`...". This likely is an artifact from when `-a/--app` was still present in the CLI.
2016-10-01 18:45:22 +02:00
Joël Charles
7186a5aaf5 make use of range requests if available in werkzeug (#2031)
* make use of range requests if available in werkzeug

* different logic for testing werkzeug functionality
2016-09-26 12:43:46 +02:00
小明
f3d661de66 Fix unbound error (#2039) 2016-09-25 18:25:54 +02:00
Douglas Thor
a6a36ec72a Updated mod_wsgi.rst to point to new mod_wsgi repo (#2038) 2016-09-24 13:07:19 +02:00
Markus Unterwaditzer
01081dbe6c Avoid always-false statement
See https://github.com/pallets/flask/pull/1849/files#r79371299
2016-09-19 23:30:24 +02:00
Benjamin Dopplinger
dbeed24067 Fix typo in MethodView doc (#2028) 2016-09-18 20:24:46 -07:00
Markus Unterwaditzer
dcfdfc6476 Use abort docs from Werkzeug
Fix #1960
2016-09-18 15:47:52 +02:00
Bruno Thalmann
09fec941f4 Removed unused import. (#2026) 2016-09-18 14:10:00 +02:00
Andrew Arendt
270355abdc Remove nonsense from cli docs 2016-09-14 20:03:21 +02:00
Armin Ronacher
0664a3f2dd Set merge strategy for CHANGES 2016-09-12 21:55:17 +03:00
Armin Ronacher
83fd5b26b8 Merge branch 'feature/logger-propagation' 2016-09-12 21:54:41 +03:00
Armin Ronacher
a40489e0ce Merge pull request #2019 from pallets/bugfix/sendfile-error
Do not cause errors for unknown files for sendfile
2016-09-12 21:52:42 +03:00
Markus Unterwaditzer
3bd12b38a8 Merge pull request #2022 from pablogamboa/patch-1
Fix typo in docs
2016-09-12 10:42:23 +02:00
Pablo Marti
2b47615998 Fix typo in docs
Also added one missing comma for readability
2016-09-12 08:41:09 +01:00
Armin Ronacher
11f3a3f6dd Updated upgrade docs 2016-09-11 21:28:30 +03:00
Markus Unterwaditzer
12008c2e63 Merge branch '0.11-maintenance' 2016-09-11 17:55:33 +02:00
Kyle Lawlor
59104db2f2 Address #1980 (#2021)
* Distinguish between directories and files

* Convert larger apps to make use of setup.py

- replaces runserver.py with setup.py
- example now runs with recommended structure

* Fixes a typo and formats the added paragraph
2016-09-11 17:53:35 +02:00
Armin Ronacher
1f0ca894a2 Killed now dead code 2016-09-11 16:57:43 +03:00
Armin Ronacher
9e41eca7f8 Merge pull request #2013 from pallets/bugfix/error-handler-error-handler
Corrected after response for error handlers
2016-09-10 03:36:29 +03:00
Armin Ronacher
a30951ec28 Do not error for unknown files if send_file sends an actual file 2016-09-10 03:33:53 +03:00
Andrew Arendt
c54c538c11 fixed deprecated syntax in setup.cfg (#2015) 2016-09-08 19:24:07 +02:00
Akbar Ibrahim
c687ffb192 Fixed error in errorhandler doc string. (#2014) 2016-09-08 17:34:51 +02:00
Markus Unterwaditzer
7132feb1a5 Merge branch '0.11-maintenance' 2016-09-08 15:21:05 +02:00
Kyle Lawlor
e6f9d2b414 Clean up tutorial docs for installable app pattern with flaskr (#2002)
* Clean up tutorial docs for installable app pattern

- reading sequentially through the tutorial works.
- fixes references to `export FLASK_APP=flaskr.flaskr`

* Fixes titles for each section of flaskr tutorial

* Revert grammar

* Emphasize the Packaging Guide

- adds more general packaging resource
- removes the emphasis put on setuptools

* rephrase and remove note admonitions

- expanded on few points
- removed note blocks, they are unneccessary

* Remove note about reinstalling to update cli

- I had mistakenly thought it was necessary to
  re-install the app to update the cli.
- the `--editable` flag detects the change and
  the cli updates without issue.
2016-09-08 15:19:48 +02:00
Armin Ronacher
9cd32cac32 Corrected after response for error handlers
Before this change after request functions were not correctly
invoked for error handlers.
2016-09-08 11:56:02 +03:00
Markus Unterwaditzer
dbcd64e2ee Changelog for #2006 2016-09-07 18:19:10 +02:00
Markus Unterwaditzer
c4ec6954e5 Don't passthrough_errors unless instructed. (#2006)
Fix #2005

Revert #1679 and #1996
2016-09-06 22:32:34 +02:00
Afonso Queirós
ccd02bfe8c Correcting Custom Test Client class docs (#2004) 2016-09-05 16:57:00 +02:00
Roman
92ce20eeac Fix error in send_file helper (#2003)
* Fix error in send_file (mimetype_filename is not defined)

* fix formatting error message in send_file
2016-09-04 16:28:05 -07:00
PHeanEX
96b6345c1a Fix small grammar error (Of/Or) (#2001) 2016-08-31 13:05:12 -07:00
Kyle Lawlor
b42e43e3b6 Better workflow for flaskr and other basic apps (#2000)
- adds `from flaskr import app` to top-level in flaskr module
- effect is that `export FLASK_APP=flaskr` works over the more verbose
  `export FLASK_APP=flaskr.flask`
- see the readme for how to run
- all tests are passing with `py.test` or `python setup.py test` (in
  venv)
2016-08-31 18:37:36 +02:00
Josh Soref
6e6c3a4636 Spelling (#1998)
* spelling: cacheability

* spelling: conceptually

* spelling: javascript

* spelling: reset

* spelling: raised

* comma: instead..., they...
2016-08-30 00:26:20 +02:00
dawran6
3d856e03fc sessions documentation (client side vs server side) #434 (#1888)
Mention the existence of Flask extentions that handle server-side
sessions.
Attempt to improve the reading flow.
2016-08-29 00:06:53 +02:00
Markus Unterwaditzer
78a71a48dc Merge pull request #1996 from untitaker/propagate-exceptions-werkzeug
Only passthrough_errors if PROPAGATE_EXCEPTIONS
2016-08-27 18:33:08 +02:00
Markus Unterwaditzer
098ea0c8ca Only passthrough_errors if PROPAGATE_EXCEPTIONS
See pallets/werkzeug#954
2016-08-27 14:38:13 +02:00
Markus Unterwaditzer
71e10be286 Properly remove f.name usage in send_file (#1988)
* Properly remove f.name usage in send_file

* Update changelogs

* Fix tests
2016-08-26 03:08:03 +02:00
Armin Ronacher
e00e2c22aa Disable logger propagation by default 2016-08-25 15:41:46 +02:00
Kyle Lawlor
5f009374fd Update minitwit & improve testing for examples (#1954)
* Update minitwit & improve testing for examples

* Related to #1945
* Re-works minitwit to be installed and run as:

    pip install --editable .
    export FLASK_APP=minitwit.minitwit
    export FLASK_DEBUG=1
    flask initdb
    flask run

* added flaskr and minitwit to norecursedirs
  * tests not properly run when using pytest standards
  * see: http://stackoverflow.com/questions/38313171/configuring-pytest-with-installable-examples-in-a-project
* Both flaskr and minitwit now follow pytest standards.
* Tests can for them as `py.test` or `python setup.py test`

* Update minitwit readme

* updates the instructions for running

* Fixes for updating the minitwit example

- This reverts the changes to the *docs/* (I will file separate PR).
- Running the app is now: `export FLASK_APP=minitwit` & `flask run`
  (After installing the app)

* Remove unnecessary comma from flaskr/setup.py
2016-08-22 20:52:54 +02:00
sanderl-mediamonks
3313b8b0a4 Use the correct Celery result backend setting 2016-08-22 11:49:52 +02:00
David Lord
f193f590bc clean up new json tests 2016-08-21 08:47:12 -07:00
Nathan Land
f16e477b2a Add tests for flask.json.dump() and test that jsonify correctly converts uuids. 2016-08-21 07:48:05 -07:00
Zev Averbach
863e5cca1b added indentation to changed structure 2016-08-20 17:13:07 -04:00
Anton Sarukhanov
9121e109bd Add test for get_version (CLI) (#1884) 2016-08-20 17:43:58 +02:00
SaturnR
55bd39c7f0 Update for python3 (#1973)
just updated print 'Initialized the database.' with print('Initialized the database.') to be python3 compliant
2016-08-20 17:43:10 +02:00
teichopsia-
5044f3d610 Update testing.rst (#1987)
Python 3.4.2
TypeError: Type str doesn't support the buffer API
2016-08-19 19:01:13 -07:00
Markus Unterwaditzer
136a833a8d Bugfix: EnvironBuilder doesn't take json 2016-08-19 21:29:12 +02:00
Markus Unterwaditzer
5c4fa7e91c Remove already defined method 2016-08-19 21:25:27 +02:00
Markus Unterwaditzer
62b0b6652a testing: Make json a keyword arg 2016-08-19 21:24:07 +02:00
Adam Byrtek
866118302e Remove _missing sentinel and update docs 2016-08-19 21:22:34 +02:00
Adam Byrtek
5ebdd5dd74 Documentation updates 2016-08-19 21:21:43 +02:00
Adam Byrtek
5575faad92 Update documentation to use the getter only once 2016-08-19 21:20:59 +02:00
Adam Byrtek
1df2788a8f Use app_ctx instead of request_ctx to access the app 2016-08-19 21:20:59 +02:00
Adam Byrtek
f0d3b71a94 Updates after code review 2016-08-19 21:19:33 +02:00
Adam Byrtek
f0f458e0c5 Alternative solution for lack of response caching 2016-08-19 21:19:17 +02:00
Adam Byrtek
539569e5f2 Update the testing documentation 2016-08-19 21:19:17 +02:00
Adam Byrtek
23de58682c Remove redundant cache flag 2016-08-19 21:19:17 +02:00
Adam Byrtek
c9ef500c5c Mixin for JSON decoding code shared between request/response 2016-08-19 21:19:17 +02:00
Adam Byrtek
ca547f0ec3 JSON response tests and first draft of code that passes 2016-08-19 21:14:12 +02:00
Adam Byrtek
b099999c6c Use proper exception type and update changelog 2016-08-19 21:14:12 +02:00
Adam Byrtek
6c5ef2bc5c Use content_type kwarg instead of manipulating headers 2016-08-19 21:13:33 +02:00
Adam Byrtek
c4139e0e5d JSON support for the Flask test client 2016-08-19 21:13:33 +02:00
Nate Prewitt
0f1cf50f97 adding in try around __import__ to catch invalid files/paths (#1950) 2016-08-12 15:12:00 +02:00
Auke Willem Oosterhoff
e6d7a43ccd Use path of socket consistently accross document. (#1976)
* #1975 Use location of socket consistently accross document.
2016-08-03 09:22:14 -07:00
Jeff Widman
9359e9f911 Remove unused Redbaron dependency (#1967) 2016-07-29 14:27:30 +02:00
ahmedakef
c54d67adee close <li> tag in lines (16,18) (#1951)
i noticed that <li> tag haven't closed in lines 15,18 
which is bad practice as if i put "some thing : <h1> some text </h1>" in the text-area  all the other articles become <h1> so big and color blue
2016-07-28 22:46:42 +02:00
Ioan Vancea
55f9af72e3 Added a missing module to import statement 2016-07-28 16:34:48 +02:00
Armin Ronacher
80b9453bdd Merge pull request #1956 from shakib609/master
Update allowed_file function in fileuploads.rst
2016-07-17 23:02:26 +05:00
Shakib Hossain
fe53da45c5 Update allowed_file function in fileuploads.rst
Update allowed_file function to accept lowercase and uppercase file extensions
2016-07-16 21:59:44 +06:00
David Lord
495d834b99 Merge branch '0.11-maintenance' 2016-07-06 08:02:46 -07:00
David Lord
1e5746bb2b persona is discontinued, remove example
closes #1947
2016-07-06 08:02:13 -07:00
David Lord
633b13e9b5 Merge branch '0.11-maintenance' 2016-07-05 17:34:51 -07:00
Kyle Lawlor
17d4cb3828 Address #1902: Converts example/flaskr to have a setup.py (#1945)
* Converts example/flaskr to have a setup.py

Makes the flaskr app easier to run, ex. workflow:
- pip install --editable .
- export FLASK_APP=flaskr.flaskr
- flask initdb
- flask run

Testing is also easier now:
- python setup.py test

* Fixed an import error in flaskr/tests

- the statement `import flaskr` caused errors in python3
- `from . import flaskr` fixes the issue in 2.7.11 and 3.5.1

* Better project structure and updates the docs

- Re-factors *flaskr*'s project structure a bit
- Updates docs to make sense with the new structure
  - Adds a new step about installing Flask apps with setuptools
  - Switches first-person style writing to second-person (reads better IMO)
  - Adds segments in *testing.rst* for running tests with setuptools

* Remove __init__.py from tests

- py.test recommends not using __init__.py

* Fix testing import errors
2016-07-05 17:30:59 -07:00
Hyunchel Kim
f19d3bd67e Enhance tests.test_cli.test_find_best_app (#1882)
This commit adds a test case for `test_find_best_app` where
Module object does not contain Flask application.
Also cleans the function little bit to provides more meaningful comment.
2016-07-05 12:46:01 -07:00
Olexander Yermakov
b7a0cc61c5 Update installation documentation for using 'pip' command (#1920) 2016-07-05 12:00:43 -07:00
John Still
0c459762ea clarify blueprint 404 error handling in docs 2016-07-02 17:03:36 -05:00
Antoine Catton
516ce59f95 Add the ability to combine MethodViews 2016-06-28 17:35:39 +02:00
georgschoelly
67e391921c fix docs: name of url_value_preprocessor method (#1932)
This typo got introduced in 5da1fc2215,
the original commit for the url_value_preprocessor decorator.
2016-06-26 13:32:47 -07:00
David Lord
1928f28a68 clean up code formatting in some docs
fix warnings while building docs
2016-06-26 13:03:29 -07:00
Kiss György
1b764cff93 Added runner fixture 2016-06-25 13:24:43 +02:00
Kiss György
b8e826c16b Added tests, fixed some minor alignment problems. 2016-06-25 13:22:18 +02:00
Kiss György
1647179511 Added routes command, which shows all the endpoints registered for the app.
Orderable by rules, endpoints and methods. Shows up in the builtin command list.
2016-06-25 12:15:14 +02:00
David Lord
0e4607000d re-add passthrough_errors to cli runner (#1928)
This got dropped during the cli simplification.  Re: #1679
2016-06-23 13:00:45 -07:00
David Lord
cd1a9b7d54 remove unnecessary form action attributes 2016-06-22 15:01:41 -07:00
David Lord
d8c39f4b37 Revert "wtforms: Add missing closing tags in example (#1917)"
This reverts commit 146cba53e7.
2016-06-22 14:53:27 -07:00
Ameya Pandilwar
663d786f68 Update documentation for upgrading Flask using 'pip' command (#1918) 2016-06-22 13:26:35 -07:00
Sudheer Satyanarayana
1ffd07ff5a Fix small typo in python3 docs
Add missing 'be'
2016-06-21 17:27:03 +02:00
Baptiste Fontaine
146cba53e7 wtforms: Add missing closing tags in example (#1917) 2016-06-19 13:27:23 -07:00
dcfix
9f2b3d815e Demonstrate how to add multiple urls to the same function endpoint #981 (#1900)
* Demonstrate how to add multiple urls to the same function endpoint

* Removed text as per untitaker, fixed spacing to be pep-8 compliant
2016-06-16 22:40:23 +02:00
Archie Roller
b8aca21a39 Fix #1911 (#1913) 2016-06-15 09:27:06 -07:00
Leo Tindall
c0087204e5 Documentation: Clarify instructions about changing row_factory for SQLite3 (#1573)
* Clarify instructions about changing row_factory

When I was working through the tutorial, this was very confusing to me; so, I've added the code and clarification that would have helped me get through it faster.

* Clarify the nature of Row objects

* Rewrite code example for further clarity.
2016-06-14 23:55:47 -07:00
Dave Barker
1a67e284d0 Remove unnecessary werkzeug mock attribs from test 2016-06-15 02:25:48 +01:00
Dave Barker
24289e97af Add test for new template auto reload debug behaviour 2016-06-15 02:15:33 +01:00
Markus Unterwaditzer
c80ea941d0 Merge pull request #1912 from pallets/revert-1811-iss1809_register_blueprint_docs
Revert "Addressing Issue 1809"
2016-06-14 22:46:27 +02:00
Markus Unterwaditzer
5c12721730 Revert "Addressing Issue 1809" 2016-06-14 22:45:24 +02:00
Dave Barker
0514ba2de1 Enable template auto-reloading in app.run()
When Flask app debugging is enabled (app.debug==True), and Jinja2
template auto-reloading is not explicitly disbaled, template
auto-reloading should be enabled.

If the app is instantiated, the jinja_env object is accessed (thereby
initialising the Jinja2 environment) and the server is then started with
app.run(debug=True), template auto-reloading is *not* enabled.

This is because reading the jinja_env object causes the environment
initialisation function to set auto_reload to app.debug (which isn't yet
True). Calling app.run(debug=True) should correct this in order to
remain consistent with Flask code reloading (which is enabled within
app.run() if debug == True).
2016-06-14 00:59:32 +01:00
Markus Unterwaditzer
433c561494 Merge branch '0.11-maintenance' 2016-06-13 20:34:30 +02:00
Markus Unterwaditzer
6e46d0cd39 Fix PyPy3 support and add bug references
Fix #1841
2016-06-13 20:33:57 +02:00
Anton Sarukhanov
5cadd4a348 Added make target for test coverage, documented make commands 2016-06-08 08:26:01 -04:00
RamiC
4305ebdf66 Check for a request ctx before using the request.
Use the app json coder when blueprint json coder is set to none.
Revert the failling test to using an app_context
re #1710
2016-06-08 12:58:56 +03:00
RamiC
501b8590dd Allow per blueprint json encoder decoder
re #1710
2016-06-08 12:03:26 +03:00
Markus Unterwaditzer
4f83f705e7 Merge pull request #1881 from antsar/master
Add test for find_default_import_path
2016-06-07 20:12:40 +02:00
Markus Unterwaditzer
b990d80764 Merge branch '0.11-maintenance' 2016-06-07 18:26:06 +02:00
Markus Unterwaditzer
724f04d305 This is 0.11.2-dev 2016-06-07 18:23:09 +02:00
Markus Unterwaditzer
d1d82ca8ce Bump version to 0.11.1 2016-06-07 18:22:43 +02:00
Anton Sarukhanov
5eaed37116 Add test for find_default_import_path 2016-06-07 08:03:55 -04:00
Markus Unterwaditzer
6a3a209f41 Merge pull request #1892 from avborhanian/patch-1
Updating url in errorhandling.rst to a valid link
2016-06-06 17:37:07 +02:00
avborhanian
5aa70b5a56 Updating url in errorhandling.rst to a valid link
Was originally set to github.com/getsentry/sentry, which was a relative link to a page that doesn't exist. I prepended https:// to fix this problem.
2016-06-06 11:29:14 -04:00
Markus Unterwaditzer
f6b5b571dc Fix several typos in python3.rst
- complicated -> complicates, since the effect continues into the
  future. See #1891

- effect -> affect

- Rewrap paragraph
2016-06-06 13:39:14 +02:00
Ryan Backman
3384813151 Clarify wording in App Context documentation. (#1890) 2016-06-06 13:03:01 +02:00
David Lord
baa2689658 clean up py3 info more 2016-06-05 15:45:39 -07:00
alatar-
00c200eeaa Update documentation about python 3 support in Flask, resolves #1578 2016-06-05 15:25:35 -07:00
David Lord
169a4e0c44 move note about next param, add example, other cleanup 2016-06-05 14:21:17 -07:00
Ping Hu
434c19933e Add clarification for login_required decorator ref #313 2016-06-05 13:22:19 -07:00
David Lord
aa9a994946 use pip instead of setup.py in fabric command 2016-06-05 13:12:25 -07:00
David Lord
14a5a9e554 move setup.cfg info to setuptools docs, reword 2016-06-05 12:59:04 -07:00
Shawn McElroy
33212309a2 updating docs and showing how to use setup.cfg to configure dev builds with sdist 2016-06-05 12:50:44 -07:00
David Lord
7c271401b2 pass value directly to last_modified 2016-06-05 12:42:34 -07:00
Prachi Shirish Khadke
af515cc7ea Add last_modified arg for send_file
Enhancement: Add last_modified arg of type DateTime to send_file.

Fixes pallets/flask#1321
2016-06-05 10:59:17 -07:00
Hyunchel Kim
64a37bb9b7 Test side effect (#1889)
Function `prepare_exec_for_file` has a side effect where a path is added to
`sys.path` list.
This commit enhances an exisiting test case for `prepare_exec_for_file`
by testing the side effect of the function and adding necessary
comments.
2016-06-05 10:32:00 -07:00
Markus Unterwaditzer
9f9e1fde8f Merge pull request #1730 from geusebi/master
make safe_join behave like os.path.join with *args
2016-06-04 21:12:55 +02:00
Giampaolo Eusebi
06a170ea9b Add tests for safe_join 2016-06-04 11:26:44 +02:00
Giampaolo Eusebi
03ea11fe76 Make safe_join able to safely join multiple paths 2016-06-04 11:26:16 +02:00
RamiC
9c236d3b84 Mention the template name conflict issue in blueprint templates docs (#1843)
* Mention the template name conflict issue in docs.
In the blueprints templates documentation mention
the possible templates name conflict issue
re #266

* Mention priorities between blueprints
and other rephrasing fixes
2016-06-03 23:25:16 -07:00
Zev Averbach
19dcdf4e70 enumerates the states in which code is executed...
... and fixes an awkward phrasing.
2016-06-03 16:59:15 -07:00
Randy Liou
954b7ef7bb Enhance code coverage for Blueprint.endpoint
Add basic test for the endpoint decorator for the Blueprint object.
2016-06-03 16:02:45 -07:00
Josh
bbd6c8c791 Expanding contribution documentation (#1883)
- README updated with link to CONTRIBUTING.rst
- CONTRIBUTING.rst has instructions on running code coverage
2016-06-03 14:32:10 -07:00
dawran6
e048aa4e19 Add negative test for json.jsonify (#1876)
Test if jsonify function raises TypeError when both args and kwargs are
passed in.
Check the TypeError's message
2016-06-03 10:58:39 -07:00
Markus Unterwaditzer
225c311f1b Merge branch '0.11-maintenance' 2016-06-03 18:44:01 +02:00
Markus Unterwaditzer
2bde2065e6 Changelog for #1872 2016-06-03 18:43:32 +02:00
Markus Unterwaditzer
b080bb19a1 Merge branch '0.11-maintenance' 2016-06-03 18:42:16 +02:00
Josiah Philipsen
41e08f4ccd fixed unmatched elif
Also update relevant test
2016-06-03 18:42:07 +02:00
jphilipsen05
fe5f714026 fixed unmatched elif (#1872) 2016-06-03 18:41:10 +02:00
James Farrington
f034d2e271 Tests with and without simplejson for every existing testenv (#1869) 2016-06-03 09:29:12 -07:00
Markus Unterwaditzer
ae97ca8553 Merge pull request #1868 from antsar/master
Rewrite subclassing example with a better use-case.
2016-06-03 14:55:33 +02:00
Dan Sully
8458cc5cd1 Remove deprecation warnings for add_etags & mimetype guessing for send_file()
Fix #1849
2016-06-03 14:52:33 +02:00
Markus Unterwaditzer
3d72099dcd Merge pull request #1878 from untitaker/recwarn
Use recwarn everywhere
2016-06-03 14:44:13 +02:00
Markus Unterwaditzer
6c359e0f53 Eliminate some resource warnings 2016-06-03 14:29:27 +02:00
Markus Unterwaditzer
293eb583f6 More explicit warning categories 2016-06-03 14:04:25 +02:00
Markus Unterwaditzer
d393597c50 Use recwarn everywhere
...instead of custom fixture. Also assert that no warnings are left over
after the test.
2016-06-03 13:59:47 +02:00
wldtyp
fa327fd4fa Tutorial: Note extensions for encrypting passwords (#1854)
Fix #836
2016-06-03 01:00:55 -07:00
Hyunchel Kim
62aaee02f7 Add a link to Extension Development (#1875) 2016-06-03 07:15:00 +02:00
jphilipsen05
047efac537 Coverage for test_static_path_deprecated and test_static_url_path (#1860) 2016-06-02 17:56:08 -07:00
Jason Brazeal
d88c08e56f improved documentation for config.from_object (#1870) 2016-06-02 15:40:59 -07:00
Anton Sarukhanov
447f591d2b Rewrite subclassing example with a better use-case. 2016-06-02 15:34:56 -07:00
David Lord
024fbe5a60 Revert "Adds simplejson as a testing target." (#1865) 2016-06-02 14:54:49 -07:00
Jeff Widman
a228a3b2cf Merge pull request #1862 from antsar/master
Add subclassing pattern/example
2016-06-02 14:32:24 -07:00
Adrian
db299c02a1 Improve GitHub issue template 2016-06-02 23:27:41 +02:00
Anton Sarukhanov
63b5dab0fc Add subclassing pattern/example to fix issue #221. 2016-06-02 14:17:42 -07:00
Jeff Widman
808d2cf75e Merge pull request #1861 from ryanbackman/master
Document Runtime Error when running outside of application context
2016-06-02 14:15:24 -07:00
Ryan Backman
cbdd2aa141 Document Runtime Error when running outside of application context 2016-06-02 14:05:49 -07:00
Markus Unterwaditzer
4102be4060 Merge pull request #1858 from etothemanders/master
Added link to deploying documentation
2016-06-02 21:59:44 +02:00
Jeff Widman
2644d69486 Merge pull request #1853 from hyunchel/feature/issue-1773-add-issue-template
Add issue template, resolves #1773
2016-06-02 12:50:56 -07:00
Emily Manders
7e8d7d43c8 Added link to deploying documentation 2016-06-02 12:47:36 -07:00
Jeff Widman
d80fabd9f6 Merge pull request #1855 from JamesTFarrington/sprint
Adds simplejson as a testing target.
2016-06-02 12:30:25 -07:00
Hyunchel Kim
14e4207397 Add issue template, resolves #1773
On issue #1773, we wanted use issue templates to accomplish two things:
1. guide questions into StackOverflow and IRC channel
2. not duplicate CONTRIBUTING content
To resolve these, ISSUE_TEMPLATE is added to remind users not
to ask questions.
2016-06-02 12:19:29 -07:00
Jeff Widman
5cf261a287 Merge pull request #1851 from prachikhadke/1789-document-flash-limit
Document flash message size limit
2016-06-02 11:59:50 -07:00
Prachi Shirish Khadke
d9a98dd536 Document flash message size limit
Reason: Messages of size 68,493 - 91,326 characters cause flash to fail silently.
Session cookies cannot have such large messages.

Issue: pallets/flask#1789
2016-06-02 11:59:04 -07:00
James Farrington
390cd5e4ee Fixed #1846 2016-06-02 11:58:02 -07:00
Armin Ronacher
41f3d67dff Update CHANGES 2016-06-02 13:53:35 +02:00
Armin Ronacher
19b134002c Merge pull request #1848 from RaHus/add_version_switch_flask_cli
Add version switch to flask cli
2016-06-02 13:53:13 +02:00
RamiC
6b28ceba83 Use the whole sys.version string 2016-06-02 13:55:00 +03:00
RamiC
6bee3e4995 Add a --version switch to flask cli
re #1828
2016-06-02 13:35:16 +03:00
Armin Ronacher
fd1a355899 Added test-requirements.txt. Refs #1835 2016-06-02 09:45:29 +02:00
Frédéric Chapoton
e4c712ffd2 a few more python3-compatible print (#1840) 2016-05-31 21:20:22 +02:00
Jochen Kupperschmidt
83ae787f97 Fix typo in cli docs 2016-05-31 16:24:11 +02:00
Yoav Ram
a725836523 Update help to > set FLASK_APP=hello.py (#1830)
When running `flask --help`, the printed string contains this:
>   Example usage:
>
>   set FLASK_APP=hello
>    set FLASK_DEBUG=1
>    flask run

but it actually only works with `set FLASK_APP=hello.py` so the help should be changed.

This is true on my Windows 7 Python 3.5 flask 0.11 setup.
2016-05-30 23:20:35 +02:00
Jochen Kupperschmidt
9c46969890 Fixed link in changelog to documentation. (#1833)
Using the officially documented, shortcut package path of the `Config` class instead of the actual one.
2016-05-30 23:20:23 +02:00
Ionuț Arțăriși
ba07f5bd81 Show line which caused the DeprecationWarning (#1831)
When raising a DeprecationWarning, show the line in the application code
which caused the warning, rather than the line in Flask

e.g. a file `app.py` with:

```python
from flask import Flask
from flask.ext.babel import Babel
```

will show:

```
app.py:2: ExtDeprecationWarning: Importing flask.ext.babel is
deprecated, use flask_babel instead.
```

instead of:

```
/home/mapleoin/venv/local/lib/python2.7/site-packages/flask/exthook.py:71: ExtDeprecationWarning: Importing flask.ext.babel is deprecated, use flask_babel instead.
  .format(x=modname), ExtDeprecationWarning
```
2016-05-29 14:51:05 -07:00
Adam Chainz
70de011d51 Convert readthedocs link for their .org -> .io migration for hosted projects (#1827)
As per their email ‘Changes to project subdomains’:

> Starting today, Read the Docs will start hosting projects from subdomains on the domain readthedocs.io, instead of on readthedocs.org. This change addresses some security concerns around site cookies while hosting user generated data on the same domain as our dashboard.

Test Plan: Manually visited all the links I’ve modified.
2016-05-29 15:49:38 +02:00
Markus Unterwaditzer
f91aea2aa0 quickstart: Remove reference to python hello.py
Fix #1826
2016-05-29 15:46:48 +02:00
Armin Ronacher
b23cd61e04 This is 0.12-dev 2016-05-29 11:02:48 +02:00
Armin Ronacher
13e6a01ac8 Bump version number to 0.11 2016-05-29 11:02:23 +02:00
Armin Ronacher
1eccb62965 Do not bump version in setup.py 2016-05-29 11:02:18 +02:00
Armin Ronacher
0e06302c79 Release is near 2016-05-29 11:01:22 +02:00
Armin Ronacher
e83d608d7d Merge pull request #1823 from pallets/feature/sentry-docs
Added sentry to docs
2016-05-27 12:00:16 +02:00
Armin Ronacher
42b7ab3f49 Incorporated ThiefMaster's suggestions for docs 2016-05-27 00:17:58 +02:00
Armin Ronacher
3e651e795a Added sentry to docs 2016-05-26 22:57:12 +02:00
Armin Ronacher
8d7e7aab31 Merge pull request #1822 from pallets/bugfix/better-pop
Improve application context popping
2016-05-26 22:31:15 +02:00
Armin Ronacher
c73cf0f82e Merge pull request #1821 from pallets/feature/plugin-cli
Added plugin support to the cli
2016-05-26 22:17:34 +02:00
Armin Ronacher
b13e83a2f2 Merge pull request #1813 from pallets/bugfix/scheme
Resolve state issue for url_for with forced scheme
2016-05-26 21:48:20 +02:00
Armin Ronacher
8482ce6b8c Improve application context popping
Exceptions during teardown handling will no longer leave application
contexts lingering around.  This fixes #1767
2016-05-26 21:46:56 +02:00
Armin Ronacher
87787b130b Merge pull request #1814 from pallets/feature/faster-template-loading
Fast path for disabled template load explain.
2016-05-26 21:34:56 +02:00
Armin Ronacher
9594876c1f Added plugin support to the cli 2016-05-26 21:29:01 +02:00
Armin Ronacher
21d595bee7 Change changelog to 0.11 2016-05-26 21:05:39 +02:00
Armin Ronacher
f9ea3fe026 1.0 -> 0.11 in the docs 2016-05-26 20:52:17 +02:00
Armin Ronacher
1df426aaaa More doc updates for FLASK_APP 2016-05-26 20:48:49 +02:00
Armin Ronacher
a7d829c618 Update docs to the new CLI patterns 2016-05-26 20:45:50 +02:00
Armin Ronacher
523e271183 Implemented simplified CLI interface 2016-05-26 20:07:52 +02:00
dataforger
92f63a1c1d fix docstring (#1818)
change string to docstring
2016-05-24 21:06:34 +02:00
ThiefMaster
c5900a1adf s/1.0/0.11/ in versionadded/versionchanged markers
closes #1817
2016-05-23 14:43:23 +02:00
Thomas Sanjurjo
bdbca923ef Addressing Issue 1809 (#1811)
document kwargs for Flask.register_blueprint
2016-05-22 07:09:21 -07:00
Armin Ronacher
96ec24f6e0 Fast path for disabled template load explain. 2016-05-22 11:36:40 +02:00
Armin Ronacher
6aee9f6d77 Resolve state issue for url_for with forced scheme
This fixes #1596
2016-05-22 10:45:29 +02:00
Armin Ronacher
883cb7cedc Always run gc before leak test 2016-05-22 10:34:48 +02:00
Frédéric Chapoton
c810fae9e8 turn 2 prints to py2/py3 compatible syntax (#1812) 2016-05-20 12:57:10 -07:00
Jannis Leidel
88500f5cc7 Forward ported CLI tests from Flask-CLI and fixed a bug with the CLI's name. (#1806)
* Forward port the CLI tests from Flask-CLI.

* Make sure the parameter passed to the CLI's AppGroup is the app's name, not the app itself.
2016-05-16 19:36:55 +02:00
Ronny Pfannschmidt
8011e1de28 Merge pull request #1801 from ben4ever/fix_doc_with_formatting
Fix "with" formatting in doc
2016-05-09 07:44:17 +02:00
Benjamin Dopplinger
9f4c569c83 Fix "with" formatting in doc 2016-05-09 13:37:27 +10:00
Markus Unterwaditzer
e8bd2c9202 Merge pull request #1795 from cgoldberg/update-docs-setuptools
update docs and refer to setuptools
2016-05-08 21:58:38 +02:00
Stefan Wójcik
e45e17c490 fix a grammar mistake (#1798) 2016-05-05 19:27:45 +02:00
Corey Goldberg
28b36f642d removed references to easy_install 2016-05-04 21:14:25 -04:00
Miguel Grinberg
de25e98f91 minor rewording of get_json documentation for clarity (#1781) 2016-05-04 06:46:49 -07:00
Corey Goldberg
1cc9ccfc67 update docs and refer to setuptools 2016-05-03 11:55:36 -04:00
David Lord
317d60307d fix some warnings while building docs 2016-04-11 16:13:59 -07:00
Daniel Quinn
be2abd2926 Fix typo (thing --> things) 2016-04-11 14:57:04 +02:00
Steven Loria
2bf477cfea Add JSONIFY_MIMETYPE configuration variable (#1728)
Allow jsonify responses' mimetype to be configured
2016-04-08 15:30:47 -07:00
Adrian
0690ce18c2 Correct spelling for Stack Overflow 2016-04-08 20:47:08 +02:00
Daniel Quinn
740c42217c The comment didn't make any sense (#1777)
Fix doc comment for View.methods
2016-04-08 08:53:25 -07:00
Jeff Widman
90181dd8b5 Merge pull request #1771 from jeffwidman/master
Remove dotCloud host instructions
2016-04-06 23:32:13 -07:00
Jeff Widman
8c595f1eba Remove dotCloud host instructions
dotCloud is no more; their parent company went bankrupt
2016-04-06 23:30:41 -07:00
Winston Kouch
594d1c5eb2 Add note to not use plain text passwords to views.rst 2016-04-05 18:53:08 +02:00
Keyan Pishdadian
1a877fbaa0 Remove extmigrate from Flask repo
* Remove extmigrate from Flask repo

* Update docs to reflect new repo location
2016-04-04 23:19:10 +02:00
Jeff Widman
6bf42f9a84 Merge pull request #1577 from sprin/1102_warn_on_run
docs: run() should not be used in production
2016-04-04 11:22:34 -07:00
Jeff Widman
0030f637c5 Merge pull request #1631 from stephane/sra/docs
Extend documentation about uwsgi/nginx deployment
2016-04-04 11:20:10 -07:00
Stéphane Raimbault
b0105f41cc Extend documentation about uwsgi/nginx deployment 2016-04-04 08:53:34 +02:00
Steffen Prince
6e91498e64 docs: run() should not be used in production
Refs #1102
2016-04-04 00:03:29 -05:00
José Carlos García
567fff9d0d Change to Pallets project
* Update CHANGES

* Update CONTRIBUTING.rst

* Update setup.py

* Update tox.ini

* Update extensions.rst

* Update security.rst

* Update installation.rst

* Update testing.rst

* Update upgrading.rst

* Update sidebarintro.html

* Update jquery.rst

* Update dbcon.rst

* Update index.rst
2016-04-03 23:11:38 +02:00
Markus Unterwaditzer
bd667109c6 Changelog for #1763 2016-04-02 21:10:24 +02:00
Markus Unterwaditzer
7f26d45b16 Changelog for #1484 2016-04-02 21:08:58 +02:00
David Hou
9f1be8e795 Raise BadRequest if static file name is invalid
* Raise BadRequest if static file name is invalid

* Clean up syntax a bit

* Remove unnecessary close()
2016-04-02 21:07:27 +02:00
Markus Unterwaditzer
d3d8a4694a Deprecate flask.ext
* Add deprecation warning to ext pkg

* Add docs on deprecation of flask.ext

* Improve deprecation warnings

* Add headers for better distinction, fix ordering issue of paragraphs
2016-04-02 21:06:30 +02:00
Shipeng Feng
cc536c8a7b Fixed stream_with_context if decorated function has parameters 2016-04-01 16:17:45 -07:00
bagratte
9a80fe691d minor revision of documentation. 2016-04-01 23:12:25 +02:00
lord63
e0a8fd3162 Add two missing converters for flask in the docs
All converters are from werkzeug's builtin converters.

Documentation: http://werkzeug.pocoo.org/docs/dev/routing/#builtin-converters
2016-04-01 14:05:11 -07:00
Markus Unterwaditzer
da0ebb9b78 Merge pull request #1760 from mattrobenolt/patch-1
Run bdist_wheel as a part of release process
2016-03-27 19:54:25 +02:00
Matt Robenolt
ce06240851 Run bdist_wheel as a part of release process
The setup.cfg declares the ability to compile a wheel, but release process isn't actually compiling a wheel.
2016-03-27 10:36:57 -07:00
Markus Unterwaditzer
3d7857344a Merge pull request #1759 from gunbei/update-get-pip.py-location
update get-pip.py location
2016-03-23 12:07:46 +01:00
gunbei
55e37d4f09 update get-pip.py location 2016-03-23 11:27:05 +01:00
David Lord
89086c5f7e Merge pull request #1758 from AustenDSouza/patch-1
Fixed typo
2016-03-22 14:22:06 -07:00
Austen D'Souza
fc0e1a8d8a Fixed typo
I think it's supposed to be an upper-case 'F'. Cheers :)
2016-03-23 02:02:04 +05:30
Markus Unterwaditzer
c9b29f4072 Merge pull request #1755 from bdh1011/patch-1
Replace ';' to ','
2016-03-14 16:49:16 +01:00
whiteUnicorn
bc9619beba Replace ';' to ','
I think it is awkward. Though semicolon can be used as a kind of supercomma, this sentence is not that kine of thing. Replacing it with comma would be more better. isn't it?
2016-03-15 00:02:29 +09:00
Markus Unterwaditzer
4542bac4d4 Merge pull request #1733 from welchbj/patch-1
Update MANIFEST.in with simpler template commands
2016-03-13 00:42:28 +01:00
Markus Unterwaditzer
bdadd97994 Merge pull request #1750 from erogers6264/master
Fix minor typo in security doc
2016-03-11 18:12:59 +01:00
Ethan Rogers
adeedddbb5 Fix minor typo in security doc 2016-03-11 10:06:00 -07:00
Markus Unterwaditzer
1a7fd980f8 Merge pull request #1748 from gaetan-petit/patch-1
Update deprecated references
2016-03-08 20:30:36 +01:00
Gaëtan Petit
67e2127a5d Update deprecated references
validators.Required() is marked as deprecated in favor of validators.DataRequired() and will be remove in WTForms 3.
2016-03-08 10:05:20 +01:00
Markus Unterwaditzer
d45445ed00 Merge pull request #1743 from homoSapiensSapiens/use_pytest_raises
Use pytest.raises() instead of try/catch with assert 0
2016-03-04 13:51:07 +01:00
Reuven
4dc2ef19ea Use pytest.raises() instead of try/catch with asser 0
This is somehow more readable, and enable using the features of pytest's ExeptionInfo (such as errisinstance).
2016-03-04 13:30:40 +02:00
Brian Welch
39cb3504e1 Update MANIFEST.in with simpler template commands
Please see https://docs.python.org/2/distutils/sourcedist.html#commands for reference.
2016-02-19 08:23:28 -05:00
Markus Unterwaditzer
e7d548595e Merge pull request #1456 from jonafato/proxy-setup-x-forwarded-proto
Add X-Forwarded-Proto header to proxy setup example docs
2016-02-17 22:02:22 +01:00
Armin Ronacher
2094e8f28e Merge pull request #1723 from ericdill/doc-update
DOC: Remove gendered language
2016-02-09 11:26:03 -08:00
Eric Dill
52daeffdc9 DOC: Remove gendered language 2016-02-09 14:24:09 -05:00
David Lord
f63cd72297 Merge pull request #1721 from pra85/patch-1
typo: interchangable -> interchangeable
2016-02-08 06:14:29 -08:00
Prayag Verma
6c0496a1f3 Fix a typo
`interchangable` → `interchangeable`
2016-02-08 19:33:34 +05:30
Kenneth Reitz
d5308bb80c Merge pull request #1716 from lord63-forks/fix-typo
Fix typo
2016-02-04 01:49:09 -05:00
lord63
07fdd1930b Update app.py 2016-02-04 14:35:03 +08:00
lord63
6d0bbd627c Fix typo
* Use the compatible way to handle the exception. You can find the
source code wsgi_app in app.py, and it use the compatible way, so update it
* Fix typo in config.py
* Fix typo in app.py
2016-02-03 21:08:22 +08:00
David Lord
22270d0f7d Merge pull request #1715 from ThiefMaster/patch-1
Add missing return to g.setdefault
2016-02-02 07:39:21 -08:00
Adrian
a4df0fbb39 Add missing return to g.setdefault 2016-02-02 16:16:01 +01:00
Kenneth Reitz
e7367c9bbf Merge pull request #1588 from Akasurde/i_1465
Updated documentation for Setuptools
2016-01-26 20:40:26 -05:00
David Lord
08f843fa75 Merge pull request #1581 from nadavge/patch-1
Fix name mismatch in apierrors page
2016-01-25 23:25:52 -08:00
David Lord
b4240e6bbd Merge pull request #1688 from nivm/master
Remove 'flask' from etags to obscure server technologies
2016-01-25 23:02:48 -08:00
David Lord
992d9be96e clean up 2016-01-25 22:56:51 -08:00
David Lord
7df543d5dc Merge pull request #1703 from jeffwidman/master
Cleanup jsonify() function
2016-01-25 22:52:09 -08:00
David Lord
7b1ebfbc4d Merge pull request #1679 from miguelgrinberg/passthrough-errors
Werkzeug should not block propagated exceptions from Flask
2016-01-25 22:17:04 -08:00
Jeff Widman
0edf0a0e3a Cleanup jsonify() function
Cleanup some leftover stuff from #1671. PEP8 spacing, args/kwargs don't need to be converted to list/dict, and Sphinx formatting.
2016-01-25 16:43:02 -08:00
Markus Unterwaditzer
f267191cd8 Merge pull request #1669 from jeffwidman/master
Update `tox` installation instructions to point to PyPI
2016-01-25 20:27:24 +01:00
David Lord
431db2874b Merge pull request #1671 from jeffwidman/support-json-top-level-arrays
Add support for serializing top-level arrays to JSON
2016-01-25 07:16:51 -08:00
Jeff Widman
daceb3e3a0 Add support for serializing top-level arrays to JSON
Fix #170, #248, #510, #673, #1177
2016-01-13 13:20:11 -08:00
nivm
edb65cc0f0 remove 'flask' from etags to obscure server technologies 2016-01-10 12:33:35 +02:00
Aviv Cohn
826d7475cd Clarified the docstring in method Flask.preprocess_request.
The doc now clearly states that the method invokes two set of hook
functions, and how these are filtered before execution.
2016-01-05 01:10:35 +02:00
Miguel Grinberg
952a6c8989 Werkzeug should not block propagated exceptions from Flask 2016-01-02 14:18:36 -08:00
Jeff Widman
102a33ca52 Update tox installation instructions to point to PyPI 2015-12-30 01:04:24 -08:00
David Lord
f17e6061fc Merge pull request #1666 from AvivC/fix-mistake-in-contributing-file
Fixed mistake in CONTRIBUTING.rst file, regarding pip install.
2015-12-27 10:42:45 -08:00
AvivC
23cf923c7c Clarified CONTRIBUTING.rst
Added 'cd flask' before 'pip install --editable .'.
2015-12-27 04:55:57 +02:00
David Lord
c1c205bcd3 Merge pull request #1661 from lord63-forks/clarify-version
Clarify the python versions that flask supports
2015-12-20 08:19:35 -08:00
lord63
7368a164c7 Clarify the python versions that flask supports 2015-12-20 20:39:38 +08:00
David Lord
9f4cbb9af4 Merge pull request #1651 from lord63-forks/remove-with-statement
Remove with_statement in flask/ctx.py
2015-12-13 09:21:01 -08:00
lord63
b55bc0baa2 Remove with_statement in flask/ctx.py 2015-12-13 22:08:31 +08:00
David Lord
dc07e26a8f Merge pull request #1648 from accraze/mod-wsgi-docs
Mod wsgi docs
2015-12-09 21:09:07 -08:00
accraze
fcd573e120 added note about directory permission syntax change
docs had httpd 2.2 syntax for directory permission with a link to Apache 2.4 changes. added an example of httpd 2.4 syntax

resolves #1644
2015-12-09 20:24:23 -08:00
David Lord
910ad01916 use https instead of git protocol
git protocol is blocked on some networks
2015-12-03 16:50:16 -08:00
David Lord
d7b20e0ad7 use https instead of git protocol
git protocol is blocked on some networks
2015-12-03 16:40:46 -08:00
David Lord
c388e9c24e add myself to authors 2015-12-03 16:40:46 -08:00
David Lord
ec07d7086a Merge pull request #1637 from d0ugal/patch-1
Fixed a typo in the appfactories docs
2015-12-03 05:03:47 -08:00
Dougal Matthews
25aab43f8e Fixed a typo
I think 'app' is the intended word here, but I am not 100% sure.
2015-12-03 09:51:24 +00:00
David Lord
db468a4618 ignore pycharm config 2015-12-01 20:58:12 -08:00
David Lord
b3b5a98fd0 Merge pull request #1630 from redian/master
Skip tests if redbaron is not installed
2015-11-27 08:57:56 -08:00
David Lord
a68a25cb1f Merge pull request #1629 from redian/patch-3
Add .cache dir to gitignore
2015-11-26 19:17:41 -08:00
Redian Ibra
96f7b07caf Skip test if redbaron is not installed 2015-11-26 22:11:34 +00:00
Redian
4a576b06e8 Add .cache dir to gitignore
I think this could be handy and potentially minimise the risk
anyone commits it to the project.

```
flask - (master) $ tree .cache/
.cache/
└── v
    └── cache
        └── lastfailed

```
2015-11-26 21:04:23 +00:00
David Lord
bd4020d9de Merge pull request #1624 from lord63-forks/fix-code-format
Render the code block in mongokit.rst
2015-11-22 00:15:58 -08:00
lord63
51b62fb044 Render the code block in mongokit.rst 2015-11-22 14:43:25 +08:00
Ivan Velichko
daa3f272da Allow to specify subdomain and/or url_scheme in app.test_request_context() 2015-11-20 19:43:49 +03:00
Armin Ronacher
751fe451df Merge pull request #1558 from JonasGroeger/master
Update uwsgi/nginx deployment documentation
2015-11-12 13:08:56 +01:00
Armin Ronacher
7d6e118572 Merge pull request #1616 from dthul/typo
Fix typo.
2015-11-11 23:50:09 +01:00
Daniel Thul
2faf245876 Fix typo. 2015-11-11 23:46:51 +01:00
David Lord
915d34444b Merge pull request #1610 from lord63-forks/fix-typo
Fix typo in app_ctx_globals_class doc in app.py
2015-11-06 18:12:56 -08:00
lord63
1d49343bb1 Fix typo in app_ctx_globals_class doc in app.py 2015-11-07 09:04:24 +08:00
Armin Ronacher
8789c94d82 Merge pull request #1608 from Windfarer/patch-1
Fix a typo
2015-11-04 15:39:43 +01:00
Eric Yang
7f678aaf5a Fix a typo
Maybe this is a typo?
2015-11-04 22:08:31 +08:00
Armin Ronacher
5c73a8b4ad Merge pull request #1607 from wodim/patch-1
Fix typo in templating.rst
2015-11-04 12:03:31 +01:00
wodim
4a8f3eacbb Fix typo in templating.rst 2015-11-04 12:00:44 +01:00
Abhijeet Kasurde
2fe8e81596 Merge branch 'i_1465' of https://github.com/Akasurde/flask into i_1465 2015-11-01 09:35:40 +05:30
Abhijeet Kasurde
b51e368cc7 Merge branch 'master' of https://github.com/mitsuhiko/flask
Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2015-11-01 09:34:11 +05:30
Abhijeet Kasurde
5420bce383 Merge branch 'master' of https://github.com/mitsuhiko/flask 2015-11-01 09:27:35 +05:30
David Lord
41622c8d68 Link article about deploying on Azure/IIS 2015-10-31 15:17:45 -07:00
David Lord
fa32222b09 Merge pull request #1592 from hidavy/patch-1
Update CHANGES
2015-10-30 19:20:40 -07:00
David Lord
233886dda2 Merge pull request #1565 from msiyaj/master
Missing apostophe.
2015-10-30 19:20:27 -07:00
David Lord
84a12afd4d Merge pull request #1593 from timofurrer/master
support timedelta for SEND_FILE_MAX_AGE_DEFAULT config variable
2015-10-30 11:10:08 -07:00
Armin Ronacher
3f6e8c6ad5 Merge pull request #1594 from timofurrer/python3.5-support
travis: python 3.5 support
2015-10-30 17:35:06 +01:00
Michael Klich
99bc0dfd3b Add info about working with VE and Python 3
Python 3 does not have execfile function.
2015-10-29 19:03:20 -07:00
Timo Furrer
b8dc6c12b7 add python 3.5 build to travis config 2015-10-24 21:16:05 +02:00
Timo Furrer
d526932a09 support timedelta for SEND_FILE_MAX_AGE_DEFAULT config variable 2015-10-24 07:04:23 +02:00
hidavy
6102d210a3 Update CHANGES 2015-10-23 16:20:02 +08:00
Abhijeet Kasurde
15f267e1ee Updated documentation for Setuptools
Updated documentation by removing references of distribute and adding
references of setuptools.

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2015-10-20 14:40:55 +05:30
Nadav Geva
51c35295af Fix name mismatch in apierrors page 2015-10-15 00:02:46 +03:00
Armin Ronacher
1ac4156016 Fixed some lint warnings 2015-10-02 23:19:54 +02:00
Armin Ronacher
6cd191db4f Ignore build folder 2015-10-01 13:59:05 +02:00
Armin Ronacher
ee7f4b2bab Added lineart logo 2015-10-01 13:58:48 +02:00
Jimmy McCarthy
a23ce46971 Update change log 2015-09-14 13:29:16 -05:00
Jimmy McCarthy
5505827a4b provide_automatic_options as explicit arg
In add_url_rule, break provide_automatic_options out to an explicit kwarg, and
add notes to the docstring.
2015-09-14 13:26:10 -05:00
Jimmy McCarthy
04a3eeee3b Merge branch 'master' of github.com:mitsuhiko/flask 2015-09-14 13:06:54 -05:00
msiyaj
808bf6d204 Missing apostophe. 2015-08-27 00:27:44 -04:00
Jonas Gröger
b644e2747f Mention virtual environments in uwsgi/nginx deployment docs 2015-08-22 01:05:45 +02:00
Jonas Gröger
8b9cb6caa7 Update uwsgi/nginx deployment documentation
Instead of using the uwsgi_modifier1 30 directive, the uwsgi docs
recommend to use the mount / manage-script-name approch which mounts
a module + callable to a certain path. This way, SCRIPT_NAME and
PATH_INFO are correctly rewritten.

See http://uwsgi-docs.readthedocs.org/en/latest/Nginx.html#hosting-multiple-apps-in-the-same-process-aka-managing-script-name-and-path-info

Fixes #1464
2015-08-22 00:56:54 +02:00
Markus Unterwaditzer
7f38674915 Merge pull request #1539 from mjhennig/with_metaclass
Improve function with_metaclass()
2015-07-27 19:25:27 +02:00
Mathias J. Hennig
b3767ae59f Addressing feedback from pull request 2015-07-27 15:32:23 +02:00
Mathias J. Hennig
c8f19f0afc Reimplement function with_metaclass() 2015-07-22 23:35:13 +02:00
Markus Unterwaditzer
ac12e362c4 Merge pull request #1520 from zevav/patch-2
fixed some punctuation, fixed a few errors, in service of readability
2015-07-21 13:41:44 +02:00
Markus Unterwaditzer
b528b2ffe3 Merge pull request #1535 from lobeck/revert-1534-update_external_url_handler_example
Revert "make external_url_handler example py3 compliant"
2015-07-16 12:20:33 +02:00
lobeck
128bc76af0 Revert "make external_url_handler example py3 compliant" 2015-07-16 13:53:59 +02:00
Markus Unterwaditzer
81ae94a5fd Merge branch '0.10-maintenance' 2015-07-16 12:05:07 +02:00
Markus Unterwaditzer
6a6a6d87c2 Merge branch 'lobeck-fix_unboundlocalerror_for_handle_build_error' into 0.10-maintenance
Fix #1533
2015-07-16 12:02:12 +02:00
Markus Unterwaditzer
765f851a7c Changelog for #1533 2015-07-16 12:01:25 +02:00
Christian Becker
5da31f8af3 fix UnboundLocalError in handle_url_build_error
- caused by changes in the execution model of python 3 where the alias of an except clause is cleared on exit of the except
2015-07-16 12:00:16 +02:00
Markus Unterwaditzer
97c0b26cc0 Merge pull request #1534 from lobeck/update_external_url_handler_example
make external_url_handler example py3 compliant
2015-07-16 11:49:09 +02:00
Christian Becker
93fe1d54bd make external_url_handler example py3 compliant
- a raises statement with multiple values is no longer allowed in python 3
2015-07-16 02:45:56 +02:00
Markus Unterwaditzer
671c1ee002 Merge pull request #1532 from WayneYe/master
Fixed gevent introduction to use libev instead of libevent
2015-07-14 22:44:51 +02:00
Wayne Ye
05c2e7c276 Fixed gevent introduction to use libev instead of libevent 2015-07-14 12:36:01 -07:00
Markus Unterwaditzer
92a293046b Merge pull request #1530 from Aayush-Kasurde/master
Added missing app.run line in jqueryexample.py
2015-07-12 18:49:55 +02:00
Aayush Kasurde
8ba986e45e Added fix for issue 1529
Signed-off-by: Aayush Kasurde <aayush.kasurde@gmail.com>
2015-07-12 21:08:16 +05:30
Jimmy McCarthy
a136019644 Updated changelog 2015-07-07 13:21:51 -05:00
Jimmy McCarthy
011b129b6b Add kwarg to disable auto OPTIONS on add_url_rule
Adds support for a kwarg `provide_automatic_options` on `add_url_rule`, which
lets you turn off the automatic OPTIONS response on a per-URL basis even if
your view functions are functions, not classes (so you can't provide attrs
on them).
2015-07-07 13:20:53 -05:00
Markus Unterwaditzer
db09c6798e Merge branch 'alanhamlett-master'
Fix #1515
2015-07-04 23:42:12 +02:00
Alan Hamlett
99c99c4c16 Enable autoescape for render_template_string 2015-07-04 23:41:43 +02:00
Alan Hamlett
e4f635f8d7 remove whitespace at end of lines 2015-07-04 23:41:31 +02:00
Markus Unterwaditzer
37474871dc Merge pull request #1509 from ThiefMaster/appctxglobals-candy
Add pop and setdefault to AppCtxGlobals
2015-06-30 21:33:04 +02:00
Zev Averbach
5dfe918e4f fixed some punctuation, fixed a few errors, in service of readability 2015-06-26 08:41:56 -04:00
Markus Unterwaditzer
595fb7e1fa Merge pull request #1510 from ThiefMaster/remove-modules-property
Remove the deprecated Flask.modules property
2015-06-21 19:37:34 +02:00
ThiefMaster
6af9690ae9 Remove the deprecated Flask.modules property 2015-06-20 18:09:27 +02:00
ThiefMaster
bbaf20de7c Add pop and setdefault to AppCtxGlobals 2015-06-20 18:04:58 +02:00
Markus Unterwaditzer
87222087b3 Merge branch 'alexpantyukhin-master'
Fix #1390
2015-06-17 15:45:57 +02:00
Alexander Pantyukhin
a9066a3756 Changes and docs are modified. 2015-06-17 15:45:37 +02:00
Alexander Pantyukhin
5e12748d0e Ignore before_render_template return values 2015-06-17 15:42:39 +02:00
Alexander Pantyukhin
883f82f261 template overrides handling changed 2015-06-17 15:42:39 +02:00
Alexander Pantyukhin
eae37b575d fix test_signals 2015-06-17 15:42:39 +02:00
Alexander Pantyukhin
e57199e0c4 fix test_signals 2015-06-17 15:42:39 +02:00
Alexander Pantyukhin
967907ee81 before_render_template signal can override render template. 2015-06-17 15:42:39 +02:00
Alexander Pantyukhin
1fbeb337c4 fix endline in the signal.py 2015-06-17 15:42:39 +02:00
Alexander Pantyukhin
d53d5c732b before_render_template signal 2015-06-17 15:42:39 +02:00
Markus Unterwaditzer
cb9f645081 Merge pull request #1502 from untitaker/travis-simplify
Don't pass version to tox explicitly
2015-06-17 13:17:12 +02:00
Markus Unterwaditzer
284081c452 Don't pass version to tox explicitly 2015-06-17 13:03:59 +02:00
Markus Unterwaditzer
9ddd3e9084 Merge pull request #1499 from menghan/doc
Fix project name in CONTRIBUTING.rst
2015-06-13 17:55:12 +02:00
Menghan
30973310ec Replace 'Werkzeug' to 'Flask' 2015-06-13 23:16:14 +08:00
Markus Unterwaditzer
554c5b965a Fix #1477 2015-06-13 17:07:51 +02:00
Markus Unterwaditzer
cc6bf7c18a Merge pull request #1496 from Hardtack/patch-1
Update title of docstring in flask.cli
2015-06-13 13:50:50 +02:00
GunWoo Choi
c65b32ba1d Update title of docstring in flask.cli 2015-06-12 13:40:53 +09:00
Markus Unterwaditzer
bc4c1777e9 Document static_folder 2015-06-11 19:55:51 +02:00
Markus Unterwaditzer
beec47a7cc Deduplicate signals docs
Triggered by #1390
2015-06-10 18:42:55 +02:00
Markus Unterwaditzer
3e07b9c287 Merge pull request #1491 from nvie/patch-1
Remove the word `trivially` here
2015-06-10 11:45:37 +02:00
Vincent Driessen
a4b335a64a Remove the word trivially here
A lot of things are trivial, or debatably trivial, but this is not one of them :)
2015-06-10 10:58:49 +02:00
Markus Unterwaditzer
b471df6c88 Point to stable version of Celery 2015-06-08 15:18:34 +02:00
Keyan Pishdadian
805692108a Update send_file() docs to clarify encoding requirement #1286 2015-06-06 07:38:09 +02:00
Markus Unterwaditzer
d13a1b363e Rename jinja_env_class
Inspired by #1056
2015-06-06 06:29:26 +02:00
Markus Unterwaditzer
66b4ea91b4 Fix #1195 2015-06-06 06:25:41 +02:00
Jeff Widman
f80ea4fe5d Some grammar and typo fixes 2015-06-06 04:44:41 +02:00
Daniel Neuhäuser
2b58e6120c Fix wording 2015-06-06 04:44:41 +02:00
Daniel Neuhäuser
b9938d0182 Don't allow namespace packages anymore 2015-06-06 04:44:41 +02:00
Daniel Neuhäuser
b12d9762e7 Require Python 3.3 and higher for extensions
Flask and several extensions already supports Python 3.3 and higher. By
requiring approved extensions to support Python 3.3 as well we can
quickly achieve better Python 3 adoption and make using Python 3 easier
for users.

The effort of supporting both Python 2.7 and Python 3.3 is small enough
that it shouldn't be a problem to require this from extension authors.
2015-06-06 04:44:41 +02:00
Daniel Neuhäuser
3185f445c9 Drop Python 2.6 minimum requirement for extensions
Python 2.6 is not supported by python-dev anymore and does not get any
security updates. Even though Flask supports 2.6 at the moment, I think
it's not necessary for any extensions that are going to be approved in
the future to support 2.6.
2015-06-06 04:44:41 +02:00
Daniel Neuhäuser
43d6b8a5fc Drop Extension==dev requirement
pip doesn't install links included in the description of projects
anymore. Therefore ==dev install doesn't work anymore.
2015-06-06 04:44:41 +02:00
Markus Unterwaditzer
063a8da4f8 Add changelog for #1218 2015-06-06 04:43:41 +02:00
Jeff Widman
f05aeea6dd Correct the order of suggested syntax for extension imports
According to https://github.com/mitsuhiko/flask/issues/1092#issuecomment-47118613 and https://github.com/mitsuhiko/flask/pull/1085#issuecomment-45466907 , the correct order to attempt to import extensions should be flask_foo, then flask.ext.foo, then flaskext_foo.
2015-06-06 04:43:22 +02:00
Markus Unterwaditzer
5c68b24f64 Merge pull request #1483 from untitaker/improve-autodoc
Show original autodoc signatures
2015-06-06 04:17:57 +02:00
Markus Unterwaditzer
d40288496c Show original autodoc signatures
Alternative to #1403
2015-06-06 04:17:33 +02:00
Markus Unterwaditzer
7a999cd4b8 Merge branch 'AndrewBMartin-patch-1' 2015-06-06 03:35:22 +02:00
Andrew
337a9d6172 Include backend argument when instantiating Celery
Not including the backend argument can lead to AttributeError:
DisabledBackend object has no attribute for '_get_task_meta_for'.

See e.g.
http://stackoverflow.com/questions/23215311/celery-with-rabbitmq-attributeerror-disabledbackend-object-has-no-attribute.

At the same time, including the backend argument doesn't seem to harm anything else.
2015-06-06 03:35:04 +02:00
Markus Unterwaditzer
1e857bfa71 Changelog for #1422 2015-06-06 03:31:51 +02:00
Markus Unterwaditzer
d00f5cc9fe Merge branch 'ThiefMaster-override-jinja-env' 2015-06-06 03:30:49 +02:00
Markus Unterwaditzer
2446ca63a8 0.11 => 1.0 2015-06-06 03:29:44 +02:00
Markus Unterwaditzer
5ebf1e824d Merge pull request #1480 from jmcarp/handle-empty-deque
Handle empty deque on errorhandler lookup.
2015-06-03 17:46:10 +02:00
Joshua Carp
348bf52188 Handle empty deque on errorhandler lookup.
After registering a custom errorhandler by exception class, raising any
unhandled exception in a view function swallows the error and instead
throws an `IndexError` on trying to look up the appropriate handler.
This patch avoids the uninformative `IndexError` and preserves the
original exception by looping until the deque of classes is empty, not
forever.
2015-06-02 16:13:30 -04:00
Markus Unterwaditzer
0d19fa0a06 Clarify some docs
Fix #1476
2015-05-31 18:59:14 +02:00
Markus Unterwaditzer
6e77cd709e Merge pull request #1463 from moonshadow/fix_docstring
fix docstring for _find_errorhandler
2015-05-20 14:52:08 +02:00
Wang Haowei
be45a608e3 fix docstring for _find_errorhandler 2015-05-20 20:31:06 +08:00
Markus Unterwaditzer
1e15e17a66 Merge pull request #1461 from justinwp/patch-1
fixed import of werkzeug secure_filename
2015-05-15 10:24:24 +02:00
Justin Poehnelt
17d7353d39 fixed import of werkzeug secure_filename 2015-05-14 23:44:49 -07:00
Jon Banafato
887d382da1 Add X-Forwarded-Proto to proxy setup example
The ProxyFix middleware provided by Werkzeug uses this header for
returning accurate values from request.is_secure and request.scheme.
Without adding this header, Flask won't properly detect when it is being
served over HTTPS and will fail to generate proper external links and
cause certain extensions (e.g. Flask-OAuthlib) to function improperly.
Adding this header to the example setup should reduce issues encountered
by developers when following this guide.
2015-05-09 12:29:53 -04:00
Markus Unterwaditzer
3fe68c221a Merge pull request #1455 from nickjj/docs_contributing
Add pip install --editable . to contributing docs
2015-05-07 13:24:13 +02:00
Nick Janetakis
8a96091644 Add pip install --editable . to contributing docs 2015-05-06 16:07:47 -07:00
Markus Unterwaditzer
f0926d7b18 Merge pull request #1453 from ozbek/master
Replace 'I' with 'We'
2015-05-06 15:55:28 +02:00
Shuhrat Dehkanov
a1c55a698c Replace 'I' with 'We'
To be consistent with the usage elsewhere in the README
2015-05-06 22:13:52 +09:00
Markus Unterwaditzer
61f12d6a8d Merge pull request #1450 from Carreau/importlib
importlib deprecated in 3.4
2015-05-02 21:58:44 +02:00
Matthias Bussonnier
2de525c720 importlib deprecated in 3.5.
Replace the use of importlib by types.ModuleType that seem to be
available since at least 2.6

closes gh-1449
2015-05-02 10:54:38 -07:00
Markus Unterwaditzer
73c833568d Merge pull request #1448 from fordhurley/custom_converters
Mention that custom converters can be defined for url routes
2015-05-01 20:11:33 +02:00
Ford Hurley
d398780852 Mention that custom converters can be defined for url routes 2015-05-01 12:11:55 -04:00
Markus Unterwaditzer
73d89cccec Errorhandlers were NOT *added* in 1.0 2015-04-30 23:05:55 +02:00
Markus Unterwaditzer
e99fec26ab Merge pull request #1441 from andyxning/fix_pep8_with_logging
Fix pep8 with logging
2015-04-19 11:37:55 +02:00
ning.xie
1b7fad3716 fix pep8 with logging.py 2015-04-19 17:33:54 +08:00
Markus Unterwaditzer
aaebe9fe25 Merge pull request #1431 from untitaker/flask-errorhandling-amend
Some cleanup for errorhandling refactor
2015-04-12 00:06:57 +02:00
Markus Unterwaditzer
0bac2ade91 Fix formatting errors 2015-04-11 20:52:47 +02:00
Markus Unterwaditzer
7d506f2408 Recursively traverse MRO of exception 2015-04-11 20:52:47 +02:00
Markus Unterwaditzer
aed464b92b Merge pull request #1291 from flying-sheep/errorhandler-rework
Fixed and intuitivized exception handling
2015-04-11 18:13:22 +02:00
Markus Unterwaditzer
06f2be3ae4 Merge pull request #1429 from flying-sheep/errorhandler-rework-docs
Added docs for the error handler rework
2015-04-11 18:12:46 +02:00
Phil Schaf
290372faf1 some details 2015-04-11 18:08:04 +02:00
Phil Schaf
4437eb7ceb slimmed down error handling intro 2015-04-11 18:01:22 +02:00
Phil Schaf
d4ad47af62 added info about an exception being raised for the old and broken behavior 2015-04-11 17:44:18 +02:00
Phil Schaf
9d3c4bbb8c Added docs for the error handler rework 2015-04-11 17:25:17 +02:00
Phil Schaf
b31252db55 addressed a few review concerns 2015-04-11 14:24:01 +02:00
Phil Schaf
8c054f04b8 added caching 2015-04-11 14:05:22 +02:00
Phil Schaf
fd8e6b26f9 removed ExceptionHandlerDict 2015-04-11 14:05:22 +02:00
Phil Schaf
0e44cca8e3 Removed 500 not being registerable for blueprints 2015-04-11 14:05:22 +02:00
Phil Schaf
aa4700c276 More verbose message for old broken behavior 2015-04-11 14:05:22 +02:00
Phil Schaf
a6c6cc18f5 Removed unused http code get function 2015-04-11 14:05:22 +02:00
Phil Schaf
7126a22334 Switched to userdict for obsolete Python versions 2015-04-11 14:05:22 +02:00
Phil Schaf
eae48d97b0 Fixed and intuitivized exception handling 2015-04-11 14:05:22 +02:00
ThiefMaster
08ac3aa4e3 Allow custom jinja environments
This is useful e.g. when using the new Jinja Environment
attributes added in mitsuhiko/jinja2#404
2015-04-06 15:03:00 +02:00
Keyan Pishdadian
dac45f6c5d Merge pull request #1418 from alexwlchan/master
Fix a few spelling mistakes in the docs
2015-04-03 15:46:33 -04:00
Alex Chan
8570633214 Fix a few spelling mistakes in the docs 2015-04-03 20:43:40 +01:00
Markus Unterwaditzer
b57a076fa3 Merge pull request #1380 from KWinston/master
Add line of code required to run examples for Other Testing Tricks section
2015-04-02 01:57:06 +02:00
Brandon Sandrowicz
20f62e828b Fix Possible Typo
Looks like that was meant to be `config_key`. It works by accident because the function is defined in the same scope as the look that passes `config_key` to `apprunner`.
2015-04-02 01:48:48 +02:00
Keyan Pishdadian
b075737245 Merge pull request #1414 from charleswhchan/patch-1
Added OpenShift as a free hosting provider alternative
2015-04-01 10:13:31 -04:00
Charles Chan
6c56e4231f Added OpenShift as a free hosting provider alternative 2015-03-31 16:13:29 -07:00
Keyan Pishdadian
76c518dae7 Merge pull request #1413 from skybert/500-errhandler-note
Added note that @errorhandler(500) isn't triggered in debug mode
2015-03-31 13:52:27 -04:00
Torstein Krause Johansen
557a053e3b Moved noted about HTTP 500 before the code examples
- as suggested by @keyan
2015-03-31 19:16:33 +02:00
Torstein Krause Johansen
5dd9335aac Added note that @errorhandler(500) isn't triggered in debug mode 2015-03-31 17:35:29 +02:00
Markus Unterwaditzer
c259f2bb2b Add contributing file 2015-03-31 12:44:47 +02:00
Markus Unterwaditzer
1577e1386e Revert "Don't use threads in this test"
This reverts commit 78cd4161f0.
2015-03-29 23:03:38 +02:00
Keyan Pishdadian
86e8267eb9 Merge pull request #1378 from cbron/master
Fix link to SQLalchemy Declarative documentation.
2015-03-29 16:40:45 -04:00
Markus Unterwaditzer
78cd4161f0 Don't use threads in this test
I think test failures would've been ignored if there were some.

Fixes #1401
2015-03-29 13:40:35 +02:00
Markus Unterwaditzer
33bad011c3 Merge branch 'mjpieters-appcontext_ignore_handled_exception' 2015-03-23 16:44:32 +01:00
Markus Unterwaditzer
f0de0a6057 Changelog for #1393 2015-03-23 16:43:44 +01:00
Markus Unterwaditzer
ecb8f81760 Merge pull request #1389 from untitaker/always-memory-test
Always run memory tests
2015-03-23 16:41:29 +01:00
Martijn Pieters
ecaaa50234 If this patch gets accepted I may as well be added here. 2015-03-23 15:17:43 +00:00
Martijn Pieters
ec0d208bc1 Switch away from using None as default value for the exception when tearing down a context.
When an exception has been handled when using the request / app context in a with statement, `sys.exc_info()` will still contain the exception information even though it has been handled already. The `__exit__` methods pass in `None` for the exception value in that case, which needs to be distinguisable from the default value for the `exc` parameter. Use a dedicated singleton sentinel value instead.
2015-03-23 15:17:19 +00:00
Markus Unterwaditzer
1aa8a54b17 Always run memory tests 2015-03-22 12:49:47 +01:00
Winston Kouch
6bbbb72843 Add import flask module required to run code on Other Testing Tricks 2015-03-12 23:32:08 -04:00
Caleb Bron
c0593efbb2 link to sqlalchemy declarative has changed 2015-03-12 10:26:06 -07:00
Markus Unterwaditzer
ec5811d0a1 Merge pull request #1376 from KWinston/master
Update quickstart.rst doc for awareness of Flask extensions
2015-03-12 09:36:07 +01:00
Winston Kouch
5f8c850895 Add extensions section to Quickstart documentation 2015-03-11 23:54:09 -04:00
Markus Unterwaditzer
12cd14a075 Merge pull request #1368 from ThiefMaster/pytest-norecurse
Configure pytest's norecursedirs
2015-03-08 13:55:39 +01:00
ThiefMaster
ce471ca17c Configure pytest's norecursedirs
This skips directories which don't contain unittests and also
virtualenvs (in folders named env*, which is already in gitignore)
as we don't want to execute any tests in there
2015-03-08 13:45:51 +01:00
Markus Unterwaditzer
8c4842cf1f Merge pull request #1364 from keyanp/updateREADME
Update README for clarity and to remove redundancy
2015-03-05 22:25:44 +01:00
Keyan Pishdadian
fba2535005 Change wording for clarity and accuracy 2015-03-05 16:19:49 -05:00
Markus Unterwaditzer
9c1cf1bc08 Fix broken link 2015-03-05 22:04:53 +01:00
Markus Unterwaditzer
7ae1c5a8b9 Merge pull request #1325 from bsutherland/rqst_properteis_doc_iri_patch
Clarify contents of request properties.
2015-03-05 22:03:54 +01:00
Keyan Pishdadian
7d63b89a8e Update README for clarity and to remove redundancy
Addresses concerns presented in issue #1157
2015-03-05 16:01:48 -05:00
Markus Unterwaditzer
94a3968d69 Untangle logic a bit 2015-03-05 22:00:27 +01:00
Markus Unterwaditzer
0748e2daac Fix typo in changelog 2015-03-05 21:56:19 +01:00
Markus Unterwaditzer
c282ab1ce2 Merge pull request #1354 from idrisr/master
improve grammar, make format consistent, and improve readability
2015-03-05 21:55:08 +01:00
Markus Unterwaditzer
5164be092a Merge pull request #1360 from keyanp/issue1317
Add exception details to response
2015-03-05 20:59:12 +01:00
Keyan Pishdadian
7b080355f5 Remove unused import and clean control flow 2015-03-05 13:26:59 -05:00
Keyan Pishdadian
44da905cb7 Change format index to support Python 2.6 2015-03-05 13:19:00 -05:00
Keyan Pishdadian
1cd9e91810 Changed error message to include actual exception contents 2015-03-05 13:04:38 -05:00
Keyan Pishdadian
290c371eb1 Change to hardcoding exception contents to support Python3 json loading exception format 2015-03-05 12:48:38 -05:00
Keyan Pishdadian
d6a1307f9d Change strings to bytes to support Python3, typo in function name 2015-03-04 15:14:43 -05:00
Keyan Pishdadian
294961e6fc Change tests to support older response format 2015-03-04 14:48:08 -05:00
Keyan Pishdadian
39e66ca6d7 Add tests for adding exception to response contents only when DEBUG is True 2015-03-04 14:40:16 -05:00
Keyan Pishdadian
19df249c89 Change logic to support when current_app is not available 2015-03-04 13:21:39 -05:00
Markus Unterwaditzer
e527c173f5 Merge branch 'master' of github.com:mitsuhiko/flask 2015-03-04 18:44:56 +01:00
Markus Unterwaditzer
0a492a09a8 Restructure Upload Progress Bars
- Removed dropzone.js, it hasn't been around long enough, maybe we need
  to update this in two years again.
- jQuery should be a proper rst link.
2015-03-04 18:43:59 +01:00
Markus Unterwaditzer
9a61e7d571 Merge remote-tracking branch 'sourya/master' 2015-03-04 18:40:35 +01:00
Keyan Pishdadian
82b7983b2a Make exception contents conditional on DEBUG 2015-03-02 12:12:37 -05:00
Keyan Pishdadian
5d3e7b737c Add exception details to response 2015-02-28 01:22:15 -05:00
Markus Unterwaditzer
3740ae492f Merge pull request #1358 from keyanp/ext_migrate_fix
Add skip to fix unnoticed bug with import migration tool
2015-02-26 10:43:34 +01:00
Keyan Pishdadian
f6c45afb6f Add skip to fix unnoticed bug with good imports
Fixes logic so that imports that should not be changed are skipped, which was not happening correctly before.
2015-02-25 19:48:29 -05:00
Idris Raja
81e8bbbb7f improve grammar, make format consistent, and improve readability 2015-02-19 09:57:56 -06:00
Markus Unterwaditzer
818c42cfea Add @keyanp to authors, sort list 2015-02-18 18:17:14 +01:00
Markus Unterwaditzer
1dcad60051 Merge pull request #1342 from keyanp/issue1135
flask.ext Import Migration Tool #1135
2015-02-18 18:16:28 +01:00
Keyan Pishdadian
6fa1889afb Update comments to reflect new functionality 2015-02-15 19:09:08 -05:00
Keyan Pishdadian
5f64971731 Update comments to reflect new functionality 2015-02-14 18:16:28 -05:00
Keyan Pishdadian
cd6ec40947 Add test and logic for attribute access calls 2015-02-13 18:40:41 -05:00
Keyan Pishdadian
77ed466101 Remove hardcoded 'foo' 2015-02-13 16:02:37 -05:00
Keyan Pishdadian
4cb311b945 Add support for function call fixing, add tests
Addresses #1135, some code cleanup and refactoring. Changes wrapper function which handles testing, further modularized code, added test to cover function call fixing, and fixed duplicate test function name.
2015-02-13 15:27:29 -05:00
Keyan Pishdadian
9cbe83ef0d Add a test and cover edge case with parens 2015-02-12 16:41:57 -05:00
Keyan Pishdadian
1479cf80f6 Move test file, add RedBaron to tox.ini 2015-02-12 13:06:45 -05:00
Keyan Pishdadian
b759aa2b95 Add test for naming module and fix logic to cover 2015-02-12 11:58:38 -05:00
Keyan Pishdadian
37217e85b8 Fix issue with wrapper logic 2015-02-11 15:22:07 -05:00
Keyan Pishdadian
0cf5881312 Add tests, remove manual testing file #1135 2015-02-11 15:06:53 -05:00
Keyan Pishdadian
96d81c297a Change wrapper logic for testing 2015-02-11 14:53:39 -05:00
Keyan Pishdadian
4a9e34a574 Add wrapper for testing fixing functionality 2015-02-11 14:41:48 -05:00
Keyan Pishdadian
c90c4e5e8c Support "import flask.ext.foo" format
New commit supports the above import format, however it does not fix function calls elsewhere in the source. Perhaps there should be an error or simply alert the user through stdout().
2015-02-11 14:29:04 -05:00
Keyan Pishdadian
61d5e6a4d4 Cleanup 2015-02-11 13:29:50 -05:00
Keyan Pishdadian
8488a3afa9 Change parsing format to use AST via RedBaron
Moved away from using manual parsing. Source is parsed using RedBaron to make the FST. Some import formats not yet implemented, and still some bugs to work out. However, the current script works well for the two cases in the file comments.
2015-02-11 13:07:24 -05:00
Keyan Pishdadian
0b2556f3ec Add lib2to3 fixer base code
Switching to using RedBaron instead of lib2to3, committing to save lib2to3 code in case using Baron is not successful.
2015-02-10 11:23:16 -05:00
Markus Unterwaditzer
4082fe65f3 Merge pull request #1349 from jeffwidman/patch-1
Signals.rst: Grammar and readability fixes
2015-02-09 13:42:06 +01:00
Jeff Widman
ffe0c54891 Grammer and readability fixes 2015-02-09 01:03:08 -08:00
Markus Unterwaditzer
6521c36c68 Merge pull request #1346 from ezyang/master
Remove bad security advice about send_file, fixes #1345
2015-02-08 13:42:37 +01:00
Edward Z. Yang
29f7c10a5d Remove bad security advice about send_file.
Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
2015-02-07 15:06:51 -08:00
Markus Unterwaditzer
f0b4b99930 Merge pull request #1343 from cvrebert/test_request_preprocessing_early_return
make test_request_preprocessing_early_return more thorough
2015-02-06 23:34:52 +01:00
Chris Rebert
6d2c076a3b make test_request_preprocessing_early_return more thorough 2015-02-06 13:11:23 -08:00
Keyan Pishdadian
9d64ff420f Early commit for issue #1135
Add support migrating single imports from the flask.ext style to flask_
2015-02-06 14:38:33 -05:00
Markus Unterwaditzer
1158e22958 Fix test under Python 3 2015-02-06 18:20:17 +01:00
Markus Unterwaditzer
85b20f8d49 Avoid duplication of version info 2015-02-06 18:06:16 +01:00
Markus Unterwaditzer
eb2a4521ff Merge pull request #1341 from ThiefMaster/pep-440-dev-version
Use PEP440-compatible dev version
2015-02-06 18:03:41 +01:00
ThiefMaster
ddf0dfa895 Use PEP440-compatible dev version 2015-02-06 17:05:08 +01:00
Markus Unterwaditzer
5fa76f6800 Add testcase for behavior described in #1338 2015-02-05 22:13:19 +01:00
Markus Unterwaditzer
6e6a3e8cfb Merge pull request #1338 from cvrebert/middleware-docs
Improve docs of signatures of before/after/teardown callback funcs
2015-02-05 22:11:07 +01:00
Chris Rebert
fe6bcffdad Document required signature of before_first_request-decorated functions 2015-02-05 12:45:59 -08:00
Chris Rebert
6a2524634d Document that the return values of teardown functions are ignored 2015-02-05 12:45:11 -08:00
Chris Rebert
eccee36964 Document required signature of before_request functions
Unless you happened to also read preprocess_request()'s docstring,
it wasn't not obvious that return values from these functions are treated as
response values.
2015-02-05 12:38:34 -08:00
Chris Rebert
a45fce8496 fix grammar in preprocess_request() docstring 2015-02-05 12:35:25 -08:00
Markus Unterwaditzer
d734baf176 Merge pull request #1335 from phouse512/patch-1
Update api.rst, fixed spelling
2015-02-01 23:16:19 +01:00
Philip House
c60b5b91e2 Update api.rst, fixed spelling 2015-02-01 15:53:35 -06:00
Markus Unterwaditzer
4dc3c16c3d Merge pull request #1332 from mypetyak/docs/teardown_request_docstring
Fixed minor docstring typo for teardown_request()
2015-01-29 07:09:58 +01:00
Christopher Bunn
d60e13436d Fixed minor docstring typo for teardown_request() 2015-01-28 21:04:43 -05:00
Markus Unterwaditzer
495704e1ad Merge branch 'date-support-in-jsonify' 2015-01-23 14:55:24 +01:00
Markus Unterwaditzer
51b011fac7 link to relevant PR
see #1326
2015-01-23 14:54:30 +01:00
Ben Jones
61263e08f9 Add datetime.date support to JSONEncoder 2015-01-23 07:44:17 -06:00
Bruce Sutherland
0d86a89420 Wrap text. 2015-01-22 09:12:18 +09:00
Bruce Sutherland
871077c81c Show requested URI as suggested by untitaker. 2015-01-21 20:52:42 +09:00
Bruce Sutherland
77141c1eca Update api.rst
Changed Japanese text to pi symbol, emphasize that values are unicode.
2015-01-21 15:00:38 +09:00
Bruce Sutherland
3bbe869dd7 Clarify contents of request properties.
Change URL to IRI and update examples to include extended characters.
2015-01-21 14:09:30 +09:00
Markus Unterwaditzer
1ba6c2248d Add readme to persona example
Fix #1310
2015-01-17 13:18:27 +01:00
Markus Unterwaditzer
e3ba459abb Merge pull request #1318 from cerivera/master
grammar fixes
2015-01-16 15:06:08 +01:00
Carlos Eduardo Rivera
65465ffece grammar fixes 2015-01-16 03:36:17 -06:00
Markus Unterwaditzer
dfeabb7089 Merge pull request #1315 from brettgerry/deprecate-textfield
Replace TextField with StringField in registration page example
2015-01-13 23:55:53 +01:00
Brett Gerry
6517a1a37c deprecate TextField in favor of StringField 2015-01-13 14:47:41 -08:00
Markus Unterwaditzer
b68dc78d09 Merge pull request #1313 from homeworkprod/patch-1
Added missing import.
2015-01-13 17:58:14 +01:00
Jochen Kupperschmidt
e3bb34ec24 Added missing import.
As this specific code block lists imports in general and an import from the `flask` package specifically, it should also include `g` for the sake of completeness.
2015-01-13 03:03:14 +01:00
Sourya Vatsyayan
a6ea6335a5 Updated file uploads progress bar section 2015-01-04 13:00:51 +05:30
Sourya Vatsyayan
50fef79b20 URL generation rule explained for file uploads 2015-01-03 23:32:51 +05:30
Sourya Vatsyayan
d2a380451b URL generation rule explained 2015-01-03 20:30:30 +05:30
Markus Unterwaditzer
5b98266152 Merge pull request #1303 from Parkayun/master
Happy New Year 2015
2015-01-03 14:00:39 +01:00
Parkayun
33534bb4a9 Happy New Year 2015 2015-01-02 11:35:00 +09:00
Markus Unterwaditzer
4fde65eb7a Merge pull request #1299 from sateeshkumarb/patch-1
Update quickstart.rst
2014-12-30 18:14:59 +01:00
Sateesh
b9eb805167 Update quickstart.rst
Minor grammar correction.
2014-12-30 22:40:13 +05:30
Markus Unterwaditzer
bd2c8b631f Fix #1298 2014-12-30 12:08:17 +01:00
Markus Unterwaditzer
df256f04c2 Merge pull request #1297 from nryoung/master
Fix grammar in testing doc.
2014-12-30 10:10:13 +01:00
Nic Young
29ba05f5be Fix grammar in testing doc. 2014-12-29 22:11:17 -07:00
Armin Ronacher
d931216ade Hide a few traceback frames from the cli interface. 2014-12-27 12:25:03 +01:00
Markus Unterwaditzer
3f46f4f77a Add changelog for #1288 2014-12-26 20:16:25 +01:00
Markus Unterwaditzer
45e901fbf8 Merge pull request #1290 from mhall1/ticket_1288
Fixed #1288: app.add_url_rule() should look for OPTIONS methods in a case-insensitive manner
2014-12-26 20:14:01 +01:00
Michael Hall
98b155c65d Fixed #1288: app.add_url_rule() should look for OPTIONS methods in a case-insensitive manner 2014-12-26 08:58:35 -05:00
Markus Unterwaditzer
b292013cd9 Merge pull request #1292 from moonshadow/fix_typo
fix typo
2014-12-25 16:49:59 +01:00
Wang Haowei
47b5c09ba6 fix typo 2014-12-25 11:52:11 +08:00
Markus Unterwaditzer
413ae6137e Merge pull request #1285 from methane/patch-4
Use new container based Travis-CI
2014-12-20 15:05:51 +01:00
INADA Naoki
454ffa2d88 Use new container based Travis-CI 2014-12-18 13:25:12 +09:00
Markus Unterwaditzer
b7dfa6c363 Merge pull request #1280 from jcomo/mongokit-doc-update
Update mongokit pattern
2014-12-17 13:28:24 +01:00
Jonathan Como
bd4921194e verbage 2014-12-16 23:52:43 -08:00
Markus Unterwaditzer
82d7c49d00 Merge pull request #1277 from iKevinY/doc-fixes
Documentation fixes (mostly in Tutorial)
2014-12-16 20:30:51 +01:00
Kevin Yap
23fc2e56a8 Grammatical fixes in Foreword and Tutorial 2014-12-16 11:30:00 -08:00
Jonathan Como
a8498b6859 update mongokit patterng 2014-12-15 13:25:15 -08:00
Kevin Yap
475d7076f0 Standardized capitalization of "GitHub" in docs 2014-12-12 22:55:12 -08:00
Markus Unterwaditzer
41b5d77e29 Merge pull request #1273 from prakashpp/patch-1
Fixed wording
2014-12-09 18:22:38 +01:00
Prakash Pandey
4d8cba917e Fixed wording 2014-12-09 22:46:10 +05:30
Markus Unterwaditzer
eca5306386 Merge pull request #1262 from msabramo/JSONIFY_END_WITH_NEWLINE
Add JSONIFY_END_WITH_NEWLINE config variable
2014-12-07 23:53:07 +01:00
Marc Abramowitz
d9402fc0c0 Make jsonify terminate responses with a newline
This came up in the context of
https://github.com/kennethreitz/httpbin/issues/168
2014-12-07 14:37:26 -08:00
Markus Unterwaditzer
f166894f76 Merge branch 'flask_deployment_docs'
Conflicts:
	docs/quickstart.rst
2014-12-04 22:39:28 +01:00
Markus Unterwaditzer
86525d9b37 Merge pull request #1264 from svenstaro/patch-1
Update information about Python 3
2014-12-04 22:36:31 +01:00
Markus Unterwaditzer
3bf9c2e097 Merge pull request #1269 from pkuphy/patch-2
Update api.rst
2014-12-04 20:20:00 +01:00
pkuphy
fbe3e81818 Update api.rst
is an -> if a
2014-12-05 02:53:30 +08:00
Sven-Hendrik Haase
a5d24ac0d9 Remove head lines and add versions of first Python 3 support 2014-12-02 21:09:45 +01:00
Sven-Hendrik Haase
eb6df3ddf1 Describe the nature of Python 3 roughness 2014-12-02 20:46:46 +01:00
Sven-Hendrik Haase
aaa3a04545 Admit the occasional encoding problem 2014-12-02 19:40:12 +01:00
Sven-Hendrik Haase
83336e0622 Update information about Python 3
Python 3 and Flask is a good combination nowadays that works rather well. In fact, [most PyPI libs](https://regebro.wordpress.com/2014/10/23/59-of-maintained-packages-support-python-3/) are now ported and it's generally ok to encourage people to use Python 3 for new projects.
2014-12-02 18:13:02 +01:00
Markus Unterwaditzer
924763afd1 Merge pull request #1263 from its-not-a-bug-its-a-feature/patch-1
Small Typo fix
2014-12-01 06:51:04 +01:00
David Cole
cc8f47cf62 Small Typo fix 2014-11-30 19:28:36 -08:00
Markus Unterwaditzer
b24438b2c9 Merge pull request #1247 from Winnetou/patch-8
Minor typos
2014-11-12 14:17:31 +01:00
Mieszko
091852ef88 Minor typos cont. 2014-11-12 13:34:01 +01:00
Markus Unterwaditzer
eea9342414 Merge pull request #1245 from Winnetou/patch-7
Minor typos
2014-11-09 00:05:00 +01:00
Mieszko
5d9cdc65b5 Update sqlite3.rst 2014-11-08 22:21:27 +01:00
Markus Unterwaditzer
13bd8586e9 Merge pull request #1244 from Winnetou/patch-6
Minor typos fixed
2014-11-07 10:24:52 +01:00
Mieszko
9db775e2dd Minor typos fixed
According to Cambrigde English Dictionary "web server" ==correct, "webserver" ==incorrect.
2014-11-06 23:42:44 +01:00
Markus Unterwaditzer
e916047309 Merge pull request #1242 from Winnetou/patch-4
Minor typos fixed
2014-11-06 14:11:47 +01:00
Mieszko
5c7557917b Minor typos fixed 2014-11-06 08:58:24 +01:00
Markus Unterwaditzer
6fcc2ae3f4 Merge pull request #1240 from defuz/docs-style-fix-2
Docs style fixes: ``FOO`` vs `FOO` (reloaded)
2014-11-05 09:47:28 +01:00
defuz
7e157ee589 docs: `http://...` 2014-11-05 11:42:40 +03:00
defuz
974e144843 docs: remove unnecessary colons 2014-11-05 10:37:34 +03:00
defuz
eb05001f8a docs: Don't touch markdown files 2014-11-05 08:40:57 +03:00
defuz
1501b79293 docs: :exc:TypeError 2014-11-05 08:16:27 +03:00
defuz
5562acfdfc docs: fix warnings 2014-11-05 08:04:06 +03:00
defuz
d6f5eb8def docs: script -> `script` 2014-11-05 07:56:03 +03:00
defuz
d338dc8a13 docs: `.html, .py` 2014-11-05 07:52:04 +03:00
defuz
d4b9b9854c docs: :mimetype:application/json 2014-11-05 07:43:00 +03:00
defuz
663802e976 docs: `with, for, self` 2014-11-05 07:39:54 +03:00
defuz
0bb4de1e3b docs: `<body>, |safe` 2014-11-05 07:27:25 +03:00
defuz
17eee81da0 docs: `Flask-Uploads, X-Forwarded-Host` 2014-11-05 07:23:47 +03:00
defuz
06d9a5e738 docs: :file:/var/www/foo, `/static` 2014-11-05 07:19:02 +03:00
defuz
ad011bc32d docs: `DEBUG, SERVER_NAME, PATH_INFO` 2014-11-05 07:10:49 +03:00
defuz
02694d609f docs: :command:pip, :option:--debug 2014-11-05 07:03:55 +03:00
defuz
936e787cca docs: requirements.rst -> requirements.txt 2014-11-05 06:46:22 +03:00
defuz
a8f570cc62 docs: :file:app.py, :file:yourapp/templates 2014-11-05 06:45:22 +03:00
defuz
3fa4fd0908 docs: http method names like `GET and POST` 2014-11-05 06:13:01 +03:00
defuz
8284217593 docs: `True, False and None` 2014-11-05 06:04:58 +03:00
defuz
6dbb015b43 docs: HTTP -> HTTP 2014-11-05 05:56:02 +03:00
Markus Unterwaditzer
2ab91446f6 Merge pull request #1237 from Winnetou/patch-3
explain_template_loading_attempts: docstring
2014-11-04 13:10:16 +01:00
Mieszko
28e30322fa explain_template_loading_attempts: docstring
A verb apparently missing.
2014-11-04 08:51:06 +01:00
Markus Unterwaditzer
70a33ed49b Merge pull request #1235 from flowerhack/master
Tweaked sqlite3 documentation
2014-11-03 18:48:31 +01:00
flowerhack
bcba7eb397 Tweaked sqlite3 documentation 2014-11-03 12:11:02 -05:00
Markus Unterwaditzer
54def62657 Merge pull request #1234 from Winnetou/patch-2
Minor typos and spelling fixed
2014-11-03 11:00:38 +01:00
Mieszko
2cfdf7a839 Minor typos and spelling fixed
According to http://dictionary.cambridge.org/ "webserver" is incorrect, "web server" = correct
2014-11-03 10:29:05 +01:00
Markus Unterwaditzer
a1b273658d Merge pull request #1222 from defuz/templates_auto_reload-eq-none
Set TEMPLATE_AUTO_RELOAD default value to None
2014-11-02 20:46:48 +01:00
Ivan Ivaschenko
6a6acfbb09 Using double-backticks: `None` 2014-11-02 22:41:38 +03:00
defuz
76f3d6b45e improve TEMPLATE_AUTO_RELOAD docs 2014-10-30 18:40:38 +03:00
Markus Unterwaditzer
84efebd6be Merge pull request #1225 from s3rvac/typo-and-cosmetic-fixes
Typo and cosmetic fixes
2014-10-27 18:31:33 +01:00
Petr Zemek
d4f6734741 Remove a redundant "the" in a comment. 2014-10-27 11:54:30 +01:00
Petr Zemek
6b9fd4a968 Fix a typo in a comment in MethodViewType.__new__. 2014-10-27 11:54:28 +01:00
Petr Zemek
3159c86166 Unify the uses of "sourcecode" vs "source code".
Use "source code", which is more grammatically correct.
2014-10-27 11:54:28 +01:00
Petr Zemek
92854cb386 Add a missing period in the description of the signals module. 2014-10-27 11:54:27 +01:00
Petr Zemek
0f3f476dcf Fix a typo in the description of SecureCookieSession.
The term "base class" (with a space) is used in another file, so use it here as well to make the wording consistent across the whole project.
2014-10-27 11:54:27 +01:00
Petr Zemek
3767e7ba4f Unify the uses of "urls" vs "URLs".
Use "URLs", which is more prevailing in the source code.
2014-10-27 11:36:23 +01:00
Petr Zemek
d1423b3e16 Unify the uses of "file system" vs "fileystem".
Use "filesystem", which is more prevailing in the source code.
2014-10-27 11:33:45 +01:00
Petr Zemek
ebab6718f7 Unify the uses of "testsuite" vs "test suite".
Use "test suite", which is more prevailing in the source code.
2014-10-27 11:31:01 +01:00
Petr Zemek
ec3d5800f2 Put two spaces before inline comments when there is only one space.
PEP8 (E261) suggests to use at least two spaces before inline comments.
2014-10-27 11:24:15 +01:00
Petr Zemek
4840fc0edc Change == None to is None.
PEP8 (E711) suggests that comparison to None should be `cond is None`.
2014-10-27 11:17:49 +01:00
Petr Zemek
e41bf1e181 Remove two redundant empty lines.
PEP8 suggests to use two empty lines to separate functions, not three.
2014-10-27 11:13:03 +01:00
Petr Zemek
47d7f20d9b Fix two typos in the description of FlaskGroup. 2014-10-27 11:03:07 +01:00
defuz
f88765d504 set TEMPLATE_AUTO_RELOAD default value to None 2014-10-26 18:28:12 +03:00
Markus Unterwaditzer
5c6d789e7b Fix broken link 2014-10-26 02:01:42 +02:00
Markus Unterwaditzer
fe2d75e1f4 Merge pull request #1213 from defuz/config-patch
Add trim_namespace argument for app.config.get_namespace (with tests)
2014-10-25 12:54:59 +02:00
Markus Unterwaditzer
7b3e52b06f Merge pull request #1217 from jeffwidman/patch-1
Fix typo: "lated later" >> "added later"
2014-10-25 12:46:08 +02:00
Jeff Widman
193b94b0ea Fix typo: "lated later" >> "added later" 2014-10-25 03:14:01 -07:00
defuz
5e8d503098 add tests for trim_namespace argument of app.config.get_namespace 2014-10-24 13:11:10 +04:00
Bryan Stitt
bbd9c2f100 Update config.py 2014-10-24 13:11:10 +04:00
Bryan Stitt
56a7e8361d Update config.py
I want to load all of my `CELERY_` options from the config and leave `CELERY_` on there.
2014-10-24 13:11:10 +04:00
Markus Unterwaditzer
a8c36fb3d8 Merge branch 'compressed-jsonify'
Fix #1203
2014-10-21 19:12:05 +02:00
Markus Unterwaditzer
bd232e5c82 PEP8 2014-10-21 19:11:54 +02:00
Gilman Callsen
d425279650 Improve compression by removing whitespace from separators when using jsonify() and JSONIFY_PRETTYPRINT_REGULAR is False.
Commit includes Changelog entry and two new tests in test_basic.py.
2014-10-21 19:11:06 +02:00
Markus Unterwaditzer
050a659c2f Merge branch 'test-client-kwargs'
Fix #992
2014-10-20 21:21:53 +02:00
Matt Wright
986b92203a Add CHANGES entry and versionchanged entry to docstring 2014-10-20 21:21:30 +02:00
Matt Wright
44c025f552 Add a little documentation regarding kwargs in the app.test_client() method 2014-10-20 21:21:30 +02:00
Matt Wright
fed6fd32d8 Pass keyword args from test_client method to client class constructor 2014-10-20 21:21:30 +02:00
Markus Unterwaditzer
6b3fbb323a Add changelog entry for #1206 2014-10-19 19:54:41 +02:00
Markus Unterwaditzer
46918d3ceb Merge pull request #1206 from methane/deprecate-request.json
Deprecate request.json property
2014-10-19 19:53:26 +02:00
Markus Unterwaditzer
fa610a24ec Merge pull request #1208 from augiwan/patch-2
Corrected api docs
2014-10-18 16:20:50 +02:00
Augustus D'Souza
709289037a Corrected api docs
http://flask.pocoo.org/docs/0.10/api/#flask.Request.get_json
2014-10-18 13:14:04 +05:30
INADA Naoki
4d4a639ba4 Add test for deprecated flask.Request properties. 2014-10-15 03:32:04 +09:00
INADA Naoki
61097c47a3 Deprecate request.json property 2014-10-15 02:21:52 +09:00
Markus Unterwaditzer
7169f44d88 Various fixes for test running
Fix #1199
2014-10-08 23:12:18 +02:00
Markus Unterwaditzer
97dc687793 Merge pull request #619 from QuentinRoy/master
Fix missing argument in find_module of flaskext_compat.py
2014-10-07 19:01:17 +02:00
Markus Unterwaditzer
d76ca43a58 Merge pull request #1196 from davide-ceretti/add-tearing-down-signal-unittest
Add unittest for appcontext_tearing_down signal
2014-10-07 13:09:13 +02:00
Davide Ceretti
93c190a8fd Add unittest for appcontext_tearing_down signal 2014-10-07 07:34:19 +01:00
Markus Unterwaditzer
b9237121ec Don't include doc themes in sdist 2014-09-29 21:49:40 +02:00
Markus Unterwaditzer
a18dedc5d3 Merge pull request #1191 from nluchs/patch-2
Minor typo in errorpages.rst
2014-09-28 07:11:39 +02:00
Markus Unterwaditzer
60fcc05c47 Merge pull request #1192 from nluchs/patch-3
Minor typos in sqlite3.rst
2014-09-28 07:10:27 +02:00
Nick Luchsinger
37fb0516f4 Minor typos in sqlite3.rst
Self-explanatory.
2014-09-27 18:39:43 -07:00
Nick Luchsinger
55db14ec68 Minor typo in errorpages.rst 2014-09-27 15:34:08 -07:00
Markus Unterwaditzer
a25ee7e060 Merge pull request #1186 from llimllib/master
some grammar fixes in docs/appcontext
2014-09-26 19:22:41 +02:00
Markus Unterwaditzer
11fa387748 Merge pull request #1187 from bdarnell/patch-1
Stop recommending Tornado as a WSGI server
2014-09-25 17:21:44 +02:00
Ben Darnell
e401a83fc5 Stop recommending Tornado as a WSGI server
Tornado's WSGI server is less scalable than the alternatives and only really makes sense when you have a specific need to run both WSGI apps and Tornado-native apps in the same process. This recommendation has been an ongoing source of confusion, e.g. http://stackoverflow.com/questions/26015116/making-tornado-to-serve-a-request-on-a-separate-thread.

Fixes #986.
2014-09-25 09:35:46 -04:00
Bill Mill
3b3c5b8bf3 some grammar fixes in appcontext
* "in lack of" -> "for lack of"
* pillar's -> pillars
* ~~however~~
* a touch of cleanup to the "two ways" paragraph
* ~~on there~~
* "database connects" -> "database connections"
2014-09-21 23:03:41 -04:00
Markus Unterwaditzer
c6795eb626 Remove useless unittest imports 2014-09-21 16:47:38 +02:00
Markus Unterwaditzer
2401e21efd Merge pull request #1183 from k-funk/patch-1
Update quickstart.rst
2014-09-20 13:38:47 +02:00
Markus Unterwaditzer
67bee61533 Merge pull request #1164 from pbu88/run_tests
Adds 2 tests for Flask.run method
2014-09-20 09:00:03 +02:00
Markus Unterwaditzer
7550f43545 Merge pull request #1185 from defuz/patch-2
Fix typo in changelog
2014-09-20 08:57:47 +02:00
Ivan Ivaschenko
056bd0e6d4 Fix typo in changelog 2014-09-20 10:41:46 +04:00
Kevin Funk
0632d53f3d Update quickstart.rst
url converters: match the [API docs](http://flask.pocoo.org/docs/0.10/api/#url-route-registrations)
2014-09-19 15:22:37 -07:00
Markus Unterwaditzer
4f5d3eab06 Merge pull request #1181 from kelvintaywl/examples/fix_readme
fix typo in in README of examples (i.e., filename of test files)
2014-09-18 15:37:43 +02:00
tay-k
f95acc64d6 fix filename of test files in README of examples 2014-09-18 18:21:36 +09:00
Paulo Bu
3f67fe94f1 Adds 2 tests for Flask.run method 2014-09-14 17:27:19 +02:00
Markus Unterwaditzer
80283d6c59 Merge pull request #1175 from pbu88/update_readme
Update tests section in README file
2014-09-13 11:47:42 +02:00
Paulo Bu
ef19d663c0 Update tests section in README file 2014-09-13 10:29:28 +02:00
Markus Unterwaditzer
73ca86587d Add changelog 2014-09-12 21:55:49 +02:00
Markus Unterwaditzer
bb94a612fd Merge pull request #1165 from untitaker/new_testsuite
Port testsuite to py.test
2014-09-12 21:54:59 +02:00
Markus Unterwaditzer
192da325f8 Testsuite is not a package 2014-09-11 22:09:52 +02:00
Markus Unterwaditzer
56db3ddf4e Remove useless imports 2014-09-11 22:09:52 +02:00
Markus Unterwaditzer
4fca38c078 remove audit command 2014-09-11 22:09:52 +02:00
Markus Unterwaditzer
be42d5665e Split instance tests off into own file 2014-09-11 22:09:52 +02:00
Markus Unterwaditzer
a4931ff3a7 Kill class in test_basic 2014-09-11 22:09:52 +02:00
Markus Unterwaditzer
71dae37733 Kill classes in test_regression 2014-09-11 22:09:52 +02:00
Markus Unterwaditzer
f8a778deae Kill classes in test_testing 2014-09-11 22:09:52 +02:00
Markus Unterwaditzer
77d887526d Rename fixture apps_tmpdir 2014-09-11 22:09:52 +02:00
Markus Unterwaditzer
a00ccdce94 Remove more test_apps 2014-09-11 22:09:52 +02:00
Markus Unterwaditzer
b88a837674 Remove fake extensions from test_apps 2014-09-11 22:09:51 +02:00
Markus Unterwaditzer
4ea4ea7f93 Remove old helper function 2014-09-11 22:09:51 +02:00
Markus Unterwaditzer
861aa0db1f Init global test_apps explicitly 2014-09-11 22:09:51 +02:00
Markus Unterwaditzer
588cfa9c91 Add note to memleak tests 2014-09-11 22:09:51 +02:00
Markus Unterwaditzer
9e02a424b2 Add greenlet 2014-09-11 22:09:51 +02:00
Markus Unterwaditzer
03339501ab Remove obsolete apps 2014-09-11 22:09:51 +02:00
Markus Unterwaditzer
af4cb0ff2b Remove flask superclass 2014-09-11 22:09:51 +02:00
Markus Unterwaditzer
af41dbe0c4 Remove useless classes 2014-09-11 22:09:51 +02:00
Markus Unterwaditzer
d0cf5ef394 WIP 2014-09-11 22:09:51 +02:00
Markus Unterwaditzer
e77bc2d86c Remove class from test_views 2014-09-11 22:09:51 +02:00
Markus Unterwaditzer
7e8f1053bb Fix assertion error 2014-09-11 22:09:51 +02:00
Markus Unterwaditzer
5da2c00419 Rewrite assertion methods 2014-09-11 22:09:51 +02:00
Markus Unterwaditzer
dd6b2574c9 Rework test_signals 2014-09-11 22:09:51 +02:00
Markus Unterwaditzer
b1c0951ad6 Move fixtures 2014-09-11 22:09:51 +02:00
Markus Unterwaditzer
ba82bac3d8 Rework test_config 2014-09-11 22:09:51 +02:00
Markus Unterwaditzer
a497b10d4f Don't test old Werkzeug against py3 2014-09-11 22:09:51 +02:00
Markus Unterwaditzer
df711eac90 Some fixes 2014-09-11 22:09:51 +02:00
Markus Unterwaditzer
8d97d71430 Metadata change 2014-09-11 22:09:51 +02:00
Markus Unterwaditzer
ec863cef5b Update tox 2014-09-11 22:09:50 +02:00
Markus Unterwaditzer
b93ab41ed1 Remove testsuite package from setup.py 2014-09-11 22:09:50 +02:00
Markus Unterwaditzer
8fa5e32d9a Tests pass now. 2014-09-11 22:09:50 +02:00
Markus Unterwaditzer
961db8ad72 Made tests recognizable 2014-09-11 22:09:50 +02:00
Markus Unterwaditzer
3550b26071 Move tests 2014-09-11 22:09:50 +02:00
Markus Unterwaditzer
077d06df54 Remove run-simple.py 2014-09-11 22:09:50 +02:00
Markus Unterwaditzer
773ad9b92d Merge pull request #1172 from cgar/spelling
very minor spelling fixes
2014-09-10 07:37:25 +02:00
cgar
013d8ad3d9 minor spelling fixes 2014-09-09 20:12:38 -04:00
Markus Unterwaditzer
750fa594d8 Shorten paragraph about builtin server 2014-09-06 23:05:00 +02:00
Markus Unterwaditzer
3d3b809347 Rewrite deployment docs 2014-09-06 22:20:02 +02:00
Markus Unterwaditzer
0a7cc2b113 Fix typo 2014-09-06 02:20:44 +02:00
Armin Ronacher
6cd54a4835 Fixed some cross linking in the docs 2014-09-03 22:33:05 +02:00
Armin Ronacher
c09a4317e4 Record blueprint registration order. 2014-09-03 20:12:06 +02:00
Armin Ronacher
750ab16364 assert_ is assert_true 2014-09-03 19:28:44 +02:00
Markus Unterwaditzer
bb0084f5be Fix Py3 compat bug
Also don't use unicode string here because the assertions below are
written for native strings.
2014-09-03 19:17:43 +02:00
Armin Ronacher
84f57b6bda Fixed a relative import 2014-09-03 18:31:30 +02:00
Armin Ronacher
bafc139810 Added EXPLAIN_TEMPLATE_LOADING to help people debug templates not being loaded. 2014-09-03 17:57:51 +02:00
Markus Unterwaditzer
f17ad953dd Fix syntax error on py3 2014-09-03 15:27:06 +02:00
Armin Ronacher
ed49fe3db1 Removed leftover from the module system. 2014-09-03 14:58:32 +02:00
Armin Ronacher
9eb59b0bef Added support for background loading of the application to speed up initial requests in dev mode. 2014-09-02 16:20:46 +02:00
Markus Unterwaditzer
670d2a4d50 Merge pull request #1163 from boreq/docs-update
Added full_path to the Request object documentation.
2014-08-31 19:06:30 +02:00
boreq
3bd9cdce94 Added full_path to the Request object documentation. 2014-08-31 18:09:53 +02:00
Markus Unterwaditzer
0f8f6b5130 Merge pull request #1162 from ajschumacher/patch-1
typo: "weather" -> "whether"
2014-08-28 19:39:38 +02:00
Aaron Schumacher
05ad436201 typo: "weather" -> "whether" 2014-08-28 13:35:53 -04:00
Markus Unterwaditzer
96d7cc933a Merge pull request #1161 from pbu88/master
Fix warnings and code styling in the doc
2014-08-28 17:02:27 +02:00
Paulo Bu
b81f72070e Fix warnings and code styling in the doc
There was a blank line missing that was generating a warning when
building the doc. Also, a removed function from cli.py was left in api.rst
(without_appcontext specifically) so this was also generating warnings.

Also corrects the format for a code block and adds a link to Werkzeug's Headers
class.
2014-08-28 16:51:53 +02:00
Markus Unterwaditzer
462bc6c2e5 Merge pull request #1160 from untitaker/docs_dev_installation
Don't mention Flask dev releases anymore
2014-08-28 16:12:27 +02:00
Markus Unterwaditzer
7db5232572 Don't mention Flask dev releases anymore
Fix #1155
2014-08-28 16:12:00 +02:00
Markus Unterwaditzer
c2ed8d61c3 Merge pull request #1158 from untitaker/protocol-relative
Document building protocol-relative URLs
2014-08-28 16:09:55 +02:00
Armin Ronacher
a94e767acb AppGroups produce more AppGroups 2014-08-28 09:35:06 +02:00
Armin Ronacher
9641f07d91 Made FlaskGroup an AppGroup 2014-08-28 08:56:58 +02:00
Markus Unterwaditzer
7183aefd62 Document building protocol-relative URLs
https://github.com/mitsuhiko/werkzeug/pull/528
2014-08-27 13:34:10 +02:00
Armin Ronacher
7c16054d81 Updated the logging documentation for recent changes. 2014-08-27 01:22:01 +02:00
Armin Ronacher
5edc803702 Added a changelog entry for modules. 2014-08-27 01:13:25 +02:00
Armin Ronacher
817b72d484 Removed deprecated module functionality 2014-08-27 01:12:33 +02:00
Armin Ronacher
84ad89ffa4 Always log now, even if debug is off. 2014-08-27 01:08:19 +02:00
Armin Ronacher
0ce3db88cf Remove date tagging. 2014-08-27 01:08:18 +02:00
Daniel Neuhäuser
7d57c29f7a Merge pull request #1156 from brwr/brwr/fix-documentation-typo
Add missing `of` to documentation.
2014-08-26 12:29:57 +02:00
Armin Ronacher
662b1053a4 Added support for PYTHONSTARTUP to shell command. 2014-08-26 12:07:09 +02:00
Armin Ronacher
9bf36151d9 Removed dead import 2014-08-26 10:29:07 +02:00
Armin Ronacher
9123fa3b8f Added a missing self 2014-08-26 10:14:27 +02:00
Armin Ronacher
2f60124894 Removed ridiculous constructor from AppGroup 2014-08-26 10:09:17 +02:00
Armin Ronacher
afb613ca43 Added some missing documentation information. 2014-08-26 10:03:15 +02:00
Armin Ronacher
d1821b3a07 Updated intersphinx 2014-08-26 10:03:08 +02:00
James Brewer
20645d9b86 Add missing of to documentation. 2014-08-25 22:18:08 -07:00
Armin Ronacher
932f7d7cbb Refactored the scripting interface greatly. 2014-08-25 16:50:22 +02:00
Armin Ronacher
66ef55ce0a Converted a leftover old-style click callback. 2014-08-25 15:43:27 +02:00
Markus Unterwaditzer
01450efc25 Merge pull request #1150 from kylepjohnson/master
typos
2014-08-23 00:18:15 +02:00
Kyle P. Johnson
71b525e1fa typos 2014-08-14 16:16:58 -04:00
Armin Ronacher
f6d25bbc4f Switch to newer click (2.0) 2014-08-12 23:23:52 +02:00
Kenneth Reitz
60260eb0f0 Merge pull request #1144 from untitaker/url_for_scheme_docs
Add documentation about url_for's default scheme
2014-08-12 14:46:56 -04:00
Markus Unterwaditzer
b49074eb6b Add documentation about url_for's default scheme
Fix #1129
2014-08-11 11:56:55 +02:00
Daniel Neuhäuser
1d55b8983e Merge pull request #1138 from LiterallyElvis/master
Quoted all HTML attributes.
2014-07-31 10:33:44 +02:00
Jeffrey D
3c48bf8935 Addressed issue #1134 2014-07-29 20:42:28 -05:00
Daniel Neuhäuser
f6618c7638 Merge pull request #1099 from root-11/patch-1
Update schema.rst
2014-07-27 13:31:59 +02:00
Daniel Neuhäuser
a51a167937 Merge pull request #1100 from thewhitetulip/patch-1
The example does not execute
2014-07-27 13:23:32 +02:00
Daniel Neuhäuser
c048aed65a Merge pull request #1112 from methane/patch-3
Update python3.rst
2014-07-27 13:22:36 +02:00
Daniel Neuhäuser
486c1089b0 Base from_json on from_mapping 2014-07-27 13:21:14 +02:00
Daniel Neuhäuser
aa40b1731e Add Config.from_mapping 2014-07-27 13:09:14 +02:00
INADA Naoki
a61347b902 Update python3.rst 2014-07-27 02:47:33 +09:00
Daniel Neuhäuser
02f0c755a3 Merge pull request #1117 from lord63/patch-1
Fix some typos
2014-07-26 17:26:31 +02:00
lord63
29768ce45e Correct the mistake again. 2014-07-26 22:43:52 +08:00
INADA Naoki
efdf2e1212 Update python3.rst 2014-07-26 21:47:41 +09:00
lord63
e429e47a96 Correct the mistakes. 2014-07-26 20:15:36 +08:00
Daniel Neuhäuser
221aaa56c9 Merge pull request #1122 from milesrichardson/master
fixed typo -- missing "are" in docs/signals.rst
2014-07-26 10:43:00 +02:00
Daniel Neuhäuser
8d3ee017c5 Merge pull request #1132 from nicorevin/update_links
Update doclinks
2014-07-26 10:42:47 +02:00
Nico Revin
22219f51e5 Update doclinks
Fix redirects and broken links
2014-07-24 23:30:50 +04:00
Miles Richardson
c8ce5326b4 fixed typo -- missing "are" in docs/signals.rst 2014-07-15 15:19:00 +08:00
lord63
02e7bec21c Fix typos in config.rst 2014-07-14 15:08:52 +08:00
lord63
7777b06809 Fix a typo in config.rst 2014-07-14 15:08:52 +08:00
lord63
de5bb759e3 Fix typos in shell.rst 2014-07-14 15:08:31 +08:00
lord63
3e9f074d05 Update becomingbig.rst 2014-07-14 15:08:31 +08:00
lord63
92191fb9d9 Fix a typo in templating.rst 2014-07-14 15:07:52 +08:00
INADA Naoki
931be87475 Update python3.rst
Fixes #1101
2014-07-10 23:01:32 +09:00
Kenneth Reitz
577581665c Merge pull request #1105 from limeburst/master
Fix typo in cli docs
2014-07-08 14:21:53 -04:00
Armin Ronacher
cc98ba9092 Merge pull request #1110 from methane/patch-2
Stop recommending Python 2.6
2014-07-07 16:38:57 +02:00
INADA Naoki
add59a91cf Stop recommending Python 2.6 2014-07-07 21:17:20 +09:00
Jihyeok Seo
f5b15c2a35 Fix typo in cli docs 2014-07-06 00:32:31 +09:00
Suraj Patil
eb0c8a6bee The example does not execute
With the inclusion of the app.run we now are able to execute the program, it would be great if we'd have even more detailed docs available for the examples
2014-07-03 18:19:09 +05:30
root-11
2d992e7f13 Update schema.rst
The error is that sqlite3 needs escaping on the database column 'text' in the line:
text text not null
so that it becomes:
'text' text not null

The example on mitsuhiko/flask is correct and helped me detecting the mistake.
2014-07-01 15:57:50 +01:00
Kenneth Reitz
0ce47a365f Merge pull request #1096 from slater/patch-1
Update dbcon.rst
2014-06-30 19:42:32 -04:00
Kenneth Reitz
6f990f67ed Merge pull request #1097 from slater/patch-2
Update dbinit.rst
2014-06-30 19:42:14 -04:00
Mark Slater
35282a881e Update dbinit.rst
"require" -> "requires"
2014-06-29 15:51:03 -07:00
Mark Slater
171253a0eb Update dbcon.rst
"Teared" should be "torn", I think?
2014-06-29 15:48:52 -07:00
Kenneth Reitz
9fb52d5e02 Merge pull request #1086 from fengsp/patch-1
Fixed typo in _compat.py
2014-06-18 03:03:58 +08:00
Kenneth Reitz
8efbae917b Merge pull request #1088 from lord63/master
Update installation.rst
2014-06-18 03:03:42 +08:00
Kenneth Reitz
b0f594efc9 Merge pull request #1090 from wxcafe/master
Update mod_wsgi.rst
2014-06-18 03:01:56 +08:00
Wxcafé (Clément Hertling)
777e23f81e Update mod_wsgi.rst
Changes deprecated pkg_add to pkg install, adds documentation for yum
2014-06-16 22:07:20 +02:00
lord63
c44a6111bc Update installation.rst 2014-06-16 18:59:33 +08:00
lord63
a8fd417b31 Update installation.rst
Add descriptions about how leave from the virtual environment.
2014-06-16 18:39:16 +08:00
Shipeng Feng
bf3708609a Fixed typo in _compat.py 2014-06-15 12:42:34 +08:00
Armin Ronacher
3fc10bd240 Merge pull request #1077 from hdformat/patch-1
Update mod_wsgi.rst
2014-06-06 21:11:26 +06:00
Armin Ronacher
7cfe833a50 Merge pull request #1079 from smarkets/master
Get rid of _tag->closure->_tag reference cycle
2014-06-06 21:02:38 +06:00
Jakub Stasiak
4541910381 Get rid of _tag->closure->_tag reference cycle 2014-06-04 14:47:26 +01:00
EJ Lee
6b9370a854 Update mod_wsgi.rst
note configuration changes in apache 2.4
2014-06-02 21:28:27 +09:00
Kenneth Reitz
76456dc3b2 Merge pull request #1075 from brannerchinese/master
add `Table` to import in `sqlalchemy.rst` example
2014-05-30 13:39:21 -04:00
David Branner
fb5d674488 add Table to import in sqlalchemy.rst example 2014-05-30 12:48:49 -04:00
Kenneth Reitz
16a7dd06aa Merge pull request #1062 from SteelyWing/patch-2
Doc for add check upload file
2014-05-27 12:10:37 -04:00
Kenneth Reitz
1eede1de1f Merge pull request #1064 from kekumu/patch-adv-foreword
Ambiguity in Advanced Foreword
2014-05-27 12:09:38 -04:00
Kenneth Reitz
39bfb54417 Merge pull request #1066 from bulatb/patch-1
Fixed a typo.
2014-05-27 12:09:17 -04:00
Bulat Bochkariov
bd888eaa61 Fixed a typo. 2014-05-20 21:54:54 -07:00
kekumu
305ccd5df9 Update advanced_foreword.rst
I think the doc is supposed to read, "Because of that, Flask has a few design choices that some people might find surprising or unorthodox."

Otherwise, it could possibly mean, "Because of that, Flask has few design choices that people would find surprising or unorthodox."

Or perhaps even less ambiguous, "Because of that, Flask has few surprising or unorthodox design choices."
2014-05-19 01:52:58 -04:00
Wing
02b02543b3 Doc for add check upload file 2014-05-17 14:44:34 +08:00
Kenneth Reitz
da1c1f0d7f Merge pull request #1057 from IanConnolly/doc-fix
Fixes #1051
2014-05-16 10:16:12 -04:00
Kenneth Reitz
61c5163679 Merge pull request #1058 from shalabhaggarwal/master
Fixed a small typo with flask.g docstring
2014-05-16 10:15:06 -04:00
Shalabh Aggarwal
1f5927eee2 Fixed a small typo with flask.g docstring 2014-05-14 09:15:34 +05:30
Ian Connolly
367a168d86 Fixes #1051 2014-05-13 22:11:05 +01:00
Kenneth Reitz
807067001f Merge pull request #1054 from lord63/master
fix a small mistake in setup.rst
2014-05-12 12:23:22 -04:00
Kenneth Reitz
bd51d2b88c Merge pull request #1052 from miguelgrinberg/master
fixed import for python 3
2014-05-12 12:22:57 -04:00
Kenneth Reitz
332fa79881 Merge pull request #1055 from IanConnolly/doc-fix
Fix a tiny spelling error: untilization -> utilization
2014-05-12 12:21:46 -04:00
lord63
2b8a281c1c fix a small mistake in setup.rst 2014-05-12 16:01:53 +08:00
Armin Ronacher
937ad10275 Simplified app finding for cli 2014-05-12 02:16:38 +02:00
Armin Ronacher
7321a480ea Simplified click integration a bit 2014-05-12 02:16:38 +02:00
Ian Connolly
fcec4b140c Fix a tiny spelling error: untilization -> utilization 2014-05-11 13:46:58 +01:00
lord63
4a6f932610 fix a small mistake in setup.rst 2014-05-11 14:08:35 +08:00
Miguel Grinberg
224367fe98 fixed import for python 3 2014-05-09 07:48:08 -07:00
Kenneth Reitz
32d32249d5 Merge pull request #1050 from julen/doc-fixes
Docs: fixes
2014-05-09 15:50:11 +02:00
Kenneth Reitz
8fd1825551 Merge pull request #1010 from plumdog/master
Tweaks to docs/patterns/viewdecorators.rst
2014-05-09 15:48:36 +02:00
Armin Ronacher
fa6eded6f5 Fixed the cli system failing syntax errors. 2014-05-08 22:33:58 +02:00
Julen Ruiz Aizpuru
a700cb2a76 Docs: fixes 2014-05-07 22:37:13 +02:00
Armin Ronacher
1b77a3fb11 Made errors for working outside of contexts clearer. 2014-05-07 22:26:50 +02:00
Armin Ronacher
5693b9d730 Merge branch 'pr/839' 2014-05-07 21:53:59 +02:00
Armin Ronacher
2639a23b88 Updated setup.py a bit. This fixes #1018 2014-05-07 21:51:18 +02:00
Armin Ronacher
e3a81497f9 Merge pull request #1040 from schlamar/patch-1
Fixed typo.
2014-05-07 21:44:30 +02:00
Armin Ronacher
3569fc2441 Greatly refactored click integration and documented it a bit more. 2014-05-07 21:35:51 +02:00
Marc Schlaich
44b0aeb048 Fixed typo. 2014-05-07 15:53:19 +02:00
Armin Ronacher
81576c236a Further refactored script system to allow more customization for special apps. 2014-05-07 13:27:41 +02:00
Armin Ronacher
ed7b4ccac1 Refactored loading logic to super properly. 2014-05-07 11:36:49 +02:00
Armin Ronacher
4532e89efe Refactored script info to allow more advanced patterns. 2014-05-07 11:34:20 +02:00
Armin Ronacher
b9013ede22 Clarified how to test with click 2014-05-02 11:50:00 +01:00
Armin Ronacher
d2d8e66130 Fixed flask tests 2014-05-02 11:46:04 +01:00
Armin Ronacher
e059bf311c Improved support for composable cli 2014-05-01 13:44:11 +01:00
Armin Ronacher
9ab5987100 Updated the examples to be cli based 2014-04-29 01:48:31 +02:00
Armin Ronacher
3be7d918ce Merge branch 'master' of github.com:mitsuhiko/flask 2014-04-29 01:33:58 +02:00
Armin Ronacher
a3ad5405a6 Updated documentation once more for new cli. 2014-04-29 01:03:32 +02:00
Armin Ronacher
9213e77957 Merge pull request #1039 from erikrose/patch-1
Fix a docstring type in cli.py.
2014-04-28 19:59:51 +02:00
Erik Rose
ed9e458850 Fix a docstring type in cli.py. 2014-04-28 11:26:18 -04:00
Armin Ronacher
a3a5075a94 Updated tutorial to the flask script 2014-04-28 15:18:27 +02:00
Armin Ronacher
bacdd076bd Add "." to sys.path by default 2014-04-28 15:15:58 +02:00
Armin Ronacher
ff034e42cf Added a missing docstring 2014-04-28 13:54:13 +02:00
Armin Ronacher
984142072b Added missing documentation page 2014-04-28 13:31:21 +02:00
Armin Ronacher
67e4d3ee63 Merge branch 'master' of github.com:mitsuhiko/flask 2014-04-28 13:29:31 +02:00
Armin Ronacher
e9d1fc47bf Updated docs for click support 2014-04-28 13:27:13 +02:00
Armin Ronacher
7bb3271f1a Added changelog entry for click 2014-04-28 13:27:07 +02:00
Armin Ronacher
3bdb90f06b Added click support to Flask 2014-04-28 13:26:23 +02:00
Armin Ronacher
0ac492a0ac Depend on click now 2014-04-28 13:26:14 +02:00
Daniel Neuhäuser
c73d740e57 Merge pull request #1030 from zakj/master
Fix typos in docstrings and comments in run.py
2014-04-26 02:14:37 +02:00
Daniel Neuhäuser
ea73571a54 Merge pull request #1032 from cgar/spelling
few mispelling errors
2014-04-26 02:12:51 +02:00
Daniel Neuhäuser
033b0931aa Run tests with Python 3.4 with tox 2014-04-26 01:45:20 +02:00
Daniel Neuhäuser
e991bef574 Switch diveintohtml5.org to diveintohtml5.info 2014-04-26 01:39:22 +02:00
Daniel Neuhäuser
13293b499f Use libevent.org 2014-04-26 01:38:20 +02:00
Daniel Neuhäuser
51228ad0d1 Use https for devcenter.heroku.com 2014-04-26 01:37:19 +02:00
Daniel Neuhäuser
52def324b8 Use https instead of http for docs.python.org 2014-04-26 01:36:36 +02:00
Daniel Neuhäuser
e89c867d62 Switch packages.python.org to pythonhosted.org 2014-04-26 01:35:37 +02:00
Daniel Neuhäuser
34871a286e Switch pypi links to https
To which the http version redirects permanently
2014-04-26 01:30:28 +02:00
Daniel Neuhäuser
954eeb8d17 Fix Jinja link 2014-04-26 01:26:12 +02:00
Daniel Neuhäuser
b5e78425be Link to https version of python docs
To which the http version permanently redirects
2014-04-26 01:24:07 +02:00
Daniel Neuhäuser
20edb3189c Fix Pocoo documentation links 2014-04-26 01:20:12 +02:00
Daniel Neuhäuser
16308bf675 Check links in the documentation with tox 2014-04-26 01:13:19 +02:00
Carlos E. Garcia
52fa195d45 few mispelling errors 2014-04-23 10:46:38 -04:00
Zak Johnson
e21afed0bb Fix typos in docstrings and comments in run.py 2014-04-21 15:37:23 -07:00
Armin Ronacher
1b06c8a411 Added __main__ module 2014-04-21 17:52:04 +02:00
Armin Ronacher
8a46eec4f8 Fixed a reference in the docs. 2014-04-21 17:51:52 +02:00
Armin Ronacher
e46bca4051 Added thread flag to flask run 2014-04-21 16:39:22 +02:00
Armin Ronacher
6018b1276e Merge branch 'master' of github.com:mitsuhiko/flask 2014-04-21 16:34:37 +02:00
Armin Ronacher
7503bde223 Added the new flask run module to start the server. 2014-04-21 16:34:17 +02:00
Armin Ronacher
42c28c3758 Fixed intention in flask init 2014-04-21 15:58:27 +02:00
Mihir Singh
5935ee495c Add tests for the Vary: Cookie header 2014-04-16 17:39:11 -04:00
Mihir Singh
671c67aac9 Append a 'Vary: Cookie' header to the response when the session has been accessed 2014-04-16 17:38:41 -04:00
Kenneth Reitz
5c3b161c9e Merge pull request #1012 from atupal/patch-2
missed word.
2014-04-14 19:03:04 -04:00
Kenneth Reitz
01e831f082 Merge pull request #1019 from raimu/master
fix typo
2014-04-14 19:02:52 -04:00
Kenneth Reitz
00679eab93 Merge pull request #1022 from mjfroehlich/patch-1
Fix minor typo
2014-04-14 19:02:44 -04:00
mjfroehlich
15d8af52db Fix minor typo 2014-04-13 22:25:10 +02:00
raimu
fbda3f94ba fix typo 2014-04-11 22:40:21 +02:00
Armin Ronacher
d4b3d16c14 Better support for namespace packages. 2014-04-11 19:59:54 +02:00
Armin Ronacher
a293b99b21 Fixed the last changeset. 2014-04-11 13:31:57 +02:00
Armin Ronacher
9554844e2a Added workaround for Python 3.3's frozen loader 2014-04-11 13:31:17 +02:00
Armin Ronacher
696bffc9e9 Updated changelog formatting 2014-04-11 13:28:38 +02:00
Armin Ronacher
5fd81f702c Merge branch 'master' of github.com:mitsuhiko/flask 2014-04-10 00:28:04 +02:00
Armin Ronacher
f79ce52586 Upload to new server 2014-04-10 00:27:27 +02:00
Kenneth Reitz
470014a2ca Merge pull request #1014 from untitaker/pr842
Fix when release date is not today
2014-04-06 13:11:17 -04:00
Markus Unterwaditzer
54688b26a9 Fix when release date is not today
Also, some fixes for PyFlakes

Original commit by @dongweiming at
a05c403870
2014-04-05 11:39:31 +02:00
atupal
132c2c4c79 missed word.
request tstack -> request context stack
2014-04-02 09:16:43 +08:00
Andrew Plummer
b2b531a36b Tweak wording in viewdecorators.rst 2014-03-26 16:52:06 +00:00
Andrew Plummer
db1be12aea Fix import in viewdecorators.rst for @templated 2014-03-26 16:40:25 +00:00
Kenneth Reitz
d4fec14544 Revert "Revert "Merge pull request #859 from wvh/register_error_handler""
This reverts commit 2aa26fff04.
2014-03-21 17:15:31 -04:00
Kenneth Reitz
2aa26fff04 Revert "Merge pull request #859 from wvh/register_error_handler"
This reverts commit 6347e75dee, reversing
changes made to 3fd40e83e5.
2014-03-21 17:12:26 -04:00
Kenneth Reitz
6347e75dee Merge pull request #859 from wvh/register_error_handler
Add a non-decorator version of the error handler register function
2014-03-21 17:08:34 -04:00
Kenneth Reitz
3fd40e83e5 Merge pull request #864 from obeattie/master
Make the decorators attribute on View a tuple by default
2014-03-21 17:05:24 -04:00
Kenneth Reitz
9427e16567 Merge pull request #707 from xsleonard/patch-1
Mention register_error_handler in errorhandler doc
2014-03-21 17:03:02 -04:00
Kenneth Reitz
9c434ebc67 Merge pull request #885 from jmhobbs/master
Update url_for documentation for Flask.url_build_error_handlers
2014-03-21 17:01:55 -04:00
Kenneth Reitz
21f3ad2671 Merge pull request #830 from hntw/patch-1
Update blueprints.rst - Add Error Handlers
2014-03-21 16:54:35 -04:00
Kenneth Reitz
bddcc1e763 Merge pull request #838 from enkore/master
get_cookie_path: fix docstring
2014-03-21 16:46:43 -04:00
Kenneth Reitz
7e4d51c91c Merge pull request #869 from christophersu/doc-fix-1
Add missing import on SQLAlchemy documentation page
2014-03-21 16:46:05 -04:00
Kenneth Reitz
7f5b6c692d Merge pull request #876 from defuz/templates-auto-reload
Add TEMPLATES_AUTO_RELOAD config key
2014-03-21 16:43:20 -04:00
Kenneth Reitz
4c0253f9fd Merge pull request #862 from bikerm16/master
Minor test fixes
2014-03-21 16:39:13 -04:00
Kenneth Reitz
58681ec11e Merge pull request #889 from mattskone/master
Escaped 'text' keyword in column name.
2014-03-21 16:38:00 -04:00
Kenneth Reitz
02eb9c99fd Merge pull request #977 from Ivoz/patch-1
Update windows installation and other notes
2014-03-21 16:36:12 -04:00
Kenneth Reitz
872094c556 Merge pull request #1000 from mikar/master
harmless comment fixes/typos
2014-03-21 16:21:18 -04:00
Kenneth Reitz
a7b5cec629 Merge pull request #1004 from kylestev/patch-1
Small punctuation change in unicode doc
2014-03-21 16:21:01 -04:00
Armin Ronacher
36e86be06d Merge branch 'master' of github.com:mitsuhiko/flask 2014-03-19 23:07:58 +00:00
Armin Ronacher
95fa9f21ec Added a missing import 2014-03-19 23:07:42 +00:00
Kyle Stevenson
8cd66bf178 Small punctuation change in unicode doc
Just makes it easier on the eyes/brain.
2014-03-19 10:23:17 -07:00
max demian
db12a8f5e4 Update wrappers.py 2014-03-15 14:45:37 +01:00
max demian
6974d52815 Update views.py 2014-03-15 14:44:27 +01:00
max demian
2eef63a320 Update signals.py 2014-03-15 14:42:21 +01:00
max demian
f3f7b640b9 Update sessions.py
missing backticks in docstring
2014-03-15 14:38:19 +01:00
max demian
cb25c42316 Update json.py 2014-03-15 14:35:21 +01:00
Daniel Neuhäuser
69db1e9b1f Merge pull request #872 from dmackinnon/patch-1
Fix typo
2014-03-13 20:38:41 +01:00
Daniel Neuhäuser
718c3a3ce7 Merge pull request #874 from defuz/patch-1
fix typo (jsonfiy -> jsonify)
2014-03-13 20:38:19 +01:00
Daniel Neuhäuser
a71b65cb15 Merge pull request #877 from yoloseem/patch-1
Fix a typo on blueprints module name.
2014-03-13 20:35:29 +01:00
Daniel Neuhäuser
caa0c00420 Merge pull request #878 from shamrin/patch-1
quickstart: import `request` in HTTP methods example
2014-03-13 20:33:46 +01:00
Daniel Neuhäuser
06857c9ba5 Add Config.get_namespace to CHANGES 2014-03-13 20:23:43 +01:00
Daniel Neuhäuser
ba80e1e33b Fix Python 3 compat issue in Config.get_namespace 2014-03-13 20:22:18 +01:00
Daniel Neuhäuser
0674ee875d Merge branch 'config-namespaces' of https://github.com/mattupstate/flask into config-namespaces
Conflicts:
	flask/config.py
2014-03-13 20:20:22 +01:00
Daniel Neuhäuser
2c2c240d6d Merge pull request #994 from roskoff/master
Added 'import os' statement
2014-03-13 19:25:34 +01:00
Daniel Neuhäuser
ff3ef8511e Merge pull request #997 from charlax/ca/fix/response_class_documentation
Clarify the after_request argument
2014-03-13 19:24:53 +01:00
Charles-Axel Dein
dfae2679a6 Clarify the after_request argument
Make it a bit clearer that it's an instance of response_class that is
expected, not the actual response_class class.
2014-03-05 15:22:59 -08:00
Eliseo Ocampos
ffff509cf0 Added 'import os' statement
Added 'import os' statement so you can use os.path.join() when defining DATABASE location
2014-03-04 14:57:12 -08:00
Kenneth Reitz
7a353a7d1b Merge pull request #980 from grampajoe/patch-1
Update docs copyright date
2014-03-03 13:17:29 -05:00
Daniel Neuhäuser
d43bfb261a Add assertIsInstance to FlaskTestCase on 2.6
This fixes an error in ConfigTestCase.test_custom_config_class
2014-02-20 19:17:59 +01:00
Daniel Neuhäuser
3f8e29b12c Add Flask.config_class to changelog 2014-02-20 19:15:42 +01:00
Daniel Neuhäuser
66e51d5be7 Merge branch 'master' of https://github.com/Xion/flask into Xion-master
Conflicts:
	flask/testsuite/config.py
2014-02-20 19:12:56 +01:00
Joe Friedl
19baae3d34 Update docs copyright date
Happy belated New Year!
2014-02-13 10:28:21 -05:00
Daniel Neuhäuser
97411295e3 Add Config.from_json to changelog 2014-02-12 23:53:51 +01:00
Daniel Neuhäuser
95a1ce4d6e Merge branch 'config-from-json' of https://github.com/mattupstate/flask into mattupstate-config-from-json 2014-02-12 23:42:39 +01:00
Matt Iversen
a8e88bebd1 Update windows installation and other notes
Making allowance for new convenience of `get-pip.py` that automatically installs setuptools and pip together.

Stop recommending distribute, which has now been merged into setuptools.
2014-02-11 07:24:31 +11:00
Armin Ronacher
98754b0e4f Merge branch '0.10-maintenance' 2014-02-09 16:08:03 +00:00
Armin Ronacher
ddb5f9dc49 Fixed a broken test 2014-02-09 16:07:56 +00:00
Armin Ronacher
82f99f42a8 Disarmed a sentence a bit 2014-02-09 13:35:38 +00:00
Armin Ronacher
135d090c0f Merge branch 'master' of github.com:mitsuhiko/flask 2014-02-09 13:29:56 +00:00
Armin Ronacher
5b0545bf80 Merge branch '0.10-maintenance' 2014-02-09 13:29:03 +00:00
Armin Ronacher
fb622380d0 Use older descriptor to support older werkzeug versions 2014-02-09 13:28:57 +00:00
Armin Ronacher
47a41b645f Merge pull request #884 from rsyring/patch-2
Update appfactories.rst, make extension related section clearer
2014-02-09 13:27:35 +00:00
Armin Ronacher
a9503580d2 Merge branch '0.10-maintenance' 2014-02-09 13:27:05 +00:00
Armin Ronacher
141a5533c9 Documented fix for #879 2014-02-09 13:26:32 +00:00
Armin Ronacher
75f2af7a6a Use a condition variable instead of sleeping 2014-02-09 13:25:36 +00:00
Alexis Svinartchouk
280d865960 fix issue #879 and add a test for it
Signed-off-by: Armin Ronacher <armin.ronacher@active-4.com>
2014-02-09 13:22:05 +00:00
Armin Ronacher
c938771258 Merge branch 'master' of github.com:mitsuhiko/flask 2014-02-09 13:21:08 +00:00
Armin Ronacher
ba36d57729 Merge pull request #897 from d3spis3d/master
URL Reversing in Quickstart Doc #779
2014-02-09 13:20:46 +00:00
Armin Ronacher
9298d89aed Merge branch '0.10-maintenance' 2014-02-09 13:14:26 +00:00
Armin Ronacher
964c4a37c0 Closed an unclosed file in the tests 2014-02-09 13:14:15 +00:00
Armin Ronacher
001100bc0b Fixed PyStringIO in tests for 2.x 2014-02-09 13:13:31 +00:00
Armin Ronacher
8cb79fd026 Added a test for sending from directories 2014-02-09 13:06:54 +00:00
Armin Ronacher
76e2f9cd03 Fixed send_from_directory not rebasing to the root path. This fixes #921 2014-02-09 13:01:54 +00:00
Armin Ronacher
23d9b33e92 Merge branch '0.10-maintenance' 2014-02-08 22:30:00 +00:00
Armin Ronacher
d094d5b6fc Fixed warning and broken tests on 3.3 2014-02-08 22:29:46 +00:00
Armin Ronacher
6f44ca705f Fixed sqlite3 pattern. This fixes #924 2014-02-08 22:14:23 +00:00
Armin Ronacher
a8a98bc6b6 Various documentation fixups 2014-02-08 22:10:08 +00:00
Armin Ronacher
9074bc46af Switch away from /tmp for windows users 2014-02-08 22:07:13 +00:00
Armin Ronacher
e95cef66a3 Merge pull request #931 from aphexcx/patch-1
Update celery.rst
2014-02-08 17:47:22 +00:00
Armin Ronacher
e2264d0607 Merge pull request #936 from zheller/fix-typo
Fix typo in helpers.py
2014-02-08 17:46:32 +00:00
Armin Ronacher
e67d9a04b2 Fixed a changelog entry 2014-02-08 17:46:02 +00:00
Armin Ronacher
2506c0b9a9 Fixed sending etags for file streams with a name. This fixes #930. 2014-02-08 17:45:27 +00:00
Armin Ronacher
1bddb30e4a Merge pull request #935 from markhildreth/doc-fix
Fixed incorrect grammar in Config.rst
2014-02-08 17:40:30 +00:00
Armin Ronacher
b0f8d0f01b Merge branch 'master' of github.com:mitsuhiko/flask 2014-02-08 17:40:02 +00:00
Armin Ronacher
a8f6f7413f Merge branch '0.10-maintenance' 2014-02-08 17:39:46 +00:00
Armin Ronacher
46c24da016 Make before_first_request a decorator 2014-02-08 17:39:26 +00:00
Armin Ronacher
ae45aed8d6 Removed an unnecessary newline 2014-02-08 17:36:12 +00:00
Armin Ronacher
05caa5a50d Merge pull request #942 from bool-dev/patch-1
Updated greenlet links, which were dead.
2014-02-08 17:34:42 +00:00
Armin Ronacher
1f638d63ff Merge pull request #948 from Spittie/patch-1
Update fileuploads.rst
2014-02-08 17:34:30 +00:00
Armin Ronacher
6075797f13 Added changelog entry 2014-02-08 17:33:42 +00:00
Armin Ronacher
f07e4cb0c3 Merge branch '0.10-maintenance' 2014-02-08 17:32:59 +00:00
Armin Ronacher
6de9484c97 Fixed a typo 2014-02-08 17:32:54 +00:00
Armin Ronacher
c9bf907037 Merge pull request #938 from ahlen/response-with-headers-without-status
Enable tuple responses with headers without status
2014-02-08 17:32:01 +00:00
Armin Ronacher
4d9916e1a6 Merge pull request #946 from allevo/master
Use json method of requests.Response
2014-02-08 17:30:55 +00:00
Armin Ronacher
58b4fc209a Merge pull request #955 from ifiokjr/patch-1
Update appcontext.rst
2014-02-08 17:24:33 +00:00
Armin Ronacher
53528ad2c3 Merge branch '0.10-maintenance' 2014-02-08 17:19:11 +00:00
Armin Ronacher
e7c587789a Fixe a bug in the test client causing url parameters to be removed. This fixes #968 2014-02-08 17:19:00 +00:00
Armin Ronacher
e5bba9deb5 Added support for custom JSON mimetypes 2014-02-08 17:01:13 +00:00
Armin Ronacher
f5a02b9495 Added a warning about key sorting 2014-02-08 16:27:26 +00:00
Armin Ronacher
ccc2de1997 Merge pull request #962 from nZac/JSON-Support-doc-update
added a note to the api documentation about JSON_SORT_KEYS. Fixes #922
2014-02-08 16:26:27 +00:00
Armin Ronacher
11003d0c29 Merge pull request #972 from alexpearce/patch-1
Explicitly pass the Celery instance name.
2014-02-08 16:24:50 +00:00
Armin Ronacher
f791ede346 Merge pull request #975 from martinp/update-license
Update copyright year in license
2014-02-08 16:24:27 +00:00
Martin Polden
3dab2f3d41 Update copyright year 2014-02-07 10:26:26 +01:00
Alex Pearce
3d6de4dd79 Explicitly pass the Celery instance name.
When starting a Celery worker module, it is assumed that the Celery instance within the module is called `app`. This is not the case in the Celery pattern, where it is called `celery`, and so must be explicitly referenced.
2014-02-05 20:11:06 +00:00
Kenneth Reitz
17a3056be4 Merge pull request #961 from GCorbel/patch-1
Remove the extra "1"
2014-01-27 09:39:04 -08:00
Armin Ronacher
e78961c812 Fixed a missing import 2014-01-26 18:08:02 +00:00
Armin Ronacher
52e1c383fa Make Python 3 happy 2014-01-26 17:47:16 +00:00
Armin Ronacher
6ec83e18dc Added a workaround for a pypy bug in context managers 2014-01-26 17:34:37 +00:00
Nicholas Zaccardi
ea656a8909 added a note to the api documentation about JSON_SORT_KEYS. Fixes #922 2014-01-24 19:21:24 -06:00
Guriec Corbel
21aa620b6b Remove the extra "1" 2014-01-24 12:43:23 -05:00
Matt Wright
90a50f8b51 Add get_namespace method on Config object for convenient access of namespaced config options. 2014-01-23 15:05:37 -05:00
Kenneth Reitz
de7e2bcf7a Merge pull request #947 from Ivoz/master
Release as universal python wheel (2/3 compat)
2014-01-23 11:07:41 -08:00
Ifiok Jr.
cb61696b47 Update appcontext.rst
small edit
2014-01-20 04:28:40 +00:00
Spittie
de3dbd3125 Update fileuploads.rst
secure_filename is under werkzeug.utils (http://werkzeug.pocoo.org/docs/utils/)
2014-01-12 02:54:08 +01:00
Matt Iversen
b0bb6c7f3d Release as universal python wheel (2/3 compat) 2014-01-11 11:31:22 +11:00
Tommaso Allevi
b81b040110 Remove unused import 2014-01-11 01:13:32 +01:00
Tommaso Allevi
f0f6545374 Use json method
Use json method of response.Response
2014-01-11 01:09:30 +01:00
Daniel Neuhäuser
b2971ec68c Merge pull request #943 from skeuomorf/favicon
Added a favicon for the docs
2014-01-06 08:28:03 -08:00
skeuomorf
cf0953619e Added a favicon for the docs 2014-01-06 17:58:54 +02:00
bool-dev
85aa4ec8c1 Updated greenlet links, which were dead. 2014-01-04 17:21:18 +05:30
Daniel Neuhäuser
d517f35d60 Merge branch '0.10-maintenance' 2014-01-02 19:21:55 +01:00
Daniel Neuhäuser
52098e1e4f Happy New Year 2014 2014-01-02 19:21:07 +01:00
Mikael Åhlén
dbc4096191 added a new test case with a Response instance and cleaned up the code 2013-12-31 22:59:00 +01:00
Mikael Åhlén
70f8b39c52 added a new behaviour for responses that enable the tuple to be in the form of (response, headers) and continiue to support the (response, status, headers) format. 2013-12-31 22:16:13 +01:00
Zachary Wright Heller
5addabfbdd Fix typo in helpers.py 2013-12-24 20:12:34 -08:00
Mark Hildreth
6a37c1716d Fixed incorrect grammar in Config.rst
Fixed incorrect grammar in "SESSION_REFRESH_EACH_REQUEST" configuration description.
2013-12-24 14:36:28 -05:00
Afik
67c165bcbb Update celery.rst
With the latest version of Celery (3.1.6), following this tutorial produces the following error when attempting to start the celery worker: 

    user_preload = tuple(self.app.user_options['preload'] or ())
AttributeError: 'Flask' object has no attribute 'user_options'

Using `app` as the variable name here confuses celery. Renaming `app` to `flask_app` in the tutorial solves the issue and allows the celery worker to start successfully.
2013-12-16 22:04:51 -08:00
Armin Ronacher
afd3c4532b Rewrapped lines 2013-11-09 13:41:09 +00:00
Reetta Vaahtoranta
0d648fa468 Changed the wording of some sentences there were difficult to understand. 2013-11-09 13:13:14 +00:00
Daniel Neuhäuser
d4f8634289 Merge pull request #899 from pengfei-xue/master
fix typo(there-> their)
2013-11-01 02:18:14 -07:00
Pengfei Xue
ecb31c6804 fix typo 2013-10-30 16:45:44 +08:00
d3spis3d
05dbf52fa5 URL Reversing in Quickstart #779
Updated quickstart to make clear that URL reversing refers to the use of
url_for() to build the URL. Issue #779
2013-10-30 11:29:18 +11:00
Daniel Neuhäuser
d14f57d9b8 Merge pull request #895 from daybarr/patch-1
Fix typo in docs for error_handler_spec
2013-10-29 02:35:48 -07:00
Day Barr
c021e58775 Fix typo in docs for error_handler_spec 2013-10-25 16:51:29 +01:00
Christopher Su
9cecf0d81c moved Table import to next code block 2013-10-22 11:37:35 -07:00
Daniel Neuhäuser
5689ef3639 Fix typo s/at at/at a/ 2013-10-22 14:01:33 +02:00
Daniel Neuhäuser
b63a9926dd Merge branch '0.10-maintenance' 2013-10-16 20:13:19 +02:00
Daniel Neuhäuser
a3a2f521f1 Clear exceptions when pushing a context
Fixes #882
2013-10-16 20:12:20 +02:00
Daniel Neuhäuser
544118bef9 Merge pull request #891 from ThiefMaster/docs-flaskext
Don't refer to flaskext in app.extensions docs
2013-10-16 10:09:41 -07:00
Daniel Neuhäuser
4212e67d29 Merge pull request #890 from seancron/documentation-fix
Documentation fix: Makes the error names consistent
2013-10-16 10:08:49 -07:00
Daniel Neuhäuser
cab514e9f1 Merge pull request #886 from talam/patch-1
Updated some typos
2013-10-16 10:06:01 -07:00
Adrian
46b5754d97 Don't refer to flaskext in docs 2013-10-15 21:47:42 +02:00
Sean Cronin
a7f5d60789 Makes the error names consistent 2013-10-15 12:37:25 -04:00
Matt Skone
1df0f2dc1c Escaped 'text' keyword in column name. 2013-10-15 09:17:19 -07:00
talam
b7f21831fa Updated some typos
Fixed some incorrect variable references.
2013-10-12 18:14:26 -04:00
John Hobbs
e31a2a80ec Update url_for documentation
Previous documentation referenced a non-existent property on the Flask
object called "build_error_handler".

This should actually reference Flask.url_build_error_handlers.
2013-10-11 17:03:54 -05:00
rsyring
fc85bf42ae Update appfactories.rst, make extension related section clearer 2013-10-11 08:39:46 -04:00
Alexey Shamrin
f161a71c19 quickstart: import request in HTTP methods example 2013-10-03 05:15:27 +04:00
Hyunjun Kim
5ecca4c0da Fix a typo on blueprints module name. 2013-10-02 15:10:27 +09:00
defuz
3e485009a8 add TEMPLATES_AUTO_RELOAD option to config 2013-09-30 21:06:49 +03:00
defuz
475b0c1cd9 fix typo (jsonfiy) 2013-09-26 18:46:30 +03:00
dmackinnon
231f45b432 Fix typo 2013-09-25 11:50:02 -04:00
Daniel Richman
3d67736e09 Check error handlers for specific classes first
This allows adding error handlers like this:

    @app.errorhandler(werkzeug.exceptions.Forbidden)

And subclassing HTTPExceptions:

    class ForbiddenBecauseReason(Forbidden): pass

    @app.errorhandler(ForbiddenBecauseReason)
    def error1(): return "Forbidden because reason", 403
    @app.errorhandler(403)
    def error2(): return "Forbidden", 403

... the idea being, that a flask extension might want to raise an
exception, with the default behaviour of creating a HTTP error page,
but still allowing the user to add a view/handler specific to that
exception (e.g., "Forbidden because you are not in the right group").
2013-09-21 21:16:24 +00:00
Christopher Su
8089eb5769 added missing import in sqlalchemy doc 2013-09-19 23:31:09 -07:00
Oliver Beattie
2a512ab907 Merge branch 'master' of github.com:obeattie/flask 2013-09-09 15:15:47 +01:00
Oliver Beattie
bb882454a0 Make the decorators attribute on View a tuple by default
To discourage accidental runtime modification applying to all views.
2013-09-09 15:13:42 +01:00
Daniel Neuhäuser
5d20501604 Merge pull request #863 from jet-sun/patch-1
Fix typo.
2013-09-08 11:27:27 -07:00
Jet Sun
6ebe45b0ad Fix typo. 2013-09-07 17:42:06 -07:00
Michael Bikovitsky
b7337080e4 Fix test_send_file_object
static/index.html now opens in binary mode, and therefore newline conversion does not take place.
2013-09-07 18:29:49 +03:00
Michael Bikovitsky
cff35237ef Fix test_no_error_swallowing
Path in assertion is now cross-platform.
2013-09-07 18:21:15 +03:00
Wouter Van Hemel
079ae20f24 Add tests for user-defined exceptions in blueprints 2013-09-06 11:17:30 +03:00
Daniel Neuhäuser
ff59db16bc Merge pull request #858 from svieira/patch-2
Patch for tutorial (minor code error)
2013-09-04 07:54:42 -07:00
Wouter Van Hemel
b03181363b Add a non-decorator version of the error handler register function
The main application object has a register_error_handler function
which mirrors the decorator's functionality. According to the principle
of least surprise, make sure blueprints also have this convenience function.
2013-09-04 12:42:35 +03:00
Sean Vieira
12d6ec4130 Fix with block 2013-09-03 23:36:10 -04:00
Daniel Neuhäuser
36d70d8789 Merge pull request #843 from wbowlin/master
corrected documentation for Request get_json()
2013-09-03 10:58:04 -07:00
Daniel Neuhäuser
5207c69064 Fix #856 ommited typo in quickstart 2013-09-03 19:47:00 +02:00
Armin Ronacher
8f1dada542 Some cleanups 2013-09-02 04:57:01 +06:00
Armin Ronacher
51d7c8de7d Merge branch 'master' of github.com:mitsuhiko/flask 2013-09-01 01:43:24 +06:00
Armin Ronacher
05161d3584 Rewrote tutorial to use the g based appcontext object 2013-09-01 01:32:41 +06:00
Armin Ronacher
42cf782ee3 Removed g object from example as it was unused 2013-08-30 19:50:45 +06:00
Daniel Neuhäuser
29f3a1ac23 Merge pull request #844 from adamobeng/patch-1
Fix typo
2013-08-25 04:25:50 -07:00
Adam Obeng
9cff681f97 Fix typo 2013-08-24 21:21:18 -04:00
Will Bowlin
3e90de2e10 corrected documentation for Request get_json() 2013-08-23 00:22:57 -05:00
Daniel Neuhäuser
be73233a55 Merge pull request #840 from mhils/master
Fix typo in docstring
2013-08-20 14:35:01 -07:00
Maximilian Hils
17e5fb365d Fix typo in docstring 2013-08-19 10:56:08 +02:00
enkore
f5d38dc4fc Update sessions.py
get_cookie_path: fix docstring
2013-08-17 21:32:52 +02:00
Daniel Neuhäuser
2d8a21c732 Merge branch '0.10-maintenance' 2013-08-13 15:58:46 +02:00
Daniel Neuhäuser
94f4360137 Explain is_package AttributeError in find_package
When a PEP 302 import hook is used that doesn't implement .is_package()
an AttributeError is raised. This looks like a bug in Flask. This change
fixes that problem in the sense that it explains, that the
AttributeError is intentional.
2013-08-13 15:53:58 +02:00
Daniel Neuhäuser
f3c5bff990 Merge pull request #831 from homeworkprod/json-docs-typo-fix
Fixed tiny but distracting typo.
2013-08-11 12:40:57 -07:00
Jochen Kupperschmidt
8246ce6a15 Fixed tiny but distracting typo. 2013-08-11 15:59:46 +02:00
Jamie Grove
63a126c66a Update blueprints.rst - Error Handlers
Added information about custom error handlers in Blueprints with example based simple_page.
2013-08-10 11:35:47 -04:00
Matt Wright
b290bf4079 Add ability to config from a JSON file 2013-08-07 18:03:37 -04:00
Armin Ronacher
1b08d527c7 Merge branch 'master' of github.com:mitsuhiko/flask 2013-08-05 09:08:29 +01:00
Kevin Burke
9e5ab21c8e app.py: Link to correct EnvironBuilder docs 2013-08-04 22:33:17 -07:00
Armin Ronacher
a2bc61b5ab Merge pull request #819 from chason/master
Changed sort_json test to test str sorting
2013-08-04 13:59:22 -07:00
Chason Chaffin
5e8dd8b287 Changed sort_json test to test str sorting
Tests when simplejson was installed were failing because of a change in
how it sorted in v3.0.0. This change first tests it via normal int
sorting for stdlib json then if that fails, it tests against str sorting
for simplejson.
2013-08-04 01:42:23 -07:00
Armin Ronacher
08931401e8 Merge pull request #817 from llimllib/master
Fix doc bug in patterns/sqlite3, clarify use of make_dicts
2013-08-01 01:15:17 -07:00
Bill Mill
159ae3dc26 Fix doc bug, clarify use of make_dicts 2013-07-31 22:06:15 -04:00
Armin Ronacher
2e17ad7fd4 Merge pull request #816 from untitaker/allowed_methods
Fix #815
2013-07-31 07:44:44 -07:00
Markus Unterwaditzer
af5a0853bf Fix #815 2013-07-31 00:38:03 +02:00
Armin Ronacher
3e4dbf93d9 Fixed a test that broke on 3.x 2013-07-30 16:56:40 +02:00
Armin Ronacher
559ae196e7 Merge branch 'master' of github.com:mitsuhiko/flask 2013-07-30 16:45:23 +02:00
Armin Ronacher
d1d835c023 Added SESSION_REFRESH_EACH_REQUEST config option.
This also changes how sessions are being refreshed.  With the new
behavior set-cookie is only emitted if the session is modified or if the
session is permanent.  Permanent sessions can be set to not refresh
automatically through the SESSION_REFRESH_EACH_REQUEST config key.

This fixes #798.
2013-07-30 16:43:54 +02:00
Armin Ronacher
1a66a7e110 Added line for 1.0 2013-07-30 16:43:41 +02:00
Armin Ronacher
da49f7398d Merge pull request #811 from rpicard/remove_options_workaround
Remove Werkzeug bug workaround from flask/app.py
2013-07-29 13:24:49 -07:00
Robert Picard
b6116c1de3 Remove Werkzeug bug workaround from flask/app.py
According to the note in the comment, you had to check to make sure that the
defaults were not an empty dictionary because of a bug in Werkzeug pre-0.7.

Since Flask officially requires 0.7 or greater, we can remove this little
workaround.
2013-07-29 13:42:04 -04:00
Armin Ronacher
1982c208ce Merge pull request #808 from untitaker/issue782
Fix #782 -- /tmp/ in tutorial
2013-07-26 16:28:08 -07:00
Markus Unterwaditzer
fd9bf8f376 Fix #782 -- /tmp/ in tutorial 2013-07-27 01:21:01 +02:00
Armin Ronacher
afa33e37ec Merge pull request #800 from nZac/issue#783
cleared up confusion for from_envvar in docs
2013-07-26 14:47:11 -07:00
Armin Ronacher
c541f7e3ee Fixed a typo 2013-07-26 23:44:40 +02:00
Eric Radman
73b4a52ca5 Update example for Apache FCGI config to use worker processes using FastCgiServer, along with some notes about FastCgiExternalServer 2013-07-26 15:07:40 -04:00
Armin Ronacher
6a621440ef Merge branch 'master' of github.com:mitsuhiko/flask 2013-07-24 21:48:47 +02:00
Armin Ronacher
e59e00576d Fixed a documentation typo 2013-07-24 21:48:28 +02:00
Nick Zaccardi
5ace060e5e cleared up confusion for from_envvar 2013-07-22 09:03:57 -05:00
Daniel Neuhäuser
ab1be65c88 Merge pull request #799 from cvrebert/patch-1
api.rst: fix some spelling/typos
2013-07-22 06:43:21 -07:00
Chris Rebert
f632ba25e0 api.rst: fix some spelling/typos 2013-07-22 02:12:17 -07:00
Daniel Neuhäuser
06139e7b08 Merge branch '0.10-maintenance' 2013-07-05 23:18:36 +02:00
Daniel Neuhäuser
f606a6d6a1 blinker repository moved to github 2013-07-05 23:18:13 +02:00
Daniel Neuhäuser
6c8955b5be Merge branch '0.10-maintenance' 2013-07-03 12:38:27 +02:00
Daniel Neuhäuser
13b8283793 Test blinker development version again
Apparently blinker isn't broken on tip anymore.
2013-07-03 12:37:43 +02:00
Daniel Neuhäuser
c8961c6dc9 Merge pull request #786 from mgaitan/patch-1
Missing `s` in a plural word
2013-07-01 06:44:03 -07:00
Daniel Neuhäuser
d56d96c8c2 Merge pull request #784 from BobStevens/master
quickstart guide - wording changes for clarity
2013-07-01 06:43:38 -07:00
Martín Gaitán
4028e2395c plural 2013-06-30 13:17:39 -03:00
BobStevens
9fe209b497 fixed typo 2013-06-27 16:32:20 -04:00
BobStevens
e2fdf28e97 word change for clarity
changed "200 error code" to "200 status code"
2013-06-27 16:31:04 -04:00
Daniel Neuhäuser
02b2df580a Merge branch '0.10-maintenance' 2013-06-27 17:08:20 +02:00
Daniel Neuhäuser
a364140bef Do not test with blinker dev version 2013-06-27 17:08:02 +02:00
Daniel Neuhäuser
c02c23ee30 Merge branch '0.10-maintenance'
Conflicts:
	tox.ini
2013-06-27 16:52:34 +02:00
Daniel Neuhäuser
f88cc2d2f9 Fix broken test_appcontext_signals test case
This fixes #781 and ensures that Flask is tested with blinker installed.
2013-06-27 16:49:27 +02:00
Daniel Neuhäuser
2132040a5f Merge pull request #776 from seedofjoy/master
Fix typo
2013-06-22 17:54:31 -07:00
Igor Mozharovsky
a225a304b8 Fix typo 2013-06-23 03:36:20 +03:00
Karol Kuczmarski
ec5b182f15 Add Flask.config_class feature 2013-06-22 22:09:30 +02:00
Daniel Neuhäuser
88b74b376e Don't use werkzeug dev version in tox anymore
We don't need the dev version anymore since the lastest werkzeug release
supports 3.3.
2013-06-19 17:24:02 +02:00
Armin Ronacher
b461c6eec2 Merge pull request #768 from steko/patch-1
Correct small typo in internal link
2013-06-16 03:40:57 -07:00
Daniel Neuhäuser
71ec329509 Merge pull request #770 from augustusdsouza/patch-1
Fixed a typo
2013-06-14 14:17:19 -07:00
augustusdsouza
dda373823b Fixed a typo 2013-06-15 00:01:34 +05:30
Stefano Costa
582a5c7b89 Correct small typo in internal link 2013-06-14 16:35:46 +03:00
Armin Ronacher
dfdcac2292 Fixed some embarrassing grammar 2013-06-14 10:54:16 +01:00
Armin Ronacher
977e7660ac Master is 0.11-dev 2013-06-14 09:55:08 +01:00
Armin Ronacher
d94b1bec24 In case we need a 0.10.2 2013-06-14 09:54:27 +01:00
Armin Ronacher
298334fffc Bump version number to 0.10.1 2013-06-14 09:54:07 +01:00
Armin Ronacher
e562acf029 Set release date for 0.10.1 2013-06-14 09:53:40 +01:00
Armin Ronacher
72bbeaf056 Added changelog entry for the method registering fix 2013-06-14 09:41:20 +01:00
Serge S. Koval
44e39ab071 Fixed class-based views support 2013-06-14 10:28:37 +03:00
Armin Ronacher
c9337c044c Merge branch '0.10-maintenance' 2013-06-14 00:24:27 +01:00
Armin Ronacher
58ad83f37c Added support for bytes in sessions back 2013-06-14 00:24:17 +01:00
Armin Ronacher
63d9ede451 Merge branch '0.10-maintenance' 2013-06-14 00:05:55 +01:00
Armin Ronacher
c502dfbbfb Changed |tojson filter to quote single attributes 2013-06-14 00:05:09 +01:00
Armin Ronacher
89731d86b6 Merge branch '0.10-maintenance' 2013-06-13 23:46:39 +01:00
Armin Ronacher
2713ea98cb Use same version specifications as in Werkzeug 2013-06-13 23:46:20 +01:00
Armin Ronacher
d34dde72e9 Merge branch 'master' of github.com:mitsuhiko/flask 2013-06-13 23:38:20 +01:00
Armin Ronacher
06872b5c72 Merge branch '0.10-maintenance' 2013-06-13 23:37:25 +01:00
Armin Ronacher
5886925ff3 Started 0.10 maintenance branch for a bugfix release 2013-06-13 23:36:50 +01:00
Daniel Neuhäuser
0780fc404d Add myself to AUTHORS 2013-06-13 22:16:53 +02:00
Daniel Neuhäuser
41171d11ae Add Python 3.3 classifier 2013-06-13 22:16:14 +02:00
Armin Ronacher
ec5291e46d Fixed invalid reference 2013-06-13 09:37:09 +01:00
Armin Ronacher
ac187bded7 This is 0.11-dev 2013-06-13 09:36:03 +01:00
Armin Ronacher
3b9574fec9 Bump version number to 0.10 2013-06-13 09:35:35 +01:00
Armin Ronacher
3061ab5b7e Release date is today, codename is Limoncello 2013-06-13 09:35:23 +01:00
Armin Ronacher
d9ebac10bb Flask should now work with release requirements on 3.3 2013-06-13 09:30:39 +01:00
Armin Ronacher
bc5e212e09 Added release requirements 2013-06-13 09:11:37 +01:00
Armin Ronacher
8149509f3d Fixed incorrect version definitions in travis 2013-06-13 09:05:31 +01:00
Armin Ronacher
43625defef Merge branch 'master' of github.com:mitsuhiko/flask 2013-06-13 09:00:47 +01:00
Armin Ronacher
2740595624 Changed build matrix for travis 2013-06-13 09:00:24 +01:00
Daniel Neuhäuser
c7a683d2fd Merge pull request #764 from marksteve/docs
Fix typo
2013-06-12 10:57:01 -07:00
Armin Ronacher
964174931d Added request.get_json(). 2013-06-12 16:27:48 +01:00
Mark Steve Samson
6565bd848e Fix typo 2013-06-12 22:04:49 +08:00
Armin Ronacher
335cbe01ce Fixed a typo 2013-06-11 20:18:26 +01:00
Armin Ronacher
f9f8180f15 Added documentation on API error handlers 2013-06-09 17:26:10 +01:00
Armin Ronacher
fc2225b463 Fixed a broken link in the docs 2013-06-09 12:47:01 +01:00
Armin Ronacher
f9846b9055 Added requirements for Python 3 2013-06-09 12:46:01 +01:00
Armin Ronacher
0ac9582113 Added notes on Python 3 2013-06-09 12:42:24 +01:00
Armin Ronacher
2c9c269284 Fixed a broken reference 2013-06-09 12:32:12 +01:00
Armin Ronacher
29bda590b2 Modernized docs in a few places 2013-06-09 12:30:27 +01:00
Armin Ronacher
e2d4aa1207 Added a missing note to the docs 2013-06-09 12:23:14 +01:00
Armin Ronacher
c889fbc231 Changed interface for flask.g
This now makes it behave like it did before, it's just an object.
It did however gain ``__contains__`` and ``__iter__`` and I added
a ``get()`` method to fetch an attribute without raising an
error.  This fixes #759.
2013-06-09 12:06:33 +01:00
Armin Ronacher
efd6e468ae Removed view_func from route documentaiton.
This fixes #763.
2013-06-09 11:46:43 +01:00
Armin Ronacher
23d8d66256 Added site name to persona login 2013-06-09 01:39:51 +01:00
Armin Ronacher
5f648a8eb8 Added Persona example 2013-06-09 01:30:15 +01:00
Armin Ronacher
e17024e85a Added a testcase for some more routing things between blueprints. 2013-06-08 12:57:15 +01:00
Armin Ronacher
681cb8f366 Switch to teardown_appcontext for docs in sqlalchemy pattern 2013-06-07 15:42:49 +01:00
Armin Ronacher
94c6ae51d7 Some small cleanup 2013-06-07 00:56:21 +01:00
Armin Ronacher
62dbe0e1ca The default run method is now accepting the port from the SERVER_NAME. 2013-06-07 00:46:30 +01:00
Armin Ronacher
05479eb954 Some reindentation cleanup 2013-06-05 10:35:41 +01:00
Armin Ronacher
93073489a0 Documented changes on the g object some more 2013-06-05 10:02:33 +01:00
Armin Ronacher
1f6be7ff63 Added example on faking resources and context 2013-06-05 09:58:28 +01:00
Armin Ronacher
0676bb8ab5 Added appcontext_pushed and appcontext_popped signals 2013-06-05 09:53:26 +01:00
Armin Ronacher
fd99abea57 Fixed too strict tests for cookie setting that broke on werkzeug changes 2013-06-05 09:47:31 +01:00
Armin Ronacher
ef72b78042 Imply the |safe on tojson in templates and change escaping logic 2013-06-03 12:25:08 +01:00
Armin Ronacher
56d3b74488 Added a test for non-ascii routing 2013-06-02 23:24:28 +01:00
Armin Ronacher
1b40b3b573 Fixed request context preservation and teardown handler interaction. 2013-06-02 21:47:32 +01:00
Armin Ronacher
6dfe933260 Removed an unnecessary as statement 2013-06-02 17:25:04 +01:00
Armin Ronacher
0190b770a1 Removed a bunch of code from _compat 2013-06-02 17:23:53 +01:00
Armin Ronacher
c629f69e69 Make the JSON module work better in the absence of an application context 2013-06-02 11:54:22 +01:00
Armin Ronacher
77d293cf49 Order JSON keys by default to avoid trashing HTTP caches 2013-06-01 19:24:03 +01:00
Armin Ronacher
3d9055b3b7 Added the JSONIFY_PRETTYPRINT_REGULAR config variable. This fixes #725 2013-06-01 00:20:00 +01:00
Armin Ronacher
1c8c21abd5 Let travis notify the #pocoo irc channel 2013-05-31 00:59:54 +01:00
Armin Ronacher
e9fa24cfa3 Make travis install development werkzeug 2013-05-31 00:56:09 +01:00
Armin Ronacher
6bd5dfad0c Test Flask against werkzeug master 2013-05-30 21:39:54 +01:00
Armin Ronacher
da747738e8 Merge branch 'master' of github.com:mitsuhiko/flask 2013-05-30 21:39:22 +01:00
Armin Ronacher
29e63e01ab Merge branch 'sprint-branch' 2013-05-30 21:39:06 +01:00
Armin Ronacher
b8aa9fed9a Added tox-test command 2013-05-30 18:19:01 +01:00
Armin Ronacher
e07dcb5562 Adjusted a testcase for Python 3 2013-05-30 18:17:04 +01:00
Armin Ronacher
f1918093ac Changed teardown error handling to be more reliable. 2013-05-30 18:15:17 +01:00
Armin Ronacher
90e3906d02 Fixed some test failures 2013-05-30 17:58:27 +01:00
Armin Ronacher
9ae8487330 Fixed a broekn testcase 2013-05-30 16:16:39 +01:00
Armin Ronacher
7f35fc2935 Merge pull request #751 from ThomasWaldmann/sprint-branch
fixing issues found while debugging, fix error in 1 test
2013-05-30 07:08:17 -07:00
Armin Ronacher
abc1505196 Fixed various issues on the Python 3 port 2013-05-30 15:07:18 +01:00
Thomas Waldmann
bbfef4c406 flask view function may return bytes/str/unicode 2013-05-30 16:02:28 +02:00
Thomas Waldmann
51042f4c9f fix issues in test_context_refcounts that were unnoticed yet as they did not make the test fail 2013-05-30 16:00:43 +02:00
Armin Ronacher
8aaf302586 Disable direct passthrough for accessing the data attribute on newer Werkzeugs 2013-05-30 14:35:23 +01:00
Armin Ronacher
eb622fb34f Fixed a whole bunch of resource warnings in the flask testsuite 2013-05-30 14:31:36 +01:00
Armin Ronacher
47572c5b40 Set the content length automatically before calling wrap_file 2013-05-30 14:24:29 +01:00
Armin Ronacher
ffd9296507 Close request objects if they support closing. 2013-05-30 12:51:12 +01:00
Armin Ronacher
775c76ac5c Enabled test mode for an app 2013-05-30 12:48:04 +01:00
Daniel Neuhäuser
404265110a Always return a list from get_flashed_messages 2013-05-26 21:46:22 +02:00
Daniel Neuhäuser
915d7180fc Merge pull request #747 from ThomasWaldmann/sprint-branch
replace 1/0 by 1 // 0 to get rid of DeprecationWarning (and PEP8 issue)
2013-05-26 11:41:28 -07:00
Thomas Waldmann
ac04bc7836 replace 1/0 by 1 // 0 to get rid of DeprecationWarning (and PEP8 issue) 2013-05-26 20:33:22 +02:00
Thomas Waldmann
0f5d8c258c Merge branch 'sprint-branch' of https://github.com/mitsuhiko/flask into sprint-branch 2013-05-26 19:15:53 +02:00
Daniel Neuhäuser
bb2e20f53f Depends on itsdangerous>=0.12 now 2013-05-26 15:37:52 +02:00
Daniel Neuhäuser
77753e9b73 Merge pull request #746 from ThomasWaldmann/sprint-branch
fix typos
2013-05-25 13:06:43 -07:00
Thomas Waldmann
f4f4c3555f Merge branch 'sprint-branch' of https://github.com/mitsuhiko/flask into sprint-branch 2013-05-25 22:04:37 +02:00
Thomas Waldmann
13cc69911c fix typos 2013-05-25 22:01:14 +02:00
Daniel Neuhäuser
4baeac07d9 Merge pull request #745 from ThomasWaldmann/sprint-branch
fix data types in after_request test
2013-05-25 12:01:49 -07:00
Thomas Waldmann
f9e9e77464 fix data types in after_request test
TODO: why was that bug not causing / displaying an exception somehow?
      should give a TypeError in py 3.3.
2013-05-25 20:58:12 +02:00
Daniel Neuhäuser
1fe20d3208 Merge pull request #744 from ThomasWaldmann/sprint-branch
2 small fixes for metaclass and import usage
2013-05-25 11:28:16 -07:00
Thomas Waldmann
96b8ffbb29 always import from ._compat 2013-05-25 20:24:14 +02:00
Thomas Waldmann
83f7658572 fix metaclass usage for py3 2013-05-25 20:19:17 +02:00
Daniel Neuhäuser
3c5d7bab26 Merge pull request #743 from ThomasWaldmann/sprint-branch
fix iterator in testsuite helpers
2013-05-25 10:49:25 -07:00
Thomas Waldmann
af5576a6c5 fix iterator in testsuite helpers 2013-05-25 19:46:26 +02:00
Daniel Neuhäuser
da10fb41b7 Merge pull request #741 from Turbo87/patch-1
Fixed typo in app.blueprints docstring
2013-05-25 10:36:10 -07:00
Daniel Neuhäuser
ffbcad1e46 Merge pull request #742 from ThomasWaldmann/sprint-branch
fix minitwit/flaskr test errors, improve docs about file open mode
2013-05-25 10:35:08 -07:00
Thomas Waldmann
8bb972e5ae fix minitwit/flaskr test errors, improve docs about file open mode
app.open_resource needs to get called with the correct mode param (python3
will read bytes [not str] if the wrong mode is used), add mode param docs.

rv.data is bytes, fix the data type we compare it with to be also bytes
2013-05-25 19:13:48 +02:00
Tobias Bieniek
12c08c03fb Fixed typo in app.blueprints docstring 2013-05-25 09:10:41 +03:00
Armin Ronacher
250247d96c Added install section 2013-05-23 14:17:51 +01:00
Armin Ronacher
df5890ad71 Change travis test command 2013-05-23 14:15:27 +01:00
Armin Ronacher
22816b1d3d Removed 2.5 support in master 2013-05-23 14:09:22 +01:00
Armin Ronacher
85ba8c96e9 Fixed a broken test 2013-05-23 14:07:25 +01:00
Armin Ronacher
16df96c552 Merge branch 'master' into sprint-branch 2013-05-23 14:01:33 +01:00
Armin Ronacher
4c27f7a8c4 Removed incorrect JSON exception subclasses 2013-05-23 13:59:10 +01:00
Armin Ronacher
eb023bcfad Support old and new name for json 2013-05-23 13:46:51 +01:00
Daniel Neuhäuser
79ec3d81c1 Prevent UnboundLocalError in test_build_error_handler 2013-05-22 22:58:12 +02:00
Daniel Neuhäuser
43b6d0a6d0 Ensure that config file is closed immediately 2013-05-22 22:49:25 +02:00
Daniel Neuhäuser
a0801719f8 Remove six dependency 2013-05-22 21:40:30 +02:00
Daniel Neuhäuser
135c53a5f2 Fix .iteritems() access in flask.sessions 2013-05-22 21:30:45 +02:00
Daniel Neuhäuser
d395d3684a Merge pull request #739 from untitaker/sprint-branch
Fix leak in leak detection code
2013-05-22 12:16:25 -07:00
Markus Unterwaditzer
3d36d6efb9 Fix leak in leak detection code
If ensure_clean_request_context found a leak, it would raise an
AssertionError and not clean up the leak, and therefore affect other
testcases.
2013-05-22 21:09:32 +02:00
Daniel Neuhäuser
4bea6bbe6d Make DebugFilesKeyError.__str__ return str on 3.x 2013-05-22 21:07:53 +02:00
Daniel Neuhäuser
3f80b0fd6c module name is quoted in ImportErrors on 3.x 2013-05-22 21:03:01 +02:00
Daniel Neuhäuser
8f73c552a9 Add missing assertIn, assertNotIn methods on 2.6 2013-05-22 20:53:32 +02:00
Daniel Neuhäuser
62e7275bdf Use assert_false where appropriate 2013-05-22 20:17:29 +02:00
Daniel Neuhäuser
9f8a2075c7 Use assert_in where appropriate 2013-05-22 20:12:50 +02:00
Daniel Neuhäuser
4d73ef1a19 Add missing msg argument to assert_true() 2013-05-22 19:19:46 +02:00
Daniel Neuhäuser
8e9f0bdedc Use assert_equal instead of assertEquals
assertEquals is deprecated and its use inconsistent
2013-05-22 17:30:37 +02:00
Daniel Neuhäuser
239780be28 Use assert_true instead of assert_
assert_ is deprecated which causes annoying warnings
2013-05-22 17:23:38 +02:00
Daniel Neuhäuser
5b89355b1c Response data is bytes 2013-05-22 17:14:07 +02:00
Daniel Neuhäuser
97815b999e Merge pull request #737 from untitaker/sprint-branch
Fix some literals
2013-05-22 08:11:46 -07:00
Markus Unterwaditzer
05f66ad735 Fix some literals 2013-05-22 17:09:37 +02:00
Daniel Neuhäuser
3f51a09db4 itsdangerous uses json instead of simplejson now 2013-05-22 16:33:50 +02:00
Daniel Neuhäuser
884aad8ece Test using itsdangerous with 3.x support 2013-05-22 16:33:05 +02:00
Daniel Neuhäuser
ee013e01b0 Merge pull request #736 from ThomasWaldmann/sprint-branch
some more work on py 3.3 port
2013-05-22 07:20:41 -07:00
Daniel Neuhäuser
da5edad23a Use werkzeug@sprint-branch in tox 2013-05-22 16:19:57 +02:00
Thomas Waldmann
e1d356fb71 ported some more stuff to py 3.3
removed init_jinja_globals hack from app.py after consulting mitsuhiko
(didn't work on py 3.3 "as is")

removed with_statement future imports, not needed any more

needs more work on 2.7 as well as on 3.3
2013-05-22 01:33:04 +02:00
Thomas Waldmann
a503520ac5 copy _compat.py from flask in here (and adapt docstring) 2013-05-21 23:34:25 +02:00
Armin Ronacher
aecc41deb8 Restore 2.5 support for the time being 2013-05-20 09:47:07 +01:00
Armin Ronacher
81c9b3570b Removed 2.5 from travis 2013-05-20 09:44:05 +01:00
Daniel Neuhäuser
ceb7c7f771 Don't notify IRC for this branch 2013-05-18 19:05:10 +02:00
Daniel Neuhäuser
506db0eab2 Use print_function 2013-05-18 19:00:06 +02:00
Daniel Neuhäuser
c618db92d6 reload_module is in six.moves 2013-05-18 18:55:36 +02:00
Daniel Neuhäuser
8494574fdf Merge branch 'six' of github.com:ThomasWaldmann/flask into ThomasWaldmann-six
Conflicts:
	flask/testsuite/__init__.py
2013-05-18 18:54:45 +02:00
Thomas Waldmann
287905e67c py3 compat: use six.reload_module 2013-05-18 18:39:10 +02:00
Daniel Neuhäuser
aba1d3a507 Test on 3.3 on travis 2013-05-18 18:28:59 +02:00
Daniel Neuhäuser
323a840c5a Add tox.ini 2013-05-18 18:27:49 +02:00
Thomas Waldmann
522cd00093 python-modernize automated changes: fix_unicode (but without six.u()) 2013-05-18 18:12:30 +02:00
Thomas Waldmann
dcd052366b python-modernize automated changes: fix_next 2013-05-18 18:03:37 +02:00
Thomas Waldmann
0f8c47c988 python-modernize automated changes: fix_dict 2013-05-18 18:00:15 +02:00
Thomas Waldmann
cfbfff2d26 python-modernize automated changes: misc. minor stuff 2013-05-18 17:57:43 +02:00
Thomas Waldmann
1b753cb1b1 require 'six' in setup.py, add flask._compat for stuff not yet in 'six' 2013-05-18 17:47:40 +02:00
Daniel Neuhäuser
05923f7f2f Merge branch 'exec' of github.com:ThomasWaldmann/flask into sprint-branch
Conflicts:
	flask/config.py
2013-05-18 17:32:38 +02:00
Daniel Neuhäuser
26a9e90734 Merge pull request #734 from ThomasWaldmann/methodattrs
automated change using python-modernize: fix methodattrs
2013-05-18 08:24:45 -07:00
Daniel Neuhäuser
bbdfc83902 Merge pull request #732 from ThomasWaldmann/exceptions_as
automated change using python-modernize: use 'as' in except
2013-05-18 08:24:00 -07:00
Daniel Neuhäuser
c87735ff1b Merge pull request #731 from ThomasWaldmann/docs
document python 2.6 minimum requirement, remove stuff that refers to 2.5
2013-05-18 08:18:05 -07:00
Thomas Waldmann
40fad2ece8 document python 2.6 minimum requirement, remove all stuff that refers to 2.5 2013-05-18 17:06:25 +02:00
Thomas Waldmann
b8b769ad41 automated change using python-modernize: fix methodattrs 2013-05-18 16:39:39 +02:00
Thomas Waldmann
b52b7b1f93 automated change using python-modernize: replace execfile 2013-05-18 16:31:40 +02:00
Thomas Waldmann
6caaa8a527 automated change using python-modernize: use 'as' in except 2013-05-18 16:24:40 +02:00
Armin Ronacher
521398d5e7 Added missing newlines to readme 2013-05-14 14:06:11 +01:00
Armin Ronacher
b89af66346 Revert "update README to markdown"
This reverts commit fb6dee3639.
2013-05-14 14:05:34 +01:00
Armin Ronacher
1c2dddb355 Merge branch 'master' of github.com:mitsuhiko/flask 2013-05-14 11:51:46 +01:00
Armin Ronacher
574a97cd70 Disabled memory tests by default 2013-05-14 11:51:38 +01:00
Armin Ronacher
7265bb7fa0 Merge pull request #676 from lambdadi/master
Database improperly closed in the test case within this tutorial
2013-05-14 03:49:50 -07:00
Armin Ronacher
335e0af731 Merge pull request #708 from xealot/master
Blueprint.after_request causes Flask to ignore @after_this_request
2013-05-14 03:36:29 -07:00
Armin Ronacher
c349c91aff Added support for UUID objects to JSON serializer as well 2013-05-14 11:35:45 +01:00
Armin Ronacher
18673ba370 Added uuid support for new session serialization and documented it 2013-05-14 11:33:36 +01:00
Armin Ronacher
38eed272f9 Merge branch 'master' of github.com:mitsuhiko/flask 2013-05-14 11:33:18 +01:00
Armin Ronacher
2ba37d2b85 Fixed some rst markup problems 2013-05-14 11:33:13 +01:00
Armin Ronacher
ef62e8440e Merge pull request #702 from edburnett/master
AJAX with jQuery documentation update
2013-05-14 03:25:49 -07:00
Armin Ronacher
6a8acc115e Merge pull request #709 from halexus/patch-1
Update README of example Flaskr
2013-05-14 03:25:33 -07:00
Armin Ronacher
833198c91b Added a missing comma 2013-05-14 11:23:31 +01:00
Armin Ronacher
30d9efb24a Merge branch 'master' of github.com:mitsuhiko/flask 2013-05-14 11:00:45 +01:00
Armin Ronacher
097353695e Added flask.copy_current_request_context which simplies working with greenlets 2013-05-14 11:00:04 +01:00
Kenneth Reitz
1441e02256 Merge pull request #714 from jsnmoon/master
Fixed documentation typo
2013-05-03 10:12:00 -07:00
Kenneth Reitz
34433cfd98 Merge pull request #719 from cenkalti/master
Syntax highlighting for PyPI long description
2013-05-03 10:11:40 -07:00
Kenneth Reitz
9abe26c14c Merge pull request #723 from akshar-raaj/fix_docs_design
Fixed documentation in 'Design Decisions in Flask'
2013-05-03 10:11:18 -07:00
Akshar Raaj
a9b22af9bc Fixed documentation in 'Design Decisions in Flask' 2013-05-03 17:42:15 +05:30
Cenk Altı
1358fd9f3e Syntax highlighting for PyPI long description 2013-04-24 09:42:52 +03:00
Jason Moon
d1bf82b0f4 Fixed typo in URL Processor documentation 2013-04-14 00:10:38 -07:00
Armin Ronacher
0faed95385 Documented new signal message_flashed 2013-04-08 15:49:55 +01:00
Alexander Thaller
8ca7fc47d0 Update README
No need to manually initialize the database with a call to `init_db()` as this call is done before `app.run()` in flaskr.py, when you run the file.
2013-04-05 13:48:08 +03:00
Trey Long
f74f446961 fixing process_response
Flask.process_response will throw away functions is receives from ctx._after_request_functions if there is a Blueprint that has used @after_request.
2013-04-04 12:31:42 -03:00
Steve Leonard
b9355a7d5f Mention register_error_handler in errorhandler doc
The documentation for @errorhandler gives "app.error_handler_spec[None][404] = page_not_found" as an example for adding an error handler without the decorator.  However, register_error_handler appears to be the correct way to do this (added 0.7), and it eliminates the problems with modifying error_handler_spec directly.
2013-04-04 06:56:24 -03:00
Kenneth Reitz
6309987dca Merge pull request #701 from bruston/quickstart-typod
Fixed a few typos in the quickstart doc
2013-03-31 20:05:57 -07:00
Kenneth Reitz
84958e5729 Merge pull request #700 from SpOOnman/master
Add import to jsonify example
2013-03-31 20:05:02 -07:00
Ed Burnett
02150c0f2b Added self to AUTHORS file 2013-03-26 16:57:16 -07:00
Ed Burnett
0a5d62f9ee Updated jquery.rst with the current Google Developer hosted libraries URL and jquery version 2013-03-26 16:56:05 -07:00
=
1723990aee Fixed a few typos on quickstart 2013-03-26 21:23:55 +00:00
Tomasz Kalkosiński
78ae0ec7f8 Add import to jsonify example. 2013-03-25 12:29:28 +01:00
Armin Ronacher
4366bb392a Documented new signal message_flashed 2013-03-21 21:04:06 +00:00
Armin Ronacher
5997890c69 Merge pull request #687 from poiati/flash-signal
Flash messages signals
2013-03-21 13:58:52 -07:00
Armin Ronacher
0a29c295cd Merge pull request #692 from mikegagnon/patch-1
fix typo in quickstart guide
2013-03-21 13:57:47 -07:00
Armin Ronacher
ac9d8b09a5 Merge pull request #693 from untitaker/factory_docs
Added more information about app factories.
2013-03-21 13:57:29 -07:00
Markus Unterwaditzer
9d8674d5b6 Added more information about app factories. 2013-03-17 21:42:30 +01:00
Michael N. Gagnon
8a6cba9e63 fix typo in quickstart guide 2013-03-15 07:31:00 -07:00
Kenneth Reitz
b9118ca0cc Merge pull request #681 from dmizelle/docs-quickstart
fixes #677 - mistype in docs/quickstart
2013-03-06 09:53:36 -08:00
Kenneth Reitz
aa83d9132f Merge pull request #683 from alexcouper/master
Tiny changes to docs
2013-03-06 09:52:47 -08:00
Kenneth Reitz
8a968a9378 Merge pull request #689 from OrangeTux/patch-2
Update css.rst
2013-03-06 09:49:23 -08:00
OrangeTux
cc5d6134c7 Update css.rst
Improved consistency: lower cased all hexadecimal descriptions of colors.
2013-02-28 11:12:16 +01:00
Paulo Poiati
b2aae044ca Flash messages signals
If we send a signal when a template is rendered why not when a message
is flashed? One real world use case is in tests, this signal should make
flash messages expectation easier to implement.
2013-02-28 01:19:52 -03:00
Alex Couper
1be13297c1 Remove comma. 2013-02-22 15:34:16 +00:00
Alex Couper
8ee01ad5ed Put the link to Flask class docs at the end. 2013-02-22 15:33:20 +00:00
Alex Couper
cc8a85d753 Move docs explaining instantiating Flask 2013-02-22 11:21:17 +00:00
Alex Couper
a92588f161 Add closing html tag 2013-02-22 11:15:40 +00:00
Devon Mizelle
c999c179a2 fixes #677 - mistype in docs/quickstart 2013-02-17 11:04:20 -05:00
lambdadi
a754d28302 Database improperly closed in example code
os.unlink(flaskr.DATABASE) causes the actual application database to be
purged; whereas, I reckon, one wants the _test_ database to be removed.
So every time I ran it, the test passed, but ended up crashing the live
app for want of a valid database.

I avoided using the sample code in examples/flaskr thus far, as I chose
to type out code from the turorial docs. The actual example code looks
good - at least to my beginner's eye.
2013-02-11 18:55:24 +05:30
Armin Ronacher
bfeee75696 Changed session cookie defaults to work better with google chrome 2013-01-29 19:31:45 +00:00
Armin Ronacher
6bd0080575 Added workaround for Chrome cookies 2013-01-28 15:08:54 +00:00
Armin Ronacher
6ab569b0e3 Added note on teardown in debug mode. Fixes #661 2013-01-27 00:56:01 +00:00
Armin Ronacher
3b393f89f6 Added template_global, fixes #657 2013-01-27 00:46:19 +00:00
Armin Ronacher
05f162329d Added celery pattern 2013-01-27 00:38:25 +00:00
Kenneth Reitz
3fdcefbcda Merge pull request #625 from soulseekah/master
Use sqlite3.Row factory in Flaskr (#588)
2013-01-24 20:22:02 -08:00
Kenneth Reitz
17fc38c397 Merge pull request #617 from tony/jquery-example-iteration1
jQuery example: submit on enter, focus field on load, ajax to callback function, " to '.
2013-01-24 20:21:31 -08:00
Kenneth Reitz
777c0c56b5 Merge pull request #630 from untitaker/doc_fix_appctx
Fix #623
2013-01-24 20:13:30 -08:00
Kenneth Reitz
1e14783abd Merge pull request #665 from trungly/deferred_callbacks_fix
Update docs/patterns/deferredcallbacks.rst
2013-01-24 19:02:30 -08:00
Kenneth Reitz
94a9b9665b Merge pull request #660 from baijum/docs
WSGI specification has finalized for Python 3
2013-01-24 19:01:43 -08:00
Kenneth Reitz
b975dd4667 Merge pull request #667 from maxcountryman/secure-url-for
adding `_scheme` parameter to `url_for`
2013-01-24 18:57:45 -08:00
Kenneth Reitz
6fa449de00 Merge pull request #669 from schneems/master
update README to markdown
2013-01-24 18:55:21 -08:00
schneems
fb6dee3639 update README to markdown 2013-01-24 17:52:16 -06:00
Max Countryman
b5069d07a2 adding _scheme parameter to url_for
In order to better facilitate generation of URLs that make use of an HTTPS URL
scheme this patch adds a parameter with this specific purpose in mind. To
achieve this we explicitly pass in a param, `_scheme='https'`, and then set the
`url_scheme` attribute of our `MapAdapter` instance appropriately.

Importantly, `_external=True` must be set in order for this to work properly.
As such, failure to do so results in a `ValueError` being raised.
2013-01-21 16:18:46 -08:00
Armin Ronacher
61d3bbf1d2 Fixed last commit and added test 2013-01-21 17:55:07 +00:00
Armin Ronacher
f1537a9d7a Always trap proxy exceptions 2013-01-21 17:44:32 +00:00
Trung Ly
b4fc4412e8 Update docs/patterns/deferredcallbacks.rst
fix example code in Deferred Callback docs: don't set response upon executing callback
2013-01-14 14:53:06 -08:00
Markus Unterwaditzer
2b30900e2c Fix #623 2013-01-11 16:52:38 +01:00
Baiju Muthukadan
7a3d74f19f WSGI specification has finalized for Python 3
Mention Python 3.x is not supported
2013-01-04 14:40:08 +05:30
Kenneth Reitz
ff2e8449ff 2013 2012-12-31 18:00:58 -05:00
Kenneth Reitz
e3e4f4c2b8 2013 2012-12-31 17:55:39 -05:00
Armin Ronacher
ab3d9d12c6 Merge pull request #655 from oliversong/master
SQLite doesn't recognize data type "string"
2012-12-27 07:23:30 -08:00
Armin Ronacher
e101655820 Merge pull request #649 from erikrose/doc-typos
Fix a typo in the deferred-callbacks docs.
2012-12-27 07:22:25 -08:00
Armin Ronacher
dfdbc00eaf Merge pull request #653 from methane/patch-1
docs/extensiondev: Use `current_app` instead of `self.app`
2012-12-27 07:22:05 -08:00
Armin Ronacher
7ec45c2d02 Merge pull request #654 from untitaker/print_in_cgi2
Fixing my own pull request #647
2012-12-27 07:20:39 -08:00
oliversong
cc82feb084 Changing string to text in schema files 2012-12-26 00:05:18 -05:00
Armin Ronacher
2af0ffaef6 Added proxies to template context 2012-12-21 11:47:27 +01:00
Armin Ronacher
1949c4a9ab flask.g is now on the app context and not the request context 2012-12-21 11:45:42 +01:00
Markus Unterwaditzer
c549e583c4 Fixing my own pull request #647
Wrote "stdin" instead of "stdout".
2012-12-19 15:49:13 +01:00
Armin Ronacher
61d43c7f12 Removed unnecessary end-tags and fixed some broken html 2012-12-19 15:46:18 +01:00
INADA Naoki
be0b5196bf Update docs/extensiondev.rst
Use `current_app` instead of `self.app`.
2012-12-13 19:03:54 +09:00
Kenneth Reitz
823bebf13a Merge pull request #636 from ghost/patch-1
Ended your paragraph tag.
2012-12-12 16:18:25 -08:00
Kenneth Reitz
813149677d Merge pull request #647 from untitaker/print_in_cgi
Added hint about print statements in CGI.
2012-12-12 16:06:18 -08:00
Erik Rose
a319516518 Fix a typo in the deferred-callbacks docs. 2012-12-11 14:11:27 -08:00
Markus Unterwaditzer
160aa80781 Added hint about print statements in CGI.
Fix #646
2012-12-10 21:56:49 +01:00
Iyra Gaura
be1ed33271 Ended your paragraph tag. 2012-11-17 18:13:14 +00:00
Kenneth Reitz
fedc96c0b9 Merge pull request #609 from MostAwesomeDude/master
docs/deploying/wsgi-standalone: Add Twisted Web.
2012-11-15 18:37:35 -08:00
Kenneth Reitz
2fabc65505 Merge pull request #624 from soulseekah/patch-1
missing ' in templating example
2012-11-15 17:58:36 -08:00
Kenneth Reitz
4515b838ea Merge pull request #634 from maxcountryman/master
correcting typo
2012-11-15 17:56:45 -08:00
Max Countryman
b6dac3812f really fixing it this time 2012-11-12 17:00:51 -08:00
Max Countryman
30a51f2573 correcting typo 2012-11-12 16:58:38 -08:00
Kenneth Reitz
692a5c2588 Merge pull request #626 from maxcountryman/patch-1
correcting typo
2012-11-05 15:51:04 -08:00
Max Countryman
caefb67ccd correcting typo 2012-11-05 15:31:07 -08:00
Gennady Kovshenin
82b29c09ac Use sqlite3.Row factory in Flaskr
As pointed out in issue #588 sqlite3.Row should be used instead of
using casting to dict(). Also altered the "Easy Querying" Patterns
example to include the more correct way to return rows as dicts.
Did not touch Tutorial examples ("Views"), as these are not up to
date with the current Flaskr code, and the "Show Entries" section
points out the "Easy Querying" section on how to convert to a
dict().
2012-11-05 06:00:46 +06:00
soulseekah
3c54f30c2b missing ' in example
Results in SyntaxError: EOL while scanning string literal
2012-11-03 18:06:23 +06:00
Armin Ronacher
2b885ce4dc Added better error reporting for unicode errors in sessions 2012-10-30 14:47:17 +00:00
Quentin Roy
1e39871d68 Add back path=None argument into find_module. This fixes #618 and revert #524. 2012-10-20 18:21:48 +02:00
Tony Narlock
af76dd0fd4 Highlight first field on page load, enter sends submit request, double quote to single quote. Submission focuses first field again 2012-10-19 12:20:37 -04:00
Armin Ronacher
8339cb3508 Added support for unicode json dumping. This fixes #535 2012-10-18 00:48:15 +01:00
Armin Ronacher
5583fe8acf Merge pull request #613 from untitaker/issue611
Fix #611
2012-10-17 16:37:16 -07:00
Armin Ronacher
f06c80a215 Merge pull request #614 from mizhi/master
Minor fix to views.py testsuite.
2012-10-17 16:36:48 -07:00
Mitchell Peabody
275f830c83 There was a duplicated call to url_adapter.build(...)
try:
        rv = url_adapter.build(endpoint, values, method=method,
                               force_external=external)
    except BuildError, error:
        # We need to inject the values again so that the app callback can
        # deal with that sort of stuff.
        values['_external'] = external
        values['_anchor'] = anchor
        values['_method'] = method
        return appctx.app.handle_url_build_error(error, endpoint, values)

   rv = url_adapter.build(endpoint, values, method=method,
                          force_external=external)

If no exception was raised for url_adapter.build(...) then the same method call
would be made after the try...except block. This is unnecessary.
2012-10-17 11:56:39 -04:00
Mitchell Peabody
a15c6c569a The builder on github is using python 2.5, the views.py testsuite uses the with
statement, and thus flask/testsuite/views.py requires

from __future__ import with_statement

at the beginning.
2012-10-16 16:57:57 -04:00
Markus Unterwaditzer
7ee40e9348 Fix #611
Minor but confusing typo in tutorial.
2012-10-16 21:56:51 +02:00
Corbin Simpson
f6a5a7a0cc docs/deploying/wsgi-standalone: Add Twisted Web.
I've been meaning to do this for quite some time, but I never got around to
it. Hopefully this is neutral and useful enough to be included in the main
docs.
2012-10-11 14:05:01 -07:00
Armin Ronacher
c2e5799879 Updated examples to new sqlite patterns and added new section to appcontext docs 2012-10-09 14:02:32 -05:00
Armin Ronacher
3e9f4e254b Updated a comment that was misleading with recent flask sqlalchemy installations 2012-10-08 07:05:32 +02:00
Armin Ronacher
f34c028125 Added template tests and made config a true global 2012-10-08 07:01:49 +02:00
Armin Ronacher
5e88c8184d Removed deprecated and awkward flask.session module 2012-10-08 06:48:13 +02:00
Armin Ronacher
05c6502cbd Let json.* work even without app on the stack and added tests 2012-10-07 23:41:41 +02:00
Armin Ronacher
b146d8277a Added wrapper module around simplejson/json for much simplified customization. 2012-10-07 23:31:48 +02:00
Armin Ronacher
301e244df3 Consistent use of encoding naming 2012-10-07 22:59:52 +02:00
Armin Ronacher
3afcbf160e Extra safety for safe_join. Does not look exploitable but better safe than sorry. Fixes #501 2012-10-07 22:58:41 +02:00
Armin Ronacher
f701f69947 Documented new error case 2012-10-07 17:13:12 +02:00
Armin Ronacher
661ee54bc2 Raise exceptions if a function is overridden by a new endpoint. This fixes #570 2012-10-07 17:12:16 +02:00
Armin Ronacher
e2b3f07d7c Stop the joinspam 2012-10-07 16:16:21 +02:00
Armin Ronacher
6e4015d624 Removed tox file 2012-10-07 16:08:13 +02:00
Armin Ronacher
b6f37c40f8 Updated travis config for notifications 2012-10-07 16:08:00 +02:00
Armin Ronacher
f8b6033a3b Added a workaround for samefile. This fixes #600 2012-10-07 16:04:31 +02:00
Armin Ronacher
3c1d7758d5 Removed dev tag from setup.cfg. Fixes #596 2012-10-07 15:58:21 +02:00
Armin Ronacher
b5bb49d080 Added a new example for checksums on input data. This fixes #601 2012-10-07 15:46:21 +02:00
Armin Ronacher
c4f2075f4c tojson no longer escapes script blocks in HTML5 parsers. Fixed #605 2012-10-07 15:33:25 +02:00
Armin Ronacher
01ac057d36 Merge branch 'master' of github.com:mitsuhiko/flask 2012-10-07 15:24:28 +02:00
Armin Ronacher
3bec75d230 Set the content-length header for sendfile. Fixes #447 2012-10-07 15:24:03 +02:00
Armin Ronacher
c01d36aabd Merge pull request #548 from SimonSapin/patch-6
Remove the unused `ScriptNameStripper.to_strip` in the FastCGI doc example
2012-10-07 06:06:45 -07:00
Armin Ronacher
aecb760c6a Merge pull request #550 from AkaiKitsune/master
Added Windows documentation for mod_wsgi usage
2012-10-07 06:06:23 -07:00
Armin Ronacher
de5038f2fb Added total_seconds() helper for pythons before 2.7 2012-10-07 14:56:02 +02:00
Armin Ronacher
7f87091474 Added a missing exposed import. This fixes #575 2012-10-07 14:51:26 +02:00
Armin Ronacher
5b462dd382 Fixed a typo in the docs. This fixes #576 and #575 2012-10-07 14:50:21 +02:00
Armin Ronacher
18413ed1bf Added HTTP override middleware to docs. This fixes #582 2012-10-07 13:02:05 +02:00
Armin Ronacher
b2cf9e7212 Merge pull request #590 from pinchsp/master
Fixed small error in SQLAlchemy patterns documentation
2012-10-07 03:56:35 -07:00
Armin Ronacher
c5f938bc55 Merge pull request #583 from d1ffuz0r/issue_524
fixed issue #524
2012-10-07 03:55:55 -07:00
Armin Ronacher
39329bfc07 Merge pull request #591 from finbarrocallaghan/master
fixed some typos
2012-10-07 03:54:58 -07:00
Armin Ronacher
c9a7fdf1b0 Documented latest commit in changelog 2012-10-07 12:53:36 +02:00
Armin Ronacher
f034d8d345 Add @template_test() decorator for creating custom jinja2 tests, like existing @template_filter() for filters. Fixes #332 2012-10-07 12:51:46 +02:00
Armin Ronacher
b2fc9febdd Merge pull request #607 from jfinkels/patch-3
Update docs/quickstart.rst
2012-10-07 03:49:36 -07:00
Armin Ronacher
62c0c67d88 Merge branch 'master' of github.com:mitsuhiko/flask 2012-10-07 12:49:03 +02:00
Armin Ronacher
4f1cb42123 make_test_environ_builder when used with subdomains was not working correctly, now it uses urlparse module for detecting full URL and changing path and base_url correctly 2012-10-07 12:48:19 +02:00
Armin Ronacher
261c4a6aee Updated documentation for the new sessions 2012-10-07 12:40:59 +02:00
Armin Ronacher
e1a576122b Merge branch 'json-sessions' 2012-10-07 10:33:37 +02:00
jfinkels
639817b621 Update docs/quickstart.rst
Removed incorrect syntax and simplified remaining sentence.
2012-10-05 02:49:55 -03:00
Kenneth Reitz
3b9fe7c486 Merge pull request #603 from rmacy/patch-1
Fixed typo occours to occurs
2012-10-01 12:46:42 -07:00
Ryan Macy
7233a3e0a2 Fixed typo occours to occurs
Fixed a typo in the docstring of handle_exception. Was occours, now occurs.
2012-10-01 14:45:02 -05:00
Kenneth Reitz
ee76129812 Merge pull request #594 from ralphbean/patch-1
Update flask/templating.py
2012-09-22 18:50:11 -07:00
Armin Ronacher
22af78a96f Removed outdated sentence in the testing docs 2012-09-21 01:02:42 +09:00
Armin Ronacher
7fc0ddb57c Merge branch 'master' of github.com:mitsuhiko/flask 2012-09-16 08:52:51 +09:00
Ralph Bean
9ecbd20286 Update flask/templating.py
Fixed a typo in the docstring.
2012-09-13 15:16:38 -03:00
Finbarr O'Callaghan
e93447f25e actually to actual, again, fixed spelling, not grammar 2012-09-06 18:30:41 +01:00
Finbarr O'Callaghan
e8d50a7aba fixed spelling but not the grammar! 2012-09-06 18:19:50 +01:00
Finbarr O'Callaghan
48f7cdd016 various typo fixes 2012-09-06 18:04:51 +01:00
pinchsp
69e419e020 Fixed small mistake in sqlalchemy pattern 2012-09-04 00:51:45 -03:00
d1ffuz0r
8d330a368a fixed issue #524 2012-08-29 22:26:39 +04:00
Kenneth Reitz
80b2689335 Merge pull request #577 from brousch/patch-2
Added _ to fix link to extensions in Hook. Extend.
2012-08-26 10:25:56 -07:00
Kenneth Reitz
1dde7b8be7 Merge pull request #563 from joepie91/master
Fix for lighttpd regex
2012-08-26 10:20:54 -07:00
Kenneth Reitz
ad30470102 Merge pull request #579 from alex-morega/fix-doc-views
Fix code example in pluggable views documentation
2012-08-26 09:49:52 -07:00
Alex Morega
11c746189d Fix code example in pluggable views documentation 2012-08-20 16:57:39 +03:00
Ben Rousch
77c2c3b183 Added _ to fix link to extensions in Hook. Extend.
I missed the trailing _ to make a link in my first patch to add the link to extensions. 
Sorry about that.
2012-08-17 16:45:04 -03:00
Armin Ronacher
fe85970665 Various improvements in regards to the itsdangerous usage, bumped to 0.17 2012-08-11 03:38:46 +01:00
Armin Ronacher
a4977cfe2b Removed outdated section in the docs 2012-08-11 03:13:16 +01:00
Armin Ronacher
c3d38a21c6 Removed json_available hack 2012-08-11 03:11:40 +01:00
Armin Ronacher
3f82d1b68e Switch to itsdangerous 2012-08-11 03:09:14 +01:00
Armin Ronacher
704d94d7b9 Merge branch 'master' into json-sessions 2012-08-11 02:37:52 +01:00
Armin Ronacher
43f41201e9 Merge branch 'master' of github.com:mitsuhiko/flask 2012-08-11 02:37:43 +01:00
Armin Ronacher
1740d7c51a Merge branch 'master' into json-sessions 2012-08-11 02:37:21 +01:00
Armin Ronacher
b879193481 Set current dev version number to 0.10 2012-08-11 02:37:03 +01:00
Armin Ronacher
ee28dcf2cf Added changelog entry for 0.10 2012-08-11 02:36:29 +01:00
Armin Ronacher
4df3bf2058 Implemented experimental JSON based sessions 2012-08-11 02:36:14 +01:00
Kenneth Reitz
9a0f6519aa Merge pull request #571 from plaes/doc-improvements
Doc improvements for url_for()
2012-08-01 09:34:49 -07:00
Priit Laes
e3b3e05052 Docs: Fix docstring formatting 2012-08-01 11:29:40 +03:00
Priit Laes
ed1619adad Docs: Mention SERVER_NAME in the url_for() docstring 2012-08-01 11:27:28 +03:00
Kenneth Reitz
50dc240352 Merge pull request #567 from PaulMcMillan/docs_fix
docstring typo
2012-07-26 12:32:03 -07:00
Paul McMillan
20a542fc8a docstring typo 2012-07-26 09:56:01 -07:00
Sven Slootweg
b0fdae4e1f Fix regex in lighttpd example config to only match static/ and sub-items, and not all directories that start with 'static' 2012-07-21 21:00:44 +02:00
Kenneth Reitz
0f3bc38a18 Merge pull request #562 from yaph/master
Small improvement to docs
2012-07-21 04:57:39 -07:00
Ramiro Gomez
3800c7396b Try to correct confusing sentence in doc and fixed word duplication. 2012-07-21 13:55:45 +02:00
Kenneth Reitz
9d9f240df8 Merge pull request #559 from rdegges/master
Fixing some wording in the design documentation.
2012-07-20 14:31:55 -07:00
Randall Degges
40ccc0a99a Fixing some wording in the design documentation. 2012-07-20 14:29:10 -07:00
Akai Kitsune
b9df128ba8 Added directions for mod_wsgi vhost configuration under Apache on Windows 2012-07-16 21:08:02 +03:00
Simon Sapin
c3f651dccb Remove the unused ScriptNameStripper.to_strip in the FastCGI doc example.
Alernatively, `environ['SCRIPT_NAME'] = ''` should be replaced with something like:

    if environ['SCRIPT_NAME'].startswith(self.to_strip):
        environ['SCRIPT_NAME'] = environ['SCRIPT_NAME'][len(self.to_strip):]
2012-07-12 16:31:53 +03:00
Ron DuPlain
ea2a0629c9 Touch up dbinit tutorial doc.
Discussion on #pocoo with svenstaro, dAnjou, noob13.
2012-07-04 15:27:15 -04:00
Ron DuPlain
c7cdb2f83e Merge pull request #540 from svenstaro/master
Fix typo in tutorial
2012-07-04 12:20:15 -07:00
Sven-Hendrik Haase
690b0c34ff Fix chose -> choose typo 2012-07-04 21:19:41 +02:00
Ron DuPlain
7003fe6135 Merge pull request #539 from svenstaro/master
Changed tutorial to be more explicit
2012-07-04 12:18:28 -07:00
Sven-Hendrik Haase
0553bbdefe Made it explicitly clear where changes should go in the tutorial 2012-07-04 21:12:41 +02:00
Armin Ronacher
1beb0f2e7f Fixed a syntax error 2012-07-02 09:11:24 +01:00
Kenneth Reitz
07878722a8 Merge pull request #537 from esaurito/patch-1
Fixed codename
2012-07-01 15:07:39 -07:00
esaurito
d8e5a37d8a Fixed codename 2012-07-02 00:38:27 +03:00
Armin Ronacher
e32de730f9 Merge pull request #536 from lvh/patch-1
CHANGES: July 1th should be July 1st
2012-07-01 09:32:36 -07:00
Laurens Van Houtven
56f5224ef7 CHANGES: July 1th should be July 1st 2012-07-01 19:31:53 +03:00
Armin Ronacher
d4415dd665 Fixed an rst syntax error 2012-07-01 12:26:45 +01:00
Armin Ronacher
ee3e251f9e Updated CHANGES 2012-07-01 12:12:36 +01:00
Armin Ronacher
bea5858411 Merge branch '0.8-maintenance' and push to 0.9 2012-07-01 12:10:50 +01:00
Armin Ronacher
d5218997d9 Added flask.stream_with_context 2012-06-27 15:06:39 +01:00
Armin Ronacher
2e816f554a Merge branch 'master' of github.com:mitsuhiko/flask 2012-06-27 12:25:21 +01:00
Armin Ronacher
43c6a1ede8 Fixed a comment 2012-06-27 12:22:39 +01:00
Armin Ronacher
558750494f Removed unnecessary import 2012-06-27 12:08:01 +01:00
Armin Ronacher
8071f11328 Fixed an issue with the new path finding logic 2012-06-26 17:18:59 +02:00
Kenneth Reitz
0ba758d448 Merge pull request #413 from dmishe/master
Blueprint example app
2012-06-25 10:49:11 -07:00
Kenneth Reitz
ddeeca74c2 Merge pull request #509 from alekzvik/master
Changed docstring according to docs.
2012-06-25 10:37:40 -07:00
Kenneth Reitz
274d1a82f8 Merge pull request #530 from mattupstate/master
Fix documention for `after_this_request`
2012-06-25 10:36:14 -07:00
Kenneth Reitz
7bc6eead47 Merge pull request #531 from bev-a-tron/master
Fixes #519 by adding return statement
2012-06-25 10:35:46 -07:00
bev-a-tron
1f82d02b33 Fixes #519 by adding return statement 2012-06-25 13:31:11 -04:00
Matt Wright
1f3e667b5d Fix documention for after_this_request 2012-06-18 18:33:17 -03:00
Armin Ronacher
9be47f5932 Merge pull request #479 from dmishe/patch-1
Removed unneeded print statements form mongokit pattern doc
2012-06-17 06:25:10 -07:00
Armin Ronacher
a9e753f706 Merge pull request #497 from ekoka/master
fix for https://github.com/mitsuhiko/flask/issues/494
2012-06-17 06:24:35 -07:00
Armin Ronacher
24e01318d3 Merge pull request #517 from kuyan/patch-1
Emended extensiondev.rst
2012-06-17 06:22:54 -07:00
Armin Ronacher
7b1c8fd15b Added #522 in modified version 2012-06-17 14:22:15 +01:00
Armin Ronacher
b04827283e Removed padded JSON (JSONP) again.
The implementation was not clean and generally the needs for padded json
are disappearing now that all browsers support cross site communication
with the regular xmlhttprequest.
2012-06-17 14:17:22 +01:00
Armin Ronacher
6809ffccf2 Don't build websites with travis 2012-06-17 14:13:53 +01:00
Armin Ronacher
9cce327040 Merge pull request #529 from yaph/master
Indentation error in ScriptNameStripper in Configuring Apache section
2012-06-17 06:07:29 -07:00
Armin Ronacher
9034461e5b Merge pull request #525 from brousch/patch-1
Added link to extensions in "Hook. Extend." section.
2012-06-17 06:00:28 -07:00
Armin Ronacher
35312be63c Merge pull request #527 from mapio/patch-1
cache_timeout should be always checked not Null
2012-06-17 05:56:02 -07:00
Ramiro Gómez
5bbf8bdcd9 Update master 2012-06-17 02:22:02 +03:00
Massimo Santini
4b21e2d38c I think it should check that cache_timeout is not None to allow for a (I hope legale) value of 0 for such parameter. 2012-06-13 16:43:34 +03:00
Ben Rousch
5c2aa7a921 Added link to extensions in "Hook. Extend." section. 2012-06-12 14:26:10 -03:00
Natan L
99aaacb1a9 Emended extensiondev.rst. 2012-05-30 20:23:02 -07:00
Kenneth Reitz
9f055104ad Merge pull request #515 from msabramo/travis
Travis
2012-05-29 17:04:23 -07:00
Marc Abramowitz
2c8cbeb0c0 Add .travis.yml 2012-05-27 18:39:40 -07:00
Marc Abramowitz
447afc3525 Fix failing test: "AssertionError: 'application/javascript' != 'application/json'" in flask/testsuite/helpers.py", line 88 2012-05-27 18:24:27 -07:00
Alex Vykalyuk
444698d42b Changed docstring according to docs. 2012-05-14 23:39:27 +03:00
Armin Ronacher
086348e2f2 Added after_this_request decorator. 2012-05-08 13:14:32 +01:00
Armin Ronacher
dbfd406a21 Added required_methods 2012-05-08 12:51:26 +01:00
Armin Ronacher
2053d04db0 Improved interface for the URL build error handler 2012-05-08 11:56:11 +01:00
ekoka
12dcba8849 Update flask/testsuite/basic.py 2012-04-24 05:32:52 -03:00
Ron DuPlain
e78e2a1641 Document example request_globals_class use cases. 2012-04-24 02:10:16 -04:00
Ron DuPlain
33bae1a8dc Add Flask.request_globals_class to customize g.
Requested by toothr on #pocoo.
2012-04-24 02:00:47 -04:00
Ron DuPlain
26da6a5365 Use default send_file max-age consistently.
Prior to this commit, the send_file max-age hook and config were only
used for the static file handler. Now they are used when calling
helpers.send_file directly.
2012-04-24 01:48:05 -04:00
Ron DuPlain
7c79ce6e41 Revise foreword and Becoming Big docs, #484. 2012-04-23 23:42:58 -04:00
Ron DuPlain
ff5ee034b8 Touch up README. 2012-04-23 21:47:28 -04:00
Ron DuPlain
b31f2d9a64 Require Werkzeug>=0.7, #449. 2012-04-23 21:46:53 -04:00
Ron DuPlain
2262ce4915 Skip template leak test when not CPython2.7, #452. 2012-04-23 21:36:28 -04:00
Ron DuPlain
148c50abf9 Document url_for BuildError hook. 2012-04-23 21:20:47 -04:00
Kenneth Reitz
ccc6816459 Merge pull request #498 from alekzvik/master
Fixed typo in docs/quickstart
2012-04-22 14:33:57 -07:00
Alex Vykalyuk
028229d0ff Fixed typo in docs/quickstart 2012-04-23 00:32:48 +03:00
Ron DuPlain
8c8c524ddb Re-raise BuildError with traceback. 2012-04-22 12:51:31 -04:00
Ron DuPlain
bb31188ec3 Add a BuildError hook to url_for, #456. 2012-04-22 12:30:15 -04:00
ekoka
36194697ae Update flask/app.py 2012-04-21 23:36:08 -03:00
Ron DuPlain
d90f0afe39 Add test for jsonify padded=False, #495. 2012-04-21 18:40:02 -04:00
Kenneth Reitz
2ae2338ebf Merge pull request #496 from alekzvik/master
Removed link to ep.io
2012-04-21 13:11:30 -07:00
Alex Vykalyuk
0333c824bf Removed link to ep.io from quickstart 2012-04-21 22:27:24 +03:00
Ron DuPlain
fb01187885 Touch up fastcgi doc. 2012-04-20 09:20:20 -04:00
Vadim Pestovnikov
34380b9c1d Add detailed Apache httpd fastcgi configuration. 2012-04-20 09:07:58 -04:00
Ron DuPlain
a3cb2a3382 Use American English for "behavior" in docs.
Prompted by plaes on #pocoo, mitsuhiko confirmed to use American English.
2012-04-19 11:51:38 -04:00
Ron DuPlain
10c34e6652 Reword 0.9 upgrade doc, thanks to plaes on #pocoo. 2012-04-19 11:50:08 -04:00
Ron DuPlain
b885edf810 Fix typo pointed out by tri on #pocoo. 2012-04-18 15:54:04 -04:00
Ron DuPlain
0d2ffc094b Use 'venv' consistently for virtualenv directory.
Pointed out by tri on #pocoo.
2012-04-18 15:44:07 -04:00
Ron DuPlain
fd62cd82cb Merge pull request #493 from kuyanatan/patch-1
Rectified rampant 'roule'.
2012-04-17 21:00:22 -07:00
Natan
ffbab00cd1 Rectified rampant 'roule'. 2012-04-17 19:28:28 -07:00
Kenneth Reitz
2a6c80a37d Merge pull request #489 from florentx/patch-1
few typos
2012-04-12 12:45:22 -07:00
Florent Xicluna
a2eb5efcd8 few typos 2012-04-12 19:14:52 +03:00
Ron DuPlain
1a19ddc55c Merge pull request #486 from PaulMcMillan/docs_fix
Minor docs fix.
2012-04-10 13:16:17 -07:00
Paul McMillan
acb61ae57b Minor docs fix. 2012-04-10 13:14:38 -07:00
Ron DuPlain
989aabbe32 Merge pull request #483 from svieira/patch-1
Fix spelling.
2012-04-09 14:24:25 -07:00
Sean Vieira
9d09632dbf Fix spelling. 2012-04-09 17:17:52 -03:00
Armin Ronacher
bcd00e5070 Fixed a typo 2012-04-09 17:56:37 +01:00
Armin Ronacher
d26af4fd6d Fixed some smaller things in the docs 2012-04-09 17:38:08 +01:00
Armin Ronacher
52f9cefbcd More documentation updates for 0.9 2012-04-09 17:35:16 +01:00
Armin Ronacher
32f845ea75 Added an example for using the db connection without the request 2012-04-09 17:33:14 +01:00
Armin Ronacher
cb54c462b8 Pass exc explicitly to the inner context. 2012-04-09 17:32:37 +01:00
Armin Ronacher
9bed20c07c Added documentation for appcontext and teardown handlers 2012-04-09 17:29:00 +01:00
Armin Ronacher
34bbd3100b Fixed a failing testcase 2012-04-09 16:11:35 +01:00
Armin Ronacher
cf1641e5be Changed the implementation of returning tuples from functions 2012-04-09 15:56:33 +01:00
Armin Ronacher
3249eeb438 Merge branch 'master' of github.com:mitsuhiko/flask 2012-04-09 15:26:09 +01:00
Armin Ronacher
ab110d8fe5 Documented config changes 2012-04-09 15:24:43 +01:00
Armin Ronacher
0207e90155 Updated docs for the app context. 2012-04-09 15:22:36 +01:00
Armin Ronacher
f8f2e2dff4 Added more tests for the new stack behavior. 2012-04-09 15:16:09 +01:00
Armin Ronacher
307d1bc4e5 Added support for basic URL generation without request contexts. 2012-04-09 15:04:35 +01:00
Armin Ronacher
47288231fe Implemented a separate application context. 2012-04-09 14:34:12 +01:00
Armin Ronacher
a1305973bf Fixed a typo in a comment 2012-04-09 14:19:13 +01:00
Dmitry Shevchenko
9c48387072 Removed unneeded print statements form mongokit pattern doc 2012-04-08 18:09:12 -05:00
Ron DuPlain
f07199009c Fix reqcontext ref in signals doc. 2012-04-04 11:41:40 -04:00
Ron DuPlain
492ef06bff Clarify use of context-locals with signals. 2012-04-04 11:39:07 -04:00
Ron DuPlain
b16c988f1e Fix static endpoint name mention in quickstart. 2012-04-03 20:55:58 -04:00
Kenneth Reitz
f46f7155b2 2012 2012-04-01 20:57:50 -04:00
Ron DuPlain
f267f9302a Merge pull request #469 from jfinkels/patch-2
Removed extra blank line to fix ReST formatted documentation string in w...
2012-04-01 15:39:49 -07:00
jfinkels
91efb90fb3 Removed extra blank line to fix ReST formatted documentation string in wrappers.py. Should have gone with pull request #439. 2012-04-01 13:03:22 -03:00
Ron DuPlain
f43003967e Merge pull request #439 from aisipos/jsonexceptions
Add new exceptions module, to implement JSONHttpException and JSONBadRequest.
2012-04-01 08:42:39 -07:00
Ron DuPlain
df772df24f Touch up run_simple doc, #446. 2012-04-01 11:40:37 -04:00
Ron DuPlain
8740fff907 Merge pull request #446 from jtsoi/patch-1
Debug example with run_simple and flask app.
2012-04-01 08:37:44 -07:00
Ron DuPlain
0eb75b317b Add notes on mutable values & sessions.
Using notes in 8445f0d939
2012-04-01 11:33:42 -04:00
Ron DuPlain
71a9766266 Merge pull request #417 from tarruda/master
Fixed assumption made on session implementations
2012-04-01 08:23:26 -07:00
Ron DuPlain
9ab41edbd7 Touch up proxying docs. 2012-04-01 11:19:51 -04:00
Ron DuPlain
9a1d616706 Add simple proxying nginx config to docs.
Origin:
https://gist.github.com/2269917
2012-04-01 10:57:44 -04:00
Ron DuPlain
976c9576bd Reorder deployment options. 2012-04-01 10:54:27 -04:00
Ron DuPlain
7e4b705b3c Move others.rst to wsgi-standalone.rst. 2012-04-01 10:54:00 -04:00
Kenneth Reitz
c2698416a8 Merge pull request #467 from vorobiov/patch-1
Update docs/quickstart.rst
2012-03-31 00:40:16 -07:00
Sergey
e76db15e26 Update docs/quickstart.rst 2012-03-31 10:11:12 +03:00
Ron DuPlain
437a1bf5c4 Merge pull request #458 from kisielk/patch-1
Fixed weird string quoting in setup.py
2012-03-28 05:56:59 -07:00
Armin Ronacher
85e2857ed4 Merge pull request #455 from jparise/methodfuncs-iter
Remove an unused iteration variable.
2012-03-28 01:51:26 -07:00
Armin Ronacher
38187bcd9f Merge pull request #464 from passy/patch-1
Remove triple-quotes from print statement in setup.py
2012-03-28 01:50:37 -07:00
Pascal Hartig
35383ee83c Removed triple-quotes from print statement in setup.py 2012-03-28 10:33:27 +03:00
Kenneth Reitz
6b4a86df3b Merge pull request #462 from SimonSapin/patch-4
Install docs: pip vs. easy_install consistency
2012-03-27 07:12:01 -07:00
Simon Sapin
e08028de55 pip vs. easy_install consistency 2012-03-27 17:08:55 +03:00
Kamil Kisiel
b29834dac3 Fixed weird string quoting in setup.py 2012-03-24 14:09:43 -07:00
Kenneth Reitz
36da8e41de Merge pull request #450 from SimonSapin/simplejson_tox
Tests require simplejson on 2.5, have tox install it
2012-03-20 19:18:19 -07:00
Kenneth Reitz
079c5ef7ff Merge pull request #445 from iammookli/patch-1
Update docs/patterns/mongokit.rst
2012-03-20 19:01:28 -07:00
Filip Ristić
c2661dd4bc Update docs/patterns/packages.rst 2012-03-20 22:07:58 +01:00
Jon Parise
bb99158c87 Remove an unused iteration variable.
We can just iterate over the namespace dictionary's keys here.  We
don't need its values.
2012-03-19 22:33:43 -07:00
Simon Sapin
ee6ed491d3 Have tox install simplejson for python 2.5 2012-03-19 00:52:33 +01:00
jtsoi
fe9f5a4768 Added an example of how to configure debugging with run_simple, it has to be enabled both for the Flask app and the Werkzeug server. 2012-03-16 09:38:40 +01:00
iammookli
73cb15ed2c Update docs/patterns/mongokit.rst 2012-03-15 18:20:17 -07:00
Ron DuPlain
eac350d1e6 Merge remote branch 'njl/master'
Conflicts:
	docs/quickstart.rst
2012-03-13 19:27:24 -07:00
Ron DuPlain
d626787a34 Merge pull request #438 from garbados/improve_foreword
Improve foreword
2012-03-13 19:17:29 -07:00
Ron DuPlain
9601016157 Merge pull request #441 from wilsaj/docfix-route-converter-unicode-string
docfix: wrong converter name: unicode -> string  fixes #364
2012-03-13 17:00:35 -07:00
Ron DuPlain
a5d1cf415e Merge pull request #440 from jamesls/extension-docs
Reword the docs for writing a flask extension
2012-03-13 17:00:18 -07:00
Ron DuPlain
d94efc6db6 Expose send_file max-age as config value, #433.
Need to add the same hook in a Blueprint, but this is the first such
case where we need app.config in the Blueprint.
2012-03-13 16:34:16 -07:00
Ron DuPlain
146088d580 Expand docs on send_file option hook, #433. 2012-03-13 14:37:48 -07:00
Ron DuPlain
f4a31db9f6 Merge pull request #433 from dave-shawley/master
Introduced a method to adjust static file cache-control headers based on filename
2012-03-13 13:59:31 -07:00
Ron DuPlain
f7bb2b5f19 Merge pull request #430 from jamesls/issue140
Fix issue 140
2012-03-13 13:51:53 -07:00
Ron DuPlain
c1a2e3cf14 Add Rule #0 to extension development. 2012-03-13 13:41:03 -07:00
Ron DuPlain
3bf1750b5d Tighten quickstart deployment docs. 2012-03-13 12:12:47 -07:00
Ron DuPlain
1d1db80e06 Merge pull request #427 from kevinburke/fix-existing-tutorial
add heroku/deploy options to quickstart, and add clearer links in tutorial setup
2012-03-13 11:47:04 -07:00
Ron DuPlain
4e9b7867c9 Merge pull request #411 from PaulMcMillan/docs_fix
Remove redundant words from quickstart.
2012-03-13 11:43:13 -07:00
Max
8f568cfc19 Split foreword into two files; edited lots. 2012-03-12 17:12:55 -07:00
James Saryerwinnie
8d1546f8e6 Reword the docs for writing a flask extension
There was a minor bug in the example extension that's
been fixed.

I also updated the description of the fixed code accordingly, and
expanded on the usage of _request_ctx_stack.top for adding data
that should be accesible to view functions.

I verified that the existing code as is works as expected.
2012-03-12 16:28:39 -07:00
wilsaj
d4eb1af373 Merge branch 'docfix-route-converter-unicode-string' of github.com:wilsaj/flask into docfix-route-converter-unicode-string 2012-03-12 18:01:45 -05:00
wilsaj
a77938837c docfix: wrong converter name: unicode -> string fixes #364 2012-03-12 18:01:11 -05:00
wilsaj
756a5565ea docfix: wrong converter name: unicode -> string 2012-03-12 17:21:49 -05:00
Max
c78070d862 Wrapped paragraphs; changed some words. 2012-03-12 15:08:52 -07:00
Max
d8c2ec4cd8 Fixed linebreaks. 2012-03-12 15:03:26 -07:00
Max
74a72e86ad Changed some things in the foreward to diminish its discouragement. 2012-03-12 14:58:26 -07:00
Anton I. Sipos
71b351173b Move JSONHTTPException and JSONBadRequest to new module flask.exceptions. 2012-03-12 14:53:24 -07:00
Ned Jackson Lovely
68f93634de Second thoughts on mime type
After further review, changing the mime type on jsonp
responses from text/javascript to application/javascript,
with a hat-tip to
http://stackoverflow.com/questions/111302/best-content-type-to-serve-jsonp
2012-03-12 17:18:27 -04:00
Ned Jackson Lovely
27194a01d8 Fix typo in docs.
http://feedback.flask.pocoo.org/message/279
2012-03-12 16:02:53 -04:00
Ned Jackson Lovely
12544c3a8d Merge branch 'master' of git://github.com/mitsuhiko/flask 2012-03-12 15:27:41 -04:00
Ned Jackson Lovely
09370c3f1c Clean up docs and review pull request #384
Spelunking through the issues at the PyCon sprints.
2012-03-12 15:26:05 -04:00
Ron DuPlain
cb3d0b931d Merge pull request #436 from teebes/master
Specifying Python version metadata in setup
2012-03-12 11:34:07 -07:00
Ron DuPlain
561775cbf6 Merge pull request #435 from mattd/master
Doc grammar fix from pycon sprints.
2012-03-12 11:33:42 -07:00
Christoph Heer
cb24646948 Add jsonp support inside of jsonify 2012-03-12 14:27:35 -04:00
Thibaud Morel
8216e036e9 Specifying supported Python versions in setup.py metadata 2012-03-12 11:16:03 -07:00
Matt Dawson
2d237f3c53 Fix grammar in extension dev docs. 2012-03-12 10:57:00 -07:00
Dave Shawley
06b224676d Added _PackageBoundObject.get_static_file_options.
This method receives the name of a static file that is going to be served
up and generates a dict of options to use when serving the file.  The
default set is empty so code will fall back to the existing behavior if
the method is not overridden.

I needed this method to adjust the cache control headers for .js files that
one of my applications was statically serving.  The default expiration is
buried in an argument to send_file and is set to 12 hours.  There was no
good way to adjust this value previously.
2012-03-12 11:19:17 -04:00
Kevin Burke
2befab24c5 remove localtunnel things that were added to snippets 2012-03-11 23:17:40 -07:00
James Saryerwinnie
075b6b11c8 Fix issue 140
This allows for a view function to return something like:

    jsonify(error="error msg"), 400
2012-03-11 20:45:58 -07:00
Kevin Burke
605d0ee344 update links 2012-03-11 20:33:43 -07:00
Kevin Burke
6b9e6a5a52 add heroku/deploy options to quickstart, and add more clear links in tutorial setup. 2012-03-11 20:20:32 -07:00
Jeffrey Finkelstein
9711fd4020 On JSON requests, the JSON response should have Content-Type: application/json and the body of the response should be a JSON object. 2012-03-08 16:41:39 -05:00
Ron DuPlain
7ed3cba658 Split ebook build process into own make target. 2012-03-08 09:14:14 -08:00
Thiago de Arruda
8445f0d939 Fixed assumption made on session implementations.
In the snippet 'session.setdefault(...).append(...)', it was being
assumed that changes made to mutable structures in the session are
are always in sync with the session object, which is not true for
session implementations that use a external storage for keeping their
keys/values.
2012-03-02 07:46:39 -03:00
Dave Shawley
8d7ca29a35 Cleaned up test case for issue #414. 2012-03-01 08:53:58 -05:00
Dave Shawley
76773e1d0a Fixed silent keyword arg to config.from_envvar.
The ``silent`` keyword argument to Config.from_envvar was not being honored
if the environment variable existed but the file that it mentioned did not.
The fix was simple - pass the keyword argument on to the underlying call to
``from_pyfile``.  I also noticed that the return value from ``from_pyfile``
was not being passed back so I fixed that as well.
2012-03-01 08:34:08 -05:00
Dmitry Shevchenko
62621ccd13 Blueprint example tests 2012-03-01 02:24:56 -06:00
Dmitry Shevchenko
85ad4ffb60 Blueprint example app 2012-03-01 02:07:26 -06:00
Paul McMillan
b9f4e0bd9c Remove redundant words from quickstart. 2012-02-26 12:49:52 -08:00
awsum
20a3281209 Update docs/patterns/wtforms.rst 2012-02-25 15:29:13 -05:00
Andrew Ash
fc7fe62846 Update docs/errorhandling.rst 2012-02-25 15:29:13 -05:00
Ron DuPlain
fdad6713eb Add updates to render_template to CHANGES, #409. 2012-02-24 09:33:11 -05:00
Dmitry Shevchenko
0b3369355d Allow loading template from iterable 2012-02-24 00:46:20 -06:00
Ron DuPlain
04bb720d38 Fix Blueprint example with template_folder, #403. 2012-02-14 18:13:29 -05:00
Ron DuPlain
e070ede050 Use "." not "source" for shell sourcing.
Shell portability from mitsuhiko.
2012-02-07 10:42:25 -05:00
Kenneth Reitz
5e848176e5 typos and fixes 2012-02-06 21:05:51 -05:00
Kenneth Reitz
deb03da3ff Merge remote-tracking branch 'origin/pip' into pip 2012-02-06 21:04:13 -05:00
Kenneth Reitz
60f7e3a7b4 vent and no more . 2012-02-06 20:42:06 -05:00
Kenneth Reitz
73a8595335 vent and no more . 2012-02-06 20:41:13 -05:00
Kenneth Reitz
4a75198f36 pip and distribute installation 2012-02-06 20:29:14 -05:00
Kenneth Reitz
3de8de1985 pip > easy_install 2012-02-06 20:19:32 -05:00
Ron DuPlain
96d7f20787 Fix tox warning, test "not installed in testenv". 2012-02-04 10:44:16 -05:00
Ron DuPlain
84b96ac9d3 Add pypy to tox.ini. 2012-02-04 10:37:58 -05:00
Ron DuPlain
69e7a0a2a0 Move debugger details into a new section, #343. 2012-02-03 18:11:14 -05:00
Ron DuPlain
dfd3ef6d54 Add cookie size limit note to sessions section.
Result of discussion with jujule_ on #pocoo irc.
2012-02-03 13:19:04 -05:00
Ron DuPlain
5a1bef4429 Demonstrate in docs how to use registered filters.
Requested by @plaes on #pocoo irc.
2012-02-01 18:03:32 -05:00
Ron DuPlain
8ef2ca99b9 Reword context processors for functions. 2012-02-01 18:03:29 -05:00
Priit Laes
d33f9990c8 Document context processors' variable functions 2012-02-01 14:58:44 +02:00
Ron DuPlain
7ba5196ba6 Merge pull request #392 from FND/docs
Hyphenate "class-based"
2012-01-31 07:05:03 -08:00
FND
4aebc267bc Hyphenate "class-based"
makes it more readable
2012-01-31 13:54:52 +01:00
Ron DuPlain
5cb50a46ee Fix Message Flashing doc, from SwashBuckla #pocoo.
Provide a full example as promised in the doc.
2012-01-31 05:46:18 -05:00
Ron DuPlain
36f3184396 Automate .mobi generation of docs, #388. 2012-01-26 13:24:15 -05:00
Ron DuPlain
92dbe3153a Export .epub with docs, #388. 2012-01-24 18:00:44 -05:00
Armin Ronacher
476f8d57a2 Merge pull request #390 from jfinkels/patch-1
Added PATCH method to the list of HTTP method functions for MethodView
2012-01-24 14:01:27 -08:00
Jeffrey Finkelstein
c5ebf9a97d Added PATCH method to the list of HTTP method functions for use in the flask.views.MethodView class. 2012-01-24 16:48:04 -05:00
Ron DuPlain
fbbe14791f Merge pull request #387 from FND/docs
documentation: minor stylistic adjustments
2012-01-23 11:51:15 -08:00
FND
2792dcf23e simplified as_view documentation
in the process, rewrapped lines to 78 chars (the file's current maximum)
2012-01-23 20:27:47 +01:00
FND
76c1a1f722 fixed spelling of "instantiate"
while the interwebs suggest "instanciate" might be a valid spelling, it
seems quite uncommon and potentially irritating (to pedants like myself)
2012-01-23 20:12:57 +01:00
Ron DuPlain
b786eac557 Add test for limited imp loaders, #380. 2012-01-18 18:57:05 -05:00
Ron DuPlain
56177bcbd1 Document app.testing=True for test client, #381. 2012-01-17 19:43:11 -05:00
Ron DuPlain
2e5de98297 Use app.testing=True for asserts in messages test. 2012-01-17 19:33:48 -05:00
Ron DuPlain
49b77fbc7a Add missing colons to versionadded. 2012-01-17 11:38:00 -05:00
Ron DuPlain
234ac198cb Add updated Flask.run to CHANGES. 2012-01-16 23:38:36 -05:00
Ron DuPlain
19d32cb172 Update Flask.run signature, note defaults. 2012-01-16 23:33:13 -05:00
Joe Esposito
46e7bc7083 In Flask.run, now when the host/port argument is None, it will use its default value. 2012-01-16 23:29:24 -05:00
Ron DuPlain
c93ea5551c Keep flashed message examples in one place. 2012-01-16 23:16:43 -05:00
Ron DuPlain
81010bf7af Add get_flashed_messages to CHANGES, expand docs. 2012-01-16 23:10:21 -05:00
Steven Osborn
fa069f94de Allow category filtering in get_flashed_messages to allow rending categories in separate html blocks 2012-01-16 22:45:42 -05:00
Ron DuPlain
676b3a4c13 Check status code in test client or fail silently. 2012-01-16 22:44:06 -05:00
Ron DuPlain
b9907b4969 Expand get_flashed_messages tests.
Ready to pull request #336.
http://github.com/mitsuhiko/flask/pull/336
2012-01-16 22:22:08 -05:00
Ron DuPlain
ed40eacf42 Add tiny doc touchups. 2012-01-16 21:45:19 -05:00
Ori Livneh
df19ee95bd more editorial work 2012-01-16 21:33:35 -05:00
Ori Livneh
593b003b5c tweak to one sentence 2012-01-16 21:28:35 -05:00
Ori Livneh
c34a87033f tweaks to style and structure 2012-01-16 21:28:35 -05:00
Ori Livneh
1a9e082a76 tweaks to style 2012-01-16 21:28:31 -05:00
Ori Livneh
e5161a773e commas after introductory phrases 2012-01-16 21:25:54 -05:00
Ron DuPlain
96f7beba46 Document recent changes. 2012-01-16 20:53:20 -05:00
Ron DuPlain
820d099e82 Add tests for template filter methods/decorators. 2012-01-16 20:21:26 -05:00
Ron DuPlain
ce4d589d5b Add non-decorator template filter methods.
Suggested by @Poincare on GitHub, on @Reisen's pull request:
https://github.com/mitsuhiko/flask/pull/272
2012-01-16 20:16:48 -05:00
Reisen
2a4d3ef116 Added a template filter decorator to blueprints. 2012-01-16 18:58:43 -05:00
Kyle Wild
8532bd51a7 [docstring] Remove an extra if clause to clarify sentence 2012-01-16 13:42:43 -05:00
Kyle Wild
46651659c2 Fix a typo ("is"->"if") in the comments; clarify a bit 2012-01-16 13:42:43 -05:00
awsum
d620ea7ea2 Update docs/api.rst a bit to reflect code. 2012-01-16 13:42:43 -05:00
Sundar Raman
94692607e6 Documentation on how to use external debuggers like eclipse/aptana 2012-01-16 13:42:43 -05:00
ThomasWaldmann
e2cb8d2ef1 fixed typo, quote "with" statement 2012-01-16 13:42:43 -05:00
Priit Laes
d18868bd17 Add simple decorator example
Github issue #358
2012-01-16 13:42:43 -05:00
Priit Laes
a59cbd4f52 Minor grammar fix 2012-01-16 13:42:42 -05:00
Ron DuPlain
1f20a11284 Fall back to imports w/exotic pkg loaders, #380.
Needs a test, which likely requires introducing a mock library.
2012-01-16 09:23:40 -05:00
Ron DuPlain
83189f20bf Add .egg for zipimporter instance path test.
.gitignore contains '*.egg'
2012-01-16 09:05:42 -05:00
Ron DuPlain
970de5e8b6 Add discussion to NoImportsTestCase. 2012-01-09 10:25:06 -05:00
Ron DuPlain
fde6e364a4 Update tests for new module helpers. 2012-01-07 17:55:02 -05:00
Ron DuPlain
a3b30b7e3b Handle zip & interactive cases in module helpers. 2012-01-07 17:54:37 -05:00
Ron DuPlain
d16491145d Update module helpers to avoid Python imports.
This avoids errors in creating Flask instances where there are import
errors in the module or package matching the import name.  Those runtime
errors will be apparent to the user soon enough, but tools which build
Flask instances meta-programmatically benefit from a Flask which does
not __import__.
2012-01-07 17:52:38 -05:00
Ron DuPlain
26a9c2079d Add test to catch imports at Flask instantiation. 2012-01-07 17:52:38 -05:00
Ron DuPlain
c824ffcf38 Merge pull request #375 from awsum/patch-1
typo fix
2012-01-07 11:20:29 -08:00
awsum
d50a0b4955 typo fix 2012-01-07 21:11:35 +02:00
Armin Ronacher
f64098c784 Merge pull request #369 from FND/docs
documentation: stylistic adjustments
2012-01-04 15:05:16 -08:00
Armin Ronacher
b6625ec193 Fixed a wrong example in the view docs. This fixes #374 2012-01-05 00:04:50 +01:00
Armin Ronacher
065afe53a6 Improved doc exaples. This fixes #370 and #371. 2011-12-27 19:08:44 +01:00
FND
7ccca13bbd Fixed various stylistic issues in documentation 2011-12-27 11:01:14 +01:00
Armin Ronacher
a9726c43ac Updated mod_wsgi docs to reference the sys.path hackery 2011-12-04 18:59:37 -05:00
Armin Ronacher
c90858a95d Added a branch to test functionality enabled by new test client 2011-11-28 22:48:14 +01:00
Armin Ronacher
4fe80c05c6 Not yet stable? Bollocks 2011-11-28 22:47:36 +01:00
Armin Ronacher
9c8f138a42 Improved test coverage for the test client 2011-11-25 21:08:19 +01:00
Armin Ronacher
b8866aeb22 Merge remote-tracking branch 'plaes/testing-redirects-session' 2011-11-20 17:06:37 +01:00
Craig Dennis
75050d4bc5 Simple documentation corrections, mostly typos. 2011-11-20 17:03:37 +01:00
Armin Ronacher
8ae6ced82d Merge pull request #345 from jimrollenhagen/master
Fix issue #338
2011-11-20 08:00:14 -08:00
Armin Ronacher
d628df6ab6 Store session after callbacks. This fixes #351 2011-11-20 16:54:40 +01:00
Priit Laes
9dd61eea6b Added testcase for redirect and session keeparound bug 2011-11-10 10:59:32 +02:00
Armin Ronacher
7f4c12b335 Break up a circular dependency on shutdown 2011-11-05 17:43:40 +01:00
Jim Rollenhagen
e345a3afb5 Fix string format error while we're in here. 2011-11-05 09:03:18 -04:00
Jim Rollenhagen
51e4a58a85 Fix flask issue #338
Give POST its own url_rule to avoid TypeError.
2011-11-05 09:02:05 -04:00
Armin Ronacher
11c7b1df23 Merge branch 'master' of github.com:mitsuhiko/flask 2011-11-04 02:46:44 +01:00
Armin Ronacher
f52e7a9dc9 Added support for _method to url_for() 2011-11-04 02:46:22 +01:00
Ron DuPlain
5a7c02b541 Merge pull request #342 from Cixelyn/master
Config documentation "instance_root" -> "instance_path"
2011-11-02 06:13:14 -07:00
Cory Li
e4d9ccd6ec Changing instance_root to instance_path 2011-11-02 01:45:39 -03:00
Armin Ronacher
eb6a244a89 Merge pull request #337 from rozza/master
Updated docs - for Response class status_code => status
2011-10-17 06:30:42 -07:00
Ross Lawley
11c9bf2943 Api fix status_code => status 2011-10-17 13:12:12 +00:00
Armin Ronacher
d16c6abf53 Merge pull request #334 from SimonSapin/patch-3
Typo fix
2011-10-13 04:34:13 -07:00
Simon Sapin
4ab97047de Typo fix 2011-10-13 11:49:51 +03:00
Armin Ronacher
61a95196ac Changed logic for debug level log settings 2011-10-11 19:09:37 -07:00
Armin Ronacher
583c5f7935 Merge branch 'master' of github.com:mitsuhiko/flask 2011-10-07 15:19:42 -04:00
Armin Ronacher
174f32250e Mention that people subscribe with **extra. 2011-10-07 15:19:03 -04:00
Armin Ronacher
230e136f32 Subscribe to signals with extra kwargs in the docs 2011-10-07 15:09:12 -04:00
Armin Ronacher
ebd7468807 Added a newline 2011-10-07 15:09:02 -04:00
Armin Ronacher
6dec92dde9 Merge pull request #333 from kracekumar/master
Added PasswordField in docs/patterns/wtforms.rst
2011-10-06 12:27:09 -07:00
kracekumar
b115b38dbe Added PasswordField in docs/patterns/wtforms.rst 2011-10-06 23:45:35 +05:30
Armin Ronacher
a9f68dd4c7 Merge branch '0.8-maintenance' 2011-10-06 10:57:06 -04:00
Armin Ronacher
1759d8e4d8 Added support for anchor link generation. 2011-10-06 10:57:03 -04:00
Armin Ronacher
d04c9a61e3 Merge branch '0.8-maintenance' 2011-10-02 01:09:36 +02:00
Armin Ronacher
3765cc2e9e This is 0.9-dev 2011-09-29 23:36:57 +02:00
367 changed files with 33038 additions and 17015 deletions

View file

@ -0,0 +1,17 @@
{
"name": "pallets/flask",
"image": "mcr.microsoft.com/devcontainers/python:3",
"customizations": {
"vscode": {
"settings": {
"python.defaultInterpreterPath": "${workspaceFolder}/.venv",
"python.terminal.activateEnvInCurrentTerminal": true,
"python.terminal.launchArgs": [
"-X",
"dev"
]
}
}
},
"onCreateCommand": ".devcontainer/on-create-command.sh"
}

View file

@ -0,0 +1,7 @@
#!/bin/bash
set -e
python3 -m venv --upgrade-deps .venv
. .venv/bin/activate
pip install -r requirements/dev.txt
pip install -e .
pre-commit install --install-hooks

13
.editorconfig Normal file
View file

@ -0,0 +1,13 @@
root = true
[*]
indent_style = space
indent_size = 4
insert_final_newline = true
trim_trailing_whitespace = true
end_of_line = lf
charset = utf-8
max_line_length = 88
[*.{css,html,js,json,jsx,scss,ts,tsx,yaml,yml}]
indent_size = 2

27
.github/ISSUE_TEMPLATE/bug-report.md vendored Normal file
View file

@ -0,0 +1,27 @@
---
name: Bug report
about: Report a bug in Flask (not other projects which depend on Flask)
---
<!--
This issue tracker is a tool to address bugs in Flask itself. Please use
GitHub Discussions or the Pallets Discord for questions about your own code.
Replace this comment with a clear outline of what the bug is.
-->
<!--
Describe how to replicate the bug.
Include a minimal reproducible example that demonstrates the bug.
Include the full traceback if there was an exception.
-->
<!--
Describe the expected behavior that should have happened but didn't.
-->
Environment:
- Python version:
- Flask version:

11
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View file

@ -0,0 +1,11 @@
blank_issues_enabled: false
contact_links:
- name: Security issue
url: https://github.com/pallets/flask/security/advisories/new
about: Do not report security issues publicly. Create a private advisory.
- name: Questions on GitHub Discussions
url: https://github.com/pallets/flask/discussions/
about: Ask questions about your own code on the Discussions tab.
- name: Questions on Discord
url: https://discord.gg/pallets
about: Ask questions about your own code on our Discord chat.

View file

@ -0,0 +1,15 @@
---
name: Feature request
about: Suggest a new feature for Flask
---
<!--
Replace this comment with a description of what the feature should do.
Include details such as links to relevant specs or previous discussions.
-->
<!--
Replace this comment with an example of the problem which this feature
would resolve. Is this problem solvable without changes to Flask, such
as by subclassing or using an extension?
-->

25
.github/pull_request_template.md vendored Normal file
View file

@ -0,0 +1,25 @@
<!--
Before opening a PR, open a ticket describing the issue or feature the
PR will address. An issue is not required for fixing typos in
documentation, or other simple non-code changes.
Replace this comment with a description of the change. Describe how it
addresses the linked ticket.
-->
<!--
Link to relevant issues or previous PRs, one per line. Use "fixes" to
automatically close an issue.
fixes #<issue number>
-->
<!--
Ensure each step in CONTRIBUTING.rst is complete, especially the following:
- Add tests that demonstrate the correct behavior of the change. Tests
should fail without the change.
- Add or update relevant docs, in the docs folder and in code.
- Add an entry in CHANGES.rst summarizing the change and linking to the issue.
- Add `.. versionchanged::` entries in any relevant code docs.
-->

26
.github/workflows/lock.yaml vendored Normal file
View file

@ -0,0 +1,26 @@
name: Lock inactive closed issues
# Lock closed issues that have not received any further activity for two weeks.
# This does not close open issues, only humans may do that. It is easier to
# respond to new issues with fresh examples rather than continuing discussions
# on old issues.
on:
schedule:
- cron: '0 0 * * *'
permissions: {}
concurrency:
group: lock
cancel-in-progress: true
jobs:
lock:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
discussions: write
steps:
- uses: dessant/lock-threads@7266a7ce5c1df01b1c6db85bf8cd86c737dadbe7 # v6.0.0
with:
issue-inactive-days: 14
pr-inactive-days: 14
discussion-inactive-days: 14

29
.github/workflows/pre-commit.yaml vendored Normal file
View file

@ -0,0 +1,29 @@
name: pre-commit
on:
pull_request:
push:
branches: [main, stable]
permissions: {}
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
main:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8.0.0
with:
enable-cache: true
prune-cache: false
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
id: setup-python
with:
python-version-file: pyproject.toml
- uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4
with:
path: ~/.cache/pre-commit
key: pre-commit|${{ hashFiles('pyproject.toml', '.pre-commit-config.yaml') }}
- run: uv run --locked --no-default-groups --group pre-commit pre-commit run --show-diff-on-failure --color=always --all-files

62
.github/workflows/publish.yaml vendored Normal file
View file

@ -0,0 +1,62 @@
name: Publish
on:
push:
tags: ['*']
permissions: {}
concurrency:
group: publish-${{ github.event.push.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
outputs:
artifact-id: ${{ steps.upload-artifact.outputs.artifact-id }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8.0.0
with:
enable-cache: false
prune-cache: false
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version-file: pyproject.toml
- run: echo "SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct)" >> $GITHUB_ENV
- run: uv build
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
id: upload-artifact
with:
name: dist
path: dist/
if-no-files-found: error
create-release:
needs: [build]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
artifact-ids: ${{ needs.build.outputs.artifact-id }}
path: dist/
- name: create release
run: gh release create --draft --repo ${GITHUB_REPOSITORY} ${GITHUB_REF_NAME} dist/*
env:
GH_TOKEN: ${{ github.token }}
publish-pypi:
needs: [build]
environment:
name: publish
url: https://pypi.org/project/Flask/${{ github.ref_name }}
runs-on: ubuntu-latest
permissions:
id-token: write
steps:
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
artifact-ids: ${{ needs.build.outputs.artifact-id }}
path: dist/
- uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
with:
packages-dir: "dist/"

63
.github/workflows/tests.yaml vendored Normal file
View file

@ -0,0 +1,63 @@
name: Tests
on:
pull_request:
paths-ignore: ['docs/**', 'README.md']
push:
branches: [main, stable]
paths-ignore: ['docs/**', 'README.md']
permissions: {}
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
tests:
name: ${{ matrix.name || matrix.python }}
runs-on: ${{ matrix.os || 'ubuntu-latest' }}
strategy:
fail-fast: false
matrix:
include:
- {python: '3.14'}
- {python: '3.14t'}
- {name: Windows, python: '3.14', os: windows-latest}
- {name: Mac, python: '3.14', os: macos-latest}
- {python: '3.13'}
- {python: '3.12'}
- {python: '3.11'}
- {python: '3.10'}
- {name: PyPy, python: 'pypy-3.11', tox: pypy3.11}
- {name: Minimum Versions, python: '3.14', tox: tests-min}
- {name: Development Versions, python: '3.10', tox: tests-dev}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8.0.0
with:
enable-cache: true
prune-cache: false
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: ${{ matrix.python }}
- run: uv run --locked --no-default-groups --group dev tox run
env:
TOX_ENV: ${{ matrix.tox || format('py{0}', matrix.python) }}
typing:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8.0.0
with:
enable-cache: true
prune-cache: false
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version-file: pyproject.toml
- name: cache mypy
uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4
with:
path: ./.mypy_cache
key: mypy|${{ hashFiles('pyproject.toml') }}
- run: uv run --locked --no-default-groups --group dev tox run -e typing

22
.github/workflows/zizmor.yaml vendored Normal file
View file

@ -0,0 +1,22 @@
name: GitHub Actions security analysis with zizmor
on:
pull_request:
paths: ["**/*.yaml?"]
push:
branches: [main, stable]
paths: ["**/*.yaml?"]
permissions: {}
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
zizmor:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: zizmorcore/zizmor-action@71321a20a9ded102f6e9ce5718a2fcec2c4f70d8 # v0.5.2
with:
advanced-security: false
annotations: true

18
.gitignore vendored
View file

@ -1,10 +1,8 @@
.DS_Store
*.pyc
*.pyo
env
env*
dist
*.egg
*.egg-info
_mailinglist
.tox
.idea/
.vscode/
__pycache__/
dist/
.coverage*
htmlcov/
.tox/
docs/_build/

3
.gitmodules vendored
View file

@ -1,3 +0,0 @@
[submodule "docs/_themes"]
path = docs/_themes
url = git://github.com/mitsuhiko/flask-sphinx-themes.git

23
.pre-commit-config.yaml Normal file
View file

@ -0,0 +1,23 @@
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: 5e2fb545eba1ea9dc051f6f962d52fe8f76a9794 # frozen: v0.15.13
hooks:
- id: ruff-check
- id: ruff-format
- repo: https://github.com/astral-sh/uv-pre-commit
rev: fa60a193803535a9e2accdb3ca4b1b584b1150cb # frozen: 0.11.15
hooks:
- id: uv-lock
- repo: https://github.com/codespell-project/codespell
rev: 2ccb47ff45ad361a21071a7eedda4c37e6ae8c5a # frozen: v2.4.2
hooks:
- id: codespell
args: ['--write-changes']
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: 3e8a8703264a2f4a69428a0aa4dcb512790b2c8c # frozen: v6.0.0
hooks:
- id: check-merge-conflict
- id: debug-statements
- id: fix-byte-order-marker
- id: trailing-whitespace
- id: end-of-file-fixer

10
.readthedocs.yaml Normal file
View file

@ -0,0 +1,10 @@
version: 2
build:
os: ubuntu-24.04
tools:
python: '3.13'
commands:
- asdf plugin add uv
- asdf install uv latest
- asdf global uv latest
- uv run --group docs sphinx-build -W -b dirhtml docs $READTHEDOCS_OUTPUT/html

30
AUTHORS
View file

@ -1,30 +0,0 @@
Flask is written and maintained by Armin Ronacher and
various contributors:
Development Lead
````````````````
- Armin Ronacher <armin.ronacher@active-4.com>
Patches and Suggestions
```````````````````````
- Adam Zapletal
- Ali Afshar
- Chris Edgemon
- Chris Grindstaff
- Christopher Grebs
- Florent Xicluna
- Georg Brandl
- Justin Quick
- Kenneth Reitz
- Marian Sigler
- Matt Campell
- Matthew Frazier
- Michael van Tellingen
- Ron DuPlain
- Sebastien Estienne
- Simon Sapin
- Stephane Wirtel
- Thomas Schranz
- Zhao Xiaohong

302
CHANGES
View file

@ -1,302 +0,0 @@
Flask Changelog
===============
Here you can see the full list of changes between each Flask release.
Version 0.8.1
-------------
Bugfix release, released on July 1th 2012
- Fixed an issue with the undocumented `flask.session` module to not
work properly on Python 2.5. It should not be used but did cause
some problems for package managers.
Version 0.8
-----------
Released on September 29th 2011, codename Rakija
- Refactored session support into a session interface so that
the implementation of the sessions can be changed without
having to override the Flask class.
- Empty session cookies are now deleted properly automatically.
- View functions can now opt out of getting the automatic
OPTIONS implementation.
- HTTP exceptions and Bad Request errors can now be trapped so that they
show up normally in the traceback.
- Flask in debug mode is now detecting some common problems and tries to
warn you about them.
- Flask in debug mode will now complain with an assertion error if a view
was attached after the first request was handled. This gives earlier
feedback when users forget to import view code ahead of time.
- Added the ability to register callbacks that are only triggered once at
the beginning of the first request. (:meth:`Flask.before_first_request`)
- Malformed JSON data will now trigger a bad request HTTP exception instead
of a value error which usually would result in a 500 internal server
error if not handled. This is a backwards incompatible change.
- Applications now not only have a root path where the resources and modules
are located but also an instane path which is the designated place to
drop files that are modified at runtime (uploads etc.). Also this is
conceptionally only instance depending and outside version control so it's
the perfect place to put configuration files etc. For more information
see :ref:`instance-folders`.
- Added the ``APPLICATION_ROOT`` configuration variable.
- Implemented :meth:`~flask.testing.TestClient.session_transaction` to
easily modify sessions from the test environment.
- Refactored test client internally. The ``APPLICATION_ROOT`` configuration
variable as well as ``SERVER_NAME`` are now properly used by the test client
as defaults.
- Added :attr:`flask.views.View.decorators` to support simpler decorating of
pluggable (class based) views.
- Fixed an issue where the test client if used with the with statement did not
trigger the execution of the teardown handlers.
- Added finer control over the session cookie parameters.
- HEAD requests to a method view now automatically dispatch to the `get`
method if no handler was implemented.
- Implemented the virtual :mod:`flask.ext` package to import extensions from.
- The context preservation on exceptions is now an integral component of
Flask itself and no longer of the test client. This cleaned up some
internal logic and lowers the odds of runaway request contexts in unittests.
Version 0.7.3
-------------
Bugfix release, release date to be decided
- Fixed the Jinja2 environment's list_templates method not returning the
correct names when blueprints or modules were involved.
Version 0.7.2
-------------
Bugfix release, released on July 6th 2011
- Fixed an issue with URL processors not properly working on
blueprints.
Version 0.7.1
-------------
Bugfix release, released on June 29th 2011
- Added missing future import that broke 2.5 compatibility.
- Fixed an infinite redirect issue with blueprints.
Version 0.7
-----------
Released on June 28th 2011, codename Grappa
- Added :meth:`~flask.Flask.make_default_options_response`
which can be used by subclasses to alter the default
behaviour for `OPTIONS` responses.
- Unbound locals now raise a proper :exc:`RuntimeError` instead
of an :exc:`AttributeError`.
- Mimetype guessing and etag support based on file objects is now
deprecated for :func:`flask.send_file` because it was unreliable.
Pass filenames instead or attach your own etags and provide a
proper mimetype by hand.
- Static file handling for modules now requires the name of the
static folder to be supplied explicitly. The previous autodetection
was not reliable and caused issues on Google's App Engine. Until
1.0 the old behaviour will continue to work but issue dependency
warnings.
- fixed a problem for Flask to run on jython.
- added a `PROPAGATE_EXCEPTIONS` configuration variable that can be
used to flip the setting of exception propagation which previously
was linked to `DEBUG` alone and is now linked to either `DEBUG` or
`TESTING`.
- Flask no longer internally depends on rules being added through the
`add_url_rule` function and can now also accept regular werkzeug
rules added to the url map.
- Added an `endpoint` method to the flask application object which
allows one to register a callback to an arbitrary endpoint with
a decorator.
- Use Last-Modified for static file sending instead of Date which
was incorrectly introduced in 0.6.
- Added `create_jinja_loader` to override the loader creation process.
- Implemented a silent flag for `config.from_pyfile`.
- Added `teardown_request` decorator, for functions that should run at the end
of a request regardless of whether an exception occurred. Also the behavior
for `after_request` was changed. It's now no longer executed when an exception
is raised. See :ref:`upgrading-to-new-teardown-handling`
- Implemented :func:`flask.has_request_context`
- Deprecated `init_jinja_globals`. Override the
:meth:`~flask.Flask.create_jinja_environment` method instead to
achieve the same functionality.
- Added :func:`flask.safe_join`
- The automatic JSON request data unpacking now looks at the charset
mimetype parameter.
- Don't modify the session on :func:`flask.get_flashed_messages` if there
are no messages in the session.
- `before_request` handlers are now able to abort requests with errors.
- it is not possible to define user exception handlers. That way you can
provide custom error messages from a central hub for certain errors that
might occur during request processing (for instance database connection
errors, timeouts from remote resources etc.).
- Blueprints can provide blueprint specific error handlers.
- Implemented generic :ref:`views` (class based views).
Version 0.6.1
-------------
Bugfix release, released on December 31st 2010
- Fixed an issue where the default `OPTIONS` response was
not exposing all valid methods in the `Allow` header.
- Jinja2 template loading syntax now allows "./" in front of
a template load path. Previously this caused issues with
module setups.
- Fixed an issue where the subdomain setting for modules was
ignored for the static folder.
- Fixed a security problem that allowed clients to download arbitrary files
if the host server was a windows based operating system and the client
uses backslashes to escape the directory the files where exposed from.
Version 0.6
-----------
Released on July 27th 2010, codename Whisky
- after request functions are now called in reverse order of
registration.
- OPTIONS is now automatically implemented by Flask unless the
application explicitly adds 'OPTIONS' as method to the URL rule.
In this case no automatic OPTIONS handling kicks in.
- static rules are now even in place if there is no static folder
for the module. This was implemented to aid GAE which will
remove the static folder if it's part of a mapping in the .yml
file.
- the :attr:`~flask.Flask.config` is now available in the templates
as `config`.
- context processors will no longer override values passed directly
to the render function.
- added the ability to limit the incoming request data with the
new ``MAX_CONTENT_LENGTH`` configuration value.
- the endpoint for the :meth:`flask.Module.add_url_rule` method
is now optional to be consistent with the function of the
same name on the application object.
- added a :func:`flask.make_response` function that simplifies
creating response object instances in views.
- added signalling support based on blinker. This feature is currently
optional and supposed to be used by extensions and applications. If
you want to use it, make sure to have `blinker`_ installed.
- refactored the way URL adapters are created. This process is now
fully customizable with the :meth:`~flask.Flask.create_url_adapter`
method.
- modules can now register for a subdomain instead of just an URL
prefix. This makes it possible to bind a whole module to a
configurable subdomain.
.. _blinker: http://pypi.python.org/pypi/blinker
Version 0.5.2
-------------
Bugfix Release, released on July 15th 2010
- fixed another issue with loading templates from directories when
modules were used.
Version 0.5.1
-------------
Bugfix Release, released on July 6th 2010
- fixes an issue with template loading from directories when modules
where used.
Version 0.5
-----------
Released on July 6th 2010, codename Calvados
- fixed a bug with subdomains that was caused by the inability to
specify the server name. The server name can now be set with
the `SERVER_NAME` config key. This key is now also used to set
the session cookie cross-subdomain wide.
- autoescaping is no longer active for all templates. Instead it
is only active for ``.html``, ``.htm``, ``.xml`` and ``.xhtml``.
Inside templates this behaviour can be changed with the
``autoescape`` tag.
- refactored Flask internally. It now consists of more than a
single file.
- :func:`flask.send_file` now emits etags and has the ability to
do conditional responses builtin.
- (temporarily) dropped support for zipped applications. This was a
rarely used feature and led to some confusing behaviour.
- added support for per-package template and static-file directories.
- removed support for `create_jinja_loader` which is no longer used
in 0.5 due to the improved module support.
- added a helper function to expose files from any directory.
Version 0.4
-----------
Released on June 18th 2010, codename Rakia
- added the ability to register application wide error handlers
from modules.
- :meth:`~flask.Flask.after_request` handlers are now also invoked
if the request dies with an exception and an error handling page
kicks in.
- test client has not the ability to preserve the request context
for a little longer. This can also be used to trigger custom
requests that do not pop the request stack for testing.
- because the Python standard library caches loggers, the name of
the logger is configurable now to better support unittests.
- added `TESTING` switch that can activate unittesting helpers.
- the logger switches to `DEBUG` mode now if debug is enabled.
Version 0.3.1
-------------
Bugfix release, released on May 28th 2010
- fixed a error reporting bug with :meth:`flask.Config.from_envvar`
- removed some unused code from flask
- release does no longer include development leftover files (.git
folder for themes, built documentation in zip and pdf file and
some .pyc files)
Version 0.3
-----------
Released on May 28th 2010, codename Schnaps
- added support for categories for flashed messages.
- the application now configures a :class:`logging.Handler` and will
log request handling exceptions to that logger when not in debug
mode. This makes it possible to receive mails on server errors
for example.
- added support for context binding that does not require the use of
the with statement for playing in the console.
- the request context is now available within the with statement making
it possible to further push the request context or pop it.
- added support for configurations.
Version 0.2
-----------
Released on May 12th 2010, codename Jägermeister
- various bugfixes
- integrated JSON support
- added :func:`~flask.get_template_attribute` helper function.
- :meth:`~flask.Flask.add_url_rule` can now also register a
view function.
- refactored internal request dispatching.
- server listens on 127.0.0.1 by default now to fix issues with chrome.
- added external URL support.
- added support for :func:`~flask.send_file`
- module support and internal request handling refactoring
to better support pluggable applications.
- sessions can be set to be permanent now on a per-session basis.
- better error reporting on missing secret keys.
- added support for Google Appengine.
Version 0.1
-----------
First public preview release.

1665
CHANGES.rst Normal file

File diff suppressed because it is too large Load diff

33
LICENSE
View file

@ -1,33 +0,0 @@
Copyright (c) 2010 by Armin Ronacher and contributors. See AUTHORS
for more details.
Some rights reserved.
Redistribution and use in source and binary forms of the software as well
as documentation, with or without modification, are permitted provided
that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* The names of the contributors may not be used to endorse or
promote products derived from this software without specific
prior written permission.
THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE AND DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.

28
LICENSE.txt Normal file
View file

@ -0,0 +1,28 @@
Copyright 2010 Pallets
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View file

@ -1,16 +0,0 @@
include Makefile CHANGES LICENSE AUTHORS run-tests.py
recursive-include artwork *
recursive-include tests *
recursive-include examples *
recursive-include docs *
recursive-exclude docs *.pyc
recursive-exclude docs *.pyo
recursive-exclude tests *.pyc
recursive-exclude tests *.pyo
recursive-exclude examples *.pyc
recursive-exclude examples *.pyo
recursive-include flask/testsuite/static *
recursive-include flask/testsuite/templates *
recursive-include flask/testsuite/test_apps *
prune docs/_build
prune docs/_themes/.git

View file

@ -1,34 +0,0 @@
.PHONY: clean-pyc ext-test test upload-docs docs audit
all: clean-pyc test
test:
python run-tests.py
audit:
python setup.py audit
release:
python scripts/make-release.py
tox-test:
PYTHONDONTWRITEBYTECODE= tox
ext-test:
python tests/flaskext_test.py --browse
clean-pyc:
find . -name '*.pyc' -exec rm -f {} +
find . -name '*.pyo' -exec rm -f {} +
find . -name '*~' -exec rm -f {} +
upload-docs:
$(MAKE) -C docs html dirhtml latex
$(MAKE) -C docs/_build/latex all-pdf
cd docs/_build/; mv html flask-docs; zip -r flask-docs.zip flask-docs; mv flask-docs html
rsync -a docs/_build/dirhtml/ pocoo.org:/var/www/flask.pocoo.org/docs/
rsync -a docs/_build/latex/Flask.pdf pocoo.org:/var/www/flask.pocoo.org/docs/flask-docs.pdf
rsync -a docs/_build/flask-docs.zip pocoo.org:/var/www/flask.pocoo.org/docs/flask-docs.zip
docs:
$(MAKE) -C docs html

52
README
View file

@ -1,52 +0,0 @@
// Flask //
web development, one drop at a time
~ What is Flask?
Flask is a microframework for Python based on Werkzeug
and Jinja2. It's intended for small scale applications
and was developed with best intentions in mind.
~ Is it ready?
It's still not 1.0 but it's shaping up nicely and is
already widely used. Consider the API to slightly
improve over time but we don't plan on breaking it.
~ What do I need?
Jinja 2.4 and Werkzeug 0.6.1. `pip` or `easy_install` will
install them for you if you do `easy_install Flask`.
I encourage you to use a virtualenv. Check the docs for
complete installation and usage instructions.
~ Where are the docs?
Go to http://flask.pocoo.org/docs/ for a prebuilt version
of the current documentation. Otherwise build them yourself
from the sphinx sources in the docs folder.
~ Where are the tests?
Good that you're asking. The tests are in the
flask/testsuite package. To run the tests use the
`run-tests.py` file:
$ python run-tests.py
If it's not enough output for you, you can use the
`--verbose` flag:
$ python run-tests.py --verbose
If you just want one particular testcase to run you can
provide it on the command line:
$ python run-tests.py test_to_run
~ Where can I get help?
Either use the #pocoo IRC channel on irc.freenode.net or
ask on the mailinglist: http://flask.pocoo.org/mailinglist/

53
README.md Normal file
View file

@ -0,0 +1,53 @@
<div align="center"><img src="https://raw.githubusercontent.com/pallets/flask/refs/heads/stable/docs/_static/flask-name.svg" alt="" height="150"></div>
# Flask
Flask is a lightweight [WSGI] web application framework. It is designed
to make getting started quick and easy, with the ability to scale up to
complex applications. It began as a simple wrapper around [Werkzeug]
and [Jinja], and has become one of the most popular Python web
application frameworks.
Flask offers suggestions, but doesn't enforce any dependencies or
project layout. It is up to the developer to choose the tools and
libraries they want to use. There are many extensions provided by the
community that make adding new functionality easy.
[WSGI]: https://wsgi.readthedocs.io/
[Werkzeug]: https://werkzeug.palletsprojects.com/
[Jinja]: https://jinja.palletsprojects.com/
## A Simple Example
```python
# save this as app.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, World!"
```
```
$ flask run
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
```
## Donate
The Pallets organization develops and supports Flask and the libraries
it uses. In order to grow the community of contributors and users, and
allow the maintainers to devote more time to the projects, [please
donate today].
[please donate today]: https://palletsprojects.com/donate
## Contributing
See our [detailed contributing documentation][contrib] for many ways to
contribute, including reporting issues, requesting features, asking or answering
questions, and making PRs.
[contrib]: https://palletsprojects.com/contributing/

View file

@ -1,20 +0,0 @@
Copyright (c) 2010 by Armin Ronacher.
Some rights reserved.
This logo or a modified version may be used by anyone to refer to the
Flask project, but does not indicate endorsement by the project.
Redistribution and use in source (the SVG file) and binary forms (rendered
PNG files etc.) of the image, with or without modification, are permitted
provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice and this list of conditions.
* The names of the contributors to the Flask software (see AUTHORS) may
not be used to endorse or promote products derived from this software
without specific prior written permission.
Note: we would appreciate that you make the image a link to
http://flask.pocoo.org/ if you use it on a web page.

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 77 KiB

1
docs/.gitignore vendored
View file

@ -1 +0,0 @@
_build

View file

@ -1,118 +1,20 @@
# Makefile for Sphinx documentation
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = .
BUILDDIR = _build
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp epub latex changes linkcheck doctest
# Put it first so that "make" without argument is like "make help".
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
clean:
-rm -rf $(BUILDDIR)/*
.PHONY: help Makefile
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."
qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Flask.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Flask.qhc"
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) _build/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/Flask"
@echo "# ln -s _build/devhelp $$HOME/.local/share/devhelp/Flask"
@echo "# devhelp"
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
"run these through (pdf)latex."
latexpdf: latex
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) _build/latex
@echo "Running LaTeX files through pdflatex..."
make -C _build/latex all-pdf
@echo "pdflatex finished; the PDF files are in _build/latex."
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 121 KiB

After

Width:  |  Height:  |  Size: 203 KiB

Before After
Before After

15
docs/_static/flask-icon.svg vendored Normal file
View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 500 500" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<rect id="Icon" x="0" y="0" width="500" height="500" style="fill:none;"/>
<clipPath id="_clip1">
<rect x="0" y="0" width="500" height="500"/>
</clipPath>
<g clip-path="url(#_clip1)">
<g>
<path d="M224.446,59.975c-0.056,-4.151 -0.483,-5.543 -2.7,-6.823c-2.104,-1.393 -5.288,-1.421 -8.329,-0.085l-204.674,87.64c-3.042,1.336 -5.913,4.008 -7.448,6.908c-1.535,2.899 -1.705,5.97 -0.511,8.158l17.084,31.384l0.228,0.369c1.847,2.928 6.026,3.696 10.29,1.82l1.251,-0.54c5.344,22.4 14.1,50.429 25.783,70.413l178.294,-79.794c-2.559,-23.14 -9.552,-89.602 -9.268,-119.479l0,0.029Z" style="fill:#3babc3;fill-rule:nonzero;"/>
<path d="M238.603,205.776l-171.698,76.838c10.091,19.132 22.542,39.428 37.722,58.986c50.429,-25.698 100.887,-51.396 151.316,-77.094c-3.269,-8.471 -6.452,-17.653 -17.34,-58.73Z" style="fill:#3babc3;fill-rule:nonzero;"/>
<path d="M497.601,388.846l-12.139,-18.535c-1.819,-2.018 -4.633,-2.786 -7.106,-1.791l-15.578,5.999c-1.848,-2.047 -4.52,-2.815 -7.135,-1.791c-5.089,1.99 -10.206,4.008 -15.294,5.998c-1.649,0.625 -2.104,1.847 -1.791,3.439l0.995,4.861c-28.711,3.099 -77.236,1.564 -120.701,-32.577c-19.216,-15.066 -37.239,-36.386 -52.277,-66.206l-144.75,73.768c26.466,29.08 59.697,54.864 100.973,70.385c57.422,21.633 130.593,23.679 222.838,-13.475l0.512,2.616c0.455,2.928 3.98,6.026 8.755,4.15l15.323,-5.97c5.258,-1.99 5.287,-6.026 4.519,-8.641l19.729,-7.704c2.217,-0.853 9.096,-6.169 3.183,-14.526l-0.056,-0Z" style="fill:#3babc3;fill-rule:nonzero;"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2 KiB

17
docs/_static/flask-logo.svg vendored Normal file
View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 500 500" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<rect id="Logo" x="0" y="0" width="500" height="500" style="fill:none;"/>
<g>
<path id="Box" d="M500,50l0,400c0,27.596 -22.404,50 -50,50l-400,0c-27.596,0 -50,-22.404 -50,-50l0,-400c0,-27.596 22.404,-50 50,-50l400,0c27.596,0 50,22.404 50,50Z" style="fill:url(#_Linear1);"/>
<path id="Shadow" d="M500,398.646l0,51.354c0,27.596 -22.404,50 -50,50l-94.111,0l-170.452,-170.451c13.541,12.279 29.511,22.845 48.242,29.888c34.453,12.98 78.356,14.208 133.703,-8.084l0.307,1.569c0.273,1.757 2.388,3.616 5.253,2.49l9.193,-3.582c3.156,-1.194 3.173,-3.616 2.712,-5.185l11.837,-4.622c1.331,-0.512 5.458,-3.701 1.91,-8.716l-0.034,0l-7.283,-11.12c-1.091,-1.211 -2.78,-1.672 -4.264,-1.075l-9.346,3.599c-1.109,-1.228 -2.712,-1.688 -4.281,-1.074c-3.054,1.194 -6.124,2.404 -9.177,3.598c-0.989,0.376 -1.262,1.109 -1.074,2.064l0.597,2.917c-17.227,1.859 -46.342,0.938 -72.421,-19.547c-11.53,-9.039 -22.343,-21.831 -31.366,-39.723l-83.923,42.769l-13.246,-10.755c30.258,-15.419 60.532,-30.837 90.79,-46.256c-1.961,-5.083 -3.872,-10.592 -10.404,-35.238l-98.082,43.893l-11.828,-11.828l106.976,-47.876c-1.534,-13.88 -5.728,-53.736 -5.56,-71.67l-0,-0.017c-0.027,-1.894 -0.184,-2.827 -0.85,-3.504l266.182,266.182Zm-388.562,-185.436c1.272,1.164 3.414,1.356 5.594,0.397l0.75,-0.324c0.645,2.703 1.373,5.543 2.181,8.452l-8.525,-8.525Z" style="fill:#3b808b;"/>
<g id="Icon">
<path d="M234.668,135.985c-0.034,-2.49 -0.29,-3.326 -1.62,-4.094c-1.263,-0.835 -3.173,-0.852 -4.998,-0.051l-122.804,52.584c-1.825,0.802 -3.548,2.405 -4.469,4.145c-0.921,1.74 -1.023,3.582 -0.307,4.895l10.251,18.83l0.136,0.222c1.109,1.757 3.616,2.217 6.175,1.091l0.75,-0.324c3.207,13.441 8.46,30.258 15.47,42.248l106.976,-47.876c-1.535,-13.884 -5.731,-53.761 -5.56,-71.687l-0,0.017Z" style="fill:#fff;fill-rule:nonzero;"/>
<path d="M243.162,223.466l-103.019,46.103c6.055,11.478 13.525,23.656 22.633,35.391c30.258,-15.419 60.532,-30.837 90.79,-46.256c-1.961,-5.083 -3.872,-10.592 -10.404,-35.238Z" style="fill:#fff;fill-rule:nonzero;"/>
<path d="M398.56,333.307l-7.283,-11.12c-1.091,-1.211 -2.78,-1.672 -4.264,-1.075l-9.346,3.599c-1.109,-1.228 -2.712,-1.688 -4.281,-1.074c-3.054,1.194 -6.124,2.404 -9.177,3.598c-0.989,0.376 -1.262,1.109 -1.074,2.064l0.597,2.917c-17.227,1.859 -46.342,0.938 -72.421,-19.547c-11.53,-9.039 -22.343,-21.831 -31.366,-39.723l-86.85,44.26c15.879,17.449 35.818,32.919 60.584,42.231c34.453,12.98 78.356,14.208 133.703,-8.084l0.307,1.569c0.273,1.757 2.388,3.616 5.253,2.49l9.193,-3.582c3.156,-1.194 3.173,-3.616 2.712,-5.185l11.837,-4.622c1.331,-0.512 5.458,-3.701 1.91,-8.716l-0.034,0Z" style="fill:#fff;fill-rule:nonzero;"/>
</g>
</g>
<defs>
<linearGradient id="_Linear1" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.06162e-14,500,-500,3.06162e-14,267.59,0)"><stop offset="0" style="stop-color:#bdddeb;stop-opacity:1"/><stop offset="1" style="stop-color:#53a9d1;stop-opacity:1"/></linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

23
docs/_static/flask-name.svg vendored Normal file
View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 706 300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<g>
<path id="Name" d="M420.35,117.6l-37.65,-0c-4.4,-0 -7.475,0.85 -9.225,2.55c-1.75,1.7 -2.625,4.65 -2.625,8.85l-0,14.85l39.15,-0l-1.5,18.6l-37.65,-0l-0,43.35l-20.85,-0l-0,-85.05c-0,-7.9 1.725,-13.5 5.175,-16.8c3.45,-3.3 9.375,-4.95 17.775,-4.95l47.4,-0l0,18.6Z" style="fill-rule:nonzero;"/>
<path d="M455.75,205.8l-19.5,0.15l-0,-112.95l19.5,-0l-0,112.8Z" style="fill-rule:nonzero;"/>
<path d="M535.7,205.8l-13.05,-0l-6,-10.35l-20.85,11.25c-11.6,-0 -19.4,-4.2 -23.4,-12.6c-2,-4.1 -3.375,-8.525 -4.125,-13.275c-0.75,-4.75 -1.125,-9.7 -1.125,-14.85c-0,-5.15 0.05,-8.95 0.15,-11.4c0.1,-2.45 0.35,-5.3 0.75,-8.55c0.4,-3.25 0.975,-5.975 1.725,-8.175c0.75,-2.2 1.825,-4.475 3.225,-6.825c1.4,-2.35 3.1,-4.225 5.1,-5.625c4.5,-3.1 10.35,-4.65 17.55,-4.65l20.55,-0l19.5,-1.2l-0,86.25Zm-19.5,-27.3l-0,-40.2l-14.85,-0c-5.5,-0 -9.325,2.1 -11.475,6.3c-2.15,4.2 -3.225,10.475 -3.225,18.825c-0,8.35 1.025,14.225 3.075,17.625c2.05,3.4 5.925,5.1 11.625,5.1l14.85,-7.65Z" style="fill-rule:nonzero;"/>
<path d="M615.65,182.1l0,2.25c-0.6,7.5 -3.775,13.15 -9.525,16.95c-5.75,3.8 -12.925,5.7 -21.525,5.7c-12.7,-0 -21.6,-2.3 -26.7,-6.9c-4.7,-4.2 -7.05,-10.4 -7.05,-18.6l0,-1.8l17.7,0c0,4.6 1.2,7.75 3.6,9.45c2.4,1.7 6.55,2.55 12.45,2.55c8,0 12,-2.9 12,-8.7c0,-4.8 -1.4,-8 -4.2,-9.6c-1.3,-0.8 -2.95,-1.4 -4.95,-1.8l-15.15,-2.55c-13.2,-2.1 -19.8,-10.35 -19.8,-24.75c0,-8 2.925,-14.225 8.775,-18.675c5.85,-4.45 13.275,-6.675 22.275,-6.675c20.5,0 30.75,8.85 30.75,26.55l0,1.95l-16.95,0c-0.2,-4.7 -1.45,-7.9 -3.75,-9.6c-2.3,-1.7 -5.525,-2.55 -9.675,-2.55c-4.15,0 -7.275,0.825 -9.375,2.475c-2.1,1.65 -3.15,3.475 -3.15,5.475c0,5.7 2.3,8.95 6.9,9.75l18.15,3.3c12.8,2.4 19.2,11 19.2,25.8Z" style="fill-rule:nonzero;"/>
<path d="M705.65,205.8l-23.4,-0l-22.5,-30.3l-8.55,12.15l0,18.15l-19.5,-0l0,-112.8l19.5,-0l0,71.25l27.3,-40.65l22.05,-0l-28.05,38.4l33.15,43.8Z" style="fill-rule:nonzero;"/>
<g id="Logo">
<path id="Box" d="M300,30l0,240c0,16.557 -13.443,30 -30,30l-240,-0c-16.557,-0 -30,-13.443 -30,-30l0,-240c0,-16.557 13.443,-30 30,-30l240,0c16.557,0 30,13.443 30,30Z" style="fill:url(#_Linear1);"/>
<path id="Shadow" d="M300,239.188l0,30.812c0,16.557 -13.443,30 -30,30l-56.467,-0l-102.271,-102.271c8.125,7.368 17.707,13.707 28.945,17.933c20.672,7.788 47.014,8.525 80.222,-4.85l0.184,0.941c0.164,1.054 1.433,2.17 3.152,1.494l5.516,-2.149c1.893,-0.716 1.904,-2.169 1.627,-3.111l7.103,-2.773c0.798,-0.307 3.274,-2.221 1.146,-5.23l-0.021,0l-4.37,-6.672c-0.655,-0.727 -1.668,-1.003 -2.558,-0.645l-5.608,2.16c-0.665,-0.737 -1.627,-1.013 -2.569,-0.645c-1.832,0.716 -3.674,1.443 -5.505,2.159c-0.594,0.225 -0.758,0.665 -0.645,1.239l0.358,1.749c-10.336,1.116 -27.805,0.563 -43.452,-11.727c-6.918,-5.424 -13.406,-13.099 -18.82,-23.835l-50.354,25.662l-7.947,-6.453c18.154,-9.251 36.319,-18.502 54.474,-27.754c-1.177,-3.049 -2.323,-6.355 -6.243,-21.143l-58.849,26.336l-7.097,-7.096l64.186,-28.726c-0.921,-8.328 -3.437,-32.242 -3.336,-43.002l-0,-0.01c-0.016,-1.137 -0.111,-1.697 -0.51,-2.103l159.709,159.71Zm-233.137,-111.262c0.763,0.699 2.048,0.814 3.356,0.238l0.45,-0.194c0.387,1.622 0.824,3.325 1.309,5.071l-5.115,-5.115Z" style="fill:#3b808b;"/>
<g id="Icon">
<path d="M140.801,81.591c-0.021,-1.494 -0.174,-1.996 -0.972,-2.456c-0.758,-0.502 -1.904,-0.512 -2.999,-0.031l-73.683,31.551c-1.095,0.481 -2.128,1.443 -2.681,2.486c-0.552,1.044 -0.614,2.149 -0.184,2.937l6.151,11.298l0.081,0.133c0.666,1.055 2.17,1.331 3.705,0.655l0.45,-0.194c1.924,8.064 5.076,18.155 9.282,25.349l64.186,-28.726c-0.921,-8.33 -3.439,-32.257 -3.336,-43.012l-0,0.01Z" style="fill:#fff;fill-rule:nonzero;"/>
<path d="M145.897,134.079l-61.811,27.662c3.633,6.887 8.115,14.194 13.58,21.235c18.154,-9.251 36.319,-18.502 54.474,-27.754c-1.177,-3.049 -2.323,-6.355 -6.243,-21.143Z" style="fill:#fff;fill-rule:nonzero;"/>
<path d="M239.136,199.984l-4.37,-6.672c-0.655,-0.727 -1.668,-1.003 -2.558,-0.645l-5.608,2.16c-0.665,-0.737 -1.627,-1.013 -2.569,-0.645c-1.832,0.716 -3.674,1.443 -5.505,2.159c-0.594,0.225 -0.758,0.665 -0.645,1.239l0.358,1.749c-10.336,1.116 -27.805,0.563 -43.452,-11.727c-6.918,-5.424 -13.406,-13.099 -18.82,-23.835l-52.11,26.557c9.528,10.469 21.491,19.751 36.35,25.338c20.672,7.788 47.014,8.525 80.222,-4.85l0.184,0.941c0.164,1.054 1.433,2.17 3.152,1.494l5.516,-2.149c1.893,-0.716 1.904,-2.169 1.627,-3.111l7.103,-2.773c0.798,-0.307 3.274,-2.221 1.146,-5.23l-0.021,0Z" style="fill:#fff;fill-rule:nonzero;"/>
</g>
</g>
</g>
<defs>
<linearGradient id="_Linear1" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.83697e-14,300,-300,1.83697e-14,160.554,0)"><stop offset="0" style="stop-color:#bdddeb;stop-opacity:1"/><stop offset="1" style="stop-color:#53a9d1;stop-opacity:1"/></linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
docs/_static/flask.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

BIN
docs/_static/no.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 317 B

BIN
docs/_static/pycharm-run-config.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

BIN
docs/_static/yes.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 277 B

View file

@ -1,22 +0,0 @@
<h3>About Flask</h3>
<p>
Flask is a micro webdevelopment framework for Python. You are currently
looking at the documentation of the development version. Things are
not stable yet, but if you have some feedback,
<a href="mailto:armin.ronacher@active-4.com">let me know</a>.
</p>
<h3>Other Formats</h3>
<p>
You can download the documentation in other formats as well:
</p>
<ul>
<li><a href="http://flask.pocoo.org/docs/flask-docs.pdf">as PDF</a>
<li><a href="http://flask.pocoo.org/docs/flask-docs.zip">as zipped HTML</a>
</ul>
<h3>Useful Links</h3>
<ul>
<li><a href="http://flask.pocoo.org/">The Flask Website</a></li>
<li><a href="http://pypi.python.org/pypi/Flask">Flask @ PyPI</a></li>
<li><a href="http://github.com/mitsuhiko/flask">Flask @ github</a></li>
<li><a href="http://github.com/mitsuhiko/flask/issues">Issue Tracker</a></li>
</ul>

View file

@ -1,3 +0,0 @@
<p class="logo"><a href="{{ pathto(master_doc) }}">
<img class="logo" src="{{ pathto('_static/flask.png', 1) }}" alt="Logo"/>
</a></p>

@ -1 +0,0 @@
Subproject commit 3d964b660442e23faedf801caed6e3c7bd42d5c9

View file

@ -1,11 +1,9 @@
.. _api:
API
===
.. module:: flask
This part of the documentation covers all the interfaces of Flask. For
This part of the documentation covers all the interfaces of Flask. For
parts where Flask depends on external libraries, we document the most
important right here and provide links to the canonical documentation.
@ -29,170 +27,66 @@ Incoming Request Data
---------------------
.. autoclass:: Request
:members:
:members:
:inherited-members:
:exclude-members: json_module
.. attribute:: form
.. data:: request
A :class:`~werkzeug.datastructures.MultiDict` with the parsed form data from `POST`
or `PUT` requests. Please keep in mind that file uploads will not
end up here, but instead in the :attr:`files` attribute.
A proxy to the request data for the current request, an instance of
:class:`.Request`.
.. attribute:: args
This is only available when a :doc:`request context </appcontext>` is
active.
A :class:`~werkzeug.datastructures.MultiDict` with the parsed contents of the query
string. (The part in the URL after the question mark).
.. attribute:: values
A :class:`~werkzeug.datastructures.CombinedMultiDict` with the contents of both
:attr:`form` and :attr:`args`.
.. attribute:: cookies
A :class:`dict` with the contents of all cookies transmitted with
the request.
.. attribute:: stream
If the incoming form data was not encoded with a known mimetype
the data is stored unmodified in this stream for consumption. Most
of the time it is a better idea to use :attr:`data` which will give
you that data as a string. The stream only returns the data once.
.. attribute:: headers
The incoming request headers as a dictionary like object.
.. attribute:: data
Contains the incoming request data as string in case it came with
a mimetype Flask does not handle.
.. attribute:: files
A :class:`~werkzeug.datastructures.MultiDict` with files uploaded as part of a
`POST` or `PUT` request. Each file is stored as
:class:`~werkzeug.datastructures.FileStorage` object. It basically behaves like a
standard file object you know from Python, with the difference that
it also has a :meth:`~werkzeug.datastructures.FileStorage.save` function that can
store the file on the filesystem.
.. attribute:: environ
The underlying WSGI environment.
.. attribute:: method
The current request method (``POST``, ``GET`` etc.)
.. attribute:: path
.. attribute:: script_root
.. attribute:: url
.. attribute:: base_url
.. attribute:: url_root
Provides different ways to look at the current URL. Imagine your
application is listening on the following URL::
http://www.example.com/myapplication
And a user requests the following URL::
http://www.example.com/myapplication/page.html?x=y
In this case the values of the above mentioned attributes would be
the following:
============= ======================================================
`path` ``/page.html``
`script_root` ``/myapplication``
`base_url` ``http://www.example.com/myapplication/page.html``
`url` ``http://www.example.com/myapplication/page.html?x=y``
`url_root` ``http://www.example.com/myapplication/``
============= ======================================================
.. attribute:: is_xhr
`True` if the request was triggered via a JavaScript
`XMLHttpRequest`. This only works with libraries that support the
``X-Requested-With`` header and set it to `XMLHttpRequest`.
Libraries that do that are prototype, jQuery and Mochikit and
probably some more.
.. class:: request
To access incoming request data, you can use the global `request`
object. Flask parses incoming request data for you and gives you
access to it through that global object. Internally Flask makes
sure that you always get the correct data for the active thread if you
are in a multithreaded environment.
This is a proxy. See :ref:`notes-on-proxies` for more information.
The request object is an instance of a :class:`~werkzeug.wrappers.Request`
subclass and provides all of the attributes Werkzeug defines. This
just shows a quick overview of the most important ones.
This is a proxy. See :ref:`context-visibility` for more information.
Response Objects
----------------
.. autoclass:: flask.Response
:members: set_cookie, data, mimetype
.. attribute:: headers
A :class:`Headers` object representing the response headers.
.. attribute:: status_code
The response status as integer.
:members:
:inherited-members:
:exclude-members: json_module
Sessions
--------
If you have the :attr:`Flask.secret_key` set you can use sessions in Flask
applications. A session basically makes it possible to remember
information from one request to another. The way Flask does this is by
using a signed cookie. So the user can look at the session contents, but
not modify it unless they know the secret key, so make sure to set that
to something complex and unguessable.
If you have set :attr:`Flask.secret_key` (or configured it from
:data:`SECRET_KEY`) you can use sessions in Flask applications. A session makes
it possible to remember information from one request to another. The way Flask
does this is by using a signed cookie. The user can look at the session
contents, but can't modify it unless they know the secret key, so make sure to
set that to something complex and unguessable.
To access the current session you can use the :class:`session` object:
To access the current session you can use the :data:`.session` proxy.
.. class:: session
.. data:: session
The session object works pretty much like an ordinary dict, with the
difference that it keeps track on modifications.
A proxy to the session data for the current request, an instance of
:class:`.SessionMixin`.
This is a proxy. See :ref:`notes-on-proxies` for more information.
This is only available when a :doc:`request context </appcontext>` is
active.
The following attributes are interesting:
This is a proxy. See :ref:`context-visibility` for more information.
.. attribute:: new
The session object works like a dict but tracks assignment and access to its
keys. It cannot track modifications to mutable values, you need to set
:attr:`~.SessionMixin.modified` manually when modifying a list, dict, etc.
`True` if the session is new, `False` otherwise.
.. code-block:: python
.. attribute:: modified
`True` if the session object detected a modification. Be advised
that modifications on mutable structures are not picked up
automatically, in that situation you have to explicitly set the
attribute to `True` yourself. Here an example::
# this change is not picked up because a mutable object (here
# a list) is changed.
session['objects'].append(42)
# appending to a list is not detected
session["numbers"].append(42)
# so mark it as modified yourself
session.modified = True
.. attribute:: permanent
If set to `True` the session lives for
:attr:`~flask.Flask.permanent_session_lifetime` seconds. The
default is 31 days. If set to `False` (which is the default) the
session will be deleted when the user closes the browser.
The session is persisted across requests using a cookie. By default the
users's browser will clear the cookie when it is closed. Set
:attr:`~.SessionMixin.permanent` to ``True`` to persist the cookie for
:data:`PERMANENT_SESSION_LIFETIME`.
Session Interface
@ -211,6 +105,9 @@ implementation that Flask is using.
.. autoclass:: SecureCookieSessionInterface
:members:
.. autoclass:: SecureCookieSession
:members:
.. autoclass:: NullSession
:members:
@ -219,10 +116,9 @@ implementation that Flask is using.
.. admonition:: Notice
The ``PERMANENT_SESSION_LIFETIME`` config key can also be an integer
starting with Flask 0.8. Either catch this down yourself or use
the :attr:`~flask.Flask.permanent_session_lifetime` attribute on the
app which converts the result to an integer automatically.
The :data:`PERMANENT_SESSION_LIFETIME` config can be an integer or ``timedelta``.
The :attr:`~flask.Flask.permanent_session_lifetime` attribute is always a
``timedelta``.
Test Client
@ -234,6 +130,15 @@ Test Client
:members:
Test CLI Runner
---------------
.. currentmodule:: flask.testing
.. autoclass:: FlaskCliRunner
:members:
Application Globals
-------------------
@ -241,17 +146,30 @@ Application Globals
To share data that is valid for one request only from one function to
another, a global variable is not good enough because it would break in
threaded environments. Flask provides you with a special object that
threaded environments. Flask provides you with a special object that
ensures it is only valid for the active request and that will return
different values for each request. In a nutshell: it does the right
thing, like it does for :class:`request` and :class:`session`.
different values for each request. In a nutshell: it does the right
thing, like it does for :data:`.request` and :data:`.session`.
.. data:: g
Just store on this whatever you want. For example a database
connection or the user that is currently logged in.
A proxy to a namespace object used to store data during a single request or
app context. An instance of :attr:`.Flask.app_ctx_globals_class`, which
defaults to :class:`._AppCtxGlobals`.
This is a proxy. See :ref:`notes-on-proxies` for more information.
This is a good place to store resources during a request. For example, a
:meth:`~.Flask.before_request` function could load a user object from a
session id, then set ``g.user`` to be used in the view function.
This is only available when an :doc:`app context </appcontext>` is active.
This is a proxy. See :ref:`context-visibility` for more information.
.. versionchanged:: 0.10
Bound to the application context instead of the request context.
.. autoclass:: flask.ctx._AppCtxGlobals
:members:
Useful Functions and Classes
@ -259,38 +177,37 @@ Useful Functions and Classes
.. data:: current_app
Points to the application handling the request. This is useful for
extensions that want to support multiple applications running side
by side.
A proxy to the :class:`.Flask` application handling the current request or
other activity.
This is a proxy. See :ref:`notes-on-proxies` for more information.
This is useful to access the application without needing to import it, or if
it can't be imported, such as when using the application factory pattern or
in blueprints and extensions.
This is only available when an :doc:`app context </appcontext>` is active.
This is a proxy. See :ref:`context-visibility` for more information.
.. autofunction:: has_request_context
.. autofunction:: copy_current_request_context
.. autofunction:: has_app_context
.. autofunction:: url_for
.. function:: abort(code)
Raises an :exc:`~werkzeug.exceptions.HTTPException` for the given
status code. For example to abort request handling with a page not
found exception, you would call ``abort(404)``.
:param code: the HTTP error code.
.. autofunction:: abort
.. autofunction:: redirect
.. autofunction:: make_response
.. autofunction:: after_this_request
.. autofunction:: send_file
.. autofunction:: send_from_directory
.. autofunction:: safe_join
.. autofunction:: escape
.. autoclass:: Markup
:members: escape, unescape, striptags
Message Flashing
----------------
@ -299,47 +216,63 @@ Message Flashing
.. autofunction:: get_flashed_messages
Returning JSON
--------------
JSON Support
------------
.. module:: flask.json
Flask uses Python's built-in :mod:`json` module for handling JSON by
default. The JSON implementation can be changed by assigning a different
provider to :attr:`flask.Flask.json_provider_class` or
:attr:`flask.Flask.json`. The functions provided by ``flask.json`` will
use methods on ``app.json`` if an app context is active.
Jinja's ``|tojson`` filter is configured to use the app's JSON provider.
The filter marks the output with ``|safe``. Use it to render data inside
HTML ``<script>`` tags.
.. sourcecode:: html+jinja
<script>
const names = {{ names|tojson }};
renderChart(names, {{ axis_data|tojson }});
</script>
.. autofunction:: jsonify
.. data:: json
.. autofunction:: dumps
If JSON support is picked up, this will be the module that Flask is
using to parse and serialize JSON. So instead of doing this yourself::
.. autofunction:: dump
try:
import simplejson as json
except ImportError:
import json
.. autofunction:: loads
You can instead just do this::
.. autofunction:: load
from flask import json
.. autoclass:: flask.json.provider.JSONProvider
:members:
:member-order: bysource
For usage examples, read the :mod:`json` documentation.
.. autoclass:: flask.json.provider.DefaultJSONProvider
:members:
:member-order: bysource
The :func:`~json.dumps` function of this json module is also available
as filter called ``|tojson`` in Jinja2. Note that inside `script`
tags no escaping must take place, so make sure to disable escaping
with ``|safe`` if you intend to use it inside `script` tags:
.. automodule:: flask.json.tag
.. sourcecode:: html+jinja
<script type=text/javascript>
doSomethingWith({{ user.username|tojson|safe }});
</script>
Note that the ``|tojson`` filter escapes forward slashes properly.
Template Rendering
------------------
.. currentmodule:: flask
.. autofunction:: render_template
.. autofunction:: render_template_string
.. autofunction:: stream_template
.. autofunction:: stream_template_string
.. autofunction:: get_template_attribute
Configuration
@ -348,131 +281,237 @@ Configuration
.. autoclass:: Config
:members:
Extensions
----------
.. data:: flask.ext
Stream Helpers
--------------
This module acts as redirect import module to Flask extensions. It was
added in 0.8 as the canonical way to import Flask extensions and makes
it possible for us to have more flexibility in how we distribute
extensions.
If you want to use an extension named “Flask-Foo” you would import it
from :data:`~flask.ext` as follows::
from flask.ext import foo
.. versionadded:: 0.8
.. autofunction:: stream_with_context
Useful Internals
----------------
.. autoclass:: flask.ctx.RequestContext
.. autoclass:: flask.ctx.AppContext
:members:
.. data:: _request_ctx_stack
.. data:: flask.globals.app_ctx
The internal :class:`~werkzeug.local.LocalStack` that is used to implement
all the context local objects used in Flask. This is a documented
instance and can be used by extensions and application code but the
use is discouraged in general.
A proxy to the active :class:`.AppContext`.
The following attributes are always present on each layer of the
stack:
This is an internal object that is essential to how Flask handles requests.
Accessing this should not be needed in most cases. Most likely you want
:data:`.current_app`, :data:`.g`, :data:`.request`, and :data:`.session` instead.
`app`
the active Flask application.
This is only available when a :doc:`request context </appcontext>` is
active.
`url_adapter`
the URL adapter that was used to match the request.
This is a proxy. See :ref:`context-visibility` for more information.
`request`
the current request object.
.. class:: flask.ctx.RequestContext
`session`
the active session object.
.. deprecated:: 3.2
Merged with :class:`AppContext`. This alias will be removed in Flask 4.0.
`g`
an object with all the attributes of the :data:`flask.g` object.
.. data:: flask.globals.request_ctx
`flashes`
an internal cache for the flashed messages.
Example usage::
from flask import _request_ctx_stack
def get_session():
ctx = _request_ctx_stack.top
if ctx is not None:
return ctx.session
.. deprecated:: 3.2
Merged with :data:`.app_ctx`. This alias will be removed in Flask 4.0.
.. autoclass:: flask.blueprints.BlueprintSetupState
:members:
.. _core-signals-list:
Signals
-------
.. when modifying this list, also update the one in signals.rst
Signals are provided by the `Blinker`_ library. See :doc:`signals` for an introduction.
.. versionadded:: 0.6
.. data:: signals_available
`True` if the signalling system is available. This is the case
when `blinker`_ is installed.
.. _blinker: https://blinker.readthedocs.io/
.. data:: template_rendered
This signal is sent when a template was successfully rendered. The
This signal is sent when a template was successfully rendered. The
signal is invoked with the instance of the template as `template`
and the context as dictionary (named `context`).
Example subscriber::
def log_template_renders(sender, template, context, **extra):
sender.logger.debug('Rendering template "%s" with context %s',
template.name or 'string template',
context)
from flask import template_rendered
template_rendered.connect(log_template_renders, app)
.. data:: flask.before_render_template
:noindex:
This signal is sent before template rendering process. The
signal is invoked with the instance of the template as `template`
and the context as dictionary (named `context`).
Example subscriber::
def log_template_renders(sender, template, context, **extra):
sender.logger.debug('Rendering template "%s" with context %s',
template.name or 'string template',
context)
from flask import before_render_template
before_render_template.connect(log_template_renders, app)
.. data:: request_started
This signal is sent before any request processing started but when the
request context was set up. Because the request context is already
This signal is sent when the request context is set up, before
any request processing happens. Because the request context is already
bound, the subscriber can access the request with the standard global
proxies such as :class:`~flask.request`.
Example subscriber::
def log_request(sender, **extra):
sender.logger.debug('Request context is set up')
from flask import request_started
request_started.connect(log_request, app)
.. data:: request_finished
This signal is sent right before the response is sent to the client.
It is passed the response to be sent named `response`.
Example subscriber::
def log_response(sender, response, **extra):
sender.logger.debug('Request context is about to close down. '
'Response: %s', response)
from flask import request_finished
request_finished.connect(log_response, app)
.. data:: got_request_exception
This signal is sent when an exception happens during request processing.
It is sent *before* the standard exception handling kicks in and even
in debug mode, where no exception handling happens. The exception
itself is passed to the subscriber as `exception`.
This signal is sent when an unhandled exception happens during
request processing, including when debugging. The exception is
passed to the subscriber as ``exception``.
This signal is not sent for
:exc:`~werkzeug.exceptions.HTTPException`, or other exceptions that
have error handlers registered, unless the exception was raised from
an error handler.
This example shows how to do some extra logging if a theoretical
``SecurityException`` was raised:
.. code-block:: python
from flask import got_request_exception
def log_security_exception(sender, exception, **extra):
if not isinstance(exception, SecurityException):
return
security_logger.exception(
f"SecurityException at {request.url!r}",
exc_info=exception,
)
got_request_exception.connect(log_security_exception, app)
.. data:: request_tearing_down
This signal is sent when the application is tearing down the request.
This is always called, even if an error happened. No arguments are
provided.
This signal is sent when the request is tearing down. This is always
called, even if an exception is caused. Currently functions listening
to this signal are called after the regular teardown handlers, but this
is not something you can rely on.
.. currentmodule:: None
Example subscriber::
.. class:: flask.signals.Namespace
def close_db_connection(sender, **extra):
session.close()
An alias for :class:`blinker.base.Namespace` if blinker is available,
otherwise a dummy class that creates fake signals. This class is
available for Flask extensions that want to provide the same fallback
system as Flask itself.
from flask import request_tearing_down
request_tearing_down.connect(close_db_connection, app)
.. method:: signal(name, doc=None)
As of Flask 0.9, this will also be passed an `exc` keyword argument
that has a reference to the exception that caused the teardown if
there was one.
Creates a new signal for this namespace if blinker is available,
otherwise returns a fake signal that has a send method that will
do nothing but will fail with a :exc:`RuntimeError` for all other
operations, including connecting.
.. data:: appcontext_tearing_down
.. _blinker: http://pypi.python.org/pypi/blinker
This signal is sent when the app context is tearing down. This is always
called, even if an exception is caused. Currently functions listening
to this signal are called after the regular teardown handlers, but this
is not something you can rely on.
Class Based Views
Example subscriber::
def close_db_connection(sender, **extra):
session.close()
from flask import appcontext_tearing_down
appcontext_tearing_down.connect(close_db_connection, app)
This will also be passed an `exc` keyword argument that has a reference
to the exception that caused the teardown if there was one.
.. data:: appcontext_pushed
This signal is sent when an application context is pushed. The sender
is the application. This is usually useful for unittests in order to
temporarily hook in information. For instance it can be used to
set a resource early onto the `g` object.
Example usage::
from contextlib import contextmanager
from flask import appcontext_pushed
@contextmanager
def user_set(app, user):
def handler(sender, **kwargs):
g.user = user
with appcontext_pushed.connected_to(handler, app):
yield
And in the testcode::
def test_user_me(self):
with user_set(app, 'john'):
c = app.test_client()
resp = c.get('/users/me')
assert resp.data == 'username=john'
.. versionadded:: 0.10
.. data:: appcontext_popped
This signal is sent when an application context is popped. The sender
is the application. This usually falls in line with the
:data:`appcontext_tearing_down` signal.
.. versionadded:: 0.10
.. data:: message_flashed
This signal is sent when the application is flashing a message. The
messages is sent as `message` keyword argument and the category as
`category`.
Example subscriber::
recorded = []
def record(sender, message, category, **extra):
recorded.append((message, category))
from flask import message_flashed
message_flashed.connect(record, app)
.. versionadded:: 0.10
Class-Based Views
-----------------
.. versionadded:: 0.7
@ -498,7 +537,7 @@ Generally there are three ways to define rules for the routing system:
which is exposed as :attr:`flask.Flask.url_map`.
Variable parts in the route can be specified with angular brackets
(``/user/<username>``). By default a variable part in the URL accepts any
(``/user/<username>``). By default a variable part in the URL accepts any
string without a slash however a different converter can be specified as
well by using ``<converter:name>``.
@ -507,12 +546,16 @@ Variable parts are passed to the view function as keyword arguments.
The following converters are available:
=========== ===============================================
`unicode` accepts any text without a slash (the default)
`string` accepts any text without a slash (the default)
`int` accepts integers
`float` like `int` but for floating point values
`path` like the default but also accepts slashes
`any` matches one of the items provided
`uuid` accepts UUID strings
=========== ===============================================
Custom converters can be defined using :attr:`flask.Flask.url_map`.
Here are some examples::
@app.route('/')
@ -528,7 +571,7 @@ Here are some examples::
pass
An important detail to keep in mind is how Flask deals with trailing
slashes. The idea is to keep each URL unique so the following rules
slashes. The idea is to keep each URL unique so the following rules
apply:
1. If a rule ends with a slash and is requested without a slash by the
@ -537,11 +580,11 @@ apply:
2. If a rule does not end with a trailing slash and the user requests the
page with a trailing slash, a 404 not found is raised.
This is consistent with how web servers deal with static files. This
This is consistent with how web servers deal with static files. This
also makes it possible to use relative link targets safely.
You can also define multiple rules for the same function. They have to be
unique however. Defaults can also be specified. Here for example is a
You can also define multiple rules for the same function. They have to be
unique however. Defaults can also be specified. Here for example is a
definition for a URL that accepts an optional page::
@app.route('/users/', defaults={'page': 1})
@ -550,39 +593,49 @@ definition for a URL that accepts an optional page::
pass
This specifies that ``/users/`` will be the URL for page one and
``/users/page/N`` will be the URL for page `N`.
``/users/page/N`` will be the URL for page ``N``.
If a URL contains a default value, it will be redirected to its simpler
form with a 308 redirect. In the above example, ``/users/page/1`` will
be redirected to ``/users/``. If your route handles ``GET`` and ``POST``
requests, make sure the default route only handles ``GET``, as redirects
can't preserve form data. ::
@app.route('/region/', defaults={'id': 1})
@app.route('/region/<int:id>', methods=['GET', 'POST'])
def region(id):
pass
Here are the parameters that :meth:`~flask.Flask.route` and
:meth:`~flask.Flask.add_url_rule` accept. The only difference is that
:meth:`~flask.Flask.add_url_rule` accept. The only difference is that
with the route parameter the view function is defined with the decorator
instead of the `view_func` parameter.
=============== ==========================================================
`rule` the URL roule as string
`endpoint` the endpoint for the registered URL rule. Flask itself
`rule` the URL rule as string
`endpoint` the endpoint for the registered URL rule. Flask itself
assumes that the name of the view function is the name
of the endpoint if not explicitly stated.
`view_func` the function to call when serving a request to the
provided endpoint. If this is not provided one can
provided endpoint. If this is not provided one can
specify the function later by storing it in the
:attr:`~flask.Flask.view_functions` dictionary with the
endpoint as key.
`defaults` A dictionary with defaults for this rule. See the
`defaults` A dictionary with defaults for this rule. See the
example above for how defaults work.
`subdomain` specifies the rule for the subdomain in case subdomain
matching is in use. If not specified the default
matching is in use. If not specified the default
subdomain is assumed.
`**options` the options to be forwarded to the underlying
:class:`~werkzeug.routing.Rule` object. A change to
Werkzeug is handling of method options. methods is a list
of methods this rule should be limited to (`GET`, `POST`
etc.). By default a rule just listens for `GET` (and
implicitly `HEAD`). Starting with Flask 0.6, `OPTIONS` is
:class:`~werkzeug.routing.Rule` object. A change to
Werkzeug is handling of method options. methods is a list
of methods this rule should be limited to (``GET``, ``POST``
etc.). By default a rule just listens for ``GET`` (and
implicitly ``HEAD``). Starting with Flask 0.6, ``OPTIONS`` is
implicitly added and handled by the standard request
handling. They have to be specified as keyword arguments.
handling. They have to be specified as keyword arguments.
=============== ==========================================================
.. _view-func-options:
View Function Options
---------------------
@ -592,22 +645,26 @@ customize behavior the view function would normally not have control over.
The following attributes can be provided optionally to either override
some defaults to :meth:`~flask.Flask.add_url_rule` or general behavior:
- `__name__`: The name of a function is by default used as endpoint. If
endpoint is provided explicitly this value is used. Additionally this
- `__name__`: The name of a function is by default used as endpoint. If
endpoint is provided explicitly this value is used. Additionally this
will be prefixed with the name of the blueprint by default which
cannot be customized from the function itself.
- `methods`: If methods are not provided when the URL rule is added,
Flask will look on the view function object itself is an `methods`
attribute exists. If it does, it will pull the information for the
Flask will look on the view function object itself if a `methods`
attribute exists. If it does, it will pull the information for the
methods from there.
- `provide_automatic_options`: if this attribute is set Flask will
either force enable or disable the automatic implementation of the
HTTP `OPTIONS` response. This can be useful when working with
decorators that want to customize the `OPTIONS` response on a per-view
HTTP ``OPTIONS`` response. This can be useful when working with
decorators that want to customize the ``OPTIONS`` response on a per-view
basis.
- `required_methods`: if this attribute is set, Flask will always add
these methods when registering a URL rule even if the methods were
explicitly overridden in the ``route()`` call.
Full example::
def index():
@ -622,3 +679,30 @@ Full example::
.. versionadded:: 0.8
The `provide_automatic_options` functionality was added.
Command Line Interface
----------------------
.. currentmodule:: flask.cli
.. autoclass:: FlaskGroup
:members:
.. autoclass:: AppGroup
:members:
.. autoclass:: ScriptInfo
:members:
.. autofunction:: load_dotenv
.. autofunction:: with_appcontext
.. autofunction:: pass_script_info
Marks a function so that an instance of :class:`ScriptInfo` is passed
as first argument to the click callback.
.. autodata:: run_command
.. autodata:: shell_command

187
docs/appcontext.rst Normal file
View file

@ -0,0 +1,187 @@
The App and Request Context
===========================
The context keeps track of data and objects during a request, CLI command, or
other activity. Rather than passing this data around to every function, the
:data:`.current_app`, :data:`.g`, :data:`.request`, and :data:`.session` proxies
are accessed instead.
When handling a request, the context is referred to as the "request context"
because it contains request data in addition to application data. Otherwise,
such as during a CLI command, it is referred to as the "app context". During an
app context, :data:`.current_app` and :data:`.g` are available, while during a
request context :data:`.request` and :data:`.session` are also available.
Purpose of the Context
----------------------
The context and proxies help solve two development issues: circular imports, and
passing around global data during a request.
The :class:`.Flask` application object has attributes, such as
:attr:`~.Flask.config`, that are useful to access within views and other
functions. However, importing the ``app`` instance within the modules in your
project is prone to circular import issues. When using the
:doc:`app factory pattern </patterns/appfactories>` or writing reusable
:doc:`blueprints </blueprints>` or :doc:`extensions </extensions>` there won't
be an ``app`` instance to import at all.
When the application handles a request, it creates a :class:`.Request` object.
Because a *worker* handles only one request at a time, the request data can be
considered global to that worker during that request. Passing it as an argument
through every function during the request becomes verbose and redundant.
Flask solves these issues with the *active context* pattern. Rather than
importing an ``app`` directly, or having to pass it and the request through to
every single function, you import and access the proxies, which point to the
currently active application and request data. This is sometimes referred to
as "context local" data.
Context During Setup
--------------------
If you try to access :data:`.current_app`, :data:`.g`, or anything that uses it,
outside an app context, you'll get this error message:
.. code-block:: pytb
RuntimeError: Working outside of application context.
Attempted to use functionality that expected a current application to be
set. To solve this, set up an app context using 'with app.app_context()'.
See the documentation on app context for more information.
If you see that error while configuring your application, such as when
initializing an extension, you can push a context manually since you have direct
access to the ``app``. Use :meth:`.Flask.app_context` in a ``with`` block.
.. code-block:: python
def create_app():
app = Flask(__name__)
with app.app_context():
init_db()
return app
If you see that error somewhere else in your code not related to setting up the
application, it most likely indicates that you should move that code into a view
function or CLI command.
Context During Testing
----------------------
See :doc:`/testing` for detailed information about managing the context during
tests.
If you try to access :data:`.request`, :data:`.session`, or anything that uses
it, outside a request context, you'll get this error message:
.. code-block:: pytb
RuntimeError: Working outside of request context.
Attempted to use functionality that expected an active HTTP request. See the
documentation on request context for more information.
This will probably only happen during tests. If you see that error somewhere
else in your code not related to testing, it most likely indicates that you
should move that code into a view function.
The primary way to solve this is to use :meth:`.Flask.test_client` to simulate
a full request.
If you only want to unit test one function, rather than a full request, use
:meth:`.Flask.test_request_context` in a ``with`` block.
.. code-block:: python
def generate_report(year):
format = request.args.get("format")
...
with app.test_request_context(
"/make_report/2017", query_string={"format": "short"}
):
generate_report()
.. _context-visibility:
Visibility of the Context
-------------------------
The context will have the same lifetime as an activity, such as a request, CLI
command, or ``with`` block. Various callbacks and signals registered with the
app will be run during the context.
When a Flask application handles a request, it pushes a request context
to set the active application and request data. When it handles a CLI command,
it pushes an app context to set the active application. When the activity ends,
it pops that context. Proxy objects like :data:`.request`, :data:`.session`,
:data:`.g`, and :data:`.current_app`, are accessible while the context is pushed
and active, and are not accessible after the context is popped.
The context is unique to each thread (or other worker type). The proxies cannot
be passed to another worker, which has a different context space and will not
know about the active context in the parent's space.
Besides being scoped to each worker, the proxy object has a separate type and
identity than the proxied real object. In some cases you'll need access to the
real object, rather than the proxy. Use the
:meth:`~.LocalProxy._get_current_object` method in those cases.
.. code-block:: python
app = current_app._get_current_object()
my_signal.send(app)
Lifecycle of the Context
------------------------
Flask dispatches a request in multiple stages which can affect the request,
response, and how errors are handled. See :doc:`/lifecycle` for a list of all
the steps, callbacks, and signals during each request. The following are the
steps directly related to the context.
- The app context is pushed, the proxies are available.
- The :data:`.appcontext_pushed` signal is sent.
- The request is dispatched.
- Any :meth:`.Flask.teardown_request` decorated functions are called.
- The :data:`.request_tearing_down` signal is sent.
- Any :meth:`.Flask.teardown_appcontext` decorated functions are called.
- The :data:`.appcontext_tearing_down` signal is sent.
- The app context is popped, the proxies are no longer available.
- The :data:`.appcontext_popped` signal is sent.
The teardown callbacks are called by the context when it is popped. They are
called even if there is an unhandled exception during dispatch. They may be
called multiple times in some test scenarios. This means there is no guarantee
that any other parts of the request dispatch have run. Be sure to write these
functions in a way that does not depend on other callbacks. All callbacks are
called even if any raise an error.
How the Context Works
---------------------
Context locals are implemented using Python's :mod:`contextvars` and Werkzeug's
:class:`~werkzeug.local.LocalProxy`. Python's contextvars are a low level
structure to manage data local to a thread or coroutine. ``LocalProxy`` wraps
the contextvar so that access to any attributes and methods is forwarded to the
object stored in the contextvar.
The context is tracked like a stack, with the active context at the top of the
stack. Flask manages pushing and popping contexts during requests, CLI commands,
testing, ``with`` blocks, etc. The proxies access attributes on the active
context.
Because it is a stack, other contexts may be pushed to change the proxies during
an already active context. This is not a common pattern, but can be used in
advanced use cases. For example, a Flask application can be used as WSGI
middleware, calling another wrapped Flask app from a view.

119
docs/async-await.rst Normal file
View file

@ -0,0 +1,119 @@
.. _async_await:
Using ``async`` and ``await``
=============================
.. versionadded:: 2.0
Routes, error handlers, before request, after request, and teardown
functions can all be coroutine functions if Flask is installed with the
``async`` extra (``pip install flask[async]``). This allows views to be
defined with ``async def`` and use ``await``.
.. code-block:: python
@app.route("/get-data")
async def get_data():
data = await async_db_query(...)
return jsonify(data)
Pluggable class-based views also support handlers that are implemented as
coroutines. This applies to the :meth:`~flask.views.View.dispatch_request`
method in views that inherit from the :class:`flask.views.View` class, as
well as all the HTTP method handlers in views that inherit from the
:class:`flask.views.MethodView` class.
Performance
-----------
Async functions require an event loop to run. Flask, as a WSGI
application, uses one worker to handle one request/response cycle.
When a request comes in to an async view, Flask will start an event loop
in a thread, run the view function there, then return the result.
Each request still ties up one worker, even for async views. The upside
is that you can run async code within a view, for example to make
multiple concurrent database queries, HTTP requests to an external API,
etc. However, the number of requests your application can handle at one
time will remain the same.
**Async is not inherently faster than sync code.** Async is beneficial
when performing concurrent IO-bound tasks, but will probably not improve
CPU-bound tasks. Traditional Flask views will still be appropriate for
most use cases, but Flask's async support enables writing and using
code that wasn't possible natively before.
Background tasks
----------------
Async functions will run in an event loop until they complete, at
which stage the event loop will stop. This means any additional
spawned tasks that haven't completed when the async function completes
will be cancelled. Therefore you cannot spawn background tasks, for
example via ``asyncio.create_task``.
If you wish to use background tasks it is best to use a task queue to
trigger background work, rather than spawn tasks in a view
function. With that in mind you can spawn asyncio tasks by serving
Flask with an ASGI server and utilising the asgiref WsgiToAsgi adapter
as described in :doc:`deploying/asgi`. This works as the adapter creates
an event loop that runs continually.
When to use Quart instead
-------------------------
Flask's async support is less performant than async-first frameworks due
to the way it is implemented. If you have a mainly async codebase it
would make sense to consider `Quart`_. Quart is a reimplementation of
Flask based on the `ASGI`_ standard instead of WSGI. This allows it to
handle many concurrent requests, long running requests, and websockets
without requiring multiple worker processes or threads.
It has also already been possible to :doc:`run Flask with Gevent </gevent>` to
get many of the benefits of async request handling. Gevent patches low-level
Python functions to accomplish this, whereas ``async``/``await`` and ASGI use
standard, modern Python capabilities. Deciding whether you should use gevent
with Flask, or Quart, or something else is ultimately up to understanding the
specific needs of your project.
.. _Quart: https://quart.palletsprojects.com
.. _ASGI: https://asgi.readthedocs.io
Extensions
----------
Flask extensions predating Flask's async support do not expect async views.
If they provide decorators to add functionality to views, those will probably
not work with async views because they will not await the function or be
awaitable. Other functions they provide will not be awaitable either and
will probably be blocking if called within an async view.
Extension authors can support async functions by utilising the
:meth:`flask.Flask.ensure_sync` method. For example, if the extension
provides a view function decorator add ``ensure_sync`` before calling
the decorated function,
.. code-block:: python
def extension(func):
@wraps(func)
def wrapper(*args, **kwargs):
... # Extension logic
return current_app.ensure_sync(func)(*args, **kwargs)
return wrapper
Check the changelog of the extension you want to use to see if they've
implemented async support, or make a feature request or PR to them.
Other event loops
-----------------
At the moment Flask only supports :mod:`asyncio`. It's possible to override
:meth:`flask.Flask.ensure_sync` to change how async functions are wrapped to use
a different library. See :ref:`gevent-asyncio` for an example.

View file

@ -1,88 +0,0 @@
.. _becomingbig:
Becoming Big
============
Your application is becoming more and more complex? If you suddenly
realize that Flask does things in a way that does not work out for your
application there are ways to deal with that.
Flask is powered by Werkzeug and Jinja2, two libraries that are in use at
a number of large websites out there and all Flask does is bring those
two together. Being a microframework Flask does not do much more than
combining existing libraries - there is not a lot of code involved.
What that means for large applications is that it's very easy to take the
code from Flask and put it into a new module within the applications and
expand on that.
Flask is designed to be extended and modified in a couple of different
ways:
- Flask extensions. For a lot of reusable functionality you can create
extensions. For extensions a number of hooks exist throughout Flask
with signals and callback functions.
- Subclassing. The majority of functionality can be changed by creating
a new subclass of the :class:`~flask.Flask` class and overriding
methods provided for this exact purpose.
- Forking. If nothing else works out you can just take the Flask
codebase at a given point and copy/paste it into your application
and change it. Flask is designed with that in mind and makes this
incredible easy. You just have to take the package and copy it
into your application's code and rename it (for example to
`framework`). Then you can start modifying the code in there.
Why consider Forking?
---------------------
The majority of code of Flask is within Werkzeug and Jinja2. These
libraries do the majority of the work. Flask is just the paste that glues
those together. For every project there is the point where the underlying
framework gets in the way (due to assumptions the original developers
had). This is natural because if this would not be the case, the
framework would be a very complex system to begin with which causes a
steep learning curve and a lot of user frustration.
This is not unique to Flask. Many people use patched and modified
versions of their framework to counter shortcomings. This idea is also
reflected in the license of Flask. You don't have to contribute any
changes back if you decide to modify the framework.
The downside of forking is of course that Flask extensions will most
likely break because the new framework has a different import name.
Furthermore integrating upstream changes can be a complex process,
depending on the number of changes. Because of that, forking should be
the very last resort.
Scaling like a Pro
------------------
For many web applications the complexity of the code is less an issue than
the scaling for the number of users or data entries expected. Flask by
itself is only limited in terms of scaling by your application code, the
data store you want to use and the Python implementation and webserver you
are running on.
Scaling well means for example that if you double the amount of servers
you get about twice the performance. Scaling bad means that if you add a
new server the application won't perform any better or would not even
support a second server.
There is only one limiting factor regarding scaling in Flask which are
the context local proxies. They depend on context which in Flask is
defined as being either a thread, process or greenlet. If your server
uses some kind of concurrency that is not based on threads or greenlets,
Flask will no longer be able to support these global proxies. However the
majority of servers are using either threads, greenlets or separate
processes to achieve concurrency which are all methods well supported by
the underlying Werkzeug library.
Dialogue with the Community
---------------------------
The Flask developers are very interested to keep everybody happy, so as
soon as you find an obstacle in your way, caused by Flask, don't hesitate
to contact the developers on the mailinglist or IRC channel. The best way
for the Flask and Flask-extension developers to improve it for larger
applications is getting feedback from users.

View file

@ -1,8 +1,8 @@
.. _blueprints:
Modular Applications with Blueprints
====================================
.. currentmodule:: flask
.. versionadded:: 0.7
Flask uses a concept of *blueprints* for making application components and
@ -35,8 +35,9 @@ Blueprints in Flask are intended for these cases:
A blueprint in Flask is not a pluggable app because it is not actually an
application -- it's a set of operations which can be registered on an
application, even multiple times. Why not have multiple application
objects? You can do that (see :ref:`app-dispatch`), but your applications
will have separate configs and will be managed at the WSGI layer.
objects? You can do that (see :doc:`/patterns/appdispatch`), but your
applications will have separate configs and will be managed at the WSGI
layer.
Blueprints instead provide separation at the Flask level, share
application config, and can change an application object as necessary with
@ -61,22 +62,24 @@ implement a blueprint that does simple rendering of static templates::
from flask import Blueprint, render_template, abort
from jinja2 import TemplateNotFound
simple_page = Blueprint('simple_page', __name__)
simple_page = Blueprint('simple_page', __name__,
template_folder='templates')
@simple_page.route('/', defaults={'page': 'index'})
@simple_page.route('/<page>')
def show(page):
try:
return render_template('pages/%s.html' % page)
return render_template(f'pages/{page}.html')
except TemplateNotFound:
abort(404)
When you bind a function with the help of the ``@simple_page.route``
decorator the blueprint will record the intention of registering the
function `show` on the application when it's later registered.
decorator, the blueprint will record the intention of registering the
function ``show`` on the application when it's later registered.
Additionally it will prefix the endpoint of the function with the
name of the blueprint which was given to the :class:`Blueprint`
constructor (in this case also ``simple_page``).
constructor (in this case also ``simple_page``). The blueprint's name
does not modify the URL, only the endpoint.
Registering Blueprints
----------------------
@ -92,11 +95,12 @@ So how do you register that blueprint? Like this::
If you check the rules registered on the application, you will find
these::
[<Rule '/static/<filename>' (HEAD, OPTIONS, GET) -> static>,
>>> app.url_map
Map([<Rule '/static/<filename>' (HEAD, OPTIONS, GET) -> static>,
<Rule '/<page>' (HEAD, OPTIONS, GET) -> simple_page.show>,
<Rule '/' (HEAD, OPTIONS, GET) -> simple_page.show>]
<Rule '/' (HEAD, OPTIONS, GET) -> simple_page.show>])
The first one is obviously from the application ifself for the static
The first one is obviously from the application itself for the static
files. The other two are for the `show` function of the ``simple_page``
blueprint. As you can see, they are also prefixed with the name of the
blueprint and separated by a dot (``.``).
@ -107,14 +111,53 @@ Blueprints however can also be mounted at different locations::
And sure enough, these are the generated rules::
[<Rule '/static/<filename>' (HEAD, OPTIONS, GET) -> static>,
>>> app.url_map
Map([<Rule '/static/<filename>' (HEAD, OPTIONS, GET) -> static>,
<Rule '/pages/<page>' (HEAD, OPTIONS, GET) -> simple_page.show>,
<Rule '/pages/' (HEAD, OPTIONS, GET) -> simple_page.show>]
<Rule '/pages/' (HEAD, OPTIONS, GET) -> simple_page.show>])
On top of that you can register blueprints multiple times though not every
blueprint might respond properly to that. In fact it depends on how the
blueprint is implemented if it can be mounted more than once.
Nesting Blueprints
------------------
It is possible to register a blueprint on another blueprint.
.. code-block:: python
parent = Blueprint('parent', __name__, url_prefix='/parent')
child = Blueprint('child', __name__, url_prefix='/child')
parent.register_blueprint(child)
app.register_blueprint(parent)
The child blueprint will gain the parent's name as a prefix to its
name, and child URLs will be prefixed with the parent's URL prefix.
.. code-block:: python
url_for('parent.child.create')
/parent/child/create
In addition a child blueprint's will gain their parent's subdomain,
with their subdomain as prefix if present i.e.
.. code-block:: python
parent = Blueprint('parent', __name__, subdomain='parent')
child = Blueprint('child', __name__, subdomain='child')
parent.register_blueprint(child)
app.register_blueprint(parent)
url_for('parent.child.create', _external=True)
"child.parent.domain.tld"
Blueprint-specific before request functions, etc. registered with the
parent will trigger for the child. If a child does not have an error
handler that can handle a given exception, the parent's will be tried.
Blueprint Resources
-------------------
@ -148,23 +191,31 @@ To quickly open sources from this folder you can use the
Static Files
````````````
A blueprint can expose a folder with static files by providing a path to a
folder on the filesystem via the `static_folder` keyword argument. It can
either be an absolute path or one relative to the folder of the
blueprint::
A blueprint can expose a folder with static files by providing the path
to the folder on the filesystem with the ``static_folder`` argument.
It is either an absolute path or relative to the blueprint's location::
admin = Blueprint('admin', __name__, static_folder='static')
By default the rightmost part of the path is where it is exposed on the
web. Because the folder is called ``static`` here it will be available at
the location of the blueprint + ``/static``. Say the blueprint is
registered for ``/admin`` the static folder will be at ``/admin/static``.
web. This can be changed with the ``static_url_path`` argument. Because the
folder is called ``static`` here it will be available at the
``url_prefix`` of the blueprint + ``/static``. If the blueprint
has the prefix ``/admin``, the static URL will be ``/admin/static``.
The endpoint is named `blueprint_name.static` so you can generate URLs to
it like you would do to the static folder of the application::
The endpoint is named ``blueprint_name.static``. You can generate URLs
to it with :func:`url_for` like you would with the static folder of the
application::
url_for('admin.static', filename='style.css')
However, if the blueprint does not have a ``url_prefix``, it is not
possible to access the blueprint's static folder. This is because the
URL would be ``/static`` in this case, and the application's ``/static``
route takes precedence. Unlike template folders, blueprint static
folders are not searched if the file does not exist in the application
static folder.
Templates
`````````
@ -173,16 +224,43 @@ the `template_folder` parameter to the :class:`Blueprint` constructor::
admin = Blueprint('admin', __name__, template_folder='templates')
As for static files, the path can be absolute or relative to the blueprint
resource folder. The template folder is added to the searchpath of
templates but with a lower priority than the actual application's template
folder. That way you can easily override templates that a blueprint
provides in the actual application.
For static files, the path can be absolute or relative to the blueprint
resource folder.
The template folder is added to the search path of templates but with a lower
priority than the actual application's template folder. That way you can
easily override templates that a blueprint provides in the actual application.
This also means that if you don't want a blueprint template to be accidentally
overridden, make sure that no other blueprint or actual application template
has the same relative path. When multiple blueprints provide the same relative
template path the first blueprint registered takes precedence over the others.
So if you have a blueprint in the folder ``yourapplication/admin`` and you
want to render the template ``'admin/index.html'`` and you have provided
``templates`` as a `template_folder` you will have to create a file like
this: ``yourapplication/admin/templates/admin/index.html``.
this: :file:`yourapplication/admin/templates/admin/index.html`. The reason
for the extra ``admin`` folder is to avoid getting our template overridden
by a template named ``index.html`` in the actual application template
folder.
To further reiterate this: if you have a blueprint named ``admin`` and you
want to render a template called :file:`index.html` which is specific to this
blueprint, the best idea is to lay out your templates like this::
yourpackage/
blueprints/
admin/
templates/
admin/
index.html
__init__.py
And then when you want to render the template, use :file:`admin/index.html` as
the name to look up the template by. If you encounter problems loading
the correct templates enable the ``EXPLAIN_TEMPLATE_LOADING`` config
variable which will instruct Flask to print out the steps it goes through
to locate templates on every ``render_template`` call.
Building URLs
-------------
@ -201,3 +279,37 @@ you can use relative redirects by prefixing the endpoint with a dot only::
This will link to ``admin.index`` for instance in case the current request
was dispatched to any other admin blueprint endpoint.
Blueprint Error Handlers
------------------------
Blueprints support the ``errorhandler`` decorator just like the :class:`Flask`
application object, so it is easy to make Blueprint-specific custom error
pages.
Here is an example for a "404 Page Not Found" exception::
@simple_page.errorhandler(404)
def page_not_found(e):
return render_template('pages/404.html')
Most errorhandlers will simply work as expected; however, there is a caveat
concerning handlers for 404 and 405 exceptions. These errorhandlers are only
invoked from an appropriate ``raise`` statement or a call to ``abort`` in another
of the blueprint's view functions; they are not invoked by, e.g., an invalid URL
access. This is because the blueprint does not "own" a certain URL space, so
the application instance has no way of knowing which blueprint error handler it
should run if given an invalid URL. If you would like to execute different
handling strategies for these errors based on URL prefixes, they may be defined
at the application level using the ``request`` proxy object::
@app.errorhandler(404)
@app.errorhandler(405)
def _handle_api_error(ex):
if request.path.startswith('/api/'):
return jsonify(error=str(ex)), ex.code
else:
return ex
See :doc:`/errorhandling`.

View file

@ -1 +0,0 @@
.. include:: ../CHANGES

4
docs/changes.rst Normal file
View file

@ -0,0 +1,4 @@
Changes
=======
.. include:: ../CHANGES.rst

556
docs/cli.rst Normal file
View file

@ -0,0 +1,556 @@
.. currentmodule:: flask
Command Line Interface
======================
Installing Flask installs the ``flask`` script, a `Click`_ command line
interface, in your virtualenv. Executed from the terminal, this script gives
access to built-in, extension, and application-defined commands. The ``--help``
option will give more information about any commands and options.
.. _Click: https://click.palletsprojects.com/
Application Discovery
---------------------
The ``flask`` command is installed by Flask, not your application; it must be
told where to find your application in order to use it. The ``--app``
option is used to specify how to load the application.
While ``--app`` supports a variety of options for specifying your
application, most use cases should be simple. Here are the typical values:
(nothing)
The name "app" or "wsgi" is imported (as a ".py" file, or package),
automatically detecting an app (``app`` or ``application``) or
factory (``create_app`` or ``make_app``).
``--app hello``
The given name is imported, automatically detecting an app (``app``
or ``application``) or factory (``create_app`` or ``make_app``).
----
``--app`` has three parts: an optional path that sets the current working
directory, a Python file or dotted import path, and an optional variable
name of the instance or factory. If the name is a factory, it can optionally
be followed by arguments in parentheses. The following values demonstrate these
parts:
``--app src/hello``
Sets the current working directory to ``src`` then imports ``hello``.
``--app hello.web``
Imports the path ``hello.web``.
``--app hello:app2``
Uses the ``app2`` Flask instance in ``hello``.
``--app 'hello:create_app("dev")'``
The ``create_app`` factory in ``hello`` is called with the string ``'dev'``
as the argument.
If ``--app`` is not set, the command will try to import "app" or
"wsgi" (as a ".py" file, or package) and try to detect an application
instance or factory.
Within the given import, the command looks for an application instance named
``app`` or ``application``, then any application instance. If no instance is
found, the command looks for a factory function named ``create_app`` or
``make_app`` that returns an instance.
If parentheses follow the factory name, their contents are parsed as
Python literals and passed as arguments and keyword arguments to the
function. This means that strings must still be in quotes.
Run the Development Server
--------------------------
The :func:`run <cli.run_command>` command will start the development server. It
replaces the :meth:`Flask.run` method in most cases. ::
$ flask --app hello run
* Serving Flask app "hello"
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
.. warning:: Do not use this command to run your application in production.
Only use the development server during development. The development server
is provided for convenience, but is not designed to be particularly secure,
stable, or efficient. See :doc:`/deploying/index` for how to run in production.
If another program is already using port 5000, you'll see
``OSError: [Errno 98]`` or ``OSError: [WinError 10013]`` when the
server tries to start. See :ref:`address-already-in-use` for how to
handle that.
Debug Mode
~~~~~~~~~~
In debug mode, the ``flask run`` command will enable the interactive debugger and the
reloader by default, and make errors easier to see and debug. To enable debug mode, use
the ``--debug`` option.
.. code-block:: console
$ flask --app hello run --debug
* Serving Flask app "hello"
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with inotify reloader
* Debugger is active!
* Debugger PIN: 223-456-919
The ``--debug`` option can also be passed to the top level ``flask`` command to enable
debug mode for any command. The following two ``run`` calls are equivalent.
.. code-block:: console
$ flask --app hello --debug run
$ flask --app hello run --debug
Watch and Ignore Files with the Reloader
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
When using debug mode, the reloader will trigger whenever your Python code or imported
modules change. The reloader can watch additional files with the ``--extra-files``
option. Multiple paths are separated with ``:``, or ``;`` on Windows.
.. code-block:: text
$ flask run --extra-files file1:dirA/file2:dirB/
* Running on http://127.0.0.1:8000/
* Detected change in '/path/to/file1', reloading
The reloader can also ignore files using :mod:`fnmatch` patterns with the
``--exclude-patterns`` option. Multiple patterns are separated with ``:``, or ``;`` on
Windows.
Open a Shell
------------
To explore the data in your application, you can start an interactive Python
shell with the :func:`shell <cli.shell_command>` command. An application
context will be active, and the app instance will be imported. ::
$ flask shell
Python 3.10.0 (default, Oct 27 2021, 06:59:51) [GCC 11.1.0] on linux
App: example [production]
Instance: /home/david/Projects/pallets/flask/instance
>>>
Use :meth:`~Flask.shell_context_processor` to add other automatic imports.
.. _dotenv:
Environment Variables From dotenv
---------------------------------
The ``flask`` command supports setting any option for any command with
environment variables. The variables are named like ``FLASK_OPTION`` or
``FLASK_COMMAND_OPTION``, for example ``FLASK_APP`` or
``FLASK_RUN_PORT``.
Rather than passing options every time you run a command, or environment
variables every time you open a new terminal, you can use Flask's dotenv
support to set environment variables automatically.
If `python-dotenv`_ is installed, running the ``flask`` command will set
environment variables defined in the files ``.env`` and ``.flaskenv``.
You can also specify an extra file to load with the ``--env-file``
option. Dotenv files can be used to avoid having to set ``--app`` or
``FLASK_APP`` manually, and to set configuration using environment
variables similar to how some deployment services work.
Variables set on the command line are used over those set in :file:`.env`,
which are used over those set in :file:`.flaskenv`. :file:`.flaskenv` should be
used for public variables, such as ``FLASK_APP``, while :file:`.env` should not
be committed to your repository so that it can set private variables.
Directories are scanned upwards from the directory you call ``flask``
from to locate the files.
The files are only loaded by the ``flask`` command or calling
:meth:`~Flask.run`. If you would like to load these files when running in
production, you should call :func:`~cli.load_dotenv` manually.
.. _python-dotenv: https://github.com/theskumar/python-dotenv#readme
Setting Command Options
~~~~~~~~~~~~~~~~~~~~~~~
Click is configured to load default values for command options from
environment variables. The variables use the pattern
``FLASK_COMMAND_OPTION``. For example, to set the port for the run
command, instead of ``flask run --port 8000``:
.. tabs::
.. group-tab:: Bash
.. code-block:: text
$ export FLASK_RUN_PORT=8000
$ flask run
* Running on http://127.0.0.1:8000/
.. group-tab:: Fish
.. code-block:: text
$ set -x FLASK_RUN_PORT 8000
$ flask run
* Running on http://127.0.0.1:8000/
.. group-tab:: CMD
.. code-block:: text
> set FLASK_RUN_PORT=8000
> flask run
* Running on http://127.0.0.1:8000/
.. group-tab:: Powershell
.. code-block:: text
> $env:FLASK_RUN_PORT = 8000
> flask run
* Running on http://127.0.0.1:8000/
These can be added to the ``.flaskenv`` file just like ``FLASK_APP`` to
control default command options.
Disable dotenv
~~~~~~~~~~~~~~
The ``flask`` command will show a message if it detects dotenv files but
python-dotenv is not installed.
.. code-block:: bash
$ flask run
* Tip: There are .env files present. Do "pip install python-dotenv" to use them.
You can tell Flask not to load dotenv files even when python-dotenv is
installed by setting the ``FLASK_SKIP_DOTENV`` environment variable.
This can be useful if you want to load them manually, or if you're using
a project runner that loads them already. Keep in mind that the
environment variables must be set before the app loads or it won't
configure as expected.
.. tabs::
.. group-tab:: Bash
.. code-block:: text
$ export FLASK_SKIP_DOTENV=1
$ flask run
.. group-tab:: Fish
.. code-block:: text
$ set -x FLASK_SKIP_DOTENV 1
$ flask run
.. group-tab:: CMD
.. code-block:: text
> set FLASK_SKIP_DOTENV=1
> flask run
.. group-tab:: Powershell
.. code-block:: text
> $env:FLASK_SKIP_DOTENV = 1
> flask run
Environment Variables From virtualenv
-------------------------------------
If you do not want to install dotenv support, you can still set environment
variables by adding them to the end of the virtualenv's :file:`activate`
script. Activating the virtualenv will set the variables.
.. tabs::
.. group-tab:: Bash
Unix Bash, :file:`.venv/bin/activate`::
$ export FLASK_APP=hello
.. group-tab:: Fish
Fish, :file:`.venv/bin/activate.fish`::
$ set -x FLASK_APP hello
.. group-tab:: CMD
Windows CMD, :file:`.venv\\Scripts\\activate.bat`::
> set FLASK_APP=hello
.. group-tab:: Powershell
Windows Powershell, :file:`.venv\\Scripts\\activate.ps1`::
> $env:FLASK_APP = "hello"
It is preferred to use dotenv support over this, since :file:`.flaskenv` can be
committed to the repository so that it works automatically wherever the project
is checked out.
Custom Commands
---------------
The ``flask`` command is implemented using `Click`_. See that project's
documentation for full information about writing commands.
This example adds the command ``create-user`` that takes the argument
``name``. ::
import click
from flask import Flask
app = Flask(__name__)
@app.cli.command("create-user")
@click.argument("name")
def create_user(name):
...
::
$ flask create-user admin
This example adds the same command, but as ``user create``, a command in a
group. This is useful if you want to organize multiple related commands. ::
import click
from flask import Flask
from flask.cli import AppGroup
app = Flask(__name__)
user_cli = AppGroup('user')
@user_cli.command('create')
@click.argument('name')
def create_user(name):
...
app.cli.add_command(user_cli)
::
$ flask user create demo
See :ref:`testing-cli` for an overview of how to test your custom
commands.
Registering Commands with Blueprints
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If your application uses blueprints, you can optionally register CLI
commands directly onto them. When your blueprint is registered onto your
application, the associated commands will be available to the ``flask``
command. By default, those commands will be nested in a group matching
the name of the blueprint.
.. code-block:: python
from flask import Blueprint
bp = Blueprint('students', __name__)
@bp.cli.command('create')
@click.argument('name')
def create(name):
...
app.register_blueprint(bp)
.. code-block:: text
$ flask students create alice
You can alter the group name by specifying the ``cli_group`` parameter
when creating the :class:`Blueprint` object, or later with
:meth:`app.register_blueprint(bp, cli_group='...') <Flask.register_blueprint>`.
The following are equivalent:
.. code-block:: python
bp = Blueprint('students', __name__, cli_group='other')
# or
app.register_blueprint(bp, cli_group='other')
.. code-block:: text
$ flask other create alice
Specifying ``cli_group=None`` will remove the nesting and merge the
commands directly to the application's level:
.. code-block:: python
bp = Blueprint('students', __name__, cli_group=None)
# or
app.register_blueprint(bp, cli_group=None)
.. code-block:: text
$ flask create alice
Application Context
~~~~~~~~~~~~~~~~~~~
Commands added using the Flask app's :attr:`~Flask.cli` or
:class:`~flask.cli.FlaskGroup` :meth:`~cli.AppGroup.command` decorator
will be executed with an application context pushed, so your custom
commands and parameters have access to the app and its configuration. The
:func:`~cli.with_appcontext` decorator can be used to get the same
behavior, but is not needed in most cases.
.. code-block:: python
import click
from flask.cli import with_appcontext
@click.command()
@with_appcontext
def do_work():
...
app.cli.add_command(do_work)
Plugins
-------
Flask will automatically load commands specified in the ``flask.commands``
`entry point`_. This is useful for extensions that want to add commands when
they are installed. Entry points are specified in :file:`pyproject.toml`:
.. code-block:: toml
[project.entry-points."flask.commands"]
my-command = "my_extension.commands:cli"
.. _entry point: https://packaging.python.org/tutorials/packaging-projects/#entry-points
Inside :file:`my_extension/commands.py` you can then export a Click
object::
import click
@click.command()
def cli():
...
Once that package is installed in the same virtualenv as your Flask project,
you can run ``flask my-command`` to invoke the command.
.. _custom-scripts:
Custom Scripts
--------------
When you are using the app factory pattern, it may be more convenient to define
your own Click script. Instead of using ``--app`` and letting Flask load
your application, you can create your own Click object and export it as a
`console script`_ entry point.
Create an instance of :class:`~cli.FlaskGroup` and pass it the factory::
import click
from flask import Flask
from flask.cli import FlaskGroup
def create_app():
app = Flask('wiki')
# other setup
return app
@click.group(cls=FlaskGroup, create_app=create_app)
def cli():
"""Management script for the Wiki application."""
Define the entry point in :file:`pyproject.toml`:
.. code-block:: toml
[project.scripts]
wiki = "wiki:cli"
Install the application in the virtualenv in editable mode and the custom
script is available. Note that you don't need to set ``--app``. ::
$ pip install -e .
$ wiki run
.. admonition:: Errors in Custom Scripts
When using a custom script, if you introduce an error in your
module-level code, the reloader will fail because it can no longer
load the entry point.
The ``flask`` command, being separate from your code, does not have
this issue and is recommended in most cases.
.. _console script: https://packaging.python.org/tutorials/packaging-projects/#console-scripts
PyCharm Integration
-------------------
PyCharm Professional provides a special Flask run configuration to run the development
server. For the Community Edition, and for other commands besides ``run``, you need to
create a custom run configuration. These instructions should be similar for any other
IDE you use.
In PyCharm, with your project open, click on *Run* from the menu bar and go to *Edit
Configurations*. You'll see a screen similar to this:
.. image:: _static/pycharm-run-config.png
:align: center
:class: screenshot
:alt: Screenshot of PyCharm run configuration.
Once you create a configuration for the ``flask run``, you can copy and change it to
call any other command.
Click the *+ (Add New Configuration)* button and select *Python*. Give the configuration
a name such as "flask run".
Click the *Script path* dropdown and change it to *Module name*, then input ``flask``.
The *Parameters* field is set to the CLI command to execute along with any arguments.
This example uses ``--app hello run --debug``, which will run the development server in
debug mode. ``--app hello`` should be the import or file with your Flask app.
If you installed your project as a package in your virtualenv, you may uncheck the
*PYTHONPATH* options. This will more accurately match how you deploy later.
Click *OK* to save and close the configuration. Select the configuration in the main
PyCharm window and click the play button next to it to run the server.
Now that you have a configuration for ``flask run``, you can copy that configuration and
change the *Parameters* argument to run a different CLI command.

View file

@ -1,269 +1,101 @@
# -*- coding: utf-8 -*-
#
# Flask documentation build configuration file, created by
# sphinx-quickstart on Tue Apr 6 15:24:58 2010.
#
# This file is execfile()d with the current directory set to its containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
import packaging.version
from pallets_sphinx_themes import get_version
from pallets_sphinx_themes import ProjectLink
import sys, os
# Project --------------------------------------------------------------
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
sys.path.append(os.path.abspath('_themes'))
sys.path.append(os.path.abspath('.'))
project = "Flask"
copyright = "2010 Pallets"
author = "Pallets"
release, version = get_version("Flask")
# -- General configuration -----------------------------------------------------
# General --------------------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
#needs_sphinx = '1.0'
# Add any Sphinx extension module names here, as strings. They can be extensions
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.intersphinx',
'flaskdocext']
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# The suffix of source filenames.
source_suffix = '.rst'
# The encoding of source files.
#source_encoding = 'utf-8-sig'
# The master toctree document.
master_doc = 'index'
# General information about the project.
project = u'Flask'
copyright = u'2010, Armin Ronacher'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
import pkg_resources
try:
release = pkg_resources.get_distribution('Flask').version
except pkg_resources.DistributionNotFound:
print 'To build the documentation, The distribution information of Flask'
print 'Has to be available. Either install the package into your'
print 'development environment or run "setup.py develop" to setup the'
print 'metadata. A virtualenv is recommended!'
sys.exit(1)
del pkg_resources
if 'dev' in release:
release = release.split('dev')[0] + 'dev'
version = '.'.join(release.split('.')[:2])
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#language = None
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
#today = ''
# Else, today_fmt is used as the format for a strftime call.
#today_fmt = '%B %d, %Y'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
exclude_patterns = ['_build']
# The reST default role (used for this markup: `text`) to use for all documents.
#default_role = None
# If true, '()' will be appended to :func: etc. cross-reference text.
#add_function_parentheses = True
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
#add_module_names = True
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
#show_authors = False
# A list of ignored prefixes for module index sorting.
#modindex_common_prefix = []
# -- Options for HTML output ---------------------------------------------------
# The theme to use for HTML and HTML Help pages. Major themes that come with
# Sphinx are currently 'default' and 'sphinxdoc'.
html_theme = 'flask'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
html_theme_options = {
'touch_icon': 'touch-icon.png'
}
# Add any paths that contain custom themes here, relative to this directory.
html_theme_path = ['_themes']
# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
#html_title = None
# A shorter title for the navigation bar. Default is the same as html_title.
#html_short_title = None
# The name of an image file (relative to this directory) to place at the top
# of the sidebar. Do not set, template magic!
#html_logo = None
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
#html_favicon = None
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.
#html_last_updated_fmt = '%b %d, %Y'
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
#html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
html_sidebars = {
'index': ['sidebarintro.html', 'sourcelink.html', 'searchbox.html'],
'**': ['sidebarlogo.html', 'localtoc.html', 'relations.html',
'sourcelink.html', 'searchbox.html']
}
# Additional templates that should be rendered to pages, maps page names to
# template names.
#html_additional_pages = {}
# If false, no module index is generated.
html_use_modindex = False
# If false, no index is generated.
#html_use_index = True
# If true, the index is split into individual pages for each letter.
#html_split_index = False
# If true, links to the reST sources are added to the pages.
#html_show_sourcelink = True
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
html_show_sphinx = False
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
#html_show_copyright = True
# If true, an OpenSearch description file will be output, and all pages will
# contain a <link> tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
#html_use_opensearch = ''
# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
#html_file_suffix = ''
# Output file base name for HTML help builder.
htmlhelp_basename = 'Flaskdoc'
# -- Options for LaTeX output --------------------------------------------------
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, documentclass [howto/manual]).
latex_documents = [
('latexindex', 'Flask.tex', u'Flask Documentation',
u'Armin Ronacher', 'manual'),
default_role = "code"
extensions = [
"sphinx.ext.autodoc",
"sphinx.ext.extlinks",
"sphinx.ext.intersphinx",
"sphinxcontrib.log_cabinet",
"sphinx_tabs.tabs",
"pallets_sphinx_themes",
]
# Documents to append as an appendix to all manuals.
#latex_appendices = []
# If false, no module index is generated.
latex_use_modindex = False
latex_elements = {
'fontpkg': r'\usepackage{mathpazo}',
'papersize': 'a4paper',
'pointsize': '12pt',
'preamble': r'\usepackage{flaskstyle}'
autodoc_member_order = "bysource"
autodoc_typehints = "description"
autodoc_preserve_defaults = True
extlinks = {
"issue": ("https://github.com/pallets/flask/issues/%s", "#%s"),
"pr": ("https://github.com/pallets/flask/pull/%s", "#%s"),
"ghsa": ("https://github.com/pallets/flask/security/advisories/GHSA-%s", "GHSA-%s"),
}
latex_use_parts = True
latex_additional_files = ['flaskstyle.sty', 'logo.pdf']
# -- Options for Epub output ---------------------------------------------------
# Bibliographic Dublin Core info.
#epub_title = ''
#epub_author = ''
#epub_publisher = ''
#epub_copyright = ''
# The language of the text. It defaults to the language option
# or en if the language is not set.
#epub_language = ''
# The scheme of the identifier. Typical schemes are ISBN or URL.
#epub_scheme = ''
# The unique identifier of the text. This can be a ISBN number
# or the project homepage.
#epub_identifier = ''
# A unique identification for the text.
#epub_uid = ''
# HTML files that should be inserted before the pages created by sphinx.
# The format is a list of tuples containing the path and title.
#epub_pre_files = []
# HTML files shat should be inserted after the pages created by sphinx.
# The format is a list of tuples containing the path and title.
#epub_post_files = []
# A list of files that should not be packed into the epub file.
#epub_exclude_files = []
# The depth of the table of contents in toc.ncx.
#epub_tocdepth = 3
intersphinx_mapping = {
'http://docs.python.org/dev': None,
'http://werkzeug.pocoo.org/docs/': None,
'http://www.sqlalchemy.org/docs/': None,
'http://wtforms.simplecodes.com/docs/0.5/': None,
'http://discorporate.us/projects/Blinker/docs/1.1/': None
"python": ("https://docs.python.org/3/", None),
"werkzeug": ("https://werkzeug.palletsprojects.com/", None),
"click": ("https://click.palletsprojects.com/", None),
"jinja": ("https://jinja.palletsprojects.com/", None),
"itsdangerous": ("https://itsdangerous.palletsprojects.com/", None),
"sqlalchemy": ("https://docs.sqlalchemy.org/", None),
"wtforms": ("https://wtforms.readthedocs.io/", None),
"blinker": ("https://blinker.readthedocs.io/", None),
}
pygments_style = 'flask_theme_support.FlaskyStyle'
# HTML -----------------------------------------------------------------
# fall back if theme is not there
try:
__import__('flask_theme_support')
except ImportError, e:
print '-' * 74
print 'Warning: Flask themes unavailable. Building with default theme'
print 'If you want the Flask themes, run this command and build again:'
print
print ' git submodule update --init'
print '-' * 74
html_theme = "flask"
html_theme_options = {"index_sidebar_logo": False}
html_context = {
"project_links": [
ProjectLink("Donate", "https://palletsprojects.com/donate"),
ProjectLink("PyPI Releases", "https://pypi.org/project/Flask/"),
ProjectLink("Source Code", "https://github.com/pallets/flask/"),
ProjectLink("Issue Tracker", "https://github.com/pallets/flask/issues/"),
ProjectLink("Chat", "https://discord.gg/pallets"),
]
}
html_sidebars = {
"index": ["project.html", "localtoc.html", "searchbox.html", "ethicalads.html"],
"**": ["localtoc.html", "relations.html", "searchbox.html", "ethicalads.html"],
}
singlehtml_sidebars = {"index": ["project.html", "localtoc.html", "ethicalads.html"]}
html_static_path = ["_static"]
html_favicon = "_static/flask-icon.svg"
html_logo = "_static/flask-logo.svg"
html_title = f"Flask Documentation ({version})"
html_show_sourcelink = False
pygments_style = 'tango'
html_theme = 'default'
html_theme_options = {}
gettext_uuid = True
gettext_compact = False
# Local Extensions -----------------------------------------------------
def github_link(name, rawtext, text, lineno, inliner, options=None, content=None):
app = inliner.document.settings.env.app
release = app.config.release
base_url = "https://github.com/pallets/flask/tree/"
if text.endswith(">"):
words, text = text[:-1].rsplit("<", 1)
words = words.strip()
else:
words = None
if packaging.version.parse(release).is_devrelease:
url = f"{base_url}main/{text}"
else:
url = f"{base_url}{release}/{text}"
if words is None:
words = url
from docutils.nodes import reference
from docutils.parsers.rst.roles import set_classes
options = options or {}
set_classes(options)
node = reference(rawtext, words, refuri=url, **options)
return [node], []
def setup(app):
app.add_role("gh", github_link)

View file

@ -1,17 +1,13 @@
.. _config:
Configuration Handling
======================
.. versionadded:: 0.3
Applications need some kind of configuration. There are different settings
you might want to change depending on the application environment like
toggling the debug mode, setting the secret key, and other such
environment-specific things.
The way Flask is designed usually requires the configuration to be
available when the application starts up. You can hardcode the
available when the application starts up. You can hard code the
configuration in the code, which for many small applications is not
actually that bad, but there are better ways.
@ -22,6 +18,7 @@ object. This is the place where Flask itself puts certain configuration
values and also where extensions can put their configuration values. But
this is also where you can have your own configuration.
Configuration Basics
--------------------
@ -29,123 +26,373 @@ The :attr:`~flask.Flask.config` is actually a subclass of a dictionary and
can be modified just like any dictionary::
app = Flask(__name__)
app.config['DEBUG'] = True
app.config['TESTING'] = True
Certain configuration values are also forwarded to the
:attr:`~flask.Flask` object so you can read and write them from there::
app.debug = True
app.testing = True
To update multiple keys at once you can use the :meth:`dict.update`
method::
app.config.update(
DEBUG=True,
SECRET_KEY='...'
TESTING=True,
SECRET_KEY='192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf'
)
Debug Mode
----------
The :data:`DEBUG` config value is special because it may behave inconsistently if
changed after the app has begun setting up. In order to set debug mode reliably, use the
``--debug`` option on the ``flask`` or ``flask run`` command. ``flask run`` will use the
interactive debugger and reloader by default in debug mode.
.. code-block:: text
$ flask --app hello run --debug
Using the option is recommended. While it is possible to set :data:`DEBUG` in your
config or code, this is strongly discouraged. It can't be read early by the
``flask run`` command, and some systems or extensions may have already configured
themselves based on a previous value.
Builtin Configuration Values
----------------------------
The following configuration values are used internally by Flask:
.. tabularcolumns:: |p{6.5cm}|p{8.5cm}|
.. py:data:: DEBUG
================================= =========================================
``DEBUG`` enable/disable debug mode
``TESTING`` enable/disable testing mode
``PROPAGATE_EXCEPTIONS`` explicitly enable or disable the
propagation of exceptions. If not set or
explicitly set to `None` this is
implicitly true if either `TESTING` or
`DEBUG` is true.
``PRESERVE_CONTEXT_ON_EXCEPTION`` By default if the application is in
debug mode the request context is not
popped on exceptions to enable debuggers
to introspect the data. This can be
disabled by this key. You can also use
this setting to force-enable it for non
debug execution which might be useful to
debug production applications (but also
very risky).
``SECRET_KEY`` the secret key
``SESSION_COOKIE_NAME`` the name of the session cookie
``SESSION_COOKIE_DOMAIN`` the domain for the session cookie. If
this is not set, the cookie will be
valid for all subdomains of
``SERVER_NAME``.
``SESSION_COOKIE_PATH`` the path for the session cookie. If
this is not set the cookie will be valid
for all of ``APPLICATION_ROOT`` or if
that is not set for ``'/'``.
``SESSION_COOKIE_HTTPONLY`` controls if the cookie should be set
with the httponly flag. Defaults to
`True`.
``SESSION_COOKIE_SECURE`` controls if the cookie should be set
with the secure flag. Defaults to
`False`.
``PERMANENT_SESSION_LIFETIME`` the lifetime of a permanent session as
:class:`datetime.timedelta` object.
Starting with Flask 0.8 this can also be
an integer representing seconds.
``USE_X_SENDFILE`` enable/disable x-sendfile
``LOGGER_NAME`` the name of the logger
``SERVER_NAME`` the name and port number of the server.
Required for subdomain support (e.g.:
``'myapp.dev:5000'``) Note that
localhost does not support subdomains so
setting this to “localhost” does not
help.
``APPLICATION_ROOT`` If the application does not occupy
a whole domain or subdomain this can
be set to the path where the application
is configured to live. This is for
session cookie as path value. If
domains are used, this should be
``None``.
``MAX_CONTENT_LENGTH`` If set to a value in bytes, Flask will
reject incoming requests with a
content length greater than this by
returning a 413 status code.
``TRAP_HTTP_EXCEPTIONS`` If this is set to ``True`` Flask will
not execute the error handlers of HTTP
exceptions but instead treat the
exception like any other and bubble it
through the exception stack. This is
helpful for hairy debugging situations
where you have to find out where an HTTP
exception is coming from.
``TRAP_BAD_REQUEST_ERRORS`` Werkzeug's internal data structures that
deal with request specific data will
raise special key errors that are also
bad request exceptions. Likewise many
operations can implicitly fail with a
BadRequest exception for consistency.
Since it's nice for debugging to know
why exactly it failed this flag can be
used to debug those situations. If this
config is set to ``True`` you will get
a regular traceback instead.
================================= =========================================
Whether debug mode is enabled. When using ``flask run`` to start the development
server, an interactive debugger will be shown for unhandled exceptions, and the
server will be reloaded when code changes. The :attr:`~flask.Flask.debug` attribute
maps to this config key. This is set with the ``FLASK_DEBUG`` environment variable.
It may not behave as expected if set in code.
.. admonition:: More on ``SERVER_NAME``
**Do not enable debug mode when deploying in production.**
The ``SERVER_NAME`` key is used for the subdomain support. Because
Flask cannot guess the subdomain part without the knowledge of the
actual server name, this is required if you want to work with
subdomains. This is also used for the session cookie.
Default: ``False``
Please keep in mind that not only Flask has the problem of not knowing
what subdomains are, your web browser does as well. Most modern web
browsers will not allow cross-subdomain cookies to be set on a
server name without dots in it. So if your server name is
``'localhost'`` you will not be able to set a cookie for
``'localhost'`` and every subdomain of it. Please chose a different
server name in that case, like ``'myapplication.local'`` and add
this name + the subdomains you want to use into your host config
or setup a local `bind`_.
.. py:data:: TESTING
.. _bind: https://www.isc.org/software/bind
Enable testing mode. Exceptions are propagated rather than handled by
the app's error handlers. Extensions may also change their behavior to
facilitate easier testing. You should enable this in your own tests.
Default: ``False``
.. py:data:: PROPAGATE_EXCEPTIONS
Exceptions are re-raised rather than being handled by the app's error
handlers. If not set, this is implicitly true if ``TESTING`` or ``DEBUG``
is enabled.
Default: ``None``
.. py:data:: TRAP_HTTP_EXCEPTIONS
If there is no handler for an ``HTTPException``-type exception, re-raise it
to be handled by the interactive debugger instead of returning it as a
simple error response.
Default: ``False``
.. py:data:: TRAP_BAD_REQUEST_ERRORS
Trying to access a key that doesn't exist from request dicts like ``args``
and ``form`` will return a 400 Bad Request error page. Enable this to treat
the error as an unhandled exception instead so that you get the interactive
debugger. This is a more specific version of ``TRAP_HTTP_EXCEPTIONS``. If
unset, it is enabled in debug mode.
Default: ``None``
.. py:data:: SECRET_KEY
A secret key that will be used for securely signing the session cookie
and can be used for any other security related needs by extensions or your
application. It should be a long random ``bytes`` or ``str``. For
example, copy the output of this to your config::
$ python -c 'import secrets; print(secrets.token_hex())'
'192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf'
**Do not reveal the secret key when posting questions or committing code.**
Default: ``None``
.. py:data:: SECRET_KEY_FALLBACKS
A list of old secret keys that can still be used for unsigning. This allows
a project to implement key rotation without invalidating active sessions or
other recently-signed secrets.
Keys should be removed after an appropriate period of time, as checking each
additional key adds some overhead.
Order should not matter, but the default implementation will test the last
key in the list first, so it might make sense to order oldest to newest.
Flask's built-in secure cookie session supports this. Extensions that use
:data:`SECRET_KEY` may not support this yet.
Default: ``None``
.. versionadded:: 3.1
.. py:data:: SESSION_COOKIE_NAME
The name of the session cookie. Can be changed in case you already have a
cookie with the same name.
Default: ``'session'``
.. py:data:: SESSION_COOKIE_DOMAIN
The value of the ``Domain`` parameter on the session cookie. If not set, browsers
will only send the cookie to the exact domain it was set from. Otherwise, they
will send it to any subdomain of the given value as well.
Not setting this value is more restricted and secure than setting it.
Default: ``None``
.. warning::
If this is changed after the browser created a cookie is created with
one setting, it may result in another being created. Browsers may send
send both in an undefined order. In that case, you may want to change
:data:`SESSION_COOKIE_NAME` as well or otherwise invalidate old sessions.
.. versionchanged:: 2.3
Not set by default, does not fall back to ``SERVER_NAME``.
.. py:data:: SESSION_COOKIE_PATH
The path that the session cookie will be valid for. If not set, the cookie
will be valid underneath ``APPLICATION_ROOT`` or ``/`` if that is not set.
Default: ``None``
.. py:data:: SESSION_COOKIE_HTTPONLY
Browsers will not allow JavaScript access to cookies marked as "HTTP only"
for security.
Default: ``True``
.. py:data:: SESSION_COOKIE_SECURE
Browsers will only send cookies with requests over HTTPS if the cookie is
marked "secure". The application must be served over HTTPS for this to make
sense.
Default: ``False``
.. py:data:: SESSION_COOKIE_PARTITIONED
Browsers will send cookies based on the top-level document's domain, rather
than only the domain of the document setting the cookie. This prevents third
party cookies set in iframes from "leaking" between separate sites.
Browsers are beginning to disallow non-partitioned third party cookies, so
you need to mark your cookies partitioned if you expect them to work in such
embedded situations.
Enabling this implicitly enables :data:`SESSION_COOKIE_SECURE` as well, as
it is only valid when served over HTTPS.
Default: ``False``
.. versionadded:: 3.1
.. py:data:: SESSION_COOKIE_SAMESITE
Restrict how cookies are sent with requests from external sites. Can
be set to ``'Lax'`` (recommended) or ``'Strict'``.
See :ref:`security-cookie`.
Default: ``None``
.. versionadded:: 1.0
.. py:data:: PERMANENT_SESSION_LIFETIME
If ``session.permanent`` is true, the cookie's expiration will be set this
number of seconds in the future. Can either be a
:class:`datetime.timedelta` or an ``int``.
Flask's default cookie implementation validates that the cryptographic
signature is not older than this value.
Default: ``timedelta(days=31)`` (``2678400`` seconds)
.. py:data:: SESSION_REFRESH_EACH_REQUEST
Control whether the cookie is sent with every response when
``session.permanent`` is true. Sending the cookie every time (the default)
can more reliably keep the session from expiring, but uses more bandwidth.
Non-permanent sessions are not affected.
Default: ``True``
.. py:data:: USE_X_SENDFILE
When serving files, set the ``X-Sendfile`` header instead of serving the
data with Flask. Some web servers, such as Apache, recognize this and serve
the data more efficiently. This only makes sense when using such a server.
Default: ``False``
.. py:data:: SEND_FILE_MAX_AGE_DEFAULT
When serving files, set the cache control max age to this number of
seconds. Can be a :class:`datetime.timedelta` or an ``int``.
Override this value on a per-file basis using
:meth:`~flask.Flask.get_send_file_max_age` on the application or
blueprint.
If ``None``, ``send_file`` tells the browser to use conditional
requests will be used instead of a timed cache, which is usually
preferable.
Default: ``None``
.. py:data:: TRUSTED_HOSTS
Validate :attr:`.Request.host` and other attributes that use it against
these trusted values. Raise a :exc:`~werkzeug.exceptions.SecurityError` if
the host is invalid, which results in a 400 error. If it is ``None``, all
hosts are valid. Each value is either an exact match, or can start with
a dot ``.`` to match any subdomain.
Validation is done during routing against this value. ``before_request`` and
``after_request`` callbacks will still be called.
Default: ``None``
.. versionadded:: 3.1
.. py:data:: SERVER_NAME
Inform the application what host and port it is bound to.
Must be set if ``subdomain_matching`` is enabled, to be able to extract the
subdomain from the request.
Must be set for ``url_for`` to generate external URLs outside of a
request context.
Default: ``None``
.. versionchanged:: 3.1
Does not restrict requests to only this domain, for both
``subdomain_matching`` and ``host_matching``.
.. versionchanged:: 1.0
Does not implicitly enable ``subdomain_matching``.
.. versionchanged:: 2.3
Does not affect ``SESSION_COOKIE_DOMAIN``.
.. py:data:: APPLICATION_ROOT
Inform the application what path it is mounted under by the application /
web server. This is used for generating URLs outside the context of a
request (inside a request, the dispatcher is responsible for setting
``SCRIPT_NAME`` instead; see :doc:`/patterns/appdispatch`
for examples of dispatch configuration).
Will be used for the session cookie path if ``SESSION_COOKIE_PATH`` is not
set.
Default: ``'/'``
.. py:data:: PREFERRED_URL_SCHEME
Use this scheme for generating external URLs when not in a request context.
Default: ``'http'``
.. py:data:: MAX_CONTENT_LENGTH
The maximum number of bytes that will be read during this request. If
this limit is exceeded, a 413 :exc:`~werkzeug.exceptions.RequestEntityTooLarge`
error is raised. If it is set to ``None``, no limit is enforced at the
Flask application level. However, if it is ``None`` and the request has no
``Content-Length`` header and the WSGI server does not indicate that it
terminates the stream, then no data is read to avoid an infinite stream.
Each request defaults to this config. It can be set on a specific
:attr:`.Request.max_content_length` to apply the limit to that specific
view. This should be set appropriately based on an application's or view's
specific needs.
Default: ``None``
.. versionadded:: 0.6
.. py:data:: MAX_FORM_MEMORY_SIZE
The maximum size in bytes any non-file form field may be in a
``multipart/form-data`` body. If this limit is exceeded, a 413
:exc:`~werkzeug.exceptions.RequestEntityTooLarge` error is raised. If it is
set to ``None``, no limit is enforced at the Flask application level.
Each request defaults to this config. It can be set on a specific
:attr:`.Request.max_form_memory_parts` to apply the limit to that specific
view. This should be set appropriately based on an application's or view's
specific needs.
Default: ``500_000``
.. versionadded:: 3.1
.. py:data:: MAX_FORM_PARTS
The maximum number of fields that may be present in a
``multipart/form-data`` body. If this limit is exceeded, a 413
:exc:`~werkzeug.exceptions.RequestEntityTooLarge` error is raised. If it
is set to ``None``, no limit is enforced at the Flask application level.
Each request defaults to this config. It can be set on a specific
:attr:`.Request.max_form_parts` to apply the limit to that specific view.
This should be set appropriately based on an application's or view's
specific needs.
Default: ``1_000``
.. versionadded:: 3.1
.. py:data:: TEMPLATES_AUTO_RELOAD
Reload templates when they are changed. If not set, it will be enabled in
debug mode.
Default: ``None``
.. py:data:: EXPLAIN_TEMPLATE_LOADING
Log debugging information tracing how a template file was loaded. This can
be useful to figure out why a template was not loaded or the wrong file
appears to be loaded.
Default: ``False``
.. py:data:: MAX_COOKIE_SIZE
Warn if cookie headers are larger than this many bytes. Defaults to
``4093``. Larger cookies may be silently ignored by browsers. Set to
``0`` to disable the warning.
.. py:data:: PROVIDE_AUTOMATIC_OPTIONS
Set to ``False`` to disable the automatic addition of OPTIONS
responses. This can be overridden per route by altering the
``provide_automatic_options`` attribute.
.. versionadded:: 0.4
``LOGGER_NAME``
@ -165,16 +412,52 @@ The following configuration values are used internally by Flask:
``SESSION_COOKIE_PATH``, ``SESSION_COOKIE_HTTPONLY``,
``SESSION_COOKIE_SECURE``
Configuring from Files
----------------------
.. versionadded:: 0.9
``PREFERRED_URL_SCHEME``
Configuration becomes more useful if you can store it in a separate file,
ideally located outside the actual application package. This makes
packaging and distributing your application possible via various package
handling tools (:ref:`distribute-deployment`) and finally modifying the
configuration file afterwards.
.. versionadded:: 0.10
``JSON_AS_ASCII``, ``JSON_SORT_KEYS``, ``JSONIFY_PRETTYPRINT_REGULAR``
So a common pattern is this::
.. versionadded:: 0.11
``SESSION_REFRESH_EACH_REQUEST``, ``TEMPLATES_AUTO_RELOAD``,
``LOGGER_HANDLER_POLICY``, ``EXPLAIN_TEMPLATE_LOADING``
.. versionchanged:: 1.0
``LOGGER_NAME`` and ``LOGGER_HANDLER_POLICY`` were removed. See
:doc:`/logging` for information about configuration.
Added :data:`ENV` to reflect the :envvar:`FLASK_ENV` environment
variable.
Added :data:`SESSION_COOKIE_SAMESITE` to control the session
cookie's ``SameSite`` option.
Added :data:`MAX_COOKIE_SIZE` to control a warning from Werkzeug.
.. versionchanged:: 2.2
Removed ``PRESERVE_CONTEXT_ON_EXCEPTION``.
.. versionchanged:: 2.3
``JSON_AS_ASCII``, ``JSON_SORT_KEYS``, ``JSONIFY_MIMETYPE``, and
``JSONIFY_PRETTYPRINT_REGULAR`` were removed. The default ``app.json`` provider has
equivalent attributes instead.
.. versionchanged:: 2.3
``ENV`` was removed.
.. versionadded:: 3.1
Added :data:`PROVIDE_AUTOMATIC_OPTIONS` to control the default
addition of autogenerated OPTIONS responses.
Configuring from Python Files
-----------------------------
Configuration becomes more useful if you can store it in a separate file, ideally
located outside the actual application package. You can deploy your application, then
separately configure it for the specific deployment.
A common pattern is this::
app = Flask(__name__)
app.config.from_object('yourapplication.default_settings')
@ -183,18 +466,42 @@ So a common pattern is this::
This first loads the configuration from the
`yourapplication.default_settings` module and then overrides the values
with the contents of the file the :envvar:`YOURAPPLICATION_SETTINGS`
environment variable points to. This environment variable can be set on
Linux or OS X with the export command in the shell before starting the
server::
environment variable points to. This environment variable can be set
in the shell before starting the server:
$ export YOURAPPLICATION_SETTINGS=/path/to/settings.cfg
$ python run-app.py
* Running on http://127.0.0.1:5000/
* Restarting with reloader...
.. tabs::
On Windows systems use the `set` builtin instead::
.. group-tab:: Bash
>set YOURAPPLICATION_SETTINGS=\path\to\settings.cfg
.. code-block:: text
$ export YOURAPPLICATION_SETTINGS=/path/to/settings.cfg
$ flask run
* Running on http://127.0.0.1:5000/
.. group-tab:: Fish
.. code-block:: text
$ set -x YOURAPPLICATION_SETTINGS /path/to/settings.cfg
$ flask run
* Running on http://127.0.0.1:5000/
.. group-tab:: CMD
.. code-block:: text
> set YOURAPPLICATION_SETTINGS=\path\to\settings.cfg
> flask run
* Running on http://127.0.0.1:5000/
.. group-tab:: Powershell
.. code-block:: text
> $env:YOURAPPLICATION_SETTINGS = "\path\to\settings.cfg"
> flask run
* Running on http://127.0.0.1:5000/
The configuration files themselves are actual Python files. Only values
in uppercase are actually stored in the config object later on. So make
@ -203,8 +510,7 @@ sure to use uppercase letters for your config keys.
Here is an example of a configuration file::
# Example configuration
DEBUG = False
SECRET_KEY = '?\xbf,\xb4\x8d\xa3"<\x9c\xb0@\x0f5\xab,w\xee\x8d$0\x13\x8b83'
SECRET_KEY = '192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf'
Make sure to load the configuration very early on, so that extensions have
the ability to access the configuration when starting up. There are other
@ -213,6 +519,118 @@ complete reference, read the :class:`~flask.Config` object's
documentation.
Configuring from Data Files
---------------------------
It is also possible to load configuration from a file in a format of
your choice using :meth:`~flask.Config.from_file`. For example to load
from a TOML file:
.. code-block:: python
import tomllib
app.config.from_file("config.toml", load=tomllib.load, text=False)
Or from a JSON file:
.. code-block:: python
import json
app.config.from_file("config.json", load=json.load)
Configuring from Environment Variables
--------------------------------------
In addition to pointing to configuration files using environment
variables, you may find it useful (or necessary) to control your
configuration values directly from the environment. Flask can be
instructed to load all environment variables starting with a specific
prefix into the config using :meth:`~flask.Config.from_prefixed_env`.
Environment variables can be set in the shell before starting the
server:
.. tabs::
.. group-tab:: Bash
.. code-block:: text
$ export FLASK_SECRET_KEY="5f352379324c22463451387a0aec5d2f"
$ export FLASK_MAIL_ENABLED=false
$ flask run
* Running on http://127.0.0.1:5000/
.. group-tab:: Fish
.. code-block:: text
$ set -x FLASK_SECRET_KEY "5f352379324c22463451387a0aec5d2f"
$ set -x FLASK_MAIL_ENABLED false
$ flask run
* Running on http://127.0.0.1:5000/
.. group-tab:: CMD
.. code-block:: text
> set FLASK_SECRET_KEY="5f352379324c22463451387a0aec5d2f"
> set FLASK_MAIL_ENABLED=false
> flask run
* Running on http://127.0.0.1:5000/
.. group-tab:: Powershell
.. code-block:: text
> $env:FLASK_SECRET_KEY = "5f352379324c22463451387a0aec5d2f"
> $env:FLASK_MAIL_ENABLED = "false"
> flask run
* Running on http://127.0.0.1:5000/
The variables can then be loaded and accessed via the config with a key
equal to the environment variable name without the prefix i.e.
.. code-block:: python
app.config.from_prefixed_env()
app.config["SECRET_KEY"] # Is "5f352379324c22463451387a0aec5d2f"
The prefix is ``FLASK_`` by default. This is configurable via the
``prefix`` argument of :meth:`~flask.Config.from_prefixed_env`.
Values will be parsed to attempt to convert them to a more specific type
than strings. By default :func:`json.loads` is used, so any valid JSON
value is possible, including lists and dicts. This is configurable via
the ``loads`` argument of :meth:`~flask.Config.from_prefixed_env`.
When adding a boolean value with the default JSON parsing, only "true"
and "false", lowercase, are valid values. Keep in mind that any
non-empty string is considered ``True`` by Python.
It is possible to set keys in nested dictionaries by separating the
keys with double underscore (``__``). Any intermediate keys that don't
exist on the parent dict will be initialized to an empty dict.
.. code-block:: text
$ export FLASK_MYAPI__credentials__username=user123
.. code-block:: python
app.config["MYAPI"]["credentials"]["username"] # Is "user123"
On Windows, environment variable keys are always uppercase, therefore
the above example would end up as ``MYAPI__CREDENTIALS__USERNAME``.
For even more config loading features, including merging and
case-insensitive Windows support, try a dedicated library such as
Dynaconf_, which includes integration with Flask.
.. _Dynaconf: https://www.dynaconf.com/
Configuration Best Practices
----------------------------
@ -221,15 +639,20 @@ a little harder. There is no single 100% solution for this problem in
general, but there are a couple of things you can keep in mind to improve
that experience:
1. create your application in a function and register blueprints on it.
1. Create your application in a function and register blueprints on it.
That way you can create multiple instances of your application with
different configurations attached which makes unittesting a lot
different configurations attached which makes unit testing a lot
easier. You can use this to pass in configuration as needed.
2. Do not write code that needs the configuration at import time. If you
limit yourself to request-only accesses to the configuration you can
reconfigure the object later on as needed.
3. Make sure to load the configuration very early on, so that
extensions can access the configuration when calling ``init_app``.
.. _config-dev-prod:
Development / Production
------------------------
@ -245,33 +668,32 @@ in the example above::
app.config.from_object('yourapplication.default_settings')
app.config.from_envvar('YOURAPPLICATION_SETTINGS')
Then you just have to add a separate `config.py` file and export
Then you just have to add a separate :file:`config.py` file and export
``YOURAPPLICATION_SETTINGS=/path/to/config.py`` and you are done. However
there are alternative ways as well. For example you could use imports or
subclassing.
What is very popular in the Django world is to make the import explicit in
the config file by adding an ``from yourapplication.default_settings
the config file by adding ``from yourapplication.default_settings
import *`` to the top of the file and then overriding the changes by hand.
You could also inspect an environment variable like
``YOURAPPLICATION_MODE`` and set that to `production`, `development` etc
and import different hardcoded files based on that.
and import different hard-coded files based on that.
An interesting pattern is also to use classes and inheritance for
configuration::
class Config(object):
DEBUG = False
TESTING = False
DATABASE_URI = 'sqlite://:memory:'
class ProductionConfig(Config):
DATABASE_URI = 'mysql://user@localhost/foo'
class DevelopmentConfig(Config):
DEBUG = True
DATABASE_URI = "sqlite:////tmp/foo.db"
class TestingConfig(Config):
DATABASE_URI = 'sqlite:///:memory:'
TESTING = True
To enable such a config you just have to call into
@ -279,25 +701,58 @@ To enable such a config you just have to call into
app.config.from_object('configmodule.ProductionConfig')
Note that :meth:`~flask.Config.from_object` does not instantiate the class
object. If you need to instantiate the class, such as to access a property,
then you must do so before calling :meth:`~flask.Config.from_object`::
from configmodule import ProductionConfig
app.config.from_object(ProductionConfig())
# Alternatively, import via string:
from werkzeug.utils import import_string
cfg = import_string('configmodule.ProductionConfig')()
app.config.from_object(cfg)
Instantiating the configuration object allows you to use ``@property`` in
your configuration classes::
class Config(object):
"""Base config, uses staging database server."""
TESTING = False
DB_SERVER = '192.168.1.56'
@property
def DATABASE_URI(self): # Note: all caps
return f"mysql://user@{self.DB_SERVER}/foo"
class ProductionConfig(Config):
"""Uses production database server."""
DB_SERVER = '192.168.19.32'
class DevelopmentConfig(Config):
DB_SERVER = 'localhost'
class TestingConfig(Config):
DB_SERVER = 'localhost'
DATABASE_URI = 'sqlite:///:memory:'
There are many different ways and it's up to you how you want to manage
your configuration files. However here a list of good recommendations:
- keep a default configuration in version control. Either populate the
- Keep a default configuration in version control. Either populate the
config with this default configuration or import it in your own
configuration files before overriding values.
- use an environment variable to switch between the configurations.
- Use an environment variable to switch between the configurations.
This can be done from outside the Python interpreter and makes
development and deployment much easier because you can quickly and
easily switch between different configs without having to touch the
code at all. If you are working often on different projects you can
even create your own script for sourcing that activates a virtualenv
and exports the development configuration for you.
- Use a tool like `fabric`_ in production to push code and
configurations separately to the production server(s). For some
details about how to do that, head over to the
:ref:`fabric-deployment` pattern.
- Use a tool like `fabric`_ to push code and configuration separately
to the production server(s).
.. _fabric: http://fabfile.org/
.. _fabric: https://www.fabfile.org/
.. _instance-folders:
@ -345,7 +800,7 @@ locations are used:
- Installed module or package::
$PREFIX/lib/python2.X/site-packages/myapp
$PREFIX/lib/pythonX.Y/site-packages/myapp
$PREFIX/var/myapp-instance
``$PREFIX`` is the prefix of your Python installation. This can be
@ -362,7 +817,7 @@ root” (the default) to “relative to instance folder” via the
app = Flask(__name__, instance_relative_config=True)
Here is a full example of how to configure Flask to preload the config
from a module and then override the config from a file in the config
from a module and then override the config from a file in the instance
folder if it exists::
app = Flask(__name__, instance_relative_config=True)
@ -375,7 +830,7 @@ file from the instance folder with :meth:`Flask.open_instance_resource`.
Example usage for both::
filename = os.path.join(app.instance_root, 'application.cfg')
filename = os.path.join(app.instance_path, 'application.cfg')
with open(filename) as f:
config = f.read()

View file

@ -1,56 +0,0 @@
User's Guide
------------
This part of the documentation, which is mostly prose, begins with some
background information about Flask, then focuses on step-by-step
instructions for web development with Flask.
.. toctree::
:maxdepth: 2
foreword
installation
quickstart
tutorial/index
templating
testing
errorhandling
config
signals
views
reqcontext
blueprints
extensions
shell
patterns/index
deploying/index
becomingbig
API Reference
-------------
If you are looking for information on a specific function, class or
method, this part of the documentation is for you.
.. toctree::
:maxdepth: 2
api
Additional Notes
----------------
Design notes, legal information and changelog are here for the interested.
.. toctree::
:maxdepth: 2
design
htmlfaq
security
unicode
extensiondev
styleguide
upgrading
changelog
license

8
docs/contributing.rst Normal file
View file

@ -0,0 +1,8 @@
Contributing
============
See the Pallets `detailed contributing documentation <contrib_>`_ for many ways
to contribute, including reporting issues, requesting features, asking or
answering questions, and making PRs.
.. _contrib: https://palletsprojects.com/contributing/

99
docs/debugging.rst Normal file
View file

@ -0,0 +1,99 @@
Debugging Application Errors
============================
In Production
-------------
**Do not run the development server, or enable the built-in debugger, in
a production environment.** The debugger allows executing arbitrary
Python code from the browser. It's protected by a pin, but that should
not be relied on for security.
Use an error logging tool, such as Sentry, as described in
:ref:`error-logging-tools`, or enable logging and notifications as
described in :doc:`/logging`.
If you have access to the server, you could add some code to start an
external debugger if ``request.remote_addr`` matches your IP. Some IDE
debuggers also have a remote mode so breakpoints on the server can be
interacted with locally. Only enable a debugger temporarily.
The Built-In Debugger
---------------------
The built-in Werkzeug development server provides a debugger which shows
an interactive traceback in the browser when an unhandled error occurs
during a request. This debugger should only be used during development.
.. image:: _static/debugger.png
:align: center
:class: screenshot
:alt: screenshot of debugger in action
.. warning::
The debugger allows executing arbitrary Python code from the
browser. It is protected by a pin, but still represents a major
security risk. Do not run the development server or debugger in a
production environment.
The debugger is enabled by default when the development server is run in debug mode.
.. code-block:: text
$ flask --app hello run --debug
When running from Python code, passing ``debug=True`` enables debug mode, which is
mostly equivalent.
.. code-block:: python
app.run(debug=True)
:doc:`/server` and :doc:`/cli` have more information about running the debugger and
debug mode. More information about the debugger can be found in the `Werkzeug
documentation <https://werkzeug.palletsprojects.com/debug/>`__.
External Debuggers
------------------
External debuggers, such as those provided by IDEs, can offer a more
powerful debugging experience than the built-in debugger. They can also
be used to step through code during a request before an error is raised,
or if no error is raised. Some even have a remote mode so you can debug
code running on another machine.
When using an external debugger, the app should still be in debug mode, otherwise Flask
turns unhandled errors into generic 500 error pages. However, the built-in debugger and
reloader should be disabled so they don't interfere with the external debugger.
.. code-block:: text
$ flask --app hello run --debug --no-debugger --no-reload
When running from Python:
.. code-block:: python
app.run(debug=True, use_debugger=False, use_reloader=False)
Disabling these isn't required, an external debugger will continue to work with the
following caveats.
- If the built-in debugger is not disabled, it will catch unhandled exceptions before
the external debugger can.
- If the reloader is not disabled, it could cause an unexpected reload if code changes
during a breakpoint.
- The development server will still catch unhandled exceptions if the built-in
debugger is disabled, otherwise it would crash on any error. If you want that (and
usually you don't) pass ``passthrough_errors=True`` to ``app.run``.
.. code-block:: python
app.run(
debug=True, passthrough_errors=True,
use_debugger=False, use_reloader=False
)

View file

@ -0,0 +1,66 @@
Apache httpd
============
`Apache httpd`_ is a fast, production level HTTP server. When serving
your application with one of the WSGI servers listed in :doc:`index`, it
is often good or necessary to put a dedicated HTTP server in front of
it. This "reverse proxy" can handle incoming requests, TLS, and other
security and performance concerns better than the WSGI server.
httpd can be installed using your system package manager, or a pre-built
executable for Windows. Installing and running httpd itself is outside
the scope of this doc. This page outlines the basics of configuring
httpd to proxy your application. Be sure to read its documentation to
understand what features are available.
.. _Apache httpd: https://httpd.apache.org/
Domain Name
-----------
Acquiring and configuring a domain name is outside the scope of this
doc. In general, you will buy a domain name from a registrar, pay for
server space with a hosting provider, and then point your registrar
at the hosting provider's name servers.
To simulate this, you can also edit your ``hosts`` file, located at
``/etc/hosts`` on Linux. Add a line that associates a name with the
local IP.
Modern Linux systems may be configured to treat any domain name that
ends with ``.localhost`` like this without adding it to the ``hosts``
file.
.. code-block:: python
:caption: ``/etc/hosts``
127.0.0.1 hello.localhost
Configuration
-------------
The httpd configuration is located at ``/etc/httpd/conf/httpd.conf`` on
Linux. It may be different depending on your operating system. Check the
docs and look for ``httpd.conf``.
Remove or comment out any existing ``DocumentRoot`` directive. Add the
config lines below. We'll assume the WSGI server is listening locally at
``http://127.0.0.1:8000``.
.. code-block:: apache
:caption: ``/etc/httpd/conf/httpd.conf``
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
ProxyPass / http://127.0.0.1:8000/
RequestHeader set X-Forwarded-Proto http
RequestHeader set X-Forwarded-Prefix /
The ``LoadModule`` lines might already exist. If so, make sure they are
uncommented instead of adding them manually.
Then :doc:`proxy_fix` so that your application uses the ``X-Forwarded``
headers. ``X-Forwarded-For`` and ``X-Forwarded-Host`` are automatically
set by ``ProxyPass``.

27
docs/deploying/asgi.rst Normal file
View file

@ -0,0 +1,27 @@
ASGI
====
If you'd like to use an ASGI server you will need to utilise WSGI to
ASGI middleware. The asgiref
`WsgiToAsgi <https://github.com/django/asgiref#wsgi-to-asgi-adapter>`_
adapter is recommended as it integrates with the event loop used for
Flask's :ref:`async_await` support. You can use the adapter by
wrapping the Flask app,
.. code-block:: python
from asgiref.wsgi import WsgiToAsgi
from flask import Flask
app = Flask(__name__)
...
asgi_app = WsgiToAsgi(app)
and then serving the ``asgi_app`` with the ASGI server, e.g. using
`Hypercorn <https://github.com/pgjones/hypercorn>`_,
.. sourcecode:: text
$ hypercorn module:asgi_app

View file

@ -1,46 +0,0 @@
CGI
===
If all other deployment methods do not work, CGI will work for sure.
CGI is supported by all major servers but usually has a sub-optimal
performance.
This is also the way you can use a Flask application on Google's `App
Engine`_, where execution happens in a CGI-like environment.
.. admonition:: Watch Out
Please make sure in advance that any ``app.run()`` calls you might
have in your application file are inside an ``if __name__ ==
'__main__':`` block or moved to a separate file. Just make sure it's
not called because this will always start a local WSGI server which
we do not want if we deploy that application to CGI / app engine.
Creating a `.cgi` file
----------------------
First you need to create the CGI application file. Let's call it
`yourapplication.cgi`::
#!/usr/bin/python
from wsgiref.handlers import CGIHandler
from yourapplication import app
CGIHandler().run(app)
Server Setup
------------
Usually there are two ways to configure the server. Either just copy the
`.cgi` into a `cgi-bin` (and use `mod_rewrite` or something similar to
rewrite the URL) or let the server point to the file directly.
In Apache for example you can put a like like this into the config:
.. sourcecode:: apache
ScriptAlias /app /path/to/the/application.cgi
For more information consult the documentation of your webserver.
.. _App Engine: http://code.google.com/appengine/

View file

@ -0,0 +1,8 @@
:orphan:
eventlet
========
`Eventlet is no longer maintained.`__ Use :doc:`/deploying/gevent` instead.
__ https://eventlet.readthedocs.io

View file

@ -1,164 +0,0 @@
.. _deploying-fastcgi:
FastCGI
=======
FastCGI is a deployment option on servers like `nginx`_, `lighttpd`_,
and `cherokee`_; see :ref:`deploying-uwsgi` and
:ref:`deploying-other-servers` for other options. To use your WSGI
application with any of them you will need a FastCGI server first. The
most popular one is `flup`_ which we will use for this guide. Make sure
to have it installed to follow along.
.. admonition:: Watch Out
Please make sure in advance that any ``app.run()`` calls you might
have in your application file are inside an ``if __name__ ==
'__main__':`` block or moved to a separate file. Just make sure it's
not called because this will always start a local WSGI server which
we do not want if we deploy that application to FastCGI.
Creating a `.fcgi` file
-----------------------
First you need to create the FastCGI server file. Let's call it
`yourapplication.fcgi`::
#!/usr/bin/python
from flup.server.fcgi import WSGIServer
from yourapplication import app
if __name__ == '__main__':
WSGIServer(app).run()
This is enough for Apache to work, however nginx and older versions of
lighttpd need a socket to be explicitly passed to communicate with the
FastCGI server. For that to work you need to pass the path to the
socket to the :class:`~flup.server.fcgi.WSGIServer`::
WSGIServer(application, bindAddress='/path/to/fcgi.sock').run()
The path has to be the exact same path you define in the server
config.
Save the `yourapplication.fcgi` file somewhere you will find it again.
It makes sense to have that in `/var/www/yourapplication` or something
similar.
Make sure to set the executable bit on that file so that the servers
can execute it:
.. sourcecode:: text
# chmod +x /var/www/yourapplication/yourapplication.fcgi
Configuring lighttpd
--------------------
A basic FastCGI configuration for lighttpd looks like that::
fastcgi.server = ("/yourapplication.fcgi" =>
((
"socket" => "/tmp/yourapplication-fcgi.sock",
"bin-path" => "/var/www/yourapplication/yourapplication.fcgi",
"check-local" => "disable",
"max-procs" => 1
))
)
alias.url = (
"/static/" => "/path/to/your/static"
)
url.rewrite-once = (
"^(/static.*)$" => "$1",
"^(/.*)$" => "/yourapplication.fcgi$1"
Remember to enable the FastCGI, alias and rewrite modules. This
configuration binds the application to `/yourapplication`. If you want
the application to work in the URL root you have to work around a
lighttpd bug with the
:class:`~werkzeug.contrib.fixers.LighttpdCGIRootFix` middleware.
Make sure to apply it only if you are mounting the application the URL
root. Also, see the Lighty docs for more information on `FastCGI and
Python <http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModFastCGI>`_
(note that explicitly passing a socket to run() is no longer necessary).
Configuring nginx
-----------------
Installing FastCGI applications on nginx is a bit different because by
default no FastCGI parameters are forwarded.
A basic flask FastCGI configuration for nginx looks like this::
location = /yourapplication { rewrite ^ /yourapplication/ last; }
location /yourapplication { try_files $uri @yourapplication; }
location @yourapplication {
include fastcgi_params;
fastcgi_split_path_info ^(/yourapplication)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_pass unix:/tmp/yourapplication-fcgi.sock;
}
This configuration binds the application to `/yourapplication`. If you
want to have it in the URL root it's a bit simpler because you don't
have to figure out how to calculate `PATH_INFO` and `SCRIPT_NAME`::
location / { try_files $uri @yourapplication; }
location @yourapplication {
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param SCRIPT_NAME "";
fastcgi_pass unix:/tmp/yourapplication-fcgi.sock;
}
Running FastCGI Processes
-------------------------
Since Nginx and others do not load FastCGI apps, you have to do it by
yourself. `Supervisor can manage FastCGI processes.
<http://supervisord.org/configuration.html#fcgi-program-x-section-settings>`_
You can look around for other FastCGI process managers or write a script
to run your `.fcgi` file at boot, e.g. using a SysV ``init.d`` script.
For a temporary solution, you can always run the ``.fcgi`` script inside
GNU screen. See ``man screen`` for details, and note that this is a
manual solution which does not persist across system restart::
$ screen
$ /var/www/yourapplication/yourapplication.fcgi
Debugging
---------
FastCGI deployments tend to be hard to debug on most webservers. Very
often the only thing the server log tells you is something along the
lines of "premature end of headers". In order to debug the application
the only thing that can really give you ideas why it breaks is switching
to the correct user and executing the application by hand.
This example assumes your application is called `application.fcgi` and
that your webserver user is `www-data`::
$ su www-data
$ cd /var/www/yourapplication
$ python application.fcgi
Traceback (most recent call last):
File "yourapplication.fcgi", line 4, in <module>
ImportError: No module named yourapplication
In this case the error seems to be "yourapplication" not being on the
python path. Common problems are:
- Relative paths being used. Don't rely on the current working directory
- The code depending on environment variables that are not set by the
web server.
- Different python interpreters being used.
.. _nginx: http://nginx.org/
.. _lighttpd: http://www.lighttpd.net/
.. _cherokee: http://www.cherokee-project.com/
.. _flup: http://trac.saddi.com/flup

76
docs/deploying/gevent.rst Normal file
View file

@ -0,0 +1,76 @@
gevent
======
Prefer using :doc:`gunicorn` or :doc:`uwsgi` with gevent workers rather
than using `gevent`_ directly. Gunicorn and uWSGI provide much more
configurable and production-tested servers.
`gevent`_ allows writing asynchronous, coroutine-based code that looks
like standard synchronous Python. It uses `greenlet`_ to enable task
switching without writing ``async/await`` or using ``asyncio``. This is
not the same as Python's ``async/await``, or the ASGI server spec.
gevent provides a WSGI server that can handle many connections at once
instead of one per worker process. See :doc:`/gevent` for more
information about enabling it in your application.
.. _gevent: https://www.gevent.org/
.. _greenlet: https://greenlet.readthedocs.io/en/latest/
Installing
----------
When using gevent, greenlet>=1.0 is required. When using PyPy,
PyPy>=7.3.7 is required.
Create a virtualenv, install your application, then install ``gevent``.
.. code-block:: text
$ cd hello-app
$ python -m venv .venv
$ . .venv/bin/activate
$ pip install . # install your application
$ pip install gevent
Running
-------
To use gevent to serve your application, write a script that imports its
``WSGIServer``, as well as your app or app factory.
.. code-block:: python
:caption: ``wsgi.py``
from gevent.pywsgi import WSGIServer
from hello import create_app
app = create_app()
http_server = WSGIServer(("127.0.0.1", 8000), app)
http_server.serve_forever()
.. code-block:: text
$ python wsgi.py
No output is shown when the server starts.
Binding Externally
------------------
gevent should not be run as root because it would cause your
application code to run as root, which is not secure. However, this
means it will not be possible to bind to port 80 or 443. Instead, a
reverse proxy such as :doc:`nginx` or :doc:`apache-httpd` should be used
in front of gevent.
You can bind to all external IPs on a non-privileged port by using
``0.0.0.0`` in the server arguments shown in the previous section. Don't
do this when using a reverse proxy setup, otherwise it will be possible
to bypass the proxy.
``0.0.0.0`` is not a valid address to navigate to, you'd use a specific
IP address in your browser.

116
docs/deploying/gunicorn.rst Normal file
View file

@ -0,0 +1,116 @@
Gunicorn
========
`Gunicorn`_ is a pure Python WSGI server with simple configuration and
multiple worker implementations for performance tuning.
* It tends to integrate easily with hosting platforms.
* It does not support Windows (but does run on WSL).
* It is easy to install as it does not require additional dependencies
or compilation.
* It has built-in async worker support using gevent.
This page outlines the basics of running Gunicorn. Be sure to read its
`documentation`_ and use ``gunicorn --help`` to understand what features
are available.
.. _Gunicorn: https://gunicorn.org/
.. _documentation: https://docs.gunicorn.org/
Installing
----------
Gunicorn is easy to install, as it does not require external
dependencies or compilation. It runs on Windows only under WSL.
Create a virtualenv, install your application, then install
``gunicorn``.
.. code-block:: text
$ cd hello-app
$ python -m venv .venv
$ . .venv/bin/activate
$ pip install . # install your application
$ pip install gunicorn
Running
-------
The only required argument to Gunicorn tells it how to load your Flask
application. The syntax is ``{module_import}:{app_variable}``.
``module_import`` is the dotted import name to the module with your
application. ``app_variable`` is the variable with the application. It
can also be a function call (with any arguments) if you're using the
app factory pattern.
.. code-block:: text
# equivalent to 'from hello import app'
$ gunicorn -w 4 'hello:app'
# equivalent to 'from hello import create_app; create_app()'
$ gunicorn -w 4 'hello:create_app()'
Starting gunicorn 20.1.0
Listening at: http://127.0.0.1:8000 (x)
Using worker: sync
Booting worker with pid: x
Booting worker with pid: x
Booting worker with pid: x
Booting worker with pid: x
The ``-w`` option specifies the number of processes to run; a starting
value could be ``CPU * 2``. The default is only 1 worker, which is
probably not what you want for the default worker type.
Logs for each request aren't shown by default, only worker info and
errors are shown. To show access logs on stdout, use the
``--access-logfile=-`` option.
Binding Externally
------------------
Gunicorn should not be run as root because it would cause your
application code to run as root, which is not secure. However, this
means it will not be possible to bind to port 80 or 443. Instead, a
reverse proxy such as :doc:`nginx` or :doc:`apache-httpd` should be used
in front of Gunicorn.
You can bind to all external IPs on a non-privileged port using the
``-b 0.0.0.0`` option. Don't do this when using a reverse proxy setup,
otherwise it will be possible to bypass the proxy.
.. code-block:: text
$ gunicorn -w 4 -b 0.0.0.0 'hello:create_app()'
Listening at: http://0.0.0.0:8000 (x)
``0.0.0.0`` is not a valid address to navigate to, you'd use a specific
IP address in your browser.
Async with gevent
-----------------
The default sync worker is appropriate for most use cases. If you need numerous,
long running, concurrent connections, Gunicorn provides an asynchronous worker
using `gevent`_. This is not the same as Python's ``async/await``, or the ASGI
server spec. See :doc:`/gevent` for more information about enabling it in your
application.
.. _gevent: https://www.gevent.org/
When using gevent, greenlet>=1.0 is required. When using PyPy, PyPy>=7.3.7 is
required.
.. code-block:: text
$ gunicorn -k gevent 'hello:create_app()'
Starting gunicorn 20.1.0
Listening at: http://127.0.0.1:8000 (x)
Using worker: gevent
Booting worker with pid: x

View file

@ -1,23 +1,78 @@
.. _deployment:
Deploying to Production
=======================
Deployment Options
==================
After developing your application, you'll want to make it available
publicly to other users. When you're developing locally, you're probably
using the built-in development server, debugger, and reloader. These
should not be used in production. Instead, you should use a dedicated
WSGI server or hosting platform, some of which will be described here.
Depending on what you have available there are multiple ways to run
Flask applications. You can use the builtin server during development,
but you should use a full deployment option for production applications.
(Do not use the builtin development server in production.) Several
options are available and documented here.
"Production" means "not development", which applies whether you're
serving your application publicly to millions of users or privately /
locally to a single user. **Do not use the development server when
deploying to production. It is intended for use only during local
development. It is not designed to be particularly secure, stable, or
efficient.**
If you have a different WSGI server look up the server documentation
about how to use a WSGI app with it. Just remember that your
:class:`Flask` application object is the actual WSGI application.
Self-Hosted Options
-------------------
Flask is a WSGI *application*. A WSGI *server* is used to run the
application, converting incoming HTTP requests to the standard WSGI
environ, and converting outgoing WSGI responses to HTTP responses.
The primary goal of these docs is to familiarize you with the concepts
involved in running a WSGI application using a production WSGI server
and HTTP server. There are many WSGI servers and HTTP servers, with many
configuration possibilities. The pages below discuss the most common
servers, and show the basics of running each one. The next section
discusses platforms that can manage this for you.
.. toctree::
:maxdepth: 2
:maxdepth: 1
mod_wsgi
cgi
fastcgi
uwsgi
others
gunicorn
waitress
mod_wsgi
uwsgi
gevent
asgi
WSGI servers have HTTP servers built-in. However, a dedicated HTTP
server may be safer, more efficient, or more capable. Putting an HTTP
server in front of the WSGI server is called a "reverse proxy."
.. toctree::
:maxdepth: 1
proxy_fix
nginx
apache-httpd
This list is not exhaustive, and you should evaluate these and other
servers based on your application's needs. Different servers will have
different capabilities, configuration, and support.
Hosting Platforms
-----------------
There are many services available for hosting web applications without
needing to maintain your own server, networking, domain, etc. Some
services may have a free tier up to a certain time or bandwidth. Many of
these services use one of the WSGI servers described above, or a similar
interface. The links below are for some of the most common platforms,
which have instructions for Flask, WSGI, or Python.
- `PythonAnywhere <https://help.pythonanywhere.com/pages/Flask/>`_
- `Google App Engine <https://cloud.google.com/appengine/docs/standard/python3/building-app>`_
- `Google Cloud Run <https://cloud.google.com/run/docs/quickstarts/build-and-deploy/deploy-python-service>`_
- `AWS Elastic Beanstalk <https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-flask.html>`_
- `Microsoft Azure <https://docs.microsoft.com/en-us/azure/app-service/quickstart-python>`_
This list is not exhaustive, and you should evaluate these and other
services based on your application's needs. Different services will have
different capabilities, configuration, pricing, and support.
You'll probably need to :doc:`proxy_fix` when using most hosting
platforms.

View file

@ -1,167 +1,94 @@
.. _mod_wsgi-deployment:
mod_wsgi
========
mod_wsgi (Apache)
=================
`mod_wsgi`_ is a WSGI server integrated with the `Apache httpd`_ server.
The modern `mod_wsgi-express`_ command makes it easy to configure and
start the server without needing to write Apache httpd configuration.
If you are using the `Apache`_ webserver, consider using `mod_wsgi`_.
* Tightly integrated with Apache httpd.
* Supports Windows directly.
* Requires a compiler and the Apache development headers to install.
* Does not require a reverse proxy setup.
.. admonition:: Watch Out
This page outlines the basics of running mod_wsgi-express, not the more
complex installation and configuration with httpd. Be sure to read the
`mod_wsgi-express`_, `mod_wsgi`_, and `Apache httpd`_ documentation to
understand what features are available.
Please make sure in advance that any ``app.run()`` calls you might
have in your application file are inside an ``if __name__ ==
'__main__':`` block or moved to a separate file. Just make sure it's
not called because this will always start a local WSGI server which
we do not want if we deploy that application to mod_wsgi.
.. _mod_wsgi-express: https://pypi.org/project/mod-wsgi/
.. _mod_wsgi: https://modwsgi.readthedocs.io/
.. _Apache httpd: https://httpd.apache.org/
.. _Apache: http://httpd.apache.org/
Installing `mod_wsgi`
---------------------
Installing
----------
If you don't have `mod_wsgi` installed yet you have to either install it
using a package manager or compile it yourself. The mod_wsgi
`installation instructions`_ cover source installations on UNIX systems.
Installing mod_wsgi requires a compiler and the Apache server and
development headers installed. You will get an error if they are not.
How to install them depends on the OS and package manager that you use.
If you are using Ubuntu/Debian you can apt-get it and activate it as
follows:
Create a virtualenv, install your application, then install
``mod_wsgi``.
.. sourcecode:: text
.. code-block:: text
# apt-get install libapache2-mod-wsgi
$ cd hello-app
$ python -m venv .venv
$ . .venv/bin/activate
$ pip install . # install your application
$ pip install mod_wsgi
On FreeBSD install `mod_wsgi` by compiling the `www/mod_wsgi` port or by
using pkg_add:
.. sourcecode:: text
Running
-------
# pkg_add -r mod_wsgi
The only argument to ``mod_wsgi-express`` specifies a script containing
your Flask application, which must be called ``application``. You can
write a small script to import your app with this name, or to create it
if using the app factory pattern.
If you are using pkgsrc you can install `mod_wsgi` by compiling the
`www/ap2-wsgi` package.
.. code-block:: python
:caption: ``wsgi.py``
If you encounter segfaulting child processes after the first apache
reload you can safely ignore them. Just restart the server.
from hello import app
Creating a `.wsgi` file
-----------------------
application = app
To run your application you need a `yourapplication.wsgi` file. This file
contains the code `mod_wsgi` is executing on startup to get the application
object. The object called `application` in that file is then used as
application.
.. code-block:: python
:caption: ``wsgi.py``
For most applications the following file should be sufficient::
from hello import create_app
from yourapplication import app as application
application = create_app()
If you don't have a factory function for application creation but a singleton
instance you can directly import that one as `application`.
Now run the ``mod_wsgi-express start-server`` command.
Store that file somewhere that you will find it again (e.g.:
`/var/www/yourapplication`) and make sure that `yourapplication` and all
the libraries that are in use are on the python load path. If you don't
want to install it system wide consider using a `virtual python`_
instance.
.. code-block:: text
Configuring Apache
$ mod_wsgi-express start-server wsgi.py --processes 4
The ``--processes`` option specifies the number of worker processes to
run; a starting value could be ``CPU * 2``.
Logs for each request aren't show in the terminal. If an error occurs,
its information is written to the error log file shown when starting the
server.
Binding Externally
------------------
The last thing you have to do is to create an Apache configuration file
for your application. In this example we are telling `mod_wsgi` to
execute the application under a different user for security reasons:
Unlike the other WSGI servers in these docs, mod_wsgi can be run as
root to bind to privileged ports like 80 and 443. However, it must be
configured to drop permissions to a different user and group for the
worker processes.
.. sourcecode:: apache
For example, if you created a ``hello`` user and group, you should
install your virtualenv and application as that user, then tell
mod_wsgi to drop to that user after starting.
<VirtualHost *>
ServerName example.com
.. code-block:: text
WSGIDaemonProcess yourapplication user=user1 group=group1 threads=5
WSGIScriptAlias / /var/www/yourapplication/yourapplication.wsgi
<Directory /var/www/yourapplication>
WSGIProcessGroup yourapplication
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
For more information consult the `mod_wsgi wiki`_.
.. _mod_wsgi: http://code.google.com/p/modwsgi/
.. _installation instructions: http://code.google.com/p/modwsgi/wiki/QuickInstallationGuide
.. _virtual python: http://pypi.python.org/pypi/virtualenv
.. _mod_wsgi wiki: http://code.google.com/p/modwsgi/wiki/
Troubleshooting
---------------
If your application does not run, follow this guide to troubleshoot:
**Problem:** application does not run, errorlog shows SystemExit ignored
You have a ``app.run()`` call in your application file that is not
guarded by an ``if __name__ == '__main__':`` condition. Either
remove that :meth:`~flask.Flask.run` call from the file and move it
into a separate `run.py` file or put it into such an if block.
**Problem:** application gives permission errors
Probably caused by your application running as the wrong user. Make
sure the folders the application needs access to have the proper
privileges set and the application runs as the correct user
(``user`` and ``group`` parameter to the `WSGIDaemonProcess`
directive)
**Problem:** application dies with an error on print
Keep in mind that mod_wsgi disallows doing anything with
:data:`sys.stdout` and :data:`sys.stderr`. You can disable this
protection from the config by setting the `WSGIRestrictStdout` to
``off``:
.. sourcecode:: apache
WSGIRestrictStdout Off
Alternatively you can also replace the standard out in the .wsgi file
with a different stream::
import sys
sys.stdout = sys.stderr
**Problem:** accessing resources gives IO errors
Your application probably is a single .py file you symlinked into
the site-packages folder. Please be aware that this does not work,
instead you either have to put the folder into the pythonpath the
file is stored in, or convert your application into a package.
The reason for this is that for non-installed packages, the module
filename is used to locate the resources and for symlinks the wrong
filename is picked up.
Support for Automatic Reloading
-------------------------------
To help deployment tools you can activate support for automatic
reloading. Whenever something changes the `.wsgi` file, `mod_wsgi` will
reload all the daemon processes for us.
For that, just add the following directive to your `Directory` section:
.. sourcecode:: apache
WSGIScriptReloading On
Working with Virtual Environments
---------------------------------
Virtual environments have the advantage that they never install the
required dependencies system wide so you have a better control over what
is used where. If you want to use a virtual environment with mod_wsgi
you have to modify your `.wsgi` file slightly.
Add the following lines to the top of your `.wsgi` file::
activate_this = '/path/to/env/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
This sets up the load paths according to the settings of the virtual
environment. Keep in mind that the path has to be absolute.
$ sudo /home/hello/.venv/bin/mod_wsgi-express start-server \
/home/hello/wsgi.py \
--user hello --group hello --port 80 --processes 4

69
docs/deploying/nginx.rst Normal file
View file

@ -0,0 +1,69 @@
nginx
=====
`nginx`_ is a fast, production level HTTP server. When serving your
application with one of the WSGI servers listed in :doc:`index`, it is
often good or necessary to put a dedicated HTTP server in front of it.
This "reverse proxy" can handle incoming requests, TLS, and other
security and performance concerns better than the WSGI server.
Nginx can be installed using your system package manager, or a pre-built
executable for Windows. Installing and running Nginx itself is outside
the scope of this doc. This page outlines the basics of configuring
Nginx to proxy your application. Be sure to read its documentation to
understand what features are available.
.. _nginx: https://nginx.org/
Domain Name
-----------
Acquiring and configuring a domain name is outside the scope of this
doc. In general, you will buy a domain name from a registrar, pay for
server space with a hosting provider, and then point your registrar
at the hosting provider's name servers.
To simulate this, you can also edit your ``hosts`` file, located at
``/etc/hosts`` on Linux. Add a line that associates a name with the
local IP.
Modern Linux systems may be configured to treat any domain name that
ends with ``.localhost`` like this without adding it to the ``hosts``
file.
.. code-block:: python
:caption: ``/etc/hosts``
127.0.0.1 hello.localhost
Configuration
-------------
The nginx configuration is located at ``/etc/nginx/nginx.conf`` on
Linux. It may be different depending on your operating system. Check the
docs and look for ``nginx.conf``.
Remove or comment out any existing ``server`` section. Add a ``server``
section and use the ``proxy_pass`` directive to point to the address the
WSGI server is listening on. We'll assume the WSGI server is listening
locally at ``http://127.0.0.1:8000``.
.. code-block:: nginx
:caption: ``/etc/nginx.conf``
server {
listen 80;
server_name _;
location / {
proxy_pass http://127.0.0.1:8000/;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Prefix /;
}
}
Then :doc:`proxy_fix` so that your application uses these headers.

View file

@ -1,102 +0,0 @@
.. _deploying-other-servers:
Other Servers
=============
There are popular servers written in Python that allow the execution of WSGI
applications as well. These servers stand alone when they run; you can proxy
to them from your web server.
Tornado
--------
`Tornado`_ is an open source version of the scalable, non-blocking web
server and tools that power `FriendFeed`_. Because it is non-blocking and
uses epoll, it can handle thousands of simultaneous standing connections,
which means it is ideal for real-time web services. Integrating this
service with Flask is a trivial task::
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from yourapplication import app
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(5000)
IOLoop.instance().start()
.. _Tornado: http://www.tornadoweb.org/
.. _FriendFeed: http://friendfeed.com/
Gevent
-------
`Gevent`_ is a coroutine-based Python networking library that uses
`greenlet`_ to provide a high-level synchronous API on top of `libevent`_
event loop::
from gevent.wsgi import WSGIServer
from yourapplication import app
http_server = WSGIServer(('', 5000), app)
http_server.serve_forever()
.. _Gevent: http://www.gevent.org/
.. _greenlet: http://codespeak.net/py/0.9.2/greenlet.html
.. _libevent: http://monkey.org/~provos/libevent/
Gunicorn
--------
`Gunicorn`_ 'Green Unicorn' is a WSGI HTTP Server for UNIX. It's a pre-fork
worker model ported from Ruby's Unicorn project. It supports both `eventlet`_
and `greenlet`_. Running a Flask application on this server is quite simple::
gunicorn myproject:app
`Gunicorn`_ provides many command-line options -- see ``gunicorn -h``.
For example, to run a Flask application with 4 worker processes (``-w
4``) binding to localhost port 4000 (``-b 127.0.0.1:4000``)::
gunicorn -w 4 -b 127.0.0.1:4000 myproject:app
.. _Gunicorn: http://gunicorn.org/
.. _eventlet: http://eventlet.net/
.. _greenlet: http://codespeak.net/py/0.9.2/greenlet.html
Proxy Setups
------------
If you deploy your application using one of these servers behind an HTTP
proxy you will need to rewrite a few headers in order for the
application to work. The two problematic values in the WSGI environment
usually are `REMOTE_ADDR` and `HTTP_HOST`. Werkzeug ships a fixer that
will solve some common setups, but you might want to write your own WSGI
middleware for specific setups.
The most common setup invokes the host being set from `X-Forwarded-Host`
and the remote address from `X-Forwarded-For`::
from werkzeug.contrib.fixers import ProxyFix
app.wsgi_app = ProxyFix(app.wsgi_app)
Please keep in mind that it is a security issue to use such a middleware
in a non-proxy setup because it will blindly trust the incoming
headers which might be forged by malicious clients.
If you want to rewrite the headers from another header, you might want to
use a fixer like this::
class CustomProxyFix(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
host = environ.get('HTTP_X_FHOST', '')
if host:
environ['HTTP_HOST'] = host
return self.app(environ, start_response)
app.wsgi_app = CustomProxyFix(app.wsgi_app)

View file

@ -0,0 +1,33 @@
Tell Flask it is Behind a Proxy
===============================
When using a reverse proxy, or many Python hosting platforms, the proxy
will intercept and forward all external requests to the local WSGI
server.
From the WSGI server and Flask application's perspectives, requests are
now coming from the HTTP server to the local address, rather than from
the remote address to the external server address.
HTTP servers should set ``X-Forwarded-`` headers to pass on the real
values to the application. The application can then be told to trust and
use those values by wrapping it with the
:doc:`werkzeug:middleware/proxy_fix` middleware provided by Werkzeug.
This middleware should only be used if the application is actually
behind a proxy, and should be configured with the number of proxies that
are chained in front of it. Not all proxies set all the headers. Since
incoming headers can be faked, you must set how many proxies are setting
each header so the middleware knows what to trust.
.. code-block:: python
from werkzeug.middleware.proxy_fix import ProxyFix
app.wsgi_app = ProxyFix(
app.wsgi_app, x_for=1, x_proto=1, x_host=1, x_prefix=1
)
Remember, only apply this middleware if you are behind a proxy, and set
the correct number of proxies that set each header. It can be a security
issue if you get this configuration wrong.

View file

@ -1,68 +1,143 @@
.. _deploying-uwsgi:
uWSGI
=====
uWSGI is a deployment option on servers like `nginx`_, `lighttpd`_, and
`cherokee`_; see :ref:`deploying-fastcgi` and
:ref:`deploying-other-servers` for other options. To use your WSGI
application with uWSGI protocol you will need a uWSGI server
first. uWSGI is both a protocol and an application server; the
application server can serve uWSGI, FastCGI, and HTTP protocols.
`uWSGI`_ is a fast, compiled server suite with extensive configuration
and capabilities beyond a basic server.
The most popular uWSGI server is `uwsgi`_, which we will use for this
guide. Make sure to have it installed to follow along.
* It can be very performant due to being a compiled program.
* It is complex to configure beyond the basic application, and has so
many options that it can be difficult for beginners to understand.
* It does not support Windows (but does run on WSL).
* It requires a compiler to install in some cases.
.. admonition:: Watch Out
This page outlines the basics of running uWSGI. Be sure to read its
documentation to understand what features are available.
Please make sure in advance that any ``app.run()`` calls you might
have in your application file are inside an ``if __name__ ==
'__main__':`` block or moved to a separate file. Just make sure it's
not called because this will always start a local WSGI server which
we do not want if we deploy that application to uWSGI.
.. _uWSGI: https://uwsgi-docs.readthedocs.io/en/latest/
Starting your app with uwsgi
----------------------------
`uwsgi` is designed to operate on WSGI callables found in python modules.
Installing
----------
Given a flask application in myapp.py, use the following command:
uWSGI has multiple ways to install it. The most straightforward is to
install the ``pyuwsgi`` package, which provides precompiled wheels for
common platforms. However, it does not provide SSL support, which can be
provided with a reverse proxy instead.
.. sourcecode:: text
Create a virtualenv, install your application, then install ``pyuwsgi``.
$ uwsgi -s /tmp/uwsgi.sock --module myapp --callable app
.. code-block:: text
Or, if you prefer:
$ cd hello-app
$ python -m venv .venv
$ . .venv/bin/activate
$ pip install . # install your application
$ pip install pyuwsgi
.. sourcecode:: text
If you have a compiler available, you can install the ``uwsgi`` package
instead. Or install the ``pyuwsgi`` package from sdist instead of wheel.
Either method will include SSL support.
$ uwsgi -s /tmp/uwsgi.sock -w myapp:app
.. code-block:: text
Configuring nginx
$ pip install uwsgi
# or
$ pip install --no-binary pyuwsgi pyuwsgi
Running
-------
The most basic way to run uWSGI is to tell it to start an HTTP server
and import your application.
.. code-block:: text
$ uwsgi --http 127.0.0.1:8000 --master -p 4 -w hello:app
*** Starting uWSGI 2.0.20 (64bit) on [x] ***
*** Operational MODE: preforking ***
mounting hello:app on /
spawned uWSGI master process (pid: x)
spawned uWSGI worker 1 (pid: x, cores: 1)
spawned uWSGI worker 2 (pid: x, cores: 1)
spawned uWSGI worker 3 (pid: x, cores: 1)
spawned uWSGI worker 4 (pid: x, cores: 1)
spawned uWSGI http 1 (pid: x)
If you're using the app factory pattern, you'll need to create a small
Python file to create the app, then point uWSGI at that.
.. code-block:: python
:caption: ``wsgi.py``
from hello import create_app
app = create_app()
.. code-block:: text
$ uwsgi --http 127.0.0.1:8000 --master -p 4 -w wsgi:app
The ``--http`` option starts an HTTP server at 127.0.0.1 port 8000. The
``--master`` option specifies the standard worker manager. The ``-p``
option starts 4 worker processes; a starting value could be ``CPU * 2``.
The ``-w`` option tells uWSGI how to import your application
Binding Externally
------------------
uWSGI should not be run as root with the configuration shown in this doc
because it would cause your application code to run as root, which is
not secure. However, this means it will not be possible to bind to port
80 or 443. Instead, a reverse proxy such as :doc:`nginx` or
:doc:`apache-httpd` should be used in front of uWSGI. It is possible to
run uWSGI as root securely, but that is beyond the scope of this doc.
uWSGI has optimized integration with `Nginx uWSGI`_ and
`Apache mod_proxy_uwsgi`_, and possibly other servers, instead of using
a standard HTTP proxy. That configuration is beyond the scope of this
doc, see the links for more information.
.. _Nginx uWSGI: https://uwsgi-docs.readthedocs.io/en/latest/Nginx.html
.. _Apache mod_proxy_uwsgi: https://uwsgi-docs.readthedocs.io/en/latest/Apache.html#mod-proxy-uwsgi
You can bind to all external IPs on a non-privileged port using the
``--http 0.0.0.0:8000`` option. Don't do this when using a reverse proxy
setup, otherwise it will be possible to bypass the proxy.
.. code-block:: text
$ uwsgi --http 0.0.0.0:8000 --master -p 4 -w wsgi:app
``0.0.0.0`` is not a valid address to navigate to, you'd use a specific
IP address in your browser.
Async with gevent
-----------------
A basic flask uWSGI configuration for nginx looks like this::
The default sync worker is appropriate for most use cases. If you need numerous,
long running, concurrent connections, uWSGI provides an asynchronous worker
using `gevent`_. This is not the same as Python's ``async/await``, or the ASGI
server spec. See :doc:`/gevent` for more information about enabling it in your
application.
location = /yourapplication { rewrite ^ /yourapplication/; }
location /yourapplication { try_files $uri @yourapplication; }
location @yourapplication {
include uwsgi_params;
uwsgi_param SCRIPT_NAME /yourapplication;
uwsgi_modifier1 30;
uwsgi_pass unix:/tmp/uwsgi.sock;
}
.. _gevent: https://www.gevent.org/
This configuration binds the application to `/yourapplication`. If you want
to have it in the URL root it's a bit simpler because you don't have to tell
it the WSGI `SCRIPT_NAME` or set the uwsgi modifier to make use of it::
When using gevent, greenlet>=1.0 is required. When using PyPy, PyPy>=7.3.7 is
required.
location / { try_files $uri @yourapplication; }
location @yourapplication {
include uwsgi_params;
uwsgi_pass unix:/tmp/uwsgi.sock;
}
.. code-block:: text
.. _nginx: http://nginx.org/
.. _lighttpd: http://www.lighttpd.net/
.. _cherokee: http://www.cherokee-project.com/
.. _uwsgi: http://projects.unbit.it/uwsgi/
$ uwsgi --http 127.0.0.1:8000 --master --gevent 100 -w wsgi:app
*** Starting uWSGI 2.0.20 (64bit) on [x] ***
*** Operational MODE: async ***
mounting hello:app on /
spawned uWSGI master process (pid: x)
spawned uWSGI worker 1 (pid: x, cores: 100)
spawned uWSGI http 1 (pid: x)
*** running gevent loop engine [addr:x] ***

View file

@ -0,0 +1,75 @@
Waitress
========
`Waitress`_ is a pure Python WSGI server.
* It is easy to configure.
* It supports Windows directly.
* It is easy to install as it does not require additional dependencies
or compilation.
* It does not support streaming requests, full request data is always
buffered.
* It uses a single process with multiple thread workers.
This page outlines the basics of running Waitress. Be sure to read its
documentation and ``waitress-serve --help`` to understand what features
are available.
.. _Waitress: https://docs.pylonsproject.org/projects/waitress/
Installing
----------
Create a virtualenv, install your application, then install
``waitress``.
.. code-block:: text
$ cd hello-app
$ python -m venv .venv
$ . .venv/bin/activate
$ pip install . # install your application
$ pip install waitress
Running
-------
The only required argument to ``waitress-serve`` tells it how to load
your Flask application. The syntax is ``{module}:{app}``. ``module`` is
the dotted import name to the module with your application. ``app`` is
the variable with the application. If you're using the app factory
pattern, use ``--call {module}:{factory}`` instead.
.. code-block:: text
# equivalent to 'from hello import app'
$ waitress-serve --host 127.0.0.1 hello:app
# equivalent to 'from hello import create_app; create_app()'
$ waitress-serve --host 127.0.0.1 --call hello:create_app
Serving on http://127.0.0.1:8080
The ``--host`` option binds the server to local ``127.0.0.1`` only.
Logs for each request aren't shown, only errors are shown. Logging can
be configured through the Python interface instead of the command line.
Binding Externally
------------------
Waitress should not be run as root because it would cause your
application code to run as root, which is not secure. However, this
means it will not be possible to bind to port 80 or 443. Instead, a
reverse proxy such as :doc:`nginx` or :doc:`apache-httpd` should be used
in front of Waitress.
You can bind to all external IPs on a non-privileged port by not
specifying the ``--host`` option. Don't do this when using a reverse
proxy setup, otherwise it will be possible to bypass the proxy.
``0.0.0.0`` is not a valid address to navigate to, you'd use a specific
IP address in your browser.

View file

@ -1,5 +1,3 @@
.. _design:
Design Decisions in Flask
=========================
@ -41,14 +39,14 @@ the time. There are ways to fake multiple applications with a single
application object, like maintaining a stack of applications, but this
causes some problems I won't outline here in detail. Now the question is:
when does a microframework need more than one application at the same
time? A good example for this is unittesting. When you want to test
time? A good example for this is unit testing. When you want to test
something it can be very helpful to create a minimal application to test
specific behavior. When the application object is deleted everything it
allocated will be freed again.
Another thing that becomes possible when you have an explicit object lying
around in your code is that you can subclass the base class
(:class:`~flask.Flask`) to alter specific behaviour. This would not be
(:class:`~flask.Flask`) to alter specific behavior. This would not be
possible without hacks if the object were created ahead of time for you
based on a class that is not exposed to you.
@ -76,13 +74,13 @@ there are better ways to do that so that you do not lose the reference
to the application object :meth:`~flask.Flask.wsgi_app`).
Furthermore this design makes it possible to use a factory function to
create the application which is very helpful for unittesting and similar
things (:ref:`app-factories`).
create the application which is very helpful for unit testing and similar
things (:doc:`/patterns/appfactories`).
The Routing System
------------------
Flask uses the Werkzeug routing system which has was designed to
Flask uses the Werkzeug routing system which was designed to
automatically order routes by complexity. This means that you can declare
routes in arbitrary order and they will still work as expected. This is a
requirement if you want to properly implement decorator based routing
@ -90,18 +88,18 @@ since decorators could be fired in undefined order when the application is
split into multiple modules.
Another design decision with the Werkzeug routing system is that routes
in Werkzeug try to ensure that there is that URLs are unique. Werkzeug
will go quite far with that in that it will automatically redirect to a
canonical URL if a route is ambiguous.
in Werkzeug try to ensure that URLs are unique. Werkzeug will go quite far
with that in that it will automatically redirect to a canonical URL if a route
is ambiguous.
One Template Engine
-------------------
Flask decides on one template engine: Jinja2. Why doesn't Flask have a
Flask decides on one template engine: Jinja. Why doesn't Flask have a
pluggable template engine interface? You can obviously use a different
template engine, but Flask will still configure Jinja2 for you. While
that limitation that Jinja2 is *always* configured will probably go away,
template engine, but Flask will still configure Jinja for you. While
that limitation that Jinja is *always* configured will probably go away,
the decision to bundle one template engine and use that will not.
Template engines are like programming languages and each of those engines
@ -109,19 +107,19 @@ has a certain understanding about how things work. On the surface they
all work the same: you tell the engine to evaluate a template with a set
of variables and take the return value as string.
But that's about where similarities end. Jinja2 for example has an
extensive filter system, a certain way to do template inheritance, support
for reusable blocks (macros) that can be used from inside templates and
also from Python code, uses Unicode for all operations, supports
iterative template rendering, configurable syntax and more. On the other
hand an engine like Genshi is based on XML stream evaluation, template
inheritance by taking the availability of XPath into account and more.
Mako on the other hand treats templates similar to Python modules.
But that's about where similarities end. Jinja for example has an
extensive filter system, a certain way to do template inheritance,
support for reusable blocks (macros) that can be used from inside
templates and also from Python code, supports iterative template
rendering, configurable syntax and more. On the other hand an engine
like Genshi is based on XML stream evaluation, template inheritance by
taking the availability of XPath into account and more. Mako on the
other hand treats templates similar to Python modules.
When it comes to connecting a template engine with an application or
framework there is more than just rendering templates. For instance,
Flask uses Jinja2's extensive autoescaping support. Also it provides
ways to access macros from Jinja2 templates.
Flask uses Jinja's extensive autoescaping support. Also it provides
ways to access macros from Jinja templates.
A template abstraction layer that would not take the unique features of
the template engines away is a science on its own and a too large
@ -132,11 +130,27 @@ being present. You can easily use your own templating language, but an
extension could still depend on Jinja itself.
Micro with Dependencies
What does "micro" mean?
-----------------------
“Micro” does not mean that your whole web application has to fit into a single
Python file (although it certainly can), nor does it mean that Flask is lacking
in functionality. The "micro" in microframework means Flask aims to keep the
core simple but extensible. Flask won't make many decisions for you, such as
what database to use. Those decisions that it does make, such as what
templating engine to use, are easy to change. Everything else is up to you, so
that Flask can be everything you need and nothing you don't.
By default, Flask does not include a database abstraction layer, form
validation or anything else where different libraries already exist that can
handle that. Instead, Flask supports extensions to add such functionality to
your application as if it was implemented in Flask itself. Numerous extensions
provide database integration, form validation, upload handling, various open
authentication technologies, and more. Flask may be "micro", but it's ready for
production use on a variety of needs.
Why does Flask call itself a microframework and yet it depends on two
libraries (namely Werkzeug and Jinja2). Why shouldn't it? If we look
libraries (namely Werkzeug and Jinja). Why shouldn't it? If we look
over to the Ruby side of web development there we have a protocol very
similar to WSGI. Just that it's called Rack there, but besides that it
looks very much like a WSGI rendition for Ruby. But nearly all
@ -155,22 +169,39 @@ infrastructure, packages with dependencies are no longer an issue and
there are very few reasons against having libraries that depend on others.
Thread Locals
-------------
Context Locals
--------------
Flask uses thread local objects (context local objects in fact, they
support greenlet contexts as well) for request, session and an extra
object you can put your own things on (:data:`~flask.g`). Why is that and
isn't that a bad idea?
Flask uses special context locals and proxies to provide access to the
current app and request data to any code running during a request, CLI command,
etc. Context locals are specific to the worker handling the activity, such as a
thread, process, coroutine, or greenlet.
Yes it is usually not such a bright idea to use thread locals. They cause
troubles for servers that are not based on the concept of threads and make
large applications harder to maintain. However Flask is just not designed
for large applications or asynchronous servers. Flask wants to make it
quick and easy to write a traditional web application.
The context and proxies help solve two development issues: circular imports, and
passing around global data. :data:`.current_app` can be used to access the
application object without needing to import the app object directly, avoiding
circular import issues. :data:`.request`, :data:`.session`, and :data:`.g` can
be imported to access the current data for the request, rather than needing to
pass them as arguments through every single function in your project.
Also see the :ref:`becomingbig` section of the documentation for some
inspiration for larger applications based on Flask.
Async/await and ASGI support
----------------------------
Flask supports ``async`` coroutines for view functions by executing the
coroutine on a separate thread instead of using an event loop on the
main thread as an async-first (ASGI) framework would. This is necessary
for Flask to remain backwards compatible with extensions and code built
before ``async`` was introduced into Python. This compromise introduces
a performance cost compared with the ASGI frameworks, due to the
overhead of the threads.
Due to how tied to WSGI Flask's code is, it's not clear if it's possible
to make the ``Flask`` class support ASGI and WSGI at the same time. Work
is currently being done in Werkzeug to work with ASGI, which may
eventually enable support in Flask as well.
See :doc:`/async-await` for more discussion.
What Flask is, What Flask is Not
@ -178,7 +209,7 @@ What Flask is, What Flask is Not
Flask will never have a database layer. It will not have a form library
or anything else in that direction. Flask itself just bridges to Werkzeug
to implement a proper WSGI application and to Jinja2 to handle templating.
to implement a proper WSGI application and to Jinja to handle templating.
It also binds to a few common standard library packages such as logging.
Everything else is up for extensions.
@ -187,5 +218,12 @@ requirements and Flask could not meet those if it would force any of this
into the core. The majority of web applications will need a template
engine in some sort. However not every application needs a SQL database.
As your codebase grows, you are free to make the design decisions appropriate
for your project. Flask will continue to provide a very simple glue layer to
the best that Python has to offer. You can implement advanced patterns in
SQLAlchemy or another database tool, introduce non-relational data persistence
as appropriate, and take advantage of framework-agnostic tools built for WSGI,
the Python web interface.
The idea of Flask is to build a good foundation for all applications.
Everything else is up to you or extensions.

View file

@ -1,237 +1,523 @@
.. _application-errors:
Handling Application Errors
===========================
.. versionadded:: 0.3
Applications fail, servers fail. Sooner or later you will see an exception
in production. Even if your code is 100% correct, you will still see
exceptions from time to time. Why? Because everything else involved will
fail. Here some situations where perfectly fine code can lead to server
Applications fail, servers fail. Sooner or later you will see an exception
in production. Even if your code is 100% correct, you will still see
exceptions from time to time. Why? Because everything else involved will
fail. Here are some situations where perfectly fine code can lead to server
errors:
- the client terminated the request early and the application was still
reading from the incoming data.
- the database server was overloaded and could not handle the query.
reading from the incoming data
- the database server was overloaded and could not handle the query
- a filesystem is full
- a harddrive crashed
- a backend server overloaded
- a programming error in a library you are using
- network connection of the server to another system failed.
- network connection of the server to another system failed
And that's just a small sample of issues you could be facing. So how do we
deal with that sort of problem? By default if your application runs in
production mode, Flask will display a very simple page for you and log the
exception to the :attr:`~flask.Flask.logger`.
And that's just a small sample of issues you could be facing. So how do we
deal with that sort of problem? By default if your application runs in
production mode, and an exception is raised Flask will display a very simple
page for you and log the exception to the :attr:`~flask.Flask.logger`.
But there is more you can do, and we will cover some better setups to deal
with errors.
Error Mails
-----------
If the application runs in production mode (which it will do on your
server) you won't see any log messages by default. Why is that? Flask
tries to be a zero-configuration framework. Where should it drop the logs
for you if there is no configuration? Guessing is not a good idea because
chances are, the place it guessed is not the place where the user has
permission to create a logfile. Also, for most small applications nobody
will look at the logs anyways.
In fact, I promise you right now that if you configure a logfile for the
application errors you will never look at it except for debugging an issue
when a user reported it for you. What you want instead is a mail the
second the exception happened. Then you get an alert and you can do
something about it.
Flask uses the Python builtin logging system, and it can actually send
you mails for errors which is probably what you want. Here is how you can
configure the Flask logger to send you mails for exceptions::
ADMINS = ['yourname@example.com']
if not app.debug:
import logging
from logging.handlers import SMTPHandler
mail_handler = SMTPHandler('127.0.0.1',
'server-error@example.com',
ADMINS, 'YourApplication Failed')
mail_handler.setLevel(logging.ERROR)
app.logger.addHandler(mail_handler)
So what just happened? We created a new
:class:`~logging.handlers.SMTPHandler` that will send mails with the mail
server listening on ``127.0.0.1`` to all the `ADMINS` from the address
*server-error@example.com* with the subject "YourApplication Failed". If
your mail server requires credentials, these can also be provided. For
that check out the documentation for the
:class:`~logging.handlers.SMTPHandler`.
We also tell the handler to only send errors and more critical messages.
Because we certainly don't want to get a mail for warnings or other
useless logs that might happen during request handling.
Before you run that in production, please also look at :ref:`logformat` to
put more information into that error mail. That will save you from a lot
of frustration.
with errors including custom exceptions and 3rd party tools.
Logging to a File
-----------------
.. _error-logging-tools:
Even if you get mails, you probably also want to log warnings. It's a
good idea to keep as much information around that might be required to
debug a problem. Please note that Flask itself will not issue any
warnings in the core system, so it's your responsibility to warn in the
code if something seems odd.
Error Logging Tools
-------------------
There are a couple of handlers provided by the logging system out of the
box but not all of them are useful for basic error logging. The most
interesting are probably the following:
Sending error mails, even if just for critical ones, can become
overwhelming if enough users are hitting the error and log files are
typically never looked at. This is why we recommend using `Sentry
<https://sentry.io/>`_ for dealing with application errors. It's
available as a source-available project `on GitHub
<https://github.com/getsentry/sentry>`_ and is also available as a `hosted version
<https://sentry.io/signup/>`_ which you can try for free. Sentry
aggregates duplicate errors, captures the full stack trace and local
variables for debugging, and sends you mails based on new errors or
frequency thresholds.
- :class:`~logging.FileHandler` - logs messages to a file on the
filesystem.
- :class:`~logging.handlers.RotatingFileHandler` - logs messages to a file
on the filesystem and will rotate after a certain number of messages.
- :class:`~logging.handlers.NTEventLogHandler` - will log to the system
event log of a Windows system. If you are deploying on a Windows box,
this is what you want to use.
- :class:`~logging.handlers.SysLogHandler` - sends logs to a UNIX
syslog.
To use Sentry you need to install the ``sentry-sdk`` client with extra
``flask`` dependencies.
Once you picked your log handler, do like you did with the SMTP handler
above, just make sure to use a lower setting (I would recommend
`WARNING`)::
.. code-block:: text
if not app.debug:
import logging
from themodule import TheHandlerYouWant
file_handler = TheHandlerYouWant(...)
file_handler.setLevel(logging.WARNING)
app.logger.addHandler(file_handler)
$ pip install sentry-sdk[flask]
.. _logformat:
And then add this to your Flask app:
Controlling the Log Format
--------------------------
.. code-block:: python
By default a handler will only write the message string into a file or
send you that message as mail. A log record stores more information,
and it makes a lot of sense to configure your logger to also contain that
information so that you have a better idea of why that error happened, and
more importantly, where it did.
import sentry_sdk
from sentry_sdk.integrations.flask import FlaskIntegration
A formatter can be instantiated with a format string. Note that
tracebacks are appended to the log entry automatically. You don't have to
do that in the log formatter format string.
sentry_sdk.init('YOUR_DSN_HERE', integrations=[FlaskIntegration()])
Here some example setups:
The ``YOUR_DSN_HERE`` value needs to be replaced with the DSN value you
get from your Sentry installation.
Email
`````
After installation, failures leading to an Internal Server Error
are automatically reported to Sentry and from there you can
receive error notifications.
::
See also:
from logging import Formatter
mail_handler.setFormatter(Formatter('''
Message type: %(levelname)s
Location: %(pathname)s:%(lineno)d
Module: %(module)s
Function: %(funcName)s
Time: %(asctime)s
Message:
%(message)s
'''))
File logging
````````````
::
from logging import Formatter
file_handler.setFormatter(Formatter(
'%(asctime)s %(levelname)s: %(message)s '
'[in %(pathname)s:%(lineno)d]'
))
- Sentry also supports catching errors from a worker queue
(RQ, Celery, etc.) in a similar fashion. See the `Python SDK docs
<https://docs.sentry.io/platforms/python/>`__ for more information.
- `Flask-specific documentation <https://docs.sentry.io/platforms/python/guides/flask/>`__
Complex Log Formatting
``````````````````````
Error Handlers
--------------
Here is a list of useful formatting variables for the format string. Note
that this list is not complete, consult the official documentation of the
:mod:`logging` package for a full list.
When an error occurs in Flask, an appropriate `HTTP status code
<https://developer.mozilla.org/en-US/docs/Web/HTTP/Status>`__ will be
returned. 400-499 indicate errors with the client's request data, or
about the data requested. 500-599 indicate errors with the server or
application itself.
.. tabularcolumns:: |p{3cm}|p{12cm}|
You might want to show custom error pages to the user when an error occurs.
This can be done by registering error handlers.
+------------------+----------------------------------------------------+
| Format | Description |
+==================+====================================================+
| ``%(levelname)s``| Text logging level for the message |
| | (``'DEBUG'``, ``'INFO'``, ``'WARNING'``, |
| | ``'ERROR'``, ``'CRITICAL'``). |
+------------------+----------------------------------------------------+
| ``%(pathname)s`` | Full pathname of the source file where the |
| | logging call was issued (if available). |
+------------------+----------------------------------------------------+
| ``%(filename)s`` | Filename portion of pathname. |
+------------------+----------------------------------------------------+
| ``%(module)s`` | Module (name portion of filename). |
+------------------+----------------------------------------------------+
| ``%(funcName)s`` | Name of function containing the logging call. |
+------------------+----------------------------------------------------+
| ``%(lineno)d`` | Source line number where the logging call was |
| | issued (if available). |
+------------------+----------------------------------------------------+
| ``%(asctime)s`` | Human-readable time when the LogRecord` was |
| | created. By default this is of the form |
| | ``"2003-07-08 16:49:45,896"`` (the numbers after |
| | the comma are millisecond portion of the time). |
| | This can be changed by subclassing the formatter |
| | and overriding the |
| | :meth:`~logging.Formatter.formatTime` method. |
+------------------+----------------------------------------------------+
| ``%(message)s`` | The logged message, computed as ``msg % args`` |
+------------------+----------------------------------------------------+
An error handler is a function that returns a response when a type of error is
raised, similar to how a view is a function that returns a response when a
request URL is matched. It is passed the instance of the error being handled,
which is most likely a :exc:`~werkzeug.exceptions.HTTPException`.
If you want to further customize the formatting, you can subclass the
formatter. The formatter has three interesting methods:
:meth:`~logging.Formatter.format`:
handles the actual formatting. It is passed a
:class:`~logging.LogRecord` object and has to return the formatted
string.
:meth:`~logging.Formatter.formatTime`:
called for `asctime` formatting. If you want a different time format
you can override this method.
:meth:`~logging.Formatter.formatException`
called for exception formatting. It is passed an :attr:`~sys.exc_info`
tuple and has to return a string. The default is usually fine, you
don't have to override it.
For more information, head over to the official documentation.
The status code of the response will not be set to the handler's code. Make
sure to provide the appropriate HTTP status code when returning a response from
a handler.
Other Libraries
---------------
Registering
```````````
So far we only configured the logger your application created itself.
Other libraries might log themselves as well. For example, SQLAlchemy uses
logging heavily in its core. While there is a method to configure all
loggers at once in the :mod:`logging` package, I would not recommend using
it. There might be a situation in which you want to have multiple
separate applications running side by side in the same Python interpreter
and then it becomes impossible to have different logging setups for those.
Register handlers by decorating a function with
:meth:`~flask.Flask.errorhandler`. Or use
:meth:`~flask.Flask.register_error_handler` to register the function later.
Remember to set the error code when returning the response.
Instead, I would recommend figuring out which loggers you are interested
in, getting the loggers with the :func:`~logging.getLogger` function and
iterating over them to attach handlers::
.. code-block:: python
from logging import getLogger
loggers = [app.logger, getLogger('sqlalchemy'),
getLogger('otherlibrary')]
for logger in loggers:
logger.addHandler(mail_handler)
logger.addHandler(file_handler)
@app.errorhandler(werkzeug.exceptions.BadRequest)
def handle_bad_request(e):
return 'bad request!', 400
# or, without the decorator
app.register_error_handler(400, handle_bad_request)
:exc:`werkzeug.exceptions.HTTPException` subclasses like
:exc:`~werkzeug.exceptions.BadRequest` and their HTTP codes are interchangeable
when registering handlers. (``BadRequest.code == 400``)
Non-standard HTTP codes cannot be registered by code because they are not known
by Werkzeug. Instead, define a subclass of
:class:`~werkzeug.exceptions.HTTPException` with the appropriate code and
register and raise that exception class.
.. code-block:: python
class InsufficientStorage(werkzeug.exceptions.HTTPException):
code = 507
description = 'Not enough storage space.'
app.register_error_handler(InsufficientStorage, handle_507)
raise InsufficientStorage()
Handlers can be registered for any exception class, not just
:exc:`~werkzeug.exceptions.HTTPException` subclasses or HTTP status
codes. Handlers can be registered for a specific class, or for all subclasses
of a parent class.
Handling
````````
When building a Flask application you *will* run into exceptions. If some part
of your code breaks while handling a request (and you have no error handlers
registered), a "500 Internal Server Error"
(:exc:`~werkzeug.exceptions.InternalServerError`) will be returned by default.
Similarly, "404 Not Found"
(:exc:`~werkzeug.exceptions.NotFound`) error will occur if a request is sent to an unregistered route.
If a route receives an unallowed request method, a "405 Method Not Allowed"
(:exc:`~werkzeug.exceptions.MethodNotAllowed`) will be raised. These are all
subclasses of :class:`~werkzeug.exceptions.HTTPException` and are provided by
default in Flask.
Flask gives you the ability to raise any HTTP exception registered by
Werkzeug. However, the default HTTP exceptions return simple exception
pages. You might want to show custom error pages to the user when an error occurs.
This can be done by registering error handlers.
When Flask catches an exception while handling a request, it is first looked up by code.
If no handler is registered for the code, Flask looks up the error by its class hierarchy; the most specific handler is chosen.
If no handler is registered, :class:`~werkzeug.exceptions.HTTPException` subclasses show a
generic message about their code, while other exceptions are converted to a
generic "500 Internal Server Error".
For example, if an instance of :exc:`ConnectionRefusedError` is raised,
and a handler is registered for :exc:`ConnectionError` and
:exc:`ConnectionRefusedError`, the more specific :exc:`ConnectionRefusedError`
handler is called with the exception instance to generate the response.
Handlers registered on the blueprint take precedence over those registered
globally on the application, assuming a blueprint is handling the request that
raises the exception. However, the blueprint cannot handle 404 routing errors
because the 404 occurs at the routing level before the blueprint can be
determined.
Generic Exception Handlers
``````````````````````````
It is possible to register error handlers for very generic base classes
such as ``HTTPException`` or even ``Exception``. However, be aware that
these will catch more than you might expect.
For example, an error handler for ``HTTPException`` might be useful for turning
the default HTML errors pages into JSON. However, this
handler will trigger for things you don't cause directly, such as 404
and 405 errors during routing. Be sure to craft your handler carefully
so you don't lose information about the HTTP error.
.. code-block:: python
from flask import json
from werkzeug.exceptions import HTTPException
@app.errorhandler(HTTPException)
def handle_exception(e):
"""Return JSON instead of HTML for HTTP errors."""
# start with the correct headers and status code from the error
response = e.get_response()
# replace the body with JSON
response.data = json.dumps({
"code": e.code,
"name": e.name,
"description": e.description,
})
response.content_type = "application/json"
return response
An error handler for ``Exception`` might seem useful for changing how
all errors, even unhandled ones, are presented to the user. However,
this is similar to doing ``except Exception:`` in Python, it will
capture *all* otherwise unhandled errors, including all HTTP status
codes.
In most cases it will be safer to register handlers for more
specific exceptions. Since ``HTTPException`` instances are valid WSGI
responses, you could also pass them through directly.
.. code-block:: python
from werkzeug.exceptions import HTTPException
@app.errorhandler(Exception)
def handle_exception(e):
# pass through HTTP errors
if isinstance(e, HTTPException):
return e
# now you're handling non-HTTP exceptions only
return render_template("500_generic.html", e=e), 500
Error handlers still respect the exception class hierarchy. If you
register handlers for both ``HTTPException`` and ``Exception``, the
``Exception`` handler will not handle ``HTTPException`` subclasses
because the ``HTTPException`` handler is more specific.
Unhandled Exceptions
````````````````````
When there is no error handler registered for an exception, a 500
Internal Server Error will be returned instead. See
:meth:`flask.Flask.handle_exception` for information about this
behavior.
If there is an error handler registered for ``InternalServerError``,
this will be invoked. As of Flask 1.1.0, this error handler will always
be passed an instance of ``InternalServerError``, not the original
unhandled error.
The original error is available as ``e.original_exception``.
An error handler for "500 Internal Server Error" will be passed uncaught
exceptions in addition to explicit 500 errors. In debug mode, a handler
for "500 Internal Server Error" will not be used. Instead, the
interactive debugger will be shown.
Custom Error Pages
------------------
Sometimes when building a Flask application, you might want to raise a
:exc:`~werkzeug.exceptions.HTTPException` to signal to the user that
something is wrong with the request. Fortunately, Flask comes with a handy
:func:`~flask.abort` function that aborts a request with a HTTP error from
werkzeug as desired. It will also provide a plain black and white error page
for you with a basic description, but nothing fancy.
Depending on the error code it is less or more likely for the user to
actually see such an error.
Consider the code below, we might have a user profile route, and if the user
fails to pass a username we can raise a "400 Bad Request". If the user passes a
username and we can't find it, we raise a "404 Not Found".
.. code-block:: python
from flask import abort, render_template, request
# a username needs to be supplied in the query args
# a successful request would be like /profile?username=jack
@app.route("/profile")
def user_profile():
username = request.arg.get("username")
# if a username isn't supplied in the request, return a 400 bad request
if username is None:
abort(400)
user = get_user(username=username)
# if a user can't be found by their username, return 404 not found
if user is None:
abort(404)
return render_template("profile.html", user=user)
Here is another example implementation for a "404 Page Not Found" exception:
.. code-block:: python
from flask import render_template
@app.errorhandler(404)
def page_not_found(e):
# note that we set the 404 status explicitly
return render_template('404.html'), 404
When using :doc:`/patterns/appfactories`:
.. code-block:: python
from flask import Flask, render_template
def page_not_found(e):
return render_template('404.html'), 404
def create_app(config_filename):
app = Flask(__name__)
app.register_error_handler(404, page_not_found)
return app
An example template might be this:
.. code-block:: html+jinja
{% extends "layout.html" %}
{% block title %}Page Not Found{% endblock %}
{% block body %}
<h1>Page Not Found</h1>
<p>What you were looking for is just not there.
<p><a href="{{ url_for('index') }}">go somewhere nice</a>
{% endblock %}
Further Examples
````````````````
The above examples wouldn't actually be an improvement on the default
exception pages. We can create a custom 500.html template like this:
.. code-block:: html+jinja
{% extends "layout.html" %}
{% block title %}Internal Server Error{% endblock %}
{% block body %}
<h1>Internal Server Error</h1>
<p>Oops... we seem to have made a mistake, sorry!</p>
<p><a href="{{ url_for('index') }}">Go somewhere nice instead</a>
{% endblock %}
It can be implemented by rendering the template on "500 Internal Server Error":
.. code-block:: python
from flask import render_template
@app.errorhandler(500)
def internal_server_error(e):
# note that we set the 500 status explicitly
return render_template('500.html'), 500
When using :doc:`/patterns/appfactories`:
.. code-block:: python
from flask import Flask, render_template
def internal_server_error(e):
return render_template('500.html'), 500
def create_app():
app = Flask(__name__)
app.register_error_handler(500, internal_server_error)
return app
When using :doc:`/blueprints`:
.. code-block:: python
from flask import Blueprint
blog = Blueprint('blog', __name__)
# as a decorator
@blog.errorhandler(500)
def internal_server_error(e):
return render_template('500.html'), 500
# or with register_error_handler
blog.register_error_handler(500, internal_server_error)
Blueprint Error Handlers
------------------------
In :doc:`/blueprints`, most error handlers will work as expected.
However, there is a caveat concerning handlers for 404 and 405
exceptions. These error handlers are only invoked from an appropriate
``raise`` statement or a call to ``abort`` in another of the blueprint's
view functions; they are not invoked by, e.g., an invalid URL access.
This is because the blueprint does not "own" a certain URL space, so
the application instance has no way of knowing which blueprint error
handler it should run if given an invalid URL. If you would like to
execute different handling strategies for these errors based on URL
prefixes, they may be defined at the application level using the
``request`` proxy object.
.. code-block:: python
from flask import jsonify, render_template
# at the application level
# not the blueprint level
@app.errorhandler(404)
def page_not_found(e):
# if a request is in our blog URL space
if request.path.startswith('/blog/'):
# we return a custom blog 404 page
return render_template("blog/404.html"), 404
else:
# otherwise we return our generic site-wide 404 page
return render_template("404.html"), 404
@app.errorhandler(405)
def method_not_allowed(e):
# if a request has the wrong method to our API
if request.path.startswith('/api/'):
# we return a json saying so
return jsonify(message="Method Not Allowed"), 405
else:
# otherwise we return a generic site-wide 405 page
return render_template("405.html"), 405
Returning API Errors as JSON
----------------------------
When building APIs in Flask, some developers realise that the built-in
exceptions are not expressive enough for APIs and that the content type of
:mimetype:`text/html` they are emitting is not very useful for API consumers.
Using the same techniques as above and :func:`~flask.json.jsonify` we can return JSON
responses to API errors. :func:`~flask.abort` is called
with a ``description`` parameter. The error handler will
use that as the JSON error message, and set the status code to 404.
.. code-block:: python
from flask import abort, jsonify
@app.errorhandler(404)
def resource_not_found(e):
return jsonify(error=str(e)), 404
@app.route("/cheese")
def get_one_cheese():
resource = get_resource()
if resource is None:
abort(404, description="Resource not found")
return jsonify(resource)
We can also create custom exception classes. For instance, we can
introduce a new custom exception for an API that can take a proper human readable message,
a status code for the error and some optional payload to give more context
for the error.
This is a simple example:
.. code-block:: python
from flask import jsonify, request
class InvalidAPIUsage(Exception):
status_code = 400
def __init__(self, message, status_code=None, payload=None):
super().__init__()
self.message = message
if status_code is not None:
self.status_code = status_code
self.payload = payload
def to_dict(self):
rv = dict(self.payload or ())
rv['message'] = self.message
return rv
@app.errorhandler(InvalidAPIUsage)
def invalid_api_usage(e):
return jsonify(e.to_dict()), e.status_code
# an API app route for getting user information
# a correct request might be /api/user?user_id=420
@app.route("/api/user")
def user_api(user_id):
user_id = request.arg.get("user_id")
if not user_id:
raise InvalidAPIUsage("No user id provided!")
user = get_user(user_id=user_id)
if not user:
raise InvalidAPIUsage("No such user!", status_code=404)
return jsonify(user.to_dict())
A view can now raise that exception with an error message. Additionally
some extra payload can be provided as a dictionary through the `payload`
parameter.
Logging
-------
See :doc:`/logging` for information about how to log exceptions, such as
by emailing them to admins.
Debugging
---------
See :doc:`/debugging` for information about how to debug errors in
development and production.

View file

@ -1,387 +1,305 @@
Flask Extension Development
===========================
Flask, being a microframework, often requires some repetitive steps to get
a third party library working. Because very often these steps could be
abstracted to support multiple projects the `Flask Extension Registry`_
was created.
.. currentmodule:: flask
If you want to create your own Flask extension for something that does not
exist yet, this guide to extension development will help you get your
extension running in no time and to feel like users would expect your
extension to behave.
Extensions are extra packages that add functionality to a Flask
application. While `PyPI`_ contains many Flask extensions, you may not
find one that fits your need. If this is the case, you can create your
own, and publish it for others to use as well.
.. _Flask Extension Registry: http://flask.pocoo.org/extensions/
This guide will show how to create a Flask extension, and some of the
common patterns and requirements involved. Since extensions can do
anything, this guide won't be able to cover every possibility.
Anatomy of an Extension
-----------------------
The best ways to learn about extensions are to look at how other
extensions you use are written, and discuss with others. Discuss your
design ideas with others on our `Discord Chat`_ or
`GitHub Discussions`_.
Extensions are all located in a package called ``flask_something``
where "something" is the name of the library you want to bridge. So for
example if you plan to add support for a library named `simplexml` to
Flask, you would name your extension's package ``flask_simplexml``.
The name of the actual extension (the human readable name) however would
be something like "Flask-SimpleXML". Make sure to include the name
"Flask" somewhere in that name and that you check the capitalization.
This is how users can then register dependencies to your extension in
their `setup.py` files.
Flask sets up a redirect package called :data:`flask.ext` where users
should import the extensions from. If you for instance have a package
called ``flask_something`` users would import it as
``flask.ext.something``. This is done to transition from the old
namespace packages. See :ref:`ext-import-transition` for more details.
But how do extensions look like themselves? An extension has to ensure
that it works with multiple Flask application instances at once. This is
a requirement because many people will use patterns like the
:ref:`app-factories` pattern to create their application as needed to aid
unittests and to support multiple configurations. Because of that it is
crucial that your application supports that kind of behaviour.
Most importantly the extension must be shipped with a `setup.py` file and
registered on PyPI. Also the development checkout link should work so
that people can easily install the development version into their
virtualenv without having to download the library by hand.
Flask extensions must be licensed as BSD or MIT or a more liberal license
to be enlisted on the Flask Extension Registry. Keep in mind that the
Flask Extension Registry is a moderated place and libraries will be
reviewed upfront if they behave as required.
"Hello Flaskext!"
-----------------
So let's get started with creating such a Flask extension. The extension
we want to create here will provide very basic support for SQLite3.
First we create the following folder structure::
flask-sqlite3/
flask_sqlite3.py
LICENSE
README
Here's the contents of the most important files:
setup.py
````````
The next file that is absolutely required is the `setup.py` file which is
used to install your Flask extension. The following contents are
something you can work with::
"""
Flask-SQLite3
-------------
This is the description for that library
"""
from setuptools import setup
The best extensions share common patterns, so that anyone familiar with
using one extension won't feel completely lost with another. This can
only work if collaboration happens early.
setup(
name='Flask-SQLite3',
version='1.0',
url='http://example.com/flask-sqlite3/',
license='BSD',
author='Your Name',
author_email='your-email@example.com',
description='Very short description',
long_description=__doc__,
py_modules=['flask_sqlite3'],
# if you would be using a package instead use packages instead
# of py_modules:
# packages=['flask_sqlite3'],
zip_safe=False,
include_package_data=True,
platforms='any',
install_requires=[
'Flask'
],
classifiers=[
'Environment :: Web Environment',
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License',
'Operating System :: OS Independent',
'Programming Language :: Python',
'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
'Topic :: Software Development :: Libraries :: Python Modules'
]
)
Naming
------
That's a lot of code but you can really just copy/paste that from existing
extensions and adapt.
A Flask extension typically has ``flask`` in its name as a prefix or
suffix. If it wraps another library, it should include the library name
as well. This makes it easy to search for extensions, and makes their
purpose clearer.
flask_sqlite3.py
````````````````
A general Python packaging recommendation is that the install name from
the package index and the name used in ``import`` statements should be
related. The import name is lowercase, with words separated by
underscores (``_``). The install name is either lower case or title
case, with words separated by dashes (``-``). If it wraps another
library, prefer using the same case as that library's name.
Now this is where your extension code goes. But how exactly should such
an extension look like? What are the best practices? Continue reading
for some insight.
Here are some example install and import names:
Initializing Extensions
-----------------------
- ``Flask-Name`` imported as ``flask_name``
- ``flask-name-lower`` imported as ``flask_name_lower``
- ``Flask-ComboName`` imported as ``flask_comboname``
- ``Name-Flask`` imported as ``name_flask``
Many extensions will need some kind of initialization step. For example,
consider your application is currently connecting to SQLite like the
documentation suggests (:ref:`sqlite3`) you will need to provide a few
functions and before / after request handlers. So how does the extension
know the name of the application object?
Quite simple: you pass it to it.
The Extension Class and Initialization
--------------------------------------
There are two recommended ways for an extension to initialize:
All extensions will need some entry point that initializes the
extension with the application. The most common pattern is to create a
class that represents the extension's configuration and behavior, with
an ``init_app`` method to apply the extension instance to the given
application instance.
initialization functions:
If your extension is called `helloworld` you might have a function
called ``init_helloworld(app[, extra_args])`` that initializes the
extension for that application. It could attach before / after
handlers etc.
classes:
Classes work mostly like initialization functions but can later be
used to further change the behaviour. For an example look at how the
`OAuth extension`_ works: there is an `OAuth` object that provides
some helper functions like `OAuth.remote_app` to create a reference to
a remote application that uses OAuth.
What to use depends on what you have in mind. For the SQLite 3 extension
we will use the class based approach because it will provide users with a
manager object that handles opening and closing database connections.
The Extension Code
------------------
Here's the contents of the `flask_sqlite3.py` for copy/paste::
from __future__ import absolute_import
import sqlite3
from flask import _request_ctx_stack
class SQLite3(object):
def __init__(self, app):
self.app = app
self.app.config.setdefault('SQLITE3_DATABASE', ':memory:')
self.app.teardown_request(self.teardown_request)
self.app.before_request(self.before_request)
def connect(self):
return sqlite3.connect(self.app.config['SQLITE3_DATABASE'])
def before_request(self):
ctx = _request_ctx_stack.top
ctx.sqlite3_db = self.connect()
def teardown_request(self, exception):
ctx = _request_ctx_stack.top
ctx.sqlite3_db.close()
def get_db(self):
ctx = _request_ctx_stack.top
if ctx is not None:
return ctx.sqlite3_db
So here's what these lines of code do:
1. The ``__future__`` import is necessary to activate absolute imports.
Otherwise we could not call our module `sqlite3.py` and import the
top-level `sqlite3` module which actually implements the connection to
SQLite.
2. We create a class for our extension that requires a supplied `app` object,
sets a configuration for the database if it's not there
(:meth:`dict.setdefault`), and attaches `before_request` and
`teardown_request` handlers.
3. Next, we define a `connect` function that opens a database connection.
4. Then we set up the request handlers we bound to the app above. Note here
that we're attaching our database connection to the top request context via
`_request_ctx_stack.top`. Extensions should use the top context and not the
`g` object to store things like database connections.
5. Finally, we add a `get_db` function that simplifies access to the context's
database.
So why did we decide on a class based approach here? Because using our
extension looks something like this::
from flask import Flask
from flask_sqlite3 import SQLite3
app = Flask(__name__)
app.config.from_pyfile('the-config.cfg')
manager = SQLite3(app)
db = manager.get_db()
You can then use the database from views like this::
@app.route('/')
def show_all():
cur = db.cursor()
cur.execute(...)
Opening a database connection from outside a view function is simple.
>>> from yourapplication import db
>>> cur = db.cursor()
>>> cur.execute(...)
Adding an `init_app` Function
-----------------------------
In practice, you'll almost always want to permit users to initialize your
extension and provide an app object after the fact. This can help avoid
circular import problems when a user is breaking their app into multiple files.
Our extension could add an `init_app` function as follows::
class SQLite3(object):
.. code-block:: python
class HelloExtension:
def __init__(self, app=None):
if app is not None:
self.app = app
self.init_app(self.app)
else:
self.app = None
self.init_app(app)
def init_app(self, app):
self.app = app
self.app.config.setdefault('SQLITE3_DATABASE', ':memory:')
self.app.teardown_request(self.teardown_request)
self.app.before_request(self.before_request)
app.before_request(...)
def connect(self):
return sqlite3.connect(app.config['SQLITE3_DATABASE'])
It is important that the app is not stored on the extension, don't do
``self.app = app``. The only time the extension should have direct
access to an app is during ``init_app``, otherwise it should use
:data:`.current_app`.
def before_request(self):
ctx = _request_ctx_stack.top
ctx.sqlite3_db = self.connect()
This allows the extension to support the application factory pattern,
avoids circular import issues when importing the extension instance
elsewhere in a user's code, and makes testing with different
configurations easier.
def teardown_request(self, exception):
ctx = _request_ctx_stack.top
ctx.sqlite3_db.close()
.. code-block:: python
def get_db(self):
ctx = _request_ctx_stack.top
if ctx is not None:
return ctx.sqlite3_db
hello = HelloExtension()
The user could then initialize the extension in one file::
def create_app():
app = Flask(__name__)
hello.init_app(app)
return app
manager = SQLite3()
Above, the ``hello`` extension instance exists independently of the
application. This means that other modules in a user's project can do
``from project import hello`` and use the extension in blueprints before
the app exists.
and bind their app to the extension in another file::
manager.init_app(app)
End-Of-Request Behavior
-----------------------
Due to the change in Flask 0.7 regarding functions that are run at the end
of the request your extension will have to be extra careful there if it
wants to continue to support older versions of Flask. The following
pattern is a good way to support both::
def close_connection(response):
ctx = _request_ctx_stack.top
ctx.sqlite3_db.close()
return response
if hasattr(app, 'teardown_request'):
app.teardown_request(close_connection)
else:
app.after_request(close_connection)
Strictly speaking the above code is wrong, because teardown functions are
passed the exception and typically don't return anything. However because
the return value is discarded this will just work assuming that the code
in between does not touch the passed parameter.
Learn from Others
-----------------
This documentation only touches the bare minimum for extension
development. If you want to learn more, it's a very good idea to check
out existing extensions on the `Flask Extension Registry`_. If you feel
lost there is still the `mailinglist`_ and the `IRC channel`_ to get some
ideas for nice looking APIs. Especially if you do something nobody before
you did, it might be a very good idea to get some more input. This not
only to get an idea about what people might want to have from an
extension, but also to avoid having multiple developers working on pretty
much the same side by side.
Remember: good API design is hard, so introduce your project on the
mailinglist, and let other developers give you a helping hand with
designing the API.
The best Flask extensions are extensions that share common idioms for the
API. And this can only work if collaboration happens early.
Approved Extensions
-------------------
Flask also has the concept of approved extensions. Approved extensions
are tested as part of Flask itself to ensure extensions do not break on
new releases. These approved extensions are listed on the `Flask
Extension Registry`_ and marked appropriately. If you want your own
extension to be approved you have to follow these guidelines:
1. An approved Flask extension must provide exactly one package or module
named ``flask_extensionname``. They might also reside inside a
``flaskext`` namespace packages though this is discouraged now.
2. It must ship a testing suite that can either be invoked with ``make test``
or ``python setup.py test``. For test suites invoked with ``make
test`` the extension has to ensure that all dependencies for the test
are installed automatically, in case of ``python setup.py test``
dependencies for tests alone can be specified in the `setup.py`
file. The test suite also has to be part of the distribution.
3. APIs of approved extensions will be checked for the following
characteristics:
- an approved extension has to support multiple applications
running in the same Python process.
- it must be possible to use the factory pattern for creating
applications.
4. The license must be BSD/MIT/WTFPL licensed.
5. The naming scheme for official extensions is *Flask-ExtensionName* or
*ExtensionName-Flask*.
6. Approved extensions must define all their dependencies in the
`setup.py` file unless a dependency cannot be met because it is not
available on PyPI.
7. The extension must have documentation that uses one of the two Flask
themes for Sphinx documentation.
8. The setup.py description (and thus the PyPI description) has to
link to the documentation, website (if there is one) and there
must be a link to automatically install the development version
(``PackageName==dev``).
9. The ``zip_safe`` flag in the setup script must be set to ``False``,
even if the extension would be safe for zipping.
10. An extension currently has to support Python 2.5, 2.6 as well as
Python 2.7
The :attr:`Flask.extensions` dict can be used to store a reference to
the extension on the application, or some other state specific to the
application. Be aware that this is a single namespace, so use a name
unique to your extension, such as the extension's name without the
"flask" prefix.
.. _ext-import-transition:
Adding Behavior
---------------
Extension Import Transition
---------------------------
There are many ways that an extension can add behavior. Any setup
methods that are available on the :class:`Flask` object can be used
during an extension's ``init_app`` method.
For a while we recommended using namespace packages for Flask extensions.
This turned out to be problematic in practice because many different
competing namespace package systems exist and pip would automatically
switch between different systems and this caused a lot of problems for
users.
A common pattern is to use :meth:`~Flask.before_request` to initialize
some data or a connection at the beginning of each request, then
:meth:`~Flask.teardown_request` to clean it up at the end. This can be
stored on :data:`.g`, discussed more below.
Instead we now recommend naming packages ``flask_foo`` instead of the now
deprecated ``flaskext.foo``. Flask 0.8 introduces a redirect import
system that lets uses import from ``flask.ext.foo`` and it will try
``flask_foo`` first and if that fails ``flaskext.foo``.
A more lazy approach is to provide a method that initializes and caches
the data or connection. For example, a ``ext.get_db`` method could
create a database connection the first time it's called, so that a view
that doesn't use the database doesn't create a connection.
Flask extensions should urge users to import from ``flask.ext.foo``
instead of ``flask_foo`` or ``flaskext_foo`` so that extensions can
transition to the new package name without affecting users.
Besides doing something before and after every view, your extension
might want to add some specific views as well. In this case, you could
define a :class:`Blueprint`, then call :meth:`~Flask.register_blueprint`
during ``init_app`` to add the blueprint to the app.
.. _OAuth extension: http://packages.python.org/Flask-OAuth/
.. _mailinglist: http://flask.pocoo.org/mailinglist/
.. _IRC channel: http://flask.pocoo.org/community/irc/
Configuration Techniques
------------------------
There can be multiple levels and sources of configuration for an
extension. You should consider what parts of your extension fall into
each one.
- Configuration per application instance, through ``app.config``
values. This is configuration that could reasonably change for each
deployment of an application. A common example is a URL to an
external resource, such as a database. Configuration keys should
start with the extension's name so that they don't interfere with
other extensions.
- Configuration per extension instance, through ``__init__``
arguments. This configuration usually affects how the extension
is used, such that it wouldn't make sense to change it per
deployment.
- Configuration per extension instance, through instance attributes
and decorator methods. It might be more ergonomic to assign to
``ext.value``, or use a ``@ext.register`` decorator to register a
function, after the extension instance has been created.
- Global configuration through class attributes. Changing a class
attribute like ``Ext.connection_class`` can customize default
behavior without making a subclass. This could be combined
per-extension configuration to override defaults.
- Subclassing and overriding methods and attributes. Making the API of
the extension itself something that can be overridden provides a
very powerful tool for advanced customization.
The :class:`~flask.Flask` object itself uses all of these techniques.
It's up to you to decide what configuration is appropriate for your
extension, based on what you need and what you want to support.
Configuration should not be changed after the application setup phase is
complete and the server begins handling requests. Configuration is
global, any changes to it are not guaranteed to be visible to other
workers.
Data During a Request
---------------------
When writing a Flask application, the :data:`~flask.g` object is used to
store information during a request. For example the
:doc:`tutorial <tutorial/database>` stores a connection to a SQLite
database as ``g.db``. Extensions can also use this, with some care.
Since ``g`` is a single global namespace, extensions must use unique
names that won't collide with user data. For example, use the extension
name as a prefix, or as a namespace.
.. code-block:: python
# an internal prefix with the extension name
g._hello_user_id = 2
# or an internal prefix as a namespace
from types import SimpleNamespace
g._hello = SimpleNamespace()
g._hello.user_id = 2
The data in ``g`` lasts for an application context. An application context is
active during a request, CLI command, or ``with app.app_context()`` block. If
you're storing something that should be closed, use
:meth:`~flask.Flask.teardown_appcontext` to ensure that it gets closed when the
app context ends. If it should only be valid during a request, or would not be
used in the CLI outside a request, use :meth:`~flask.Flask.teardown_request`.
Views and Models
----------------
Your extension views might want to interact with specific models in your
database, or some other extension or data connected to your application.
For example, let's consider a ``Flask-SimpleBlog`` extension that works
with Flask-SQLAlchemy to provide a ``Post`` model and views to write
and read posts.
The ``Post`` model needs to subclass the Flask-SQLAlchemy ``db.Model``
object, but that's only available once you've created an instance of
that extension, not when your extension is defining its views. So how
can the view code, defined before the model exists, access the model?
One method could be to use :doc:`views`. During ``__init__``, create
the model, then create the views by passing the model to the view
class's :meth:`~views.View.as_view` method.
.. code-block:: python
class PostAPI(MethodView):
def __init__(self, model):
self.model = model
def get(self, id):
post = self.model.query.get(id)
return jsonify(post.to_json())
class BlogExtension:
def __init__(self, db):
class Post(db.Model):
id = db.Column(primary_key=True)
title = db.Column(db.String, nullable=False)
self.post_model = Post
def init_app(self, app):
api_view = PostAPI.as_view(model=self.post_model)
db = SQLAlchemy()
blog = BlogExtension(db)
db.init_app(app)
blog.init_app(app)
Another technique could be to use an attribute on the extension, such as
``self.post_model`` from above. Add the extension to ``app.extensions``
in ``init_app``, then access
``current_app.extensions["simple_blog"].post_model`` from views.
You may also want to provide base classes so that users can provide
their own ``Post`` model that conforms to the API your extension
expects. So they could implement ``class Post(blog.BasePost)``, then
set it as ``blog.post_model``.
As you can see, this can get a bit complex. Unfortunately, there's no
perfect solution here, only different strategies and tradeoffs depending
on your needs and how much customization you want to offer. Luckily,
this sort of resource dependency is not a common need for most
extensions. Remember, if you need help with design, ask on our
`Discord Chat`_ or `GitHub Discussions`_.
Recommended Extension Guidelines
--------------------------------
Flask previously had the concept of "approved extensions", where the
Flask maintainers evaluated the quality, support, and compatibility of
the extensions before listing them. While the list became too difficult
to maintain over time, the guidelines are still relevant to all
extensions maintained and developed today, as they help the Flask
ecosystem remain consistent and compatible.
1. An extension requires a maintainer. In the event an extension author
would like to move beyond the project, the project should find a new
maintainer and transfer access to the repository, documentation,
PyPI, and any other services. The `Pallets-Eco`_ organization on
GitHub allows for community maintenance with oversight from the
Pallets maintainers.
2. The naming scheme is *Flask-ExtensionName* or *ExtensionName-Flask*.
It must provide exactly one package or module named
``flask_extension_name``.
3. The extension must use an open source license. The Python web
ecosystem tends to prefer BSD or MIT. It must be open source and
publicly available.
4. The extension's API must have the following characteristics:
- It must support multiple applications running in the same Python
process. Use ``current_app`` instead of ``self.app``, store
configuration and state per application instance.
- It must be possible to use the factory pattern for creating
applications. Use the ``ext.init_app()`` pattern.
5. From a clone of the repository, an extension with its dependencies
must be installable in editable mode with ``pip install -e .``.
6. It must ship tests that can be invoked with a common tool like
``tox -e py``, ``nox -s test`` or ``pytest``. If not using ``tox``,
the test dependencies should be specified in a requirements file.
The tests must be part of the sdist distribution.
7. A link to the documentation or project website must be in the PyPI
metadata or the readme. The documentation should use the Flask theme
from the `Official Pallets Themes`_.
8. The extension's dependencies should not use upper bounds or assume
any particular version scheme, but should use lower bounds to
indicate minimum compatibility support. For example,
``sqlalchemy>=1.4``.
9. Indicate the versions of Python supported using ``python_requires=">=version"``.
Flask and Pallets policy is to support all Python versions that are not
within six months of end of life (EOL). See Python's `EOL calendar`_ for
timing.
.. _PyPI: https://pypi.org/search/?c=Framework+%3A%3A+Flask
.. _Discord Chat: https://discord.gg/pallets
.. _GitHub Discussions: https://github.com/pallets/flask/discussions
.. _Official Pallets Themes: https://pypi.org/project/Pallets-Sphinx-Themes/
.. _Pallets-Eco: https://github.com/pallets-eco
.. _EOL calendar: https://devguide.python.org/versions/

View file

@ -1,48 +1,48 @@
Flask Extensions
================
Extensions
==========
Extensions are extra packages that add functionality to a Flask
application. For example, an extension might add support for sending
email or connecting to a database. Some extensions add entire new
frameworks to help build certain types of applications, like a REST API.
Flask extensions extend the functionality of Flask in various different
ways. For instance they add support for databases and other common tasks.
Finding Extensions
------------------
Flask extensions are listed on the `Flask Extension Registry`_ and can be
downloaded with ``easy_install`` or ``pip``. If you add a Flask extension
as dependency to your ``requirements.rst`` or ``setup.py`` file they are
usually installed with a simple command or when your application installs.
Flask extensions are usually named "Flask-Foo" or "Foo-Flask". You can
search PyPI for packages tagged with `Framework :: Flask <pypi_>`_.
Using Extensions
----------------
Extensions typically have documentation that goes along that shows how to
use it. There are no general rules in how extensions are supposed to
behave but they are imported from common locations. If you have an
extension called ``Flask-Foo`` or ``Foo-Flask`` it will be always
importable from ``flask.ext.foo``::
Consult each extension's documentation for installation, configuration,
and usage instructions. Generally, extensions pull their own
configuration from :attr:`app.config <flask.Flask.config>` and are
passed an application instance during initialization. For example,
an extension called "Flask-Foo" might be used like this::
from flask.ext import foo
from flask_foo import Foo
Flask Before 0.8
----------------
foo = Foo()
If you are using Flask 0.7 or earlier the :data:`flask.ext` package will not
exist, instead you have to import from ``flaskext.foo`` or ``flask_foo``
depending on how the extension is distributed. If you want to develop an
application that supports Flask 0.7 or earlier you should still import
from the :data:`flask.ext` package. We provide you with a compatibility
module that provides this package for older versions of Flask. You can
download it from github: `flaskext_compat.py`_
app = Flask(__name__)
app.config.update(
FOO_BAR='baz',
FOO_SPAM='eggs',
)
And here is how you can use it::
foo.init_app(app)
import flaskext_compat
flaskext_compat.activate()
from flask.ext import foo
Building Extensions
-------------------
Once the ``flaskext_compat`` module is activated the :data:`flask.ext` will
exist and you can start importing from there.
While `PyPI <pypi_>`_ contains many Flask extensions, you may not find
an extension that fits your need. If this is the case, you can create
your own, and publish it for others to use as well. Read
:doc:`extensiondev` to develop your own Flask extension.
.. _Flask Extension Registry: http://flask.pocoo.org/extensions/
.. _flaskext_compat.py: https://github.com/mitsuhiko/flask/raw/master/scripts/flaskext_compat.py
.. _pypi: https://pypi.org/search/?c=Framework+%3A%3A+Flask

View file

@ -1,16 +0,0 @@
import re
import inspect
_internal_mark_re = re.compile(r'^\s*:internal:\s*$(?m)')
def skip_member(app, what, name, obj, skip, options):
docstring = inspect.getdoc(obj)
if skip:
return True
return _internal_mark_re.search(docstring or '') is not None
def setup(app):
app.connect('autodoc-skip-member', skip_member)

View file

@ -1,86 +0,0 @@
# flasky extensions. flasky pygments style based on tango style
from pygments.style import Style
from pygments.token import Keyword, Name, Comment, String, Error, \
Number, Operator, Generic, Whitespace, Punctuation, Other, Literal
class FlaskyStyle(Style):
background_color = "#f8f8f8"
default_style = ""
styles = {
# No corresponding class for the following:
#Text: "", # class: ''
Whitespace: "underline #f8f8f8", # class: 'w'
Error: "#a40000 border:#ef2929", # class: 'err'
Other: "#000000", # class 'x'
Comment: "italic #8f5902", # class: 'c'
Comment.Preproc: "noitalic", # class: 'cp'
Keyword: "bold #004461", # class: 'k'
Keyword.Constant: "bold #004461", # class: 'kc'
Keyword.Declaration: "bold #004461", # class: 'kd'
Keyword.Namespace: "bold #004461", # class: 'kn'
Keyword.Pseudo: "bold #004461", # class: 'kp'
Keyword.Reserved: "bold #004461", # class: 'kr'
Keyword.Type: "bold #004461", # class: 'kt'
Operator: "#582800", # class: 'o'
Operator.Word: "bold #004461", # class: 'ow' - like keywords
Punctuation: "bold #000000", # class: 'p'
# because special names such as Name.Class, Name.Function, etc.
# are not recognized as such later in the parsing, we choose them
# to look the same as ordinary variables.
Name: "#000000", # class: 'n'
Name.Attribute: "#c4a000", # class: 'na' - to be revised
Name.Builtin: "#004461", # class: 'nb'
Name.Builtin.Pseudo: "#3465a4", # class: 'bp'
Name.Class: "#000000", # class: 'nc' - to be revised
Name.Constant: "#000000", # class: 'no' - to be revised
Name.Decorator: "#888", # class: 'nd' - to be revised
Name.Entity: "#ce5c00", # class: 'ni'
Name.Exception: "bold #cc0000", # class: 'ne'
Name.Function: "#000000", # class: 'nf'
Name.Property: "#000000", # class: 'py'
Name.Label: "#f57900", # class: 'nl'
Name.Namespace: "#000000", # class: 'nn' - to be revised
Name.Other: "#000000", # class: 'nx'
Name.Tag: "bold #004461", # class: 'nt' - like a keyword
Name.Variable: "#000000", # class: 'nv' - to be revised
Name.Variable.Class: "#000000", # class: 'vc' - to be revised
Name.Variable.Global: "#000000", # class: 'vg' - to be revised
Name.Variable.Instance: "#000000", # class: 'vi' - to be revised
Number: "#990000", # class: 'm'
Literal: "#000000", # class: 'l'
Literal.Date: "#000000", # class: 'ld'
String: "#4e9a06", # class: 's'
String.Backtick: "#4e9a06", # class: 'sb'
String.Char: "#4e9a06", # class: 'sc'
String.Doc: "italic #8f5902", # class: 'sd' - like a comment
String.Double: "#4e9a06", # class: 's2'
String.Escape: "#4e9a06", # class: 'se'
String.Heredoc: "#4e9a06", # class: 'sh'
String.Interpol: "#4e9a06", # class: 'si'
String.Other: "#4e9a06", # class: 'sx'
String.Regex: "#4e9a06", # class: 'sr'
String.Single: "#4e9a06", # class: 's1'
String.Symbol: "#4e9a06", # class: 'ss'
Generic: "#000000", # class: 'g'
Generic.Deleted: "#a40000", # class: 'gd'
Generic.Emph: "italic #000000", # class: 'ge'
Generic.Error: "#ef2929", # class: 'gr'
Generic.Heading: "bold #000080", # class: 'gh'
Generic.Inserted: "#00A000", # class: 'gi'
Generic.Output: "#888", # class: 'go'
Generic.Prompt: "#745334", # class: 'gp'
Generic.Strong: "bold #000000", # class: 'gs'
Generic.Subheading: "bold #800080", # class: 'gu'
Generic.Traceback: "bold #a40000", # class: 'gt'
}

View file

@ -1,118 +0,0 @@
\definecolor{TitleColor}{rgb}{0,0,0}
\definecolor{InnerLinkColor}{rgb}{0,0,0}
\renewcommand{\maketitle}{%
\begin{titlepage}%
\let\footnotesize\small
\let\footnoterule\relax
\ifsphinxpdfoutput
\begingroup
% This \def is required to deal with multi-line authors; it
% changes \\ to ', ' (comma-space), making it pass muster for
% generating document info in the PDF file.
\def\\{, }
\pdfinfo{
/Author (\@author)
/Title (\@title)
}
\endgroup
\fi
\begin{flushright}%
%\sphinxlogo%
{\center
\vspace*{3cm}
\includegraphics{logo.pdf}
\vspace{3cm}
\par
{\rm\Huge \@title \par}%
{\em\LARGE \py@release\releaseinfo \par}
{\large
\@date \par
\py@authoraddress \par
}}%
\end{flushright}%\par
\@thanks
\end{titlepage}%
\cleardoublepage%
\setcounter{footnote}{0}%
\let\thanks\relax\let\maketitle\relax
%\gdef\@thanks{}\gdef\@author{}\gdef\@title{}
}
\fancypagestyle{normal}{
\fancyhf{}
\fancyfoot[LE,RO]{{\thepage}}
\fancyfoot[LO]{{\nouppercase{\rightmark}}}
\fancyfoot[RE]{{\nouppercase{\leftmark}}}
\fancyhead[LE,RO]{{ \@title, \py@release}}
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\footrulewidth}{0.4pt}
}
\fancypagestyle{plain}{
\fancyhf{}
\fancyfoot[LE,RO]{{\thepage}}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0.4pt}
}
\titleformat{\section}{\Large}%
{\py@TitleColor\thesection}{0.5em}{\py@TitleColor}{\py@NormalColor}
\titleformat{\subsection}{\large}%
{\py@TitleColor\thesubsection}{0.5em}{\py@TitleColor}{\py@NormalColor}
\titleformat{\subsubsection}{}%
{\py@TitleColor\thesubsubsection}{0.5em}{\py@TitleColor}{\py@NormalColor}
\titleformat{\paragraph}{\large}%
{\py@TitleColor}{0em}{\py@TitleColor}{\py@NormalColor}
\ChNameVar{\raggedleft\normalsize}
\ChNumVar{\raggedleft \bfseries\Large}
\ChTitleVar{\raggedleft \rm\Huge}
\renewcommand\thepart{\@Roman\c@part}
\renewcommand\part{%
\pagestyle{plain}
\if@noskipsec \leavevmode \fi
\cleardoublepage
\vspace*{6cm}%
\@afterindentfalse
\secdef\@part\@spart}
\def\@part[#1]#2{%
\ifnum \c@secnumdepth >\m@ne
\refstepcounter{part}%
\addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
\else
\addcontentsline{toc}{part}{#1}%
\fi
{\parindent \z@ %\center
\interlinepenalty \@M
\normalfont
\ifnum \c@secnumdepth >\m@ne
\rm\Large \partname~\thepart
\par\nobreak
\fi
\MakeUppercase{\rm\Huge #2}%
\markboth{}{}\par}%
\nobreak
\vskip 8ex
\@afterheading}
\def\@spart#1{%
{\parindent \z@ %\center
\interlinepenalty \@M
\normalfont
\huge \bfseries #1\par}%
\nobreak
\vskip 3ex
\@afterheading}
% use inconsolata font
\usepackage{inconsolata}
% fix single quotes, for inconsolata. (does not work)
%%\usepackage{textcomp}
%%\begingroup
%% \catcode`'=\active
%% \g@addto@macro\@noligs{\let'\textsinglequote}
%% \endgroup
%%\endinput

View file

@ -1,100 +0,0 @@
Foreword
========
Read this before you get started with Flask. This hopefully answers some
questions about the purpose and goals of the project, and when you
should or should not be using it.
What does "micro" mean?
-----------------------
To me, the "micro" in microframework refers not only to the simplicity and
small size of the framework, but also the fact that it does not make much
decisions for you. While Flask does pick a templating engine for you, we
won't make such decisions for your datastore or other parts.
For us however the term “micro” does not mean that the whole implementation
has to fit into a single Python file.
One of the design decisions with Flask was that simple tasks should be
simple and not take up a lot of code and yet not limit yourself. Because
of that we took a few design choices that some people might find
surprising or unorthodox. For example, Flask uses thread-local objects
internally so that you don't have to pass objects around from function to
function within a request in order to stay threadsafe. While this is a
really easy approach and saves you a lot of time, it might also cause some
troubles for very large applications because changes on these thread-local
objects can happen anywhere in the same thread. In order to solve these
problems we don't hide the thread locals for you but instead embrace them
and provide you with a lot of tools to make it as pleasant as possible to
work with them.
Flask is also based on convention over configuration, which means that
many things are preconfigured. For example, by convention, templates and
static files are in subdirectories within the Python source tree of the
application. While this can be changed you usually don't have to.
The main reason however why Flask is called a "microframework" is the idea
to keep the core simple but extensible. There is no database abstraction
layer, no form validation or anything else where different libraries
already exist that can handle that. However Flask knows the concept of
extensions that can add this functionality into your application as if it
was implemented in Flask itself. There are currently extensions for
object relational mappers, form validation, upload handling, various open
authentication technologies and more.
Since Flask is based on a very solid foundation there is not a lot of code
in Flask itself. As such it's easy to adapt even for lage applications
and we are making sure that you can either configure it as much as
possible by subclassing things or by forking the entire codebase. If you
are interested in that, check out the :ref:`becomingbig` chapter.
If you are curious about the Flask design principles, head over to the
section about :ref:`design`.
Web Development is Dangerous
----------------------------
I'm not joking. Well, maybe a little. If you write a web
application, you are probably allowing users to register and leave their
data on your server. The users are entrusting you with data. And even if
you are the only user that might leave data in your application, you still
want that data to be stored securely.
Unfortunately, there are many ways the security of a web application can be
compromised. Flask protects you against one of the most common security
problems of modern web applications: cross-site scripting (XSS). Unless
you deliberately mark insecure HTML as secure, Flask and the underlying
Jinja2 template engine have you covered. But there are many more ways to
cause security problems.
The documentation will warn you about aspects of web development that
require attention to security. Some of these security concerns
are far more complex than one might think, and we all sometimes underestimate
the likelihood that a vulnerability will be exploited, until a clever
attacker figures out a way to exploit our applications. And don't think
that your application is not important enough to attract an attacker.
Depending on the kind of attack, chances are that automated bots are
probing for ways to fill your database with spam, links to malicious
software, and the like.
So always keep security in mind when doing web development.
The Status of Python 3
----------------------
Currently the Python community is in the process of improving libraries to
support the new iteration of the Python programming language. While the
situation is greatly improving there are still some issues that make it
hard for us to switch over to Python 3 just now. These problems are
partially caused by changes in the language that went unreviewed for too
long, partially also because we have not quite worked out how the lower
level API should change for the unicode differences in Python3.
Werkzeug and Flask will be ported to Python 3 as soon as a solution for
the changes is found, and we will provide helpful tips how to upgrade
existing applications to Python 3. Until then, we strongly recommend
using Python 2.6 and 2.7 with activated Python 3 warnings during
development. If you plan on upgrading to Python 3 in the near future we
strongly recommend that you read `How to write forwards compatible
Python code <http://lucumr.pocoo.org/2011/1/22/forwards-compatible-python/>`_.

125
docs/gevent.rst Normal file
View file

@ -0,0 +1,125 @@
Async with Gevent
=================
`Gevent`_ patches Python's standard library to run within special async workers
called `greenlets`_. Gevent has existed since long before Python's native
asyncio was available, and Flask has always worked with it.
.. _gevent: https://www.gevent.org
.. _greenlets: https://greenlet.readthedocs.io
Gevent is a reliable way to handle numerous, long lived, concurrent connections,
and to achieve similar capabilities to ASGI and asyncio. This works without
needing to write ``async def`` or ``await`` anywhere, but relies on gevent and
greenlet's low level manipulation of the Python interpreter.
Deciding whether you should use gevent with Flask, or `Quart`_, or something
else, is ultimately up to understanding the specific needs of your project.
.. _quart: https://quart.palletsprojects.com
Enabling gevent
---------------
You need to apply gevent's patching as early as possible in your code. This
enables gevent's underlying event loop and converts many Python internals to run
inside it. Add the following at the top of your project's module or top
``__init__.py``:
.. code-block:: python
import gevent.monkey
gevent.monkey.patch_all()
When deploying in production, use :doc:`/deploying/gunicorn` or
:doc:`/deploying/uwsgi` with a gevent worker, as described on those pages.
To run concurrent tasks within your own code, such as views, use
|gevent.spawn|_:
.. |gevent.spawn| replace:: ``gevent.spawn()``
.. _gevent.spawn: https://www.gevent.org/api/gevent.html#gevent.spawn
.. code-block:: python
@app.post("/send")
def send_email():
gevent.spawn(email.send, to="example@example.example", text="example")
return "Email is being sent."
If you need to access :data:`request` or other Flask context globals within the
spawned function, decorate the function with :func:`.stream_with_context` or
:func:`.copy_current_request_context`. Prefer passing the exact data you need
when spawning the function, rather than using the decorators.
.. note::
When using gevent, greenlet>=1.0 is required. When using PyPy, PyPy>=7.3.7
is required.
.. _gevent-asyncio:
Combining with ``async``/``await``
----------------------------------
Gevent's patching does not interact well with Flask's built-in asyncio support.
If you want to use Gevent and asyncio in the same app, you'll need to override
:meth:`flask.Flask.async_to_sync` to run async functions inside gevent.
.. code-block:: python
import gevent.monkey
gevent.monkey.patch_all()
import asyncio
from flask import Flask, request
loop = asyncio.EventLoop()
gevent.spawn(loop.run_forever)
class GeventFlask(Flask):
def async_to_sync(self, func):
def run(*args, **kwargs):
coro = func(*args, **kwargs)
future = asyncio.run_coroutine_threadsafe(coro, loop)
return future.result()
return run
app = GeventFlask(__name__)
@app.get("/")
async def greet():
await asyncio.sleep(1)
return f"Hello, {request.args.get("name", "World")}!"
This starts an asyncio event loop in a gevent worker. Async functions are
scheduled on that event loop. This may still have limitations, and may need to
be modified further when using other asyncio implementations.
libuv
~~~~~
`libuv`_ is another event loop implementation that `gevent supports`_. There's
also a project called `uvloop`_ that enables libuv in asyncio. If you want to
use libuv, use gevent's support, not uvloop. It may be possible to further
modify the ``async_to_sync`` code from the previous section to work with uvloop,
but that's not currently known.
.. _libuv: https://libuv.org/
.. _gevent supports: https://www.gevent.org/loop_impls.html
.. _uvloop: https://uvloop.readthedocs.io/
To enable gevent's libuv support, add the following at the *very* top of your
code, before ``gevent.monkey.patch_all()``:
.. code-block:: python
import gevent
gevent.config.loop = "libuv"
import gevent.monkey
gevent.monkey.patch_all()

View file

@ -1,207 +0,0 @@
HTML/XHTML FAQ
==============
The Flask documentation and example applications are using HTML5. You
may notice that in many situations, when end tags are optional they are
not used, so that the HTML is cleaner and faster to load. Because there
is much confusion about HTML and XHTML among developers, this document tries
to answer some of the major questions.
History of XHTML
----------------
For a while, it appeared that HTML was about to be replaced by XHTML.
However, barely any websites on the Internet are actual XHTML (which is
HTML processed using XML rules). There are a couple of major reasons
why this is the case. One of them is Internet Explorer's lack of proper
XHTML support. The XHTML spec states that XHTML must be served with the MIME
type `application/xhtml+xml`, but Internet Explorer refuses to read files
with that MIME type.
While it is relatively easy to configure Web servers to serve XHTML properly,
few people do. This is likely because properly using XHTML can be quite
painful.
One of the most important causes of pain is XML's draconian (strict and
ruthless) error handling. When an XML parsing error is encountered,
the browser is supposed to show the user an ugly error message, instead
of attempting to recover from the error and display what it can. Most of
the (X)HTML generation on the web is based on non-XML template engines
(such as Jinja, the one used in Flask) which do not protect you from
accidentally creating invalid XHTML. There are XML based template engines,
such as Kid and the popular Genshi, but they often come with a larger
runtime overhead and, are not as straightforward to use because they have
to obey XML rules.
The majority of users, however, assumed they were properly using XHTML.
They wrote an XHTML doctype at the top of the document and self-closed all
the necessary tags (``<br>`` becomes ``<br/>`` or ``<br></br>`` in XHTML).
However, even if the document properly validates as XHTML, what really
determines XHTML/HTML processing in browsers is the MIME type, which as
said before is often not set properly. So the valid XHTML was being treated
as invalid HTML.
XHTML also changed the way JavaScript is used. To properly work with XHTML,
programmers have to use the namespaced DOM interface with the XHTML
namespace to query for HTML elements.
History of HTML5
----------------
Development of the HTML5 specification was started in 2004 under the name
"Web Applications 1.0" by the Web Hypertext Application Technology Working
Group, or WHATWG (which was formed by the major browser vendors Apple,
Mozilla, and Opera) with the goal of writing a new and improved HTML
specification, based on existing browser behaviour instead of unrealistic
and backwards-incompatible specifications.
For example, in HTML4 ``<title/Hello/`` theoretically parses exactly the
same as ``<title>Hello</title>``. However, since people were using
XHTML-like tags along the lines of ``<link />``, browser vendors implemented
the XHTML syntax over the syntax defined by the specification.
In 2007, the specification was adopted as the basis of a new HTML
specification under the umbrella of the W3C, known as HTML5. Currently,
it appears that XHTML is losing traction, as the XHTML 2 working group has
been disbanded and HTML5 is being implemented by all major browser vendors.
HTML versus XHTML
-----------------
The following table gives you a quick overview of features available in
HTML 4.01, XHTML 1.1 and HTML5. (XHTML 1.0 is not included, as it was
superseded by XHTML 1.1 and the barely-used XHTML5.)
.. tabularcolumns:: |p{9cm}|p{2cm}|p{2cm}|p{2cm}|
+-----------------------------------------+----------+----------+----------+
| | HTML4.01 | XHTML1.1 | HTML5 |
+=========================================+==========+==========+==========+
| ``<tag/value/`` == ``<tag>value</tag>`` | |Y| [1]_ | |N| | |N| |
+-----------------------------------------+----------+----------+----------+
| ``<br/>`` supported | |N| | |Y| | |Y| [2]_ |
+-----------------------------------------+----------+----------+----------+
| ``<script/>`` supported | |N| | |Y| | |N| |
+-----------------------------------------+----------+----------+----------+
| should be served as `text/html` | |Y| | |N| [3]_ | |Y| |
+-----------------------------------------+----------+----------+----------+
| should be served as | |N| | |Y| | |N| |
| `application/xhtml+xml` | | | |
+-----------------------------------------+----------+----------+----------+
| strict error handling | |N| | |Y| | |N| |
+-----------------------------------------+----------+----------+----------+
| inline SVG | |N| | |Y| | |Y| |
+-----------------------------------------+----------+----------+----------+
| inline MathML | |N| | |Y| | |Y| |
+-----------------------------------------+----------+----------+----------+
| ``<video>`` tag | |N| | |N| | |Y| |
+-----------------------------------------+----------+----------+----------+
| ``<audio>`` tag | |N| | |N| | |Y| |
+-----------------------------------------+----------+----------+----------+
| New semantic tags like ``<article>`` | |N| | |N| | |Y| |
+-----------------------------------------+----------+----------+----------+
.. [1] This is an obscure feature inherited from SGML. It is usually not
supported by browsers, for reasons detailed above.
.. [2] This is for compatibility with server code that generates XHTML for
tags such as ``<br>``. It should not be used in new code.
.. [3] XHTML 1.0 is the last XHTML standard that allows to be served
as `text/html` for backwards compatibility reasons.
.. |Y| image:: _static/yes.png
:alt: Yes
.. |N| image:: _static/no.png
:alt: No
What does "strict" mean?
------------------------
HTML5 has strictly defined parsing rules, but it also specifies exactly
how a browser should react to parsing errors - unlike XHTML, which simply
states parsing should abort. Some people are confused by apparently
invalid syntax that still generates the expected results (for example,
missing end tags or unquoted attribute values).
Some of these work because of the lenient error handling most browsers use
when they encounter a markup error, others are actually specified. The
following constructs are optional in HTML5 by standard, but have to be
supported by browsers:
- Wrapping the document in an ``<html>`` tag
- Wrapping header elements in ``<head>`` or the body elements in
``<body>``
- Closing the ``<p>``, ``<li>``, ``<dt>``, ``<dd>``, ``<tr>``,
``<td>``, ``<th>``, ``<tbody>``, ``<thead>``, or ``<tfoot>`` tags.
- Quoting attributes, so long as they contain no whitespace or
special characters (like ``<``, ``>``, ``'``, or ``"``).
- Requiring boolean attributes to have a value.
This means the following page in HTML5 is perfectly valid:
.. sourcecode:: html
<!doctype html>
<title>Hello HTML5</title>
<div class=header>
<h1>Hello HTML5</h1>
<p class=tagline>HTML5 is awesome
</div>
<ul class=nav>
<li><a href=/index>Index</a>
<li><a href=/downloads>Downloads</a>
<li><a href=/about>About</a>
</ul>
<div class=body>
<h2>HTML5 is probably the future</h2>
<p>
There might be some other things around but in terms of
browser vendor support, HTML5 is hard to beat.
<dl>
<dt>Key 1
<dd>Value 1
<dt>Key 2
<dd>Value 2
</dl>
</div>
New technologies in HTML5
-------------------------
HTML5 adds many new features that make Web applications easier to write
and to use.
- The ``<audio>`` and ``<video>`` tags provide a way to embed audio and
video without complicated add-ons like QuickTime or Flash.
- Semantic elements like ``<article>``, ``<header>``, ``<nav>``, and
``<time>`` that make content easier to understand.
- The ``<canvas>`` tag, which supports a powerful drawing API, reducing
the need for server-generated images to present data graphically.
- New form control types like ``<input type="date">`` that allow user
agents to make entering and validating values easier.
- Advanced JavaScript APIs like Web Storage, Web Workers, Web Sockets,
geolocation, and offline applications.
Many other features have been added, as well. A good guide to new features
in HTML5 is Mark Pilgrim's soon-to-be-published book, `Dive Into HTML5`_.
Not all of them are supported in browsers yet, however, so use caution.
.. _Dive Into HTML5: http://www.diveintohtml5.org/
What should be used?
--------------------
Currently, the answer is HTML5. There are very few reasons to use XHTML
considering the latest developments in Web browsers. To summarize the
reasons given above:
- Internet Explorer (which, sadly, currently leads in market share)
has poor support for XHTML.
- Many JavaScript libraries also do not support XHTML, due to the more
complicated namespacing API it requires.
- HTML5 adds several new features, including semantic tags and the
long-awaited ``<audio>`` and ``<video>`` tags.
- It has the support of most browser vendors behind it.
- It is much easier to write, and more compact.
For most applications, it is undoubtedly better to use HTML5 than XHTML.

View file

@ -1,30 +1,89 @@
:orphan:
.. rst-class:: hide-header
Welcome to Flask
================
.. image:: _static/logo-full.png
:alt: Flask: web development, one drop at a time
:class: floatingflask
.. image:: _static/flask-name.svg
:align: center
:height: 200px
Welcome to Flask's documentation. This documentation is divided into
different parts. I recommend that you get started with
:ref:`installation` and then head over to the :ref:`quickstart`.
Besides the quickstart there is also a more detailed :ref:`tutorial` that
shows how to create a complete (albeit small) application with Flask. If
you'd rather dive into the internals of Flask, check out
the :ref:`api` documentation. Common patterns are described in the
:ref:`patterns` section.
Welcome to Flask's documentation. Flask is a lightweight WSGI web application framework.
It is designed to make getting started quick and easy, with the ability to scale up to
complex applications.
Flask depends on two external libraries: the `Jinja2`_ template
engine and the `Werkzeug`_ WSGI toolkit. These libraries are not documented
here. If you want to dive into their documentation check out the
following links:
Get started with :doc:`installation`
and then get an overview with the :doc:`quickstart`. There is also a
more detailed :doc:`tutorial/index` that shows how to create a small but
complete application with Flask. Common patterns are described in the
:doc:`patterns/index` section. The rest of the docs describe each
component of Flask in detail, with a full reference in the :doc:`api`
section.
- `Jinja2 Documentation <http://jinja.pocoo.org/2/documentation/>`_
- `Werkzeug Documentation <http://werkzeug.pocoo.org/documentation/>`_
Flask depends on the `Werkzeug`_ WSGI toolkit, the `Jinja`_ template engine, and the
`Click`_ CLI toolkit. Be sure to check their documentation as well as Flask's when
looking for information.
.. _Jinja2: http://jinja.pocoo.org/2/
.. _Werkzeug: http://werkzeug.pocoo.org/
.. _Werkzeug: https://werkzeug.palletsprojects.com
.. _Jinja: https://jinja.palletsprojects.com
.. _Click: https://click.palletsprojects.com
.. include:: contents.rst.inc
User's Guide
------------
Flask provides configuration and conventions, with sensible defaults, to get started.
This section of the documentation explains the different parts of the Flask framework
and how they can be used, customized, and extended. Beyond Flask itself, look for
community-maintained extensions to add even more functionality.
.. toctree::
:maxdepth: 2
installation
quickstart
tutorial/index
templating
testing
errorhandling
debugging
logging
config
signals
views
lifecycle
appcontext
blueprints
extensions
cli
server
shell
patterns/index
web-security
deploying/index
gevent
async-await
API Reference
-------------
If you are looking for information on a specific function, class or
method, this part of the documentation is for you.
.. toctree::
:maxdepth: 2
api
Additional Notes
----------------
.. toctree::
:maxdepth: 2
design
extensiondev
contributing
license
changes

View file

@ -1,175 +1,143 @@
.. _installation:
Installation
============
Flask depends on two external libraries, `Werkzeug
<http://werkzeug.pocoo.org/>`_ and `Jinja2 <http://jinja.pocoo.org/2/>`_.
Werkzeug is a toolkit for WSGI, the standard Python interface between web
applications and a variety of servers for both development and deployment.
Jinja2 renders templates.
So how do you get all that on your computer quickly? There are many ways
which this section will explain, but the most kick-ass method is
virtualenv, so let's look at that first.
Python Version
--------------
Either way, you will need Python 2.5 or higher to get started, so be sure
to have an up to date Python 2.x installation. At the time of writing,
the WSGI specification is not yet finalized for Python 3, so Flask cannot
support the 3.x series of Python.
.. _virtualenv:
virtualenv
----------
Virtualenv is probably what you want to use during development, and in
production too if you have shell access there.
What problem does virtualenv solve? If you like Python as I do,
chances are you want to use it for other projects besides Flask-based
web applications. But the more projects you have, the more likely it is
that you will be working with different versions of Python itself, or at
least different versions of Python libraries. Let's face it; quite often
libraries break backwards compatibility, and it's unlikely that any serious
application will have zero dependencies. So what do you do if two or more
of your projects have conflicting dependencies?
Virtualenv to the rescue! It basically enables multiple side-by-side
installations of Python, one for each project. It doesn't actually
install separate copies of Python, but it does provide a clever way
to keep different project environments isolated.
So let's see how virtualenv works!
If you are on Mac OS X or Linux, chances are that one of the following two
commands will work for you::
$ sudo easy_install virtualenv
or even better::
$ sudo pip install virtualenv
One of these will probably install virtualenv on your system. Maybe it's
even in your package manager. If you use Ubuntu, try::
$ sudo apt-get install python-virtualenv
If you are on Windows and don't have the `easy_install` command, you must
install it first. Check the :ref:`windows-easy-install` section for more
information about how to do that. Once you have it installed, run the
same commands as above, but without the `sudo` prefix.
Once you have virtualenv installed, just fire up a shell and create
your own environment. I usually create a project folder and an `env`
folder within::
$ mkdir myproject
$ cd myproject
$ virtualenv env
New python executable in env/bin/python
Installing setuptools............done.
Now, whenever you want to work on a project, you only have to activate
the corresponding environment. On OS X and Linux, do the following::
$ . env/bin/activate
(Note the space between the dot and the script name. The dot means that
this script should run in the context of the current shell. If this command
does not work in your shell, try replacing the dot with ``source``)
If you are a Windows user, the following command is for you::
$ env\scripts\activate
Either way, you should now be using your virtualenv (see how the prompt of
your shell has changed to show the virtualenv).
Now you can just enter the following command to get Flask activated in
your virtualenv::
$ easy_install Flask
A few seconds later you are good to go.
We recommend using the latest version of Python. Flask supports Python 3.10 and newer.
System Wide Installation
------------------------
Dependencies
------------
This is possible as well, but I do not recommend it. Just run
`easy_install` with root rights::
These distributions will be installed automatically when installing Flask.
$ sudo easy_install Flask
* `Werkzeug`_ implements WSGI, the standard Python interface between
applications and servers.
* `Jinja`_ is a template language that renders the pages your application
serves.
* `MarkupSafe`_ comes with Jinja. It escapes untrusted input when rendering
templates to avoid injection attacks.
* `ItsDangerous`_ securely signs data to ensure its integrity. This is used
to protect Flask's session cookie.
* `Click`_ is a framework for writing command line applications. It provides
the ``flask`` command and allows adding custom management commands.
* `Blinker`_ provides support for :doc:`signals`.
(Run it in an Admin shell on Windows systems and without `sudo`).
.. _Werkzeug: https://palletsprojects.com/p/werkzeug/
.. _Jinja: https://palletsprojects.com/p/jinja/
.. _MarkupSafe: https://palletsprojects.com/p/markupsafe/
.. _ItsDangerous: https://palletsprojects.com/p/itsdangerous/
.. _Click: https://palletsprojects.com/p/click/
.. _Blinker: https://blinker.readthedocs.io/
Living on the Edge
------------------
Optional dependencies
~~~~~~~~~~~~~~~~~~~~~
If you want to work with the latest version of Flask, there are two ways: you
can either let `easy_install` pull in the development version, or tell it
to operate on a git checkout. Either way, virtualenv is recommended.
These distributions will not be installed automatically. Flask will detect and
use them if you install them.
Get the git checkout in a new virtualenv and run in development mode::
* `python-dotenv`_ enables support for :ref:`dotenv` when running ``flask``
commands.
* `Watchdog`_ provides a faster, more efficient reloader for the development
server.
$ git clone http://github.com/mitsuhiko/flask.git
Initialized empty Git repository in ~/dev/flask/.git/
$ cd flask
$ virtualenv env
$ . env/bin/activate
New python executable in env/bin/python
Installing setuptools............done.
$ python setup.py develop
...
Finished processing dependencies for Flask
This will pull in the dependencies and activate the git head as the current
version inside the virtualenv. Then you just have to ``git pull origin``
to get the latest version.
To just get the development version without git, do this instead::
$ mkdir flask
$ cd flask
$ virtualenv env
$ . env/bin/activate
New python executable in env/bin/python
Installing setuptools............done.
$ easy_install Flask==dev
...
Finished processing dependencies for Flask==dev
.. _windows-easy-install:
`easy_install` on Windows
-------------------------
On Windows, installation of `easy_install` is a little bit trickier because
slightly different rules apply on Windows than on Unix-like systems, but
it's not difficult. The easiest way to do it is to download the
`ez_setup.py`_ file and run it. The easiest way to run the file is to
open your downloads folder and double-click on the file.
Next, add the `easy_install` command and other Python scripts to the
command search path, by adding your Python installation's Scripts folder
to the `PATH` environment variable. To do that, right-click on the
"Computer" icon on the Desktop or in the Start menu, and choose
"Properties". Then, on Windows Vista and Windows 7 click on "Advanced System
settings"; on Windows XP, click on the "Advanced" tab instead. Then click
on the "Environment variables" button and double click on the "Path"
variable in the "System variables" section. There append the path of your
Python interpreter's Scripts folder; make sure you delimit it from
existing values with a semicolon. Assuming you are using Python 2.6 on
the default path, add the following value::
;C:\Python26\Scripts
Then you are done. To check that it worked, open the Command Prompt and
execute ``easy_install``. If you have User Account Control enabled on
Windows Vista or Windows 7, it should prompt you for admin privileges.
.. _python-dotenv: https://github.com/theskumar/python-dotenv#readme
.. _watchdog: https://pythonhosted.org/watchdog/
.. _ez_setup.py: http://peak.telecommunity.com/dist/ez_setup.py
greenlet
~~~~~~~~
You may choose to use :doc:`/gevent` with your application. In this case,
greenlet>=1.0 is required. When using PyPy, PyPy>=7.3.7 is required.
These are not minimum supported versions, they only indicate the first
versions that added necessary features. You should use the latest
versions of each.
Virtual environments
--------------------
Use a virtual environment to manage the dependencies for your project, both in
development and in production.
What problem does a virtual environment solve? The more Python projects you
have, the more likely it is that you need to work with different versions of
Python libraries, or even Python itself. Newer versions of libraries for one
project can break compatibility in another project.
Virtual environments are independent groups of Python libraries, one for each
project. Packages installed for one project will not affect other projects or
the operating system's packages.
Python comes bundled with the :mod:`venv` module to create virtual
environments.
.. _install-create-env:
Create an environment
~~~~~~~~~~~~~~~~~~~~~
Create a project folder and a :file:`.venv` folder within:
.. tabs::
.. group-tab:: macOS/Linux
.. code-block:: text
$ mkdir myproject
$ cd myproject
$ python3 -m venv .venv
.. group-tab:: Windows
.. code-block:: text
> mkdir myproject
> cd myproject
> py -3 -m venv .venv
.. _install-activate-env:
Activate the environment
~~~~~~~~~~~~~~~~~~~~~~~~
Before you work on your project, activate the corresponding environment:
.. tabs::
.. group-tab:: macOS/Linux
.. code-block:: text
$ . .venv/bin/activate
.. group-tab:: Windows
.. code-block:: text
> .venv\Scripts\activate
Your shell prompt will change to show the name of the activated
environment.
Install Flask
-------------
Within the activated environment, use the following command to install
Flask:
.. code-block:: sh
$ pip install Flask
Flask is now installed. Check out the :doc:`/quickstart` or go to the
:doc:`Documentation Overview </index>`.

View file

@ -1,6 +0,0 @@
:orphan:
Flask Documentation
===================
.. include:: contents.rst.inc

View file

@ -1,48 +1,5 @@
License
=======
BSD-3-Clause License
====================
Flask is licensed under a three clause BSD License. It basically means:
do whatever you want with it as long as the copyright in Flask sticks
around, the conditions are not modified and the disclaimer is present.
Furthermore you must not use the names of the authors to promote derivatives
of the software without written consent.
The full license text can be found below (:ref:`flask-license`). For the
documentation and artwork different licenses apply.
.. _authors:
Authors
-------
.. include:: ../AUTHORS
General License Definitions
---------------------------
The following section contains the full license texts for Flask and the
documentation.
- "AUTHORS" hereby refers to all the authors listed in the
:ref:`authors` section.
- The ":ref:`flask-license`" applies to all the sourcecode shipped as
part of Flask (Flask itself as well as the examples and the unittests)
as well as documentation.
- The ":ref:`artwork-license`" applies to the project's Horn-Logo.
.. _flask-license:
Flask License
-------------
.. include:: ../LICENSE
.. _artwork-license:
Flask Artwork License
---------------------
.. include:: ../artwork/LICENSE
.. literalinclude:: ../LICENSE.txt
:language: text

171
docs/lifecycle.rst Normal file
View file

@ -0,0 +1,171 @@
Application Structure and Lifecycle
===================================
Flask makes it pretty easy to write a web application. But there are quite a few
different parts to an application and to each request it handles. Knowing what happens
during application setup, serving, and handling requests will help you know what's
possible in Flask and how to structure your application.
Application Setup
-----------------
The first step in creating a Flask application is creating the application object. Each
Flask application is an instance of the :class:`.Flask` class, which collects all
configuration, extensions, and views.
.. code-block:: python
from flask import Flask
app = Flask(__name__)
app.config.from_mapping(
SECRET_KEY="dev",
)
app.config.from_prefixed_env()
@app.route("/")
def index():
return "Hello, World!"
This is known as the "application setup phase", it's the code you write that's outside
any view functions or other handlers. It can be split up between different modules and
sub-packages, but all code that you want to be part of your application must be imported
in order for it to be registered.
All application setup must be completed before you start serving your application and
handling requests. This is because WSGI servers divide work between multiple workers, or
can be distributed across multiple machines. If the configuration changed in one worker,
there's no way for Flask to ensure consistency between other workers.
Flask tries to help developers catch some of these setup ordering issues by showing an
error if setup-related methods are called after requests are handled. In that case
you'll see this error:
The setup method 'route' can no longer be called on the application. It has already
handled its first request, any changes will not be applied consistently.
Make sure all imports, decorators, functions, etc. needed to set up the application
are done before running it.
However, it is not possible for Flask to detect all cases of out-of-order setup. In
general, don't do anything to modify the ``Flask`` app object and ``Blueprint`` objects
from within view functions that run during requests. This includes:
- Adding routes, view functions, and other request handlers with ``@app.route``,
``@app.errorhandler``, ``@app.before_request``, etc.
- Registering blueprints.
- Loading configuration with ``app.config``.
- Setting up the Jinja template environment with ``app.jinja_env``.
- Setting a session interface, instead of the default itsdangerous cookie.
- Setting a JSON provider with ``app.json``, instead of the default provider.
- Creating and initializing Flask extensions.
Serving the Application
-----------------------
Flask is a WSGI application framework. The other half of WSGI is the WSGI server. During
development, Flask, through Werkzeug, provides a development WSGI server with the
``flask run`` CLI command. When you are done with development, use a production server
to serve your application, see :doc:`deploying/index`.
Regardless of what server you're using, it will follow the :pep:`3333` WSGI spec. The
WSGI server will be told how to access your Flask application object, which is the WSGI
application. Then it will start listening for HTTP requests, translate the request data
into a WSGI environ, and call the WSGI application with that data. The WSGI application
will return data that is translated into an HTTP response.
#. Browser or other client makes HTTP request.
#. WSGI server receives request.
#. WSGI server converts HTTP data to WSGI ``environ`` dict.
#. WSGI server calls WSGI application with the ``environ``.
#. Flask, the WSGI application, does all its internal processing to route the request
to a view function, handle errors, etc.
#. Flask translates View function return into WSGI response data, passes it to WSGI
server.
#. WSGI server creates and send an HTTP response.
#. Client receives the HTTP response.
Middleware
~~~~~~~~~~
The WSGI application above is a callable that behaves in a certain way. Middleware
is a WSGI application that wraps another WSGI application. It's a similar concept to
Python decorators. The outermost middleware will be called by the server. It can modify
the data passed to it, then call the WSGI application (or further middleware) that it
wraps, and so on. And it can take the return value of that call and modify it further.
From the WSGI server's perspective, there is one WSGI application, the one it calls
directly. Typically, Flask is the "real" application at the end of the chain of
middleware. But even Flask can call further WSGI applications, although that's an
advanced, uncommon use case.
A common middleware you'll see used with Flask is Werkzeug's
:class:`~werkzeug.middleware.proxy_fix.ProxyFix`, which modifies the request to look
like it came directly from a client even if it passed through HTTP proxies on the way.
There are other middleware that can handle serving static files, authentication, etc.
How a Request is Handled
------------------------
For us, the interesting part of the steps above is when Flask gets called by the WSGI
server (or middleware). At that point, it will do quite a lot to handle the request and
generate the response. At the most basic, it will match the URL to a view function, call
the view function, and pass the return value back to the server. But there are many more
parts that you can use to customize its behavior.
#. WSGI server calls the Flask object, which calls :meth:`.Flask.wsgi_app`.
#. An :class:`.AppContext` object is created. This converts the WSGI ``environ``
dict into a :class:`.Request` object.
#. The :doc:`app context <appcontext>` is pushed, which makes
:data:`.current_app`, :data:`.g`, :data:`.request`, and :data:`.session`
available.
#. The :data:`.appcontext_pushed` signal is sent.
#. The URL is matched against the URL rules registered with the :meth:`~.Flask.route`
decorator during application setup. If there is no match, the error - usually a 404,
405, or redirect - is stored to be handled later.
#. The :data:`.request_started` signal is sent.
#. Any :meth:`~.Flask.url_value_preprocessor` decorated functions are called.
#. Any :meth:`~.Flask.before_request` decorated functions are called. If any of
these function returns a value it is treated as the response immediately.
#. If the URL didn't match a route a few steps ago, that error is raised now.
#. The :meth:`~.Flask.route` decorated view function associated with the matched URL
is called and returns a value to be used as the response.
#. If any step so far raised an exception, and there is an :meth:`~.Flask.errorhandler`
decorated function that matches the exception class or HTTP error code, it is
called to handle the error and return a response.
#. Whatever returned a response value - a before request function, the view, or an
error handler, that value is converted to a :class:`.Response` object.
#. Any :func:`~.after_this_request` decorated functions are called, which can modify
the response object. They are then cleared.
#. Any :meth:`~.Flask.after_request` decorated functions are called, which can modify
the response object.
#. The session is saved, persisting any modified session data using the app's
:attr:`~.Flask.session_interface`.
#. The :data:`.request_finished` signal is sent.
#. If any step so far raised an exception, and it was not handled by an error handler
function, it is handled now. HTTP exceptions are treated as responses with their
corresponding status code, other exceptions are converted to a generic 500 response.
The :data:`.got_request_exception` signal is sent.
#. The response object's status, headers, and body are returned to the WSGI server.
#. Any :meth:`~.Flask.teardown_request` decorated functions are called.
#. The :data:`.request_tearing_down` signal is sent.
#. Any :meth:`~.Flask.teardown_appcontext` decorated functions are called.
#. The :data:`.appcontext_tearing_down` signal is sent.
#. The app context is popped, :data:`.current_app`, :data:`.g`, :data:`.request`,
and :data:`.session` are no longer available.
#. The :data:`.appcontext_popped` signal is sent.
When executing a CLI command or plain app context without request data, the same
order of steps is followed, omitting the steps that refer to the request.
A :class:`Blueprint` can add handlers for these events that are specific to the
blueprint. The handlers for a blueprint will run if the blueprint
owns the route that matches the request.
There are even more decorators and customization points than this, but that aren't part
of every request lifecycle. They're more specific to certain things you might use during
a request, such as templates, building URLs, or handling JSON data. See the rest of this
documentation, as well as the :doc:`api` to explore further.

183
docs/logging.rst Normal file
View file

@ -0,0 +1,183 @@
Logging
=======
Flask uses standard Python :mod:`logging`. Messages about your Flask
application are logged with :meth:`app.logger <flask.Flask.logger>`,
which takes the same name as :attr:`app.name <flask.Flask.name>`. This
logger can also be used to log your own messages.
.. code-block:: python
@app.route('/login', methods=['POST'])
def login():
user = get_user(request.form['username'])
if user.check_password(request.form['password']):
login_user(user)
app.logger.info('%s logged in successfully', user.username)
return redirect(url_for('index'))
else:
app.logger.info('%s failed to log in', user.username)
abort(401)
If you don't configure logging, Python's default log level is usually
'warning'. Nothing below the configured level will be visible.
Basic Configuration
-------------------
When you want to configure logging for your project, you should do it as soon
as possible when the program starts. If :meth:`app.logger <flask.Flask.logger>`
is accessed before logging is configured, it will add a default handler. If
possible, configure logging before creating the application object.
This example uses :func:`~logging.config.dictConfig` to create a logging
configuration similar to Flask's default, except for all logs::
from logging.config import dictConfig
dictConfig({
'version': 1,
'formatters': {'default': {
'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s',
}},
'handlers': {'wsgi': {
'class': 'logging.StreamHandler',
'stream': 'ext://flask.logging.wsgi_errors_stream',
'formatter': 'default'
}},
'root': {
'level': 'INFO',
'handlers': ['wsgi']
}
})
app = Flask(__name__)
Default Configuration
`````````````````````
If you do not configure logging yourself, Flask will add a
:class:`~logging.StreamHandler` to :meth:`app.logger <flask.Flask.logger>`
automatically. During requests, it will write to the stream specified by the
WSGI server in ``environ['wsgi.errors']`` (which is usually
:data:`sys.stderr`). Outside a request, it will log to :data:`sys.stderr`.
Removing the Default Handler
````````````````````````````
If you configured logging after accessing
:meth:`app.logger <flask.Flask.logger>`, and need to remove the default
handler, you can import and remove it::
from flask.logging import default_handler
app.logger.removeHandler(default_handler)
Email Errors to Admins
----------------------
When running the application on a remote server for production, you probably
won't be looking at the log messages very often. The WSGI server will probably
send log messages to a file, and you'll only check that file if a user tells
you something went wrong.
To be proactive about discovering and fixing bugs, you can configure a
:class:`logging.handlers.SMTPHandler` to send an email when errors and higher
are logged. ::
import logging
from logging.handlers import SMTPHandler
mail_handler = SMTPHandler(
mailhost='127.0.0.1',
fromaddr='server-error@example.com',
toaddrs=['admin@example.com'],
subject='Application Error'
)
mail_handler.setLevel(logging.ERROR)
mail_handler.setFormatter(logging.Formatter(
'[%(asctime)s] %(levelname)s in %(module)s: %(message)s'
))
if not app.debug:
app.logger.addHandler(mail_handler)
This requires that you have an SMTP server set up on the same server. See the
Python docs for more information about configuring the handler.
Injecting Request Information
-----------------------------
Seeing more information about the request, such as the IP address, may help
debugging some errors. You can subclass :class:`logging.Formatter` to inject
your own fields that can be used in messages. You can change the formatter for
Flask's default handler, the mail handler defined above, or any other
handler. ::
from flask import has_request_context, request
from flask.logging import default_handler
class RequestFormatter(logging.Formatter):
def format(self, record):
if has_request_context():
record.url = request.url
record.remote_addr = request.remote_addr
else:
record.url = None
record.remote_addr = None
return super().format(record)
formatter = RequestFormatter(
'[%(asctime)s] %(remote_addr)s requested %(url)s\n'
'%(levelname)s in %(module)s: %(message)s'
)
default_handler.setFormatter(formatter)
mail_handler.setFormatter(formatter)
Other Libraries
---------------
Other libraries may use logging extensively, and you want to see relevant
messages from those logs too. The simplest way to do this is to add handlers
to the root logger instead of only the app logger. ::
from flask.logging import default_handler
root = logging.getLogger()
root.addHandler(default_handler)
root.addHandler(mail_handler)
Depending on your project, it may be more useful to configure each logger you
care about separately, instead of configuring only the root logger. ::
for logger in (
logging.getLogger(app.name),
logging.getLogger('sqlalchemy'),
logging.getLogger('other_package'),
):
logger.addHandler(default_handler)
logger.addHandler(mail_handler)
Werkzeug
````````
Werkzeug logs basic request/response information to the ``'werkzeug'`` logger.
If the root logger has no handlers configured, Werkzeug adds a
:class:`~logging.StreamHandler` to its logger.
Flask Extensions
````````````````
Depending on the situation, an extension may choose to log to
:meth:`app.logger <flask.Flask.logger>` or its own named logger. Consult each
extension's documentation for details.

Binary file not shown.

View file

@ -1,139 +1,35 @@
@ECHO OFF
pushd %~dp0
REM Command file for Sphinx documentation
if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=.
set BUILDDIR=_build
set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
if NOT "%PAPER%" == "" (
set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
)
if "%1" == "" goto help
if "%1" == "help" (
:help
echo.Please use `make ^<target^>` where ^<target^> is one of
echo. html to make standalone HTML files
echo. dirhtml to make HTML files named index.html in directories
echo. singlehtml to make a single large HTML file
echo. pickle to make pickle files
echo. json to make JSON files
echo. htmlhelp to make HTML files and a HTML help project
echo. qthelp to make HTML files and a qthelp project
echo. devhelp to make HTML files and a Devhelp project
echo. epub to make an epub
echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
echo. changes to make an overview over all changed/added/deprecated items
echo. linkcheck to check all external links for integrity
echo. doctest to run all doctests embedded in the documentation if enabled
goto end
)
if "%1" == "clean" (
for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
del /q /s %BUILDDIR%\*
goto end
)
if "%1" == "html" (
%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.Build finished. The HTML pages are in %BUILDDIR%/html.
goto end
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
echo.installed, then set the SPHINXBUILD environment variable to point
echo.to the full path of the 'sphinx-build' executable. Alternatively you
echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.http://sphinx-doc.org/
exit /b 1
)
if "%1" == "dirhtml" (
%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
echo.
echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
goto end
)
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
goto end
if "%1" == "singlehtml" (
%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
echo.
echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
goto end
)
if "%1" == "pickle" (
%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
echo.
echo.Build finished; now you can process the pickle files.
goto end
)
if "%1" == "json" (
%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
echo.
echo.Build finished; now you can process the JSON files.
goto end
)
if "%1" == "htmlhelp" (
%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
echo.
echo.Build finished; now you can run HTML Help Workshop with the ^
.hhp project file in %BUILDDIR%/htmlhelp.
goto end
)
if "%1" == "qthelp" (
%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
echo.
echo.Build finished; now you can run "qcollectiongenerator" with the ^
.qhcp project file in %BUILDDIR%/qthelp, like this:
echo.^> qcollectiongenerator %BUILDDIR%\qthelp\Flask.qhcp
echo.To view the help file:
echo.^> assistant -collectionFile %BUILDDIR%\qthelp\Flask.ghc
goto end
)
if "%1" == "devhelp" (
%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% _build/devhelp
echo.
echo.Build finished.
goto end
)
if "%1" == "epub" (
%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
echo.
echo.Build finished. The epub file is in %BUILDDIR%/epub.
goto end
)
if "%1" == "latex" (
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
echo.
echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
goto end
)
if "%1" == "changes" (
%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
echo.
echo.The overview file is in %BUILDDIR%/changes.
goto end
)
if "%1" == "linkcheck" (
%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
echo.
echo.Link check complete; look for any errors in the above output ^
or in %BUILDDIR%/linkcheck/output.txt.
goto end
)
if "%1" == "doctest" (
%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
echo.
echo.Testing of doctests in the sources finished, look at the ^
results in %BUILDDIR%/doctest/output.txt.
goto end
)
:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
:end
popd

View file

@ -1,34 +1,36 @@
.. _app-dispatch:
Application Dispatching
=======================
Application dispatching is the process of combining multiple Flask
applications on the WSGI level. You can not only combine Flask
applications into something larger but any WSGI application. This would
even allow you to run a Django and a Flask application in the same
interpreter side by side if you want. The usefulness of this depends on
how the applications work internally.
applications on the WSGI level. You can combine not only Flask
applications but any WSGI application. This would allow you to run a
Django and a Flask application in the same interpreter side by side if
you want. The usefulness of this depends on how the applications work
internally.
The fundamental difference from the :ref:`module approach
<larger-applications>` is that in this case you are running the same or
different Flask applications that are entirely isolated from each other.
They run different configurations and are dispatched on the WSGI level.
The fundamental difference from :doc:`packages` is that in this case you
are running the same or different Flask applications that are entirely
isolated from each other. They run different configurations and are
dispatched on the WSGI level.
Working with this Document
--------------------------
Each of the techniques and examples below results in an ``application`` object
that can be run with any WSGI server. For production, see :ref:`deployment`.
For development, Werkzeug provides a builtin server for development available
at :func:`werkzeug.serving.run_simple`::
Each of the techniques and examples below results in an ``application``
object that can be run with any WSGI server. For development, use the
``flask run`` command to start a development server. For production, see
:doc:`/deploying/index`.
from werkzeug.serving import run_simple
run_simple('localhost', 5000, application, use_reloader=True)
.. code-block:: python
Note that :func:`run_simple <werkzeug.serving.run_simple>` is not intended for
use in production. Use a :ref:`full-blown WSGI server <deployment>`.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
Combining Applications
@ -38,18 +40,20 @@ If you have entirely separated applications and you want them to work next
to each other in the same Python interpreter process you can take
advantage of the :class:`werkzeug.wsgi.DispatcherMiddleware`. The idea
here is that each Flask application is a valid WSGI application and they
are combined by the dispatcher middleware into a larger one that
are combined by the dispatcher middleware into a larger one that is
dispatched based on prefix.
For example you could have your main application run on `/` and your
backend interface on `/backend`::
For example you could have your main application run on ``/`` and your
backend interface on ``/backend``.
from werkzeug.wsgi import DispatcherMiddleware
.. code-block:: python
from werkzeug.middleware.dispatcher import DispatcherMiddleware
from frontend_app import application as frontend
from backend_app import application as backend
application = DispatcherMiddleware(frontend, {
'/backend': backend
'/backend': backend
})
@ -58,10 +62,10 @@ Dispatch by Subdomain
Sometimes you might want to use multiple instances of the same application
with different configurations. Assuming the application is created inside
a function and you can call that function to instanciate it, that is
a function and you can call that function to instantiate it, that is
really easy to implement. In order to develop your application to support
creating new instances in functions have a look at the
:ref:`app-factories` pattern.
:doc:`appfactories` pattern.
A very common example would be creating applications per subdomain. For
instance you configure your webserver to dispatch all requests for all
@ -72,12 +76,14 @@ the dynamic application creation.
The perfect level for abstraction in that regard is the WSGI layer. You
write your own WSGI application that looks at the request that comes and
and delegates it to your Flask application. If that application does not
exist yet, it is dynamically created and remembered::
delegates it to your Flask application. If that application does not
exist yet, it is dynamically created and remembered.
.. code-block:: python
from threading import Lock
class SubdomainDispatcher(object):
class SubdomainDispatcher:
def __init__(self, domain, create_app):
self.domain = domain
@ -101,7 +107,9 @@ exist yet, it is dynamically created and remembered::
return app(environ, start_response)
This dispatcher can then be used like this::
This dispatcher can then be used like this:
.. code-block:: python
from myapplication import create_app, get_user_for_subdomain
from werkzeug.exceptions import NotFound
@ -126,13 +134,15 @@ Dispatch by Path
----------------
Dispatching by a path on the URL is very similar. Instead of looking at
the `Host` header to figure out the subdomain one simply looks at the
request path up to the first slash::
the ``Host`` header to figure out the subdomain one simply looks at the
request path up to the first slash.
.. code-block:: python
from threading import Lock
from werkzeug.wsgi import pop_path_info, peek_path_info
from wsgiref.util import shift_path_info
class PathDispatcher(object):
class PathDispatcher:
def __init__(self, default_app, create_app):
self.default_app = default_app
@ -150,15 +160,24 @@ request path up to the first slash::
return app
def __call__(self, environ, start_response):
app = self.get_application(peek_path_info(environ))
app = self.get_application(_peek_path_info(environ))
if app is not None:
pop_path_info(environ)
shift_path_info(environ)
else:
app = self.default_app
return app(environ, start_response)
def _peek_path_info(environ):
segments = environ.get("PATH_INFO", "").lstrip("/").split("/", 1)
if segments:
return segments[0]
return None
The big difference between this and the subdomain one is that this one
falls back to another application if the creator function returns `None`::
falls back to another application if the creator function returns ``None``.
.. code-block:: python
from myapplication import create_app, default_app, get_user_for_prefix

View file

@ -1,13 +1,11 @@
.. _app-factories:
Application Factories
=====================
If you are already using packages and blueprints for your application
(:ref:`blueprints`) there are a couple of really nice ways to further improve
(:doc:`/blueprints`) there are a couple of really nice ways to further improve
the experience. A common pattern is creating the application object when
the blueprint is imported. But if you move the creation of this object,
into a function, you can then create multiple instances of this and later.
the blueprint is imported. But if you move the creation of this object
into a function, you can then create multiple instances of this app later.
So why would you want to do this?
@ -30,6 +28,9 @@ The idea is to set up the application in a function. Like this::
app = Flask(__name__)
app.config.from_pyfile(config_filename)
from yourapplication.model import db
db.init_app(app)
from yourapplication.views.admin import admin
from yourapplication.views.frontend import frontend
app.register_blueprint(admin)
@ -51,25 +52,67 @@ get access to the application with the config? Use
Here we look up the name of a template in the config.
Factories & Extensions
----------------------
It's preferable to create your extensions and app factories so that the
extension object does not initially get bound to the application.
Using `Flask-SQLAlchemy <https://flask-sqlalchemy.palletsprojects.com/>`_,
as an example, you should not do something along those lines::
def create_app(config_filename):
app = Flask(__name__)
app.config.from_pyfile(config_filename)
db = SQLAlchemy(app)
But, rather, in model.py (or equivalent)::
db = SQLAlchemy()
and in your application.py (or equivalent)::
def create_app(config_filename):
app = Flask(__name__)
app.config.from_pyfile(config_filename)
from yourapplication.model import db
db.init_app(app)
Using this design pattern, no application-specific state is stored on the
extension object, so one extension object can be used for multiple apps.
For more information about the design of extensions refer to :doc:`/extensiondev`.
Using Applications
------------------
So to use such an application you then have to create the application
first. Here an example `run.py` file that runs such an application::
To run such an application, you can use the :command:`flask` command:
from yourapplication import create_app
app = create_app('/path/to/config.cfg')
app.run()
.. code-block:: text
$ flask --app hello run
Flask will automatically detect the factory if it is named
``create_app`` or ``make_app`` in ``hello``. You can also pass arguments
to the factory like this:
.. code-block:: text
$ flask --app 'hello:create_app(local_auth=True)' run
Then the ``create_app`` factory in ``hello`` is called with the keyword
argument ``local_auth=True``. See :doc:`/cli` for more detail.
Factory Improvements
--------------------
The factory function from above is not very clever so far, you can improve
it. The following changes are straightforward and possible:
The factory function above is not very clever, but you can improve it.
The following changes are straightforward to implement:
1. make it possible to pass in configuration values for unittests so that
you don't have to create config files on the filesystem
2. call a function from a blueprint when the application is setting up so
1. Make it possible to pass in configuration values for unit tests so that
you don't have to create config files on the filesystem.
2. Call a function from a blueprint when the application is setting up so
that you have a place to modify attributes of the application (like
hooking in before / after request handlers etc.)
3. Add in WSGI middlewares when the application is creating if necessary.
hooking in before/after request handlers etc.)
3. Add in WSGI middlewares when the application is being created if necessary.

View file

@ -1,5 +1,3 @@
.. _caching-pattern:
Caching
=======
@ -10,60 +8,9 @@ still be good enough if they were 5 minutes old. So then the idea is that
you actually put the result of that calculation into a cache for some
time.
Flask itself does not provide caching for you, but Werkzeug, one of the
libraries it is based on, has some very basic cache support. It supports
multiple cache backends, normally you want to use a memcached server.
Flask itself does not provide caching for you, but `Flask-Caching`_, an
extension for Flask does. Flask-Caching supports various backends, and it is
even possible to develop your own caching backend.
Setting up a Cache
------------------
You create a cache object once and keep it around, similar to how
:class:`~flask.Flask` objects are created. If you are using the
development server you can create a
:class:`~werkzeug.contrib.cache.SimpleCache` object, that one is a simple
cache that keeps the item stored in the memory of the Python interpreter::
from werkzeug.contrib.cache import SimpleCache
cache = SimpleCache()
If you want to use memcached, make sure to have one of the memcache modules
supported (you get them from `PyPI <http://pypi.python.org/>`_) and a
memcached server running somewhere. This is how you connect to such an
memcached server then::
from werkzeug.contrib.cache import MemcachedCache
cache = MemcachedCache(['127.0.0.1:11211'])
If you are using App Engine, you can connect to the App Engine memcache
server easily::
from werkzeug.contrib.cache import GAEMemcachedCache
cache = GAEMemcachedCache()
Using a Cache
-------------
Now how can one use such a cache? There are two very important
operations: :meth:`~werkzeug.contrib.cache.BaseCache.get` and
:meth:`~werkzeug.contrib.cache.BaseCache.set`. This is how to use them:
To get an item from the cache call
:meth:`~werkzeug.contrib.cache.BaseCache.get` with a string as key name.
If something is in the cache, it is returned. Otherwise that function
will return `None`::
rv = cache.get('my-item')
To add items to the cache, use the :meth:`~werkzeug.contrib.cache.BaseCache.set`
method instead. The first argument is the key and the second the value
that should be set. Also a timeout can be provided after which the cache
will automatically remove item.
Here a full example how this looks like normally::
def get_my_item():
rv = cache.get('my-item')
if rv is None:
rv = calculate_value()
cache.set('my-item', rv, timeout=5 * 60)
return rv
.. _Flask-Caching: https://flask-caching.readthedocs.io/en/latest/

242
docs/patterns/celery.rst Normal file
View file

@ -0,0 +1,242 @@
Background Tasks with Celery
============================
If your application has a long running task, such as processing some uploaded data or
sending email, you don't want to wait for it to finish during a request. Instead, use a
task queue to send the necessary data to another process that will run the task in the
background while the request returns immediately.
`Celery`_ is a powerful task queue that can be used for simple background tasks as well
as complex multi-stage programs and schedules. This guide will show you how to configure
Celery using Flask. Read Celery's `First Steps with Celery`_ guide to learn how to use
Celery itself.
.. _Celery: https://celery.readthedocs.io
.. _First Steps with Celery: https://celery.readthedocs.io/en/latest/getting-started/first-steps-with-celery.html
The Flask repository contains `an example <https://github.com/pallets/flask/tree/main/examples/celery>`_
based on the information on this page, which also shows how to use JavaScript to submit
tasks and poll for progress and results.
Install
-------
Install Celery from PyPI, for example using pip:
.. code-block:: text
$ pip install celery
Integrate Celery with Flask
---------------------------
You can use Celery without any integration with Flask, but it's convenient to configure
it through Flask's config, and to let tasks access the Flask application.
Celery uses similar ideas to Flask, with a ``Celery`` app object that has configuration
and registers tasks. While creating a Flask app, use the following code to create and
configure a Celery app as well.
.. code-block:: python
from celery import Celery, Task
def celery_init_app(app: Flask) -> Celery:
class FlaskTask(Task):
def __call__(self, *args: object, **kwargs: object) -> object:
with app.app_context():
return self.run(*args, **kwargs)
celery_app = Celery(app.name, task_cls=FlaskTask)
celery_app.config_from_object(app.config["CELERY"])
celery_app.set_default()
app.extensions["celery"] = celery_app
return celery_app
This creates and returns a ``Celery`` app object. Celery `configuration`_ is taken from
the ``CELERY`` key in the Flask configuration. The Celery app is set as the default, so
that it is seen during each request. The ``Task`` subclass automatically runs task
functions with a Flask app context active, so that services like your database
connections are available.
.. _configuration: https://celery.readthedocs.io/en/stable/userguide/configuration.html
Here's a basic ``example.py`` that configures Celery to use Redis for communication. We
enable a result backend, but ignore results by default. This allows us to store results
only for tasks where we care about the result.
.. code-block:: python
from flask import Flask
app = Flask(__name__)
app.config.from_mapping(
CELERY=dict(
broker_url="redis://localhost",
result_backend="redis://localhost",
task_ignore_result=True,
),
)
celery_app = celery_init_app(app)
Point the ``celery worker`` command at this and it will find the ``celery_app`` object.
.. code-block:: text
$ celery -A example worker --loglevel INFO
You can also run the ``celery beat`` command to run tasks on a schedule. See Celery's
docs for more information about defining schedules.
.. code-block:: text
$ celery -A example beat --loglevel INFO
Application Factory
-------------------
When using the Flask application factory pattern, call the ``celery_init_app`` function
inside the factory. It sets ``app.extensions["celery"]`` to the Celery app object, which
can be used to get the Celery app from the Flask app returned by the factory.
.. code-block:: python
def create_app() -> Flask:
app = Flask(__name__)
app.config.from_mapping(
CELERY=dict(
broker_url="redis://localhost",
result_backend="redis://localhost",
task_ignore_result=True,
),
)
app.config.from_prefixed_env()
celery_init_app(app)
return app
To use ``celery`` commands, Celery needs an app object, but that's no longer directly
available. Create a ``make_celery.py`` file that calls the Flask app factory and gets
the Celery app from the returned Flask app.
.. code-block:: python
from example import create_app
flask_app = create_app()
celery_app = flask_app.extensions["celery"]
Point the ``celery`` command to this file.
.. code-block:: text
$ celery -A make_celery worker --loglevel INFO
$ celery -A make_celery beat --loglevel INFO
Defining Tasks
--------------
Using ``@celery_app.task`` to decorate task functions requires access to the
``celery_app`` object, which won't be available when using the factory pattern. It also
means that the decorated tasks are tied to the specific Flask and Celery app instances,
which could be an issue during testing if you change configuration for a test.
Instead, use Celery's ``@shared_task`` decorator. This creates task objects that will
access whatever the "current app" is, which is a similar concept to Flask's blueprints
and app context. This is why we called ``celery_app.set_default()`` above.
Here's an example task that adds two numbers together and returns the result.
.. code-block:: python
from celery import shared_task
@shared_task(ignore_result=False)
def add_together(a: int, b: int) -> int:
return a + b
Earlier, we configured Celery to ignore task results by default. Since we want to know
the return value of this task, we set ``ignore_result=False``. On the other hand, a task
that didn't need a result, such as sending an email, wouldn't set this.
Calling Tasks
-------------
The decorated function becomes a task object with methods to call it in the background.
The simplest way is to use the ``delay(*args, **kwargs)`` method. See Celery's docs for
more methods.
A Celery worker must be running to run the task. Starting a worker is shown in the
previous sections.
.. code-block:: python
from flask import request
@app.post("/add")
def start_add() -> dict[str, object]:
a = request.form.get("a", type=int)
b = request.form.get("b", type=int)
result = add_together.delay(a, b)
return {"result_id": result.id}
The route doesn't get the task's result immediately. That would defeat the purpose by
blocking the response. Instead, we return the running task's result id, which we can use
later to get the result.
Getting Results
---------------
To fetch the result of the task we started above, we'll add another route that takes the
result id we returned before. We return whether the task is finished (ready), whether it
finished successfully, and what the return value (or error) was if it is finished.
.. code-block:: python
from celery.result import AsyncResult
@app.get("/result/<id>")
def task_result(id: str) -> dict[str, object]:
result = AsyncResult(id)
return {
"ready": result.ready(),
"successful": result.successful(),
"value": result.result if result.ready() else None,
}
Now you can start the task using the first route, then poll for the result using the
second route. This keeps the Flask request workers from being blocked waiting for tasks
to finish.
The Flask repository contains `an example <https://github.com/pallets/flask/tree/main/examples/celery>`_
using JavaScript to submit tasks and poll for progress and results.
Passing Data to Tasks
---------------------
The "add" task above took two integers as arguments. To pass arguments to tasks, Celery
has to serialize them to a format that it can pass to other processes. Therefore,
passing complex objects is not recommended. For example, it would be impossible to pass
a SQLAlchemy model object, since that object is probably not serializable and is tied to
the session that queried it.
Pass the minimal amount of data necessary to fetch or recreate any complex data within
the task. Consider a task that will run when the logged in user asks for an archive of
their data. The Flask request knows the logged in user, and has the user object queried
from the database. It got that by querying the database for a given id, so the task can
do the same thing. Pass the user's id rather than the user object.
.. code-block:: python
@shared_task
def generate_user_archive(user_id: str) -> None:
user = db.session.get(User, user_id)
...
generate_user_archive.delay(current_user.id)

View file

@ -1,73 +1,44 @@
.. _deferred-callbacks:
Deferred Request Callbacks
==========================
One of the design principles of Flask is that response objects are created
and passed down a chain of potential callbacks that can modify them or
replace them. When the request handling starts, there is no response
object yet. It is created as necessary either by a view function or by
some other component in the system.
One of the design principles of Flask is that response objects are created and
passed down a chain of potential callbacks that can modify them or replace
them. When the request handling starts, there is no response object yet. It is
created as necessary either by a view function or by some other component in
the system.
But what happens if you want to modify the response at a point where the
response does not exist yet? A common example for that would be a
before-request function that wants to set a cookie on the response object.
What happens if you want to modify the response at a point where the response
does not exist yet? A common example for that would be a
:meth:`~flask.Flask.before_request` callback that wants to set a cookie on the
response object.
One way is to avoid the situation. Very often that is possible. For
instance you can try to move that logic into an after-request callback
instead. Sometimes however moving that code there is just not a very
pleasant experience or makes code look very awkward.
One way is to avoid the situation. Very often that is possible. For instance
you can try to move that logic into a :meth:`~flask.Flask.after_request`
callback instead. However, sometimes moving code there makes it
more complicated or awkward to reason about.
As an alternative possibility you can attach a bunch of callback functions
to the :data:`~flask.g` object and call then at the end of the request.
This way you can defer code execution from anywhere in the application.
As an alternative, you can use :func:`~flask.after_this_request` to register
callbacks that will execute after only the current request. This way you can
defer code execution from anywhere in the application, based on the current
request.
At any time during a request, we can register a function to be called at the
end of the request. For example you can remember the current language of the
user in a cookie in a :meth:`~flask.Flask.before_request` callback::
The Decorator
-------------
The following decorator is the key. It registers a function on a list on
the :data:`~flask.g` object::
from flask import g
def after_this_request(f):
if not hasattr(g, 'after_request_callbacks'):
g.after_request_callbacks = []
g.after_request_callbacks.append(f)
return f
Calling the Deferred
--------------------
Now you can use the `after_this_request` decorator to mark a function to
be called at the end of the request. But we still need to call them. For
this the following function needs to be registered as
:meth:`~flask.Flask.after_request` callback::
@app.after_request
def call_after_request_callbacks(response):
for callback in getattr(g, 'after_request_callbacks', ()):
response = callback(response)
return response
A Practical Example
-------------------
Now we can easily at any point in time register a function to be called at
the end of this particular request. For example you can remember the
current language of the user in a cookie in the before-request function::
from flask import request
from flask import request, after_this_request
@app.before_request
def detect_user_language():
language = request.cookies.get('user_lang')
if language is None:
language = guess_language_from_request()
# when the response exists, set a cookie with the language
@after_this_request
def remember_language(response):
response.set_cookie('user_lang', language)
return response
g.language = language

View file

@ -1,166 +0,0 @@
.. _distribute-deployment:
Deploying with Distribute
=========================
`distribute`_, formerly setuptools, is an extension library that is
commonly used to (like the name says) distribute Python libraries and
extensions. It extends distutils, a basic module installation system
shipped with Python to also support various more complex constructs that
make larger applications easier to distribute:
- **support for dependencies**: a library or application can declare a
list of other libraries it depends on which will be installed
automatically for you.
- **package registry**: setuptools registers your package with your
Python installation. This makes it possible to query information
provided by one package from another package. The best known feature of
this system is the entry point support which allows one package to
declare an "entry point" another package can hook into to extend the
other package.
- **installation manager**: `easy_install`, which comes with distribute
can install other libraries for you. You can also use `pip`_ which
sooner or later will replace `easy_install` which does more than just
installing packages for you.
Flask itself, and all the libraries you can find on the cheeseshop
are distributed with either distribute, the older setuptools or distutils.
In this case we assume your application is called
`yourapplication.py` and you are not using a module, but a :ref:`package
<larger-applications>`. Distributing resources with standard modules is
not supported by `distribute`_ so we will not bother with it. If you have
not yet converted your application into a package, head over to the
:ref:`larger-applications` pattern to see how this can be done.
A working deployment with distribute is the first step into more complex
and more automated deployment scenarios. If you want to fully automate
the process, also read the :ref:`fabric-deployment` chapter.
Basic Setup Script
------------------
Because you have Flask running, you either have setuptools or distribute
available on your system anyways. If you do not, fear not, there is a
script to install it for you: `distribute_setup.py`_. Just download and
run with your Python interpreter.
Standard disclaimer applies: :ref:`you better use a virtualenv
<virtualenv>`.
Your setup code always goes into a file named `setup.py` next to your
application. The name of the file is only convention, but because
everybody will look for a file with that name, you better not change it.
Yes, even if you are using `distribute`, you are importing from a package
called `setuptools`. `distribute` is fully backwards compatible with
`setuptools`, so it also uses the same import name.
A basic `setup.py` file for a Flask application looks like this::
from setuptools import setup
setup(
name='Your Application',
version='1.0',
long_description=__doc__,
packages=['yourapplication'],
include_package_data=True,
zip_safe=False,
install_requires=['Flask']
)
Please keep in mind that you have to list subpackages explicitly. If you
want distribute to lookup the packages for you automatically, you can use
the `find_packages` function::
from setuptools import setup, find_packages
setup(
...
packages=find_packages()
)
Most parameters to the `setup` function should be self explanatory,
`include_package_data` and `zip_safe` might not be.
`include_package_data` tells distribute to look for a `MANIFEST.in` file
and install all the entries that match as package data. We will use this
to distribute the static files and templates along with the Python module
(see :ref:`distributing-resources`). The `zip_safe` flag can be used to
force or prevent zip Archive creation. In general you probably don't want
your packages to be installed as zip files because some tools do not
support them and they make debugging a lot harder.
.. _distributing-resources:
Distributing Resources
----------------------
If you try to install the package you just created, you will notice that
folders like `static` or `templates` are not installed for you. The
reason for this is that distribute does not know which files to add for
you. What you should do, is to create a `MANIFEST.in` file next to your
`setup.py` file. This file lists all the files that should be added to
your tarball::
recursive-include yourapplication/templates *
recursive-include yourapplication/static *
Don't forget that even if you enlist them in your `MANIFEST.in` file, they
won't be installed for you unless you set the `include_package_data`
parameter of the `setup` function to `True`!
Declaring Dependencies
----------------------
Dependencies are declared in the `install_requires` parameter as list.
Each item in that list is the name of a package that should be pulled from
PyPI on installation. By default it will always use the most recent
version, but you can also provide minimum and maximum version
requirements. Here some examples::
install_requires=[
'Flask>=0.2',
'SQLAlchemy>=0.6',
'BrokenPackage>=0.7,<=1.0'
]
I mentioned earlier that dependencies are pulled from PyPI. What if you
want to depend on a package that cannot be found on PyPI and won't be
because it is an internal package you don't want to share with anyone?
Just still do as if there was a PyPI entry for it and provide a list of
alternative locations where distribute should look for tarballs::
dependency_links=['http://example.com/yourfiles']
Make sure that page has a directory listing and the links on the page are
pointing to the actual tarballs with their correct filenames as this is
how distribute will find the files. If you have an internal company
server that contains the packages, provide the URL to that server there.
Installing / Developing
-----------------------
To install your application (ideally into a virtualenv) just run the
`setup.py` script with the `install` parameter. It will install your
application into the virtualenv's site-packages folder and also download
and install all dependencies::
$ python setup.py install
If you are developing on the package and also want the requirements to be
installed, you can use the `develop` command instead::
$ python setup.py develop
This has the advantage of just installing a link to the site-packages
folder instead of copying the data over. You can then continue to work on
the code without having to run `install` again after each change.
.. _distribute: http://pypi.python.org/pypi/distribute
.. _pip: http://pypi.python.org/pypi/pip
.. _distribute_setup.py: http://python-distribute.org/distribute_setup.py

View file

@ -1,77 +0,0 @@
Custom Error Pages
==================
Flask comes with a handy :func:`~flask.abort` function that aborts a
request with an HTTP error code early. It will also provide a plain black
and white error page for you with a basic description, but nothing fancy.
Depending on the error code it is less or more likely for the user to
actually see such an error.
Common Error Codes
------------------
The following error codes are some that are often displayed to the user,
even if the application behaves correctly:
*404 Not Found*
The good old "chap, you made a mistake typing that URL" message. So
common that even novices to the internet know that 404 means: damn,
the thing I was looking for is not there. It's a very good idea to
make sure there is actually something useful on a 404 page, at least a
link back to the index.
*403 Forbidden*
If you have some kind of access control on your website, you will have
to send a 403 code for disallowed resources. So make sure the user
is not lost when they try to access a forbidden resource.
*410 Gone*
Did you know that there the "404 Not Found" has a brother named "410
Gone"? Few people actually implement that, but the idea is that
resources that previously existed and got deleted answer with 410
instead of 404. If you are not deleting documents permanently from
the database but just mark them as deleted, do the user a favour and
use the 410 code instead and display a message that what they were
looking for was deleted for all eternity.
*500 Internal Server Error*
Usually happens on programming errors or if the server is overloaded.
A terrible good idea to have a nice page there, because your
application *will* fail sooner or later (see also:
:ref:`application-errors`).
Error Handlers
--------------
An error handler is a function, just like a view function, but it is
called when an error happens and is passed that error. The error is most
likely a :exc:`~werkzeug.exceptions.HTTPException`, but in one case it
can be a different error: a handler for internal server errors will be
passed other exception instances as well if they are uncaught.
An error handler is registered with the :meth:`~flask.Flask.errorhandler`
decorator and the error code of the exception. Keep in mind that Flask
will *not* set the error code for you, so make sure to also provide the
HTTP status code when returning a response.
Here an example implementation for a "404 Page Not Found" exception::
from flask import render_template
@app.errorhandler(404)
def page_not_found(e):
return render_template('404.html'), 404
An example template might be this:
.. sourcecode:: html+jinja
{% extends "layout.html" %}
{% block title %}Page Not Found{% endblock %}
{% block body %}
<h1>Page Not Found</h1>
<p>What you were looking for is just not there.
<p><a href="{{ url_for('index') }}">go somewhere nice</a>
{% endblock %}

View file

@ -1,196 +0,0 @@
.. _fabric-deployment:
Deploying with Fabric
=====================
`Fabric`_ is a tool for Python similar to Makefiles but with the ability
to execute commands on a remote server. In combination with a properly
set up Python package (:ref:`larger-applications`) and a good concept for
configurations (:ref:`config`) it is very easy to deploy Flask
applications to external servers.
Before we get started, here a quick checklist of things we have to ensure
upfront:
- Fabric 1.0 has to be installed locally. This tutorial assumes the
latest version of Fabric.
- The application already has to be a package and requires a working
`setup.py` file (:ref:`distribute-deployment`).
- In the following example we are using `mod_wsgi` for the remote
servers. You can of course use your own favourite server there, but
for this example we chose Apache + `mod_wsgi` because it's very easy
to setup and has a simple way to reload applications without root
access.
Creating the first Fabfile
--------------------------
A fabfile is what controls what Fabric executes. It is named `fabfile.py`
and executed by the `fab` command. All the functions defined in that file
will show up as `fab` subcommands. They are executed on one or more
hosts. These hosts can be defined either in the fabfile or on the command
line. In this case we will add them to the fabfile.
This is a basic first example that has the ability to upload the current
sourcecode to the server and install it into a pre-existing
virtual environment::
from fabric.api import *
# the user to use for the remote commands
env.user = 'appuser'
# the servers where the commands are executed
env.hosts = ['server1.example.com', 'server2.example.com']
def pack():
# create a new source distribution as tarball
local('python setup.py sdist --formats=gztar', capture=False)
def deploy():
# figure out the release name and version
dist = local('python setup.py --fullname', capture=True).strip()
# upload the source tarball to the temporary folder on the server
put('dist/%s.tar.gz' % dist, '/tmp/yourapplication.tar.gz')
# create a place where we can unzip the tarball, then enter
# that directory and unzip it
run('mkdir /tmp/yourapplication')
with cd('/tmp/yourapplication'):
run('tar xzf /tmp/yourapplication.tar.gz')
# now setup the package with our virtual environment's
# python interpreter
run('/var/www/yourapplication/env/bin/python setup.py install')
# now that all is set up, delete the folder again
run('rm -rf /tmp/yourapplication /tmp/yourapplication.tar.gz')
# and finally touch the .wsgi file so that mod_wsgi triggers
# a reload of the application
run('touch /var/www/yourapplication.wsgi')
The example above is well documented and should be straightforward. Here
a recap of the most common commands fabric provides:
- `run` - executes a command on a remote server
- `local` - executes a command on the local machine
- `put` - uploads a file to the remote server
- `cd` - changes the directory on the serverside. This has to be used
in combination with the `with` statement.
Running Fabfiles
----------------
Now how do you execute that fabfile? You use the `fab` command. To
deploy the current version of the code on the remote server you would use
this command::
$ fab pack deploy
However this requires that our server already has the
``/var/www/yourapplication`` folder created and
``/var/www/yourapplication/env`` to be a virtual environment. Furthermore
are we not creating the configuration or `.wsgi` file on the server. So
how do we bootstrap a new server into our infrastructure?
This now depends on the number of servers we want to set up. If we just
have one application server (which the majority of applications will
have), creating a command in the fabfile for this is overkill. But
obviously you can do that. In that case you would probably call it
`setup` or `bootstrap` and then pass the servername explicitly on the
command line::
$ fab -H newserver.example.com bootstrap
To setup a new server you would roughly do these steps:
1. Create the directory structure in ``/var/www``::
$ mkdir /var/www/yourapplication
$ cd /var/www/yourapplication
$ virtualenv --distribute env
2. Upload a new `application.wsgi` file to the server and the
configuration file for the application (eg: `application.cfg`)
3. Create a new Apache config for `yourapplication` and activate it.
Make sure to activate watching for changes of the `.wsgi` file so
that we can automatically reload the application by touching it.
(See :ref:`mod_wsgi-deployment` for more information)
So now the question is, where do the `application.wsgi` and
`application.cfg` files come from?
The WSGI File
-------------
The WSGI file has to import the application and also to set an environment
variable so that the application knows where to look for the config. This
is a short example that does exactly that::
import os
os.environ['YOURAPPLICATION_CONFIG'] = '/var/www/yourapplication/application.cfg'
from yourapplication import app
The application itself then has to initialize itself like this to look for
the config at that environment variable::
app = Flask(__name__)
app.config.from_object('yourapplication.default_config')
app.config.from_envvar('YOURAPPLICATION_CONFIG')
This approach is explained in detail in the :ref:`config` section of the
documentation.
The Configuration File
----------------------
Now as mentioned above, the application will find the correct
configuration file by looking up the `YOURAPPLICATION_CONFIG` environment
variable. So we have to put the configuration in a place where the
application will able to find it. Configuration files have the unfriendly
quality of being different on all computers, so you do not version them
usually.
A popular approach is to store configuration files for different servers
in a separate version control repository and check them out on all
servers. Then symlink the file that is active for the server into the
location where it's expected (eg: ``/var/www/yourapplication``).
Either way, in our case here we only expect one or two servers and we can
upload them ahead of time by hand.
First Deployment
----------------
Now we can do our first deployment. We have set up the servers so that
they have their virtual environments and activated apache configs. Now we
can pack up the application and deploy it::
$ fab pack deploy
Fabric will now connect to all servers and run the commands as written
down in the fabfile. First it will execute pack so that we have our
tarball ready and then it will execute deploy and upload the source code
to all servers and install it there. Thanks to the `setup.py` file we
will automatically pull in the required libraries into our virtual
environment.
Next Steps
----------
From that point onwards there is so much that can be done to make
deployment actually fun:
- Create a `bootstrap` command that initializes new servers. It could
initialize a new virtual environment, setup apache appropriately etc.
- Put configuration files into a separate version control repository
and symlink the active configs into place.
- You could also put your application code into a repository and check
out the latest version on the server and then install. That way you
can also easily go back to older versions.
- hook in testing functionality so that you can deploy to an external
server and run the testsuite.
Working with Fabric is fun and you will notice that it's quite magical to
type ``fab deploy`` and see your application being deployed automatically
to one or more remote servers.
.. _Fabric: http://fabfile.org/

View file

@ -4,7 +4,7 @@ Adding a favicon
A "favicon" is an icon used by browsers for tabs and bookmarks. This helps
to distinguish your website and to give it a unique brand.
A common question is how to add a favicon to a flask application. First, of
A common question is how to add a favicon to a Flask application. First, of
course, you need an icon. It should be 16 × 16 pixels and in the ICO file
format. This is not a requirement but a de-facto standard supported by all
relevant browsers. Put the icon in your static directory as
@ -20,12 +20,15 @@ tag in your HTML. So, for example:
That's all you need for most browsers, however some really old ones do not
support this standard. The old de-facto standard is to serve this file,
with this name, at the website root. If your application is not mounted at
the root path of the domain you either need to configure the webserver to
the root path of the domain you either need to configure the web server to
serve the icon at the root or if you can't do that you're out of luck. If
however your application is the root you can simply route a redirect::
app.add_url_rule('/favicon.ico',
redirect_to=url_for('static', filename='favicon.ico'))
app.add_url_rule(
"/favicon.ico",
endpoint="favicon",
redirect_to=url_for("static", filename="favicon.ico"),
)
If you want to save the extra redirect request you can also write a view
using :func:`~flask.send_from_directory`::
@ -44,10 +47,10 @@ same.
The above will serve the icon via your application and if possible it's
better to configure your dedicated web server to serve it; refer to the
webserver's documentation.
web server's documentation.
See also
--------
* The `Favicon <http://en.wikipedia.org/wiki/Favicon>`_ article on
* The `Favicon <https://en.wikipedia.org/wiki/Favicon>`_ article on
Wikipedia

View file

@ -1,5 +1,3 @@
.. _uploading-files:
Uploading Files
===============
@ -21,54 +19,58 @@ specific upload folder and displays a file to the user. Let's look at the
bootstrapping code for our application::
import os
from flask import Flask, request, redirect, url_for
from werkzeug import secure_filename
from flask import Flask, flash, request, redirect, url_for
from werkzeug.utils import secure_filename
UPLOAD_FOLDER = '/path/to/the/uploads'
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
So first we need a couple of imports. Most should be straightforward, the
:func:`werkzeug.secure_filename` is explained a little bit later. The
`UPLOAD_FOLDER` is where we will store the uploaded files and the
`ALLOWED_EXTENSIONS` is the set of allowed file extensions. Then we add a
URL rule by hand to the application. Now usually we're not doing that, so
why here? The reasons is that we want the webserver (or our development
server) to serve these files for us and so we only need a rule to generate
the URL to these files.
``UPLOAD_FOLDER`` is where we will store the uploaded files and the
``ALLOWED_EXTENSIONS`` is the set of allowed file extensions.
Why do we limit the extensions that are allowed? You probably don't want
your users to be able to upload everything there if the server is directly
sending out the data to the client. That way you can make sure that users
are not able to upload HTML files that would cause XSS problems (see
:ref:`xss`). Also make sure to disallow `.php` files if the server
executes them, but who has PHP installed on his server, right? :)
:ref:`security-xss`). Also make sure to disallow ``.php`` files if the server
executes them, but who has PHP installed on their server, right? :)
Next the functions that check if an extension is valid and that uploads
the file and redirects the user to the URL for the uploaded file::
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS
filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
@app.route('/', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
# check if the post request has the file part
if 'file' not in request.files:
flash('No file part')
return redirect(request.url)
file = request.files['file']
# If the user does not select a file, the browser submits an
# empty file without a filename.
if file.filename == '':
flash('No selected file')
return redirect(request.url)
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return redirect(url_for('uploaded_file',
filename=filename))
return redirect(url_for('download_file', name=filename))
return '''
<!doctype html>
<title>Upload new File</title>
<h1>Upload new File</h1>
<form action="" method=post enctype=multipart/form-data>
<p><input type=file name=file>
<input type=submit value=Upload>
<form method=post enctype=multipart/form-data>
<input type=file name=file>
<input type=submit value=Upload>
</form>
'''
@ -89,7 +91,7 @@ before storing it directly on the filesystem.
filename = "../../../../home/username/.bashrc"
Assuming the number of ``../`` is correct and you would join this with
the `UPLOAD_FOLDER` the user might have the ability to modify a file on
the ``UPLOAD_FOLDER`` the user might have the ability to modify a file on
the server's filesystem he or she should not modify. This does require some
knowledge about how the application looks like, but trust me, hackers
are patient :)
@ -99,28 +101,28 @@ before storing it directly on the filesystem.
>>> secure_filename('../../../../home/username/.bashrc')
'home_username_.bashrc'
Now one last thing is missing: the serving of the uploaded files. As of
Flask 0.5 we can use a function that does that for us::
We want to be able to serve the uploaded files so they can be downloaded
by users. We'll define a ``download_file`` view to serve files in the
upload folder by name. ``url_for("download_file", name=name)`` generates
download URLs.
.. code-block:: python
from flask import send_from_directory
@app.route('/uploads/<filename>')
def uploaded_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'],
filename)
@app.route('/uploads/<name>')
def download_file(name):
return send_from_directory(app.config["UPLOAD_FOLDER"], name)
Alternatively you can register `uploaded_file` as `build_only` rule and
use the :class:`~werkzeug.wsgi.SharedDataMiddleware`. This also works with
older versions of Flask::
If you're using middleware or the HTTP server to serve files, you can
register the ``download_file`` endpoint as ``build_only`` so ``url_for``
will work without a view function.
from werkzeug import SharedDataMiddleware
app.add_url_rule('/uploads/<filename>', 'uploaded_file',
build_only=True)
app.wsgi_app = SharedDataMiddleware(app.wsgi_app, {
'/uploads': app.config['UPLOAD_FOLDER']
})
.. code-block:: python
If you now run the application everything should work as expected.
app.add_url_rule(
"/uploads/<name>", endpoint="download_file", build_only=True
)
Improving Uploads
@ -129,22 +131,28 @@ Improving Uploads
.. versionadded:: 0.6
So how exactly does Flask handle uploads? Well it will store them in the
webserver's memory if the files are reasonable small otherwise in a
webserver's memory if the files are reasonably small, otherwise in a
temporary location (as returned by :func:`tempfile.gettempdir`). But how
do you specify the maximum file size after which an upload is aborted? By
default Flask will happily accept file uploads to an unlimited amount of
default Flask will happily accept file uploads with an unlimited amount of
memory, but you can limit that by setting the ``MAX_CONTENT_LENGTH``
config key::
from flask import Flask, Request
app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
app.config['MAX_CONTENT_LENGTH'] = 16 * 1000 * 1000
The code above will limited the maximum allowed payload to 16 megabytes.
If a larger file is transmitted, Flask will raise an
The code above will limit the maximum allowed payload to 16 megabytes.
If a larger file is transmitted, Flask will raise a
:exc:`~werkzeug.exceptions.RequestEntityTooLarge` exception.
.. admonition:: Connection Reset Issue
When using the local development server, you may get a connection
reset error instead of a 413 response. You will get the correct
status response when running the app with a production WSGI server.
This feature was added in Flask 0.6 but can be achieved in older versions
as well by subclassing the request object. For more information on that
consult the Werkzeug documentation on file handling.
@ -155,27 +163,20 @@ Upload Progress Bars
A while ago many developers had the idea to read the incoming file in
small chunks and store the upload progress in the database to be able to
poll the progress with JavaScript from the client. Long story short: the
client asks the server every 5 seconds how much it has transmitted
already. Do you realize the irony? The client is asking for something it
should already know.
Now there are better solutions to that work faster and more reliable. The
web changed a lot lately and you can use HTML5, Java, Silverlight or Flash
to get a nicer uploading experience on the client side. Look at the
following libraries for some nice examples how to do that:
- `Plupload <http://www.plupload.com/>`_ - HTML5, Java, Flash
- `SWFUpload <http://www.swfupload.org/>`_ - Flash
- `JumpLoader <http://jumploader.com/>`_ - Java
poll the progress with JavaScript from the client. The client asks the
server every 5 seconds how much it has transmitted, but this is
something it should already know.
An Easier Solution
------------------
Because the common pattern for file uploads exists almost unchanged in all
applications dealing with uploads, there is a Flask extension called
`Flask-Uploads`_ that implements a full fledged upload mechanism with
white and blacklisting of extensions and more.
Now there are better solutions that work faster and are more reliable. There
are JavaScript libraries like jQuery_ that have form plugins to ease the
construction of progress bar.
.. _Flask-Uploads: http://packages.python.org/Flask-Uploads/
Because the common pattern for file uploads exists almost unchanged in all
applications dealing with uploads, there are also some Flask extensions that
implement a full fledged upload mechanism that allows controlling which
file extensions are allowed to be uploaded.
.. _jQuery: https://jquery.com/

View file

@ -1,5 +1,3 @@
.. _message-flashing-pattern:
Message Flashing
================
@ -9,14 +7,20 @@ application. Flask provides a really simple way to give feedback to a
user with the flashing system. The flashing system basically makes it
possible to record a message at the end of a request and access it next
request and only next request. This is usually combined with a layout
template that does this.
template that does this. Note that browsers and sometimes web servers enforce
a limit on cookie sizes. This means that flashing messages that are too
large for session cookies causes message flashing to fail silently.
Simple Flashing
---------------
So here is a full example::
from flask import flash, redirect, url_for, render_template
from flask import Flask, flash, redirect, render_template, \
request, url_for
app = Flask(__name__)
app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'
@app.route('/')
def index():
@ -27,14 +31,14 @@ So here is a full example::
error = None
if request.method == 'POST':
if request.form['username'] != 'admin' or \
request.form['password'] != 'secret':
request.form['password'] != 'secret':
error = 'Invalid credentials'
else:
flash('You were successfully logged in')
return redirect(url_for('index'))
return render_template('login.html', error=error)
And here the ``layout.html`` template which does the magic:
And here is the :file:`layout.html` template which does the magic:
.. sourcecode:: html+jinja
@ -51,7 +55,7 @@ And here the ``layout.html`` template which does the magic:
{% endwith %}
{% block body %}{% endblock %}
And here the index.html template:
Here is the :file:`index.html` template which inherits from :file:`layout.html`:
.. sourcecode:: html+jinja
@ -61,7 +65,8 @@ And here the index.html template:
<p>Do you want to <a href="{{ url_for('login') }}">log in?</a>
{% endblock %}
And of course the login template:
And here is the :file:`login.html` template which also inherits from
:file:`layout.html`:
.. sourcecode:: html+jinja
@ -71,7 +76,7 @@ And of course the login template:
{% if error %}
<p class=error><strong>Error:</strong> {{ error }}
{% endif %}
<form action="" method=post>
<form method=post>
<dl>
<dt>Username:
<dd><input type=text name=username value="{{
@ -96,7 +101,7 @@ error messages could be displayed with a red background.
To flash a message with a different category, just use the second argument
to the :func:`~flask.flash` function::
flash(u'Invalid password provided', 'error')
flash('Invalid password provided', 'error')
Inside the template you then have to tell the
:func:`~flask.get_flashed_messages` function to also return the
@ -117,3 +122,27 @@ categories. The loop looks slightly different in that situation then:
This is just one example of how to render these flashed messages. One
might also use the category to add a prefix such as
``<strong>Error:</strong>`` to the message.
Filtering Flash Messages
------------------------
.. versionadded:: 0.9
Optionally you can pass a list of categories which filters the results of
:func:`~flask.get_flashed_messages`. This is useful if you wish to
render each category in a separate block.
.. sourcecode:: html+jinja
{% with errors = get_flashed_messages(category_filter=["error"]) %}
{% if errors %}
<div class="alert-message block-message error">
<a class="close" href="#">×</a>
<ul>
{%- for msg in errors %}
<li>{{ msg }}</li>
{% endfor -%}
</ul>
</div>
{% endif %}
{% endwith %}

View file

@ -1,17 +1,16 @@
.. _patterns:
Patterns for Flask
==================
Certain things are common enough that the chances are high you will find
them in most web applications. For example quite a lot of applications
are using relational databases and user authentication. In that case,
chances are they will open a database connection at the beginning of the
request and get the information of the currently logged in user. At the
end of the request, the database connection is closed again.
Certain features and interactions are common enough that you will find
them in most web applications. For example, many applications use a
relational database and user authentication. They will open a database
connection at the beginning of the request and get the information for
the logged in user. At the end of the request, the database connection
is closed.
There are more user contributed snippets and patterns in the `Flask
Snippet Archives <http://flask.pocoo.org/snippets/>`_.
These types of patterns may be a bit outside the scope of Flask itself,
but Flask makes it easy to implement them. Some common patterns are
collected in the following pages.
.. toctree::
:maxdepth: 2
@ -20,8 +19,6 @@ Snippet Archives <http://flask.pocoo.org/snippets/>`_.
appfactories
appdispatch
urlprocessors
distribute
fabric
sqlite3
sqlalchemy
fileuploads
@ -30,10 +27,14 @@ Snippet Archives <http://flask.pocoo.org/snippets/>`_.
wtforms
templateinheritance
flashing
jquery
errorpages
javascript
lazyloading
mongokit
mongoengine
favicon
streaming
deferredcallbacks
methodoverrides
requestchecksum
celery
subclassing
singlepageapplications

Some files were not shown because too many files have changed in this diff Show more