test()   B
last analyzed

Complexity

Conditions 4

Size

Total Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 23
rs 8.7972
cc 4
1
#!/usr/bin/env python
2
import os
3
COV = None
4
if os.environ.get('FLASK_COVERAGE'):
5
    import coverage
6
    COV = coverage.coverage(branch=True, include='app/*')
7
    COV.start()
8
9
from flask_script import Manager, Shell
10
from flask_migrate import Migrate, MigrateCommand
11
12
from app import create_app, db
13
from app.models import User, Region, River, Section, Gage, Sensor, Sample
14
from app.user_manager import user_manager
15
16
app = create_app(os.getenv('FLASK_CONFIG') or 'default')
17
manager = Manager(app)
18
migrate = Migrate(app, db)
19
20
21
def make_shell_context():
22
    return dict(app=app, db=db, User=User, Region=Region, River=River,
23
                Section=Section, Gage=Gage, Sensor=Sensor, Sample=Sample)
24
manager.add_command("shell", Shell(make_context=make_shell_context))
25
26
manager.add_command('db', MigrateCommand)
27
28
manager.add_command('user', user_manager)
29
30
# @manager.command
31
# def deploy():
32
#    """Run deployment tasks."""
33
#    from flask.ext.migrate import upgrade
34
#
35
#    # migrate database to latest revision
36
#    upgrade()
37
38
39
# http://flask.pocoo.org/snippets/117/ manager helper to list routes
40
# http://stackoverflow.com/questions/13317536/get-a-list-of-all-routes-defined-in-the-app
41
@manager.command
42
def list_routes():
43
    """
44
    Lists routes for app
45
    """
46
    import urllib
47
48
    output = []
49
    for rule in app.url_map.iter_rules():
50
        methods = ','.join(rule.methods)
51
        line = urllib.unquote("{:50s} {:20s} {}".format(rule.endpoint,
52
                                                        methods,
53
                                                        rule))
54
        output.append(line)
55
56
    for line in sorted(output):
57
        print(line)
58
59
60
@manager.command
61
def test(coverage=False):
62
    """
63
    Run the unit tests.
64
    """
65
    if coverage and not os.environ.get('FLASK_COVERAGE'):
66
        import sys
67
        os.environ['FLASK_COVERAGE'] = '1'
68
        os.execvp(sys.executable, [sys.executable] + sys.argv)
69
70
    import unittest
71
    tests = unittest.TestLoader().discover('tests')
72
    unittest.TextTestRunner(verbosity=2).run(tests)
73
    if COV:
74
        COV.stop()
75
        COV.save()
76
        print('Coverage Summary:')
77
        COV.report()
78
        basedir = os.path.abspath(os.path.dirname(__file__))
79
        covdir = os.path.join(basedir, 'tmp/coverage')
80
        COV.html_report(directory=covdir)
81
        print('HTML version: file://%s/index.html' % covdir)
82
        COV.erase()
83
84
85
@manager.command
86
def backup():
87
    """
88
    Backup database to Dropbox
89
    """
90
    import datetime
91
    from app import backup as backup_db
92
    filename = 'gage_web-{time}.tar'.format(
93
        time=datetime.datetime.utcnow().strftime('%Y%m%d-%H%M'))
94
    os.system("pg_dump -Ft {db} > {filename}".format(
95
        db=db.engine.url.database,
96
        filename=filename))
97
    print('Uploading {filename} to Dropbox'.format(filename=filename))
98
    print(backup_db.backup(filename))
99
    os.system("rm " + filename)
100
101
102
if __name__ == '__main__':
103
    manager.run()
104