mirror of https://github.com/mitsuhiko/flask.git
Armin Ronacher
15 years ago
1 changed files with 97 additions and 0 deletions
@ -0,0 +1,97 @@
|
||||
# -*- coding: utf-8 -*- |
||||
""" |
||||
Flask Extension Tests |
||||
~~~~~~~~~~~~~~~~~~~~~ |
||||
|
||||
Tests the Flask extensions. |
||||
|
||||
:copyright: (c) 2010 by Ali Afshar. |
||||
:license: BSD, see LICENSE for more details. |
||||
""" |
||||
|
||||
from __future__ import with_statement |
||||
|
||||
import tempfile, subprocess, urllib2, os |
||||
|
||||
from flask import json |
||||
|
||||
from setuptools.package_index import PackageIndex |
||||
from setuptools.archive_util import unpack_archive |
||||
|
||||
flask_svc_url = 'http://flask.pocoo.org/extensions/' |
||||
tdir = tempfile.mkdtemp() |
||||
|
||||
|
||||
def run_tests(checkout_dir): |
||||
cmd = ['tox'] |
||||
return subprocess.call(cmd, cwd=checkout_dir, |
||||
stdout=open(os.path.join(tdir, 'tox.log'), 'w'), |
||||
stderr=subprocess.STDOUT) |
||||
|
||||
|
||||
def get_test_command(checkout_dir): |
||||
files = set(os.listdir(checkout_dir)) |
||||
if 'Makefile' in files: |
||||
return 'make test' |
||||
elif 'conftest.py' in files: |
||||
return 'py.test' |
||||
else: |
||||
return 'nosetests' |
||||
|
||||
|
||||
def fetch_extensions_list(): |
||||
req = urllib2.Request(flask_svc_url, headers={'accept':'application/json'}) |
||||
d = urllib2.urlopen(req).read() |
||||
data = json.loads(d) |
||||
for ext in data['extensions']: |
||||
yield ext |
||||
|
||||
|
||||
def checkout_extension(ext): |
||||
name = ext['name'] |
||||
root = os.path.join(tdir, name) |
||||
os.mkdir(root) |
||||
checkout_path = PackageIndex().download(ext['name'], root) |
||||
unpack_archive(checkout_path, root) |
||||
path = None |
||||
for fn in os.listdir(root): |
||||
path = os.path.join(root, fn) |
||||
if os.path.isdir(path): |
||||
break |
||||
return path |
||||
|
||||
|
||||
tox_template = """[tox] |
||||
envlist=py26 |
||||
|
||||
[testenv] |
||||
commands= |
||||
%s |
||||
downloadcache= |
||||
%s |
||||
""" |
||||
|
||||
def create_tox_ini(checkout_path): |
||||
tox_path = os.path.join(checkout_path, 'tox.ini') |
||||
if not os.path.exists(tox_path): |
||||
with open(tox_path, 'w') as f: |
||||
f.write(tox_template % (get_test_command(checkout_path), tdir)) |
||||
|
||||
# XXX command line |
||||
only_approved = True |
||||
|
||||
def test_all_extensions(only_approved=only_approved): |
||||
for ext in fetch_extensions_list(): |
||||
if ext['approved'] or not only_approved: |
||||
checkout_path = checkout_extension(ext) |
||||
create_tox_ini(checkout_path) |
||||
ret = run_tests(checkout_path) |
||||
yield ext['name'], ret |
||||
|
||||
def main(): |
||||
for name, ret in test_all_extensions(): |
||||
print name, ret |
||||
|
||||
|
||||
if __name__ == '__main__': |
||||
main() |
Loading…
Reference in new issue