|
@@ -1,23 +1,65 @@
|
|
-from flask import Flask, render_template
|
|
|
|
|
|
+from flask import Flask, render_template, abort
|
|
from flask_assets import Environment, Bundle
|
|
from flask_assets import Environment, Bundle
|
|
import os
|
|
import os
|
|
|
|
+import json
|
|
|
|
+from typing import List
|
|
|
|
|
|
app = Flask(__name__)
|
|
app = Flask(__name__)
|
|
assets = Environment(app)
|
|
assets = Environment(app)
|
|
assets.url = app.static_url_path
|
|
assets.url = app.static_url_path
|
|
scss = Bundle('style/main.scss', filters='libsass', output='all.css', depends='**/*.scss')
|
|
scss = Bundle('style/main.scss', filters='libsass', output='all.css', depends='**/*.scss')
|
|
-
|
|
|
|
assets.config['PYSCSS_LOAD_PATHS'] = assets.load_path
|
|
assets.config['PYSCSS_LOAD_PATHS'] = assets.load_path
|
|
assets.config['PYSCSS_STATIC_URL'] = assets.url
|
|
assets.config['PYSCSS_STATIC_URL'] = assets.url
|
|
assets.config['PYSCSS_STATIC_ROOT'] = assets.directory
|
|
assets.config['PYSCSS_STATIC_ROOT'] = assets.directory
|
|
assets.config['PYSCSS_ASSETS_URL'] = assets.url
|
|
assets.config['PYSCSS_ASSETS_URL'] = assets.url
|
|
assets.config['PYSCSS_ASSETS_ROOT'] = assets.directory
|
|
assets.config['PYSCSS_ASSETS_ROOT'] = assets.directory
|
|
-
|
|
|
|
assets.register('scss_all', scss)
|
|
assets.register('scss_all', scss)
|
|
|
|
|
|
|
|
+class ProjectInfo:
|
|
|
|
+ name: str
|
|
|
|
+
|
|
|
|
+ def __init__(self, name):
|
|
|
|
+ self.name = name
|
|
|
|
+
|
|
|
|
+ @classmethod
|
|
|
|
+ def from_json(cls, json_str):
|
|
|
|
+ json_dict = json.loads(json_str)
|
|
|
|
+ return cls(**json_dict)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class Project:
|
|
|
|
+ id: str
|
|
|
|
+ info: ProjectInfo
|
|
|
|
+
|
|
|
|
+def get_projects() -> List[Project]:
|
|
|
|
+ result = []
|
|
|
|
+ projects = [f.path for f in os.scandir("../builds") if f.is_dir()]
|
|
|
|
+ for project in projects:
|
|
|
|
+ info_path = os.path.join(project, "info.json")
|
|
|
|
+ if not os.path.exists(info_path):
|
|
|
|
+ continue
|
|
|
|
+ try:
|
|
|
|
+ proj = Project()
|
|
|
|
+ _, proj.id = os.path.split(project)
|
|
|
|
+ with open(info_path, "r", encoding="utf-8") as f:
|
|
|
|
+ proj.info = ProjectInfo.from_json(f.read())
|
|
|
|
+ result.append(proj)
|
|
|
|
+ except:
|
|
|
|
+ continue
|
|
|
|
+ return result
|
|
|
|
+
|
|
|
|
+@app.route("/projects/<string:project_id>")
|
|
|
|
+def display_project(project_id):
|
|
|
|
+ projects = get_projects()
|
|
|
|
+ selected_project = next((project for project in projects if project.id == project_id), None)
|
|
|
|
+ if not selected_project:
|
|
|
|
+ return abort(404)
|
|
|
|
+ return render_template("main.html", projects=projects, selected_project=selected_project.id)
|
|
|
|
+
|
|
@app.route("/")
|
|
@app.route("/")
|
|
def test():
|
|
def test():
|
|
- return render_template("main.html")
|
|
|
|
|
|
+ projects = get_projects()
|
|
|
|
+ return render_template("main.html", projects=projects)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
if __name__ == "__main__":
|
|
app.run(host='0.0.0.0')
|
|
app.run(host='0.0.0.0')
|