aboutsummaryrefslogtreecommitdiff
path: root/gn2/wqflask/api/markdown.py
diff options
context:
space:
mode:
Diffstat (limited to 'gn2/wqflask/api/markdown.py')
-rw-r--r--gn2/wqflask/api/markdown.py116
1 files changed, 89 insertions, 27 deletions
diff --git a/gn2/wqflask/api/markdown.py b/gn2/wqflask/api/markdown.py
index aa7dd3c4..f9e87ee3 100644
--- a/gn2/wqflask/api/markdown.py
+++ b/gn2/wqflask/api/markdown.py
@@ -7,6 +7,8 @@ import requests
import markdown
import os
import sys
+import urllib.parse
+from pathlib import Path
from bs4 import BeautifulSoup # type: ignore
@@ -27,6 +29,25 @@ news_blueprint = Blueprint("news_blueprint", __name__)
xapian_syntax_blueprint = Blueprint("xapian_syntax_blueprint", __name__)
blogs_blueprint = Blueprint("blogs_blueprint", __name__)
+gn_docs_blueprint = Blueprint("gn_docs_blueprint", __name__)
+
+
+def fetch_raw_markdown(file_path):
+ """
+ This method fetches files from genenetwork:gn docs repo
+ """
+ # todo remove hardcoded file path
+ safe_query = urllib.parse.urlencode({"file_path": file_path})
+ response = requests.get(
+ f"http://localhost:8091/edit?{safe_query}")
+ response.raise_for_status()
+ return response.json()
+
+
+def render_markdown_as_html(content):
+ """This method converts markdown to html for render"""
+ return markdown.markdown(content, extensions=["tables"])
+
def render_markdown(file_name, is_remote_file=True):
@@ -97,35 +118,53 @@ def get_blogs(user: str = "genenetwork",
return dict(sorted(blogs.items(), key=lambda x: x[0], reverse=True))
-@glossary_blueprint.route('/')
+@gn_docs_blueprint.route('/glossary')
def glossary():
+ file_data = fetch_raw_markdown(file_path="general/glossary/glossary.md")
return render_template(
- "glossary.html",
- rendered_markdown=render_markdown("general/glossary/glossary.md")), 200
+ "generic_gn_docs.html",
+ rendered_markdown=render_markdown_as_html(file_data["content"]),
+ file_path=file_data["file_path"],
+ file_title=Path(file_data["file_path"]).stem
+ )
-@references_blueprint.route('/')
+@gn_docs_blueprint.route('/references')
def references():
+
+ file_data = fetch_raw_markdown(
+ file_path="general/references/references.md")
return render_template(
- "references.html",
- rendered_markdown=render_markdown("general/references/references.md")), 200
+ "generic_gn_docs.html",
+ rendered_markdown=render_markdown_as_html(file_data["content"]),
+ file_path=file_data["file_path"],
+ file_title=Path(file_data["file_path"]).stem
+ )
-@news_blueprint.route('/')
+@gn_docs_blueprint.route('/news')
def news():
+ file_data = fetch_raw_markdown(file_path="general/news/news.md")
return render_template(
- "news.html",
- rendered_markdown=render_markdown("general/news/news.md")), 200
+ "generic_gn_docs.html",
+ rendered_markdown=render_markdown_as_html(file_data["content"]),
+ file_path=file_data["file_path"],
+ file_title=Path(file_data["file_path"]).stem
+ )
-@xapian_syntax_blueprint.route('/')
+@gn_docs_blueprint.route('/xapian')
def xapian():
+ file_data = fetch_raw_markdown(file_path="general/search/xapian_syntax.md")
return render_template(
- "search-syntax.html",
- rendered_markdown=render_markdown("general/search/xapian_syntax.md")), 200
+ "generic_gn_docs.html",
+ rendered_markdown=render_markdown_as_html(file_data["content"]),
+ file_path=file_data["file_path"],
+ file_title=Path(file_data["file_path"]).stem
+ )
-@environments_blueprint.route("/")
+@gn_docs_blueprint.route("/environments")
def environments():
md_file = get_file_from_python_search_path("wqflask/DEPENDENCIES.md")
@@ -148,47 +187,70 @@ def environments():
200
)
# Fallback: Fetch file from server
+ file_data = fetch_raw_markdown(
+ file_path="general/environments/environments.md")
return (render_template(
"environment.html",
svg_data=None,
- rendered_markdown=render_markdown(
- "general/environments/environments.md")),
- 200)
+ rendered_markdown=render_markdown_as_html(file_data["content"])))
-@environments_blueprint.route('/svg-dependency-graph')
+@gn_docs_blueprint.route('/svg-dependency-graph')
def svg_graph():
directory, file_name, _ = get_file_from_python_search_path(
"wqflask/dependency-graph.svg").partition("dependency-graph.svg")
return send_from_directory(directory, file_name)
-@links_blueprint.route("/")
+@gn_docs_blueprint.route("/links")
def links():
+ file_data = fetch_raw_markdown(file_path="general/links/links.md")
return render_template(
- "links.html",
- rendered_markdown=render_markdown("general/links/links.md")), 200
+ "generic_gn_docs.html",
+ rendered_markdown=render_markdown_as_html(file_data["content"]),
+ file_path=file_data["file_path"],
+ file_title=Path(file_data["file_path"]).stem
+ )
-@policies_blueprint.route("/")
+@gn_docs_blueprint.route("/policies")
def policies():
+ file_data = fetch_raw_markdown(file_path="general/policies/policies.md")
return render_template(
- "policies.html",
- rendered_markdown=render_markdown("general/policies/policies.md")), 200
+ "generic_gn_docs.html",
+ rendered_markdown=render_markdown_as_html(file_data["content"]),
+ file_path=file_data["file_path"],
+ file_title=Path(file_data["file_path"]).stem
+ )
-@facilities_blueprint.route("/")
+@gn_docs_blueprint.route("/facilities")
def facilities():
- return render_template("facilities.html", rendered_markdown=render_markdown("general/help/facilities.md")), 200
+ file_data = fetch_raw_markdown(file_path="general/help/facilities.md")
+ return render_template("generic_gn_docs.html",
+ rendered_markdown=render_markdown_as_html(
+ file_data["content"]),
+ file_path=file_data["file_path"],
+ file_title=Path(file_data["file_path"]).stem
+ )
-@blogs_blueprint.route("/<path:blog_path>")
+@gn_docs_blueprint.route("/blogs/<path:blog_path>")
def display_blog(blog_path):
return render_template("blogs.html", rendered_markdown=render_markdown(blog_path))
-@blogs_blueprint.route("/")
+@gn_docs_blueprint.route("/blogs")
def blogs_list():
blogs = get_blogs()
return render_template("blogs_list.html", blogs=blogs)
+
+
+@gn_docs_blueprint.errorhandler(requests.exceptions.HTTPError)
+def page_not_found(error):
+ """ Return error 404 """
+ return {"Reason": error.response.reason,
+ "error_status_code": error.response.status_code,
+ "error_msg": error.response.text
+ }