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
|
|
|
|