Browse Source

Initial project view

ghorsington 4 years ago
parent
commit
3c7ff9fe77
4 changed files with 47 additions and 7 deletions
  1. 2 1
      requirements.txt
  2. 25 5
      src/app.py
  3. 1 1
      src/templates/nav.html
  4. 19 0
      src/templates/project_view.html

+ 2 - 1
requirements.txt

@@ -1,4 +1,5 @@
 flask==1.1.1
 gunicorn==19.9.0
 Flask-Assets==0.12
-libsass==0.19.2
+libsass==0.19.2
+markdown==3.1.1

+ 25 - 5
src/app.py

@@ -3,11 +3,13 @@ from flask_assets import Environment, Bundle
 import os
 import json
 from typing import List
+import markdown as md
 
 app = Flask(__name__)
 assets = Environment(app)
 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_STATIC_URL'] = assets.url
 assets.config['PYSCSS_STATIC_ROOT'] = assets.directory
@@ -15,9 +17,10 @@ assets.config['PYSCSS_ASSETS_URL'] = assets.url
 assets.config['PYSCSS_ASSETS_ROOT'] = assets.directory
 assets.register('scss_all', scss)
 
+
 class ProjectInfo:
     name: str
-    
+
     def __init__(self, name):
         self.name = name
 
@@ -31,6 +34,7 @@ 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()]
@@ -48,18 +52,34 @@ def get_projects() -> List[Project]:
             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)
+
+    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)
+
+    info_path = os.path.join("../builds", selected_project.id, "info.md")
+
+    readme = None
+    try:
+        if os.path.exists(info_path):
+            with open(info_path, "r", encoding="utf-8") as f:
+                readme = md.markdown(f.read())
+    except:
+        readme = None
+
+    return render_template("project_view.html", projects=projects, selected_project=selected_project, readme=readme)
+
 
 @app.route("/")
 def test():
     projects = get_projects()
     return render_template("main.html", projects=projects)
 
+
 if __name__ == "__main__":
-    app.run(host='0.0.0.0')
+    app.run(host='0.0.0.0')

+ 1 - 1
src/templates/nav.html

@@ -4,7 +4,7 @@
     </p>
     <ul class="menu-list">
         {%for project in projects%}
-        <li><a {%if project.id == selected_project -%} class="is-active" {%- endif %} href="{{ url_for('display_project', project_id=project.id) }}">{{project.info.name}}</a></li>
+        <li><a {%if selected_project and project.id == selected_project.id -%} class="is-active" {%- endif %} href="{{ url_for('display_project', project_id=project.id) }}">{{project.info.name}}</a></li>
         {%endfor%}
     </ul>
 </aside>

+ 19 - 0
src/templates/project_view.html

@@ -0,0 +1,19 @@
+{% extends "base.html" %}
+
+{%block title%}{{selected_project.info.name}}{%endblock%}
+
+{%block content%}
+
+<div class="readme">
+    {%- if readme %}
+        {{readme|safe}}
+    {%-else%}
+        <h1>{{selected_project.info.name}}</h1>
+        <p>
+            Here you can find artifacts for project &quot;{{selected_project.info.name}}&quot;
+        </p>
+    {%-endif%}
+</div>
+
+
+{%endblock%}