Order correctly, add filters to runners
[GitLab/stricted-build/lineage_builder.git] / ui / app.py
CommitLineData
8fca1ec2 1import datetime
31329c3f
TP
2import os
3
4import requests
5from flask import Flask, render_template, request, abort
8fca1ec2 6from flask_bootstrap import Bootstrap
31329c3f
TP
7from flask_caching import Cache
8from flask_migrate import Migrate
8fca1ec2
TP
9from flask_nav import Nav
10from flask_nav.elements import Navbar, Text, View
31329c3f
TP
11from flask_sqlalchemy import SQLAlchemy
12
13from ui import gitlab, config, models
14
15app = Flask(__name__)
8fca1ec2 16Bootstrap(app)
31329c3f
TP
17app.config.from_object(config)
18cache = Cache(app)
19models.db.init_app(app)
20migrate = Migrate(app, models.db)
8fca1ec2 21nav = Nav(app)
31329c3f 22
8fca1ec2
TP
23nav.register_element('top', Navbar(
24 "LineageOS Builds",
25 View('Builds', '.index'),
26 View('Runners', '.runners')
27))
31329c3f
TP
28
29headers = {'Private-Token': os.environ.get('GITLAB_TOKEN', '')}
30
60410d60 31def parse_args():
8fca1ec2
TP
32 args = {}
33 if request.args:
34 if 'status' in request.args:
35 args['build_status'] = request.args.get('status')
36 if 'device' in request.args:
37 args['build_device'] = request.args.get('device')
38 if 'version' in request.args:
39 args['build_version'] = request.args.get('version')
40 if 'type' in request.args:
41 args['build_type'] = request.args.get('type')
42 if 'date' in request.args:
60410d60
TP
43 date = datetime.datetime.strptime(request.args.get('date'), '%Y-%m-%d').date()
44 args['build_date'] = datetime.datetime.strptime(request.args.get('date'), '%Y-%m-%d').date()
45 return args
46
47@app.route('/')
48def index():
49 try:
50 args = parse_args()
51 except ValueError:
52 return "Invalid Date", 400
53 builds = models.Build.query.filter_by(**args).order_by(models.Build.build_date.desc(), models.Build.build_id).paginate(per_page=20)
8fca1ec2
TP
54 return render_template('builds.html', builds=builds)
55
56@app.route('/runners/<string:runner>')
57def runner(runner):
60410d60
TP
58 try:
59 args = parse_args()
60 except ValueError:
61 return "Invalid Date", 400
8fca1ec2 62 runner = models.Runner.query.filter_by(runner_name=runner).first()
60410d60
TP
63 args['build_runner'] = runner
64 builds = models.Build.query.filter_by(**args).order_by(models.Build.build_date.desc(), models.Build.build_id).paginate(per_page=20)
8fca1ec2
TP
65 return render_template('runner.html', runner=runner, builds=builds)
66
67@app.route("/runners/")
68def runners():
69 runners = models.Runner.query.all()
70 return render_template('runners.html', runners=runners)
31329c3f
TP
71
72@app.route("/webhook", methods=('POST',))
73def process_webhook():
74 gitlab.webhooks.process(request)
75 return "OK", 200
76
77if __name__ == '__main__':
78 app.run(host='0.0.0.0', port=5000)