Skip to content
Snippets Groups Projects
Commit 966ad53b authored by Robert Goldmann's avatar Robert Goldmann
Browse files

Fixed #39 - render open api documentation with jinja

parent bee085d8
Branches
No related tags found
No related merge requests found
......@@ -18,6 +18,6 @@ gevent = "==20.6.2"
psycopg2 = "==2.8.5"
TheCodeLabs-BaseUtils = "==1.3.1"
TheCodeLabs-FlaskUtils = "==1.1.0"
pyyaml = "==5.3.1"
[dev-packages]
pyyaml = "==5.3.1"
import datetime
import json
import logging
import os
import yaml
from TheCodeLabs_BaseUtils import DefaultLogger
from TheCodeLabs_FlaskUtils import FlaskBaseApp
from flask import jsonify
from flask import jsonify, render_template
from flask import send_from_directory, request
from flask_jwt_extended import (
JWTManager, create_access_token
......@@ -31,7 +33,15 @@ class RoadmapApi(FlaskBaseApp):
@app.route('/')
def index():
return send_from_directory('docs', 'api.html')
yamlPath = os.path.join(Constants.ROOT_DIR, 'docs', 'api.yml')
with open(yamlPath, 'r') as yamlFile:
specification = yaml.load(yamlFile, Loader=yaml.FullLoader)
specification['servers'][0]['url'] = self._settings['api']['url']
specification['info']['version'] = self._version['name']
specification = json.dumps(specification)
return render_template('api.html', appName="Roadmaps", openApiSpecification=specification)
@app.route('/login', methods=['POST'])
def login():
......
This diff is collapsed.
#!/usr/bin/python
import yaml
import json
import sys
import re
TEMPLATE = """
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>%s</title>
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.22.2/swagger-ui.css" >
<style>
html
{
box-sizing: border-box;
overflow: -moz-scrollbars-vertical;
overflow-y: scroll;
}
*,
*:before,
*:after
{
box-sizing: inherit;
}
body {
margin:0;
background: #fafafa;
}
</style>
</head>
<body>
<div id="swagger-ui"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.22.2/swagger-ui-bundle.js"> </script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.22.2/swagger-ui-standalone-preset.js"> </script>
<script>
window.onload = function() {
var spec = %s;
// Build a system
const ui = SwaggerUIBundle({
spec: spec,
dom_id: '#swagger-ui',
deepLinking: true,
presets: [
SwaggerUIBundle.presets.apis
]
})
window.ui = ui
}
</script>
</body>
</html>
"""
VERSION_PATTERN = r'"version": "\d+.\d+.\d+"'
if len(sys.argv) != 3:
print('Invalid number of args')
print('Usage: swagger-to-html.py source.yml destination.html')
exit()
with open(sys.argv[1], "r") as inputFile:
spec = yaml.load(inputFile, Loader=yaml.FullLoader)
spec = json.dumps(spec)
with open('../version.json', 'r') as f:
VERSION = json.load(f)
VERSION = VERSION['version']
versionNameShort = VERSION['name'].replace('v', '')
print('Setting version number to "{}"'.format(versionNameShort))
spec = re.sub(VERSION_PATTERN, '"version": "{}"'.format(versionNameShort), spec, flags=re.S)
spec = TEMPLATE % ("Roadmaps API", spec)
with open(sys.argv[2], "w") as f:
f.write(spec)
print("DONE")
import os
APP_NAME = 'RoadmapApi'
ROOT_DIR = os.path.dirname(os.path.dirname(__file__))
......@@ -19,5 +19,8 @@
"name": "admin",
"password": "123"
}
]
],
"api": {
"url": "http://localhost:10003"
}
}
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{ appName }} API</title>
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.22.2/swagger-ui.css" >
<style>
html
{
box-sizing: border-box;
overflow: -moz-scrollbars-vertical;
overflow-y: scroll;
}
*,
*:before,
*:after
{
box-sizing: inherit;
}
body {
margin:0;
background: #fafafa;
}
</style>
</head>
<body>
<div id="swagger-ui"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.22.2/swagger-ui-bundle.js"> </script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.22.2/swagger-ui-standalone-preset.js"> </script>
<script>
window.onload = function() {
var spec = {{ openApiSpecification|safe }};
// Build a system
const ui = SwaggerUIBundle({
spec: spec,
dom_id: '#swagger-ui',
deepLinking: true,
presets: [
SwaggerUIBundle.presets.apis
]
})
window.ui = ui
}
</script>
</body>
</html>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment