forked from orbit-oss/flask
97 lines
2.3 KiB
Python
97 lines
2.3 KiB
Python
# -*- 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()
|