Merge branch 'master' of ssh://github.com/birkenfeld/flask
This commit is contained in:
commit
d07b055d7a
13 changed files with 147 additions and 123 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -7,3 +7,4 @@ dist
|
|||
*.egg
|
||||
*.egg-info
|
||||
_mailinglist
|
||||
.tox
|
||||
|
|
|
|||
8
CHANGES
8
CHANGES
|
|
@ -3,10 +3,16 @@ Flask Changelog
|
|||
|
||||
Here you can see the full list of changes between each Flask release.
|
||||
|
||||
Version 0.7
|
||||
-----------
|
||||
|
||||
Release date to be announced, codename to be selected
|
||||
|
||||
|
||||
Version 0.6
|
||||
-----------
|
||||
|
||||
Release date to be announced, codename to be decided.
|
||||
Released on July 27th 2010, codename Whisky
|
||||
|
||||
- after request functions are now called in reverse order of
|
||||
registration.
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
include Makefile CHANGES LICENSE AUTHORS
|
||||
recursive-include artwork *
|
||||
recursive-include tests *
|
||||
recursive-include examples *
|
||||
recursive-include docs *
|
||||
|
|
|
|||
3
Makefile
3
Makefile
|
|
@ -5,6 +5,9 @@ all: clean-pyc test
|
|||
test:
|
||||
python setup.py test
|
||||
|
||||
tox-test:
|
||||
PYTHONDONTWRITEBYTECODE= tox
|
||||
|
||||
ext-test:
|
||||
python tests/flaskext_test.py --browse
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 3d964b660442e23faedf801caed6e3c7bd42d5c9
|
||||
|
|
@ -314,8 +314,10 @@ extension to be approved you have to follow these guidelines:
|
|||
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 scrip must be set to ``False``,
|
||||
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
|
||||
|
||||
|
||||
.. _Flask Extension Wizard:
|
||||
|
|
|
|||
|
|
@ -40,8 +40,8 @@ was implemented in Flask itself. There are currently extensions for
|
|||
object relational mappers, form validation, upload handling, various open
|
||||
authentication technologies and more.
|
||||
|
||||
However Flask is not much code and built in a very solid foundation and
|
||||
with that very easy to adapt for large applications. If you are
|
||||
However Flask is not much code and it is built on a very solid foundation
|
||||
and with that it is very easy to adapt for large applications. 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
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ Continuing long statements:
|
|||
.order_by(MyModel.name.desc()) \
|
||||
.limit(10)
|
||||
|
||||
If you break in a statement with parentheses or brances, align to the
|
||||
If you break in a statement with parentheses or braces, align to the
|
||||
braces::
|
||||
|
||||
this_is_a_very_long(function_call, 'with many parameters',
|
||||
|
|
@ -105,8 +105,8 @@ Yoda statements are a nogo:
|
|||
pass
|
||||
|
||||
Comparisons:
|
||||
- against arbitary types: ``==`` and ``!=``
|
||||
- against singletones with ``is`` and ``is not`` (eg: ``foo is not
|
||||
- against arbitrary types: ``==`` and ``!=``
|
||||
- against singletons with ``is`` and ``is not`` (eg: ``foo is not
|
||||
None``)
|
||||
- never compare something with `True` or `False` (for example never
|
||||
do ``foo == False``, do ``not foo`` instead)
|
||||
|
|
@ -125,7 +125,7 @@ Naming Conventions
|
|||
- Class names: ``CamelCase``, with acronyms kept uppercase (``HTTPWriter``
|
||||
and not ``HttpWriter``)
|
||||
- Variable names: ``lowercase_with_underscores``
|
||||
- Method and functin names: ``lowercase_with_underscores``
|
||||
- Method and function names: ``lowercase_with_underscores``
|
||||
- Constants: ``UPPERCASE_WITH_UNDERSCORES``
|
||||
- precompiled regular expressions: ``name_re``
|
||||
|
||||
|
|
@ -151,9 +151,9 @@ Docstrings
|
|||
Docstring conventions:
|
||||
All docstrings are formatted with reStructuredText as understood by
|
||||
Sphinx. Depending on the number of lines in the docstring, they are
|
||||
layed out differently. If it's just one line, the closing tripple
|
||||
layed out differently. If it's just one line, the closing triple
|
||||
quote is on the same line as the opening, otherwise the text is on
|
||||
the same line as the opening quote and the tripple quote that closes
|
||||
the same line as the opening quote and the triple quote that closes
|
||||
the string on its own line::
|
||||
|
||||
def foo():
|
||||
|
|
|
|||
|
|
@ -42,3 +42,83 @@ Flask-Creole
|
|||
|
||||
Notes: Flask-Markdown and this should share API, consider that when
|
||||
approving Flask-Markdown
|
||||
|
||||
|
||||
Flask-Genshi
|
||||
------------
|
||||
|
||||
:First Approval: 2010-07-26
|
||||
:Last Review: 2010-07-26
|
||||
:Approved Version: 0.3.1
|
||||
:Approved License: BSD
|
||||
|
||||
Notes: This is the first template engine extension. When others come
|
||||
around it would be a good idea to decide on a common interface.
|
||||
|
||||
|
||||
Flask-Script
|
||||
------------
|
||||
|
||||
:First Approval: 2010-07-26
|
||||
:Last Review: 2010-07-26
|
||||
:Approved Version: 0.3
|
||||
:Approved License: BSD
|
||||
|
||||
Notes: Flask-Actions has some overlap. Consider that when approving
|
||||
Flask-Actions or similar packages.
|
||||
|
||||
|
||||
Flask-CouchDB
|
||||
-------------
|
||||
|
||||
:First Approval: 2010-07-26
|
||||
:Last Review: 2010-07-26
|
||||
:Approved Version: 0.2.1
|
||||
:Approved License: MIT
|
||||
|
||||
There is also Flask-CouchDBKit. Both are fine because they are doing
|
||||
different things, but the latter is not yet approved.
|
||||
|
||||
|
||||
Flask-Testing
|
||||
-------------
|
||||
|
||||
:First Approval: 2010-07-27
|
||||
:Last Review: 2010-07-27
|
||||
:Approved Version: 0.2.3
|
||||
:Approved License: BSD
|
||||
|
||||
All fine.
|
||||
|
||||
|
||||
Flask-WTF
|
||||
---------
|
||||
|
||||
:First Approval: 2010-07-27
|
||||
:Last Review: 2010-07-27
|
||||
:Approved Version: 0.2.3
|
||||
:Approved License: BSD
|
||||
|
||||
All fine.
|
||||
|
||||
|
||||
Flask-Themes
|
||||
------------
|
||||
|
||||
:First Approval: 2010-07-27
|
||||
:Last Review: 2010-07-27
|
||||
:Approved Version: 0.1.2
|
||||
:Approved License: MIT
|
||||
|
||||
All fine.
|
||||
|
||||
|
||||
Flask-Uploads
|
||||
-------------
|
||||
|
||||
:First Approval: 2010-07-27
|
||||
:Last Review: 2010-07-27
|
||||
:Approved Version: 0.1.2
|
||||
:Approved License: MIT
|
||||
|
||||
All fine.
|
||||
|
|
|
|||
|
|
@ -6,17 +6,6 @@ extension is on the list of extensions on the website. It does not
|
|||
contain extensions that are approved.
|
||||
|
||||
|
||||
Flask-CouchDB
|
||||
-------------
|
||||
|
||||
:Last-Review: 2010-07-25
|
||||
:Reviewed version: 0.2
|
||||
|
||||
Would be fine for approval, but the test suite is not part of the sdist
|
||||
package (missing entry in MANIFEST.in) and the test suite does not respond
|
||||
to either "make test" or "python setup.py test".
|
||||
|
||||
|
||||
Flask-CouchDBKit
|
||||
----------------
|
||||
|
||||
|
|
@ -43,19 +32,6 @@ Name is not following Flask extension naming rules.
|
|||
Considered for unlisting.
|
||||
|
||||
|
||||
Flask-Genshi
|
||||
------------
|
||||
|
||||
:Last-Review: 2010-07-25
|
||||
:Reviewed Version: 0.3
|
||||
|
||||
Would be fine for approval, but the test suite is not part of the sdist
|
||||
package (missing entry in MANIFEST.in) and the test suite does not respond
|
||||
to either "make test" or "python setup.py test". Furthermore the long
|
||||
description is empty. The zip_safe flag is not set to False which is a
|
||||
requirement for approved extensions.
|
||||
|
||||
|
||||
flask-lesscss
|
||||
-------------
|
||||
|
||||
|
|
@ -70,22 +46,6 @@ Considered for unlisting, improved version should release as
|
|||
as a testsuite.
|
||||
|
||||
|
||||
flask-mail
|
||||
----------
|
||||
|
||||
:Last-Review: 2010-07-25
|
||||
:Reviewed Version: 0.3.1
|
||||
|
||||
Would be fine for approval, but the test suite is not part of the sdist
|
||||
package (missing entry in MANIFEST.in) and the test suite does not respond
|
||||
to either "make test" or "python setup.py test". Furthermore the long
|
||||
description in the package index is a little bit too short.
|
||||
|
||||
Package name should be changed to Flask-Mail with the approval to be
|
||||
consistent, this might also be the change to improve the API if necessary,
|
||||
but I don't see any big design problems there.
|
||||
|
||||
|
||||
Flask-OAuth
|
||||
-----------
|
||||
|
||||
|
|
@ -104,64 +64,6 @@ Flask-OpenID
|
|||
Short long description, missing tests.
|
||||
|
||||
|
||||
Flask-Script
|
||||
------------
|
||||
|
||||
:Last-Review: 2010-07-25
|
||||
:Reviewed Version: 0.2
|
||||
|
||||
Would be fine for approval, but the test suite is not part of the sdist
|
||||
package (missing entry in MANIFEST.in) and the test suite does not respond
|
||||
to either "make test" or "python setup.py test".
|
||||
|
||||
The upcoming 0.3 release looks promising, could need a longer "long
|
||||
description" in the package index though.
|
||||
|
||||
|
||||
Flask-Testing
|
||||
-------------
|
||||
|
||||
:Last-Review: 2010-07-25
|
||||
:Reviewed Version: 0.2
|
||||
|
||||
Would be fine for approval, but the test suite is not part of the sdist
|
||||
package (missing entry in MANIFEST.in) and the test suite does not respond
|
||||
to either "make test" or "python setup.py test".
|
||||
|
||||
|
||||
Flask-Themes
|
||||
------------
|
||||
|
||||
:Last-Review: 2010-07-25
|
||||
:Reviewed Version: 0.1
|
||||
|
||||
Would be fine for approval, but the test suite is not part of the sdist
|
||||
package (missing entry in MANIFEST.in) and the test suite does not respond
|
||||
to either "make test" or "python setup.py test".
|
||||
|
||||
|
||||
Flask-Uploads
|
||||
-------------
|
||||
|
||||
:Last-Review: 2010-07-25
|
||||
:Reviewed Version: 0.1
|
||||
|
||||
Would be fine for approval, but the test suite is not part of the sdist
|
||||
package (missing entry in MANIFEST.in) and the test suite does not respond
|
||||
to either "make test" or "python setup.py test".
|
||||
|
||||
|
||||
Flask-WTF
|
||||
---------
|
||||
|
||||
:Last-Review: 2010-07-25
|
||||
:Reviewed Version: 0.2.1
|
||||
|
||||
Would be fine for approval, but the test suite is not part of the sdist
|
||||
package (missing entry in MANIFEST.in) and the test suite does not respond
|
||||
to either "make test" or "python setup.py test".
|
||||
|
||||
|
||||
Flask-XML-RPC
|
||||
-------------
|
||||
|
||||
|
|
|
|||
2
setup.py
2
setup.py
|
|
@ -50,7 +50,7 @@ def run_tests():
|
|||
|
||||
setup(
|
||||
name='Flask',
|
||||
version='0.6',
|
||||
version='0.7',
|
||||
url='http://github.com/mitsuhiko/flask/',
|
||||
license='BSD',
|
||||
author='Armin Ronacher',
|
||||
|
|
|
|||
|
|
@ -27,13 +27,20 @@ from setuptools.archive_util import unpack_archive
|
|||
|
||||
flask_svc_url = 'http://flask.pocoo.org/extensions/'
|
||||
|
||||
|
||||
# OS X has awful paths when using mkstemp or gettempdir(). I don't
|
||||
# care about security or clashes here, so pick something that is
|
||||
# actually rememberable.
|
||||
if sys.platform == 'darwin':
|
||||
_tempdir = '/private/tmp'
|
||||
else:
|
||||
_tempdir = tempfile.gettempdir()
|
||||
tdir = _tempdir + '/flaskext-test'
|
||||
flaskdir = os.path.abspath(os.path.join(os.path.dirname(__file__),
|
||||
'..'))
|
||||
flaskdir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
|
||||
|
||||
|
||||
# virtualenv hack *cough*
|
||||
os.environ['PYTHONDONTWRITEBYTECODE'] = ''
|
||||
|
||||
|
||||
RESULT_TEMPATE = u'''\
|
||||
|
|
@ -74,6 +81,9 @@ RESULT_TEMPATE = u'''\
|
|||
<th>Author
|
||||
<th>License
|
||||
<th>Outcome
|
||||
{%- for iptr, _ in results[0].logs|dictsort %}
|
||||
<th>{{ iptr }}
|
||||
{%- endfor %}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
|
@ -85,6 +95,9 @@ RESULT_TEMPATE = u'''\
|
|||
<td>{{ result.author }}
|
||||
<td>{{ result.license }}
|
||||
<td>{{ outcome }}
|
||||
{%- for iptr, _ in result.logs|dictsort %}
|
||||
<td><a href="#{{ result.name }}-{{ iptr }}">see log</a>
|
||||
{%- endfor %}
|
||||
</tr>
|
||||
{%- endfor %}
|
||||
</tbody>
|
||||
|
|
@ -93,7 +106,8 @@ RESULT_TEMPATE = u'''\
|
|||
<p>Detailed test logs for all tests on all platforms:
|
||||
{%- for result in results %}
|
||||
{%- for iptr, log in result.logs|dictsort %}
|
||||
<h3>{{ result.name }} - {{ result.version }} [{{ iptr }}]</h3>
|
||||
<h3 id="{{ result.name }}-{{ iptr }}">
|
||||
{{ result.name }} - {{ result.version }} [{{ iptr }}]</h3>
|
||||
<pre>{{ log }}</pre>
|
||||
{%- endfor %}
|
||||
{%- endfor %}
|
||||
|
|
@ -186,14 +200,16 @@ tox_template = """[tox]
|
|||
envlist=%(env)s
|
||||
|
||||
[testenv]
|
||||
deps=%(deps)s
|
||||
deps=
|
||||
%(deps)s
|
||||
py
|
||||
commands=bash flaskext-runtest.sh {envlogdir}/test.log
|
||||
downloadcache=%(cache)s
|
||||
"""
|
||||
|
||||
|
||||
def create_tox_ini(checkout_path, interpreters, flask_dep):
|
||||
tox_path = os.path.join(checkout_path, 'tox.ini')
|
||||
tox_path = os.path.join(checkout_path, 'tox-flask-test.ini')
|
||||
if not os.path.exists(tox_path):
|
||||
with open(tox_path, 'w') as f:
|
||||
f.write(tox_template % {
|
||||
|
|
@ -201,6 +217,7 @@ def create_tox_ini(checkout_path, interpreters, flask_dep):
|
|||
'cache': tdir,
|
||||
'deps': flask_dep
|
||||
})
|
||||
return tox_path
|
||||
|
||||
|
||||
def iter_extensions(only_approved=True):
|
||||
|
|
@ -228,23 +245,20 @@ def test_extension(name, interpreters, flask_dep):
|
|||
# if there is a tox.ini, remove it, it will cause troubles
|
||||
# for us. Remove it if present, we are running tox ourselves
|
||||
# afterall.
|
||||
toxini = os.path.join(checkout_path, 'tox.ini')
|
||||
if os.path.isfile(toxini):
|
||||
os.remove(toxini)
|
||||
|
||||
create_tox_ini(checkout_path, interpreters, flask_dep)
|
||||
rv = subprocess.call(['tox'], cwd=checkout_path)
|
||||
rv = subprocess.call(['tox', '-c', 'tox-flask-test.ini'], cwd=checkout_path)
|
||||
return TestResult(name, checkout_path, rv, interpreters)
|
||||
|
||||
|
||||
def run_tests(interpreters, only_approved=True):
|
||||
def run_tests(extensions, interpreters):
|
||||
results = {}
|
||||
create_tdir()
|
||||
log('Packaging Flask')
|
||||
flask_dep = package_flask()
|
||||
log('Running extension tests')
|
||||
log('Temporary Environment: %s', tdir)
|
||||
for name in iter_extensions(only_approved):
|
||||
for name in extensions:
|
||||
log('Testing %s', name)
|
||||
result = test_extension(name, interpreters, flask_dep)
|
||||
if result.success:
|
||||
|
|
@ -272,10 +286,21 @@ def main():
|
|||
help='run against all extensions, not just approved')
|
||||
parser.add_argument('--browse', dest='browse', action='store_true',
|
||||
help='show browser with the result summary')
|
||||
parser.add_argument('--env', dest='env', default='py25,py26,py27',
|
||||
help='the tox environments to run against')
|
||||
parser.add_argument('--extension=', dest='extension', default=None,
|
||||
help='tests a single extension')
|
||||
args = parser.parse_args()
|
||||
|
||||
results = run_tests(['py26'], not args.all)
|
||||
filename = render_results(results, not args.all)
|
||||
if args.extension is not None:
|
||||
only_approved = False
|
||||
extensions = [args.extension]
|
||||
else:
|
||||
only_approved = not args.all
|
||||
extensions = iter_extensions(only_approved)
|
||||
|
||||
results = run_tests(extensions, [x.strip() for x in args.env.split(',')])
|
||||
filename = render_results(results, only_approved)
|
||||
if args.browse:
|
||||
import webbrowser
|
||||
webbrowser.open('file:///' + filename.lstrip('/'))
|
||||
|
|
|
|||
5
tox.ini
Normal file
5
tox.ini
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
[tox]
|
||||
envlist=py25,py26,py27
|
||||
|
||||
[testenv]
|
||||
commands=make test
|
||||
Loading…
Add table
Add a link
Reference in a new issue