Commit | Line | Data |
---|---|---|
8fca1ec2 | 1 | import datetime |
31329c3f TP |
2 | import os |
3 | ||
4 | import requests | |
5 | from flask import Flask, render_template, request, abort | |
8fca1ec2 | 6 | from flask_bootstrap import Bootstrap |
31329c3f TP |
7 | from flask_caching import Cache |
8 | from flask_migrate import Migrate | |
8fca1ec2 TP |
9 | from flask_nav import Nav |
10 | from flask_nav.elements import Navbar, Text, View | |
31329c3f TP |
11 | from flask_sqlalchemy import SQLAlchemy |
12 | ||
13 | from ui import gitlab, config, models | |
14 | ||
15 | app = Flask(__name__) | |
8fca1ec2 | 16 | Bootstrap(app) |
31329c3f TP |
17 | app.config.from_object(config) |
18 | cache = Cache(app) | |
19 | models.db.init_app(app) | |
20 | migrate = Migrate(app, models.db) | |
8fca1ec2 | 21 | nav = Nav(app) |
31329c3f | 22 | |
8fca1ec2 TP |
23 | nav.register_element('top', Navbar( |
24 | "LineageOS Builds", | |
25 | View('Builds', '.index'), | |
26 | View('Runners', '.runners') | |
27 | )) | |
31329c3f TP |
28 | |
29 | headers = {'Private-Token': os.environ.get('GITLAB_TOKEN', '')} | |
30 | ||
60410d60 | 31 | def 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('/') | |
48 | def 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>') | |
57 | def 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/") | |
68 | def runners(): | |
69 | runners = models.Runner.query.all() | |
70 | return render_template('runners.html', runners=runners) | |
31329c3f TP |
71 | |
72 | @app.route("/webhook", methods=('POST',)) | |
73 | def process_webhook(): | |
74 | gitlab.webhooks.process(request) | |
75 | return "OK", 200 | |
76 | ||
77 | if __name__ == '__main__': | |
78 | app.run(host='0.0.0.0', port=5000) |