init flask app
parent
acc4ee822d
commit
508e807ff3
@ -0,0 +1,2 @@
|
||||
venv/
|
||||
.vscode
|
@ -0,0 +1,96 @@
|
||||
from flask import Flask, jsonify, request, redirect, url_for
|
||||
from flask_cors import CORS
|
||||
import datetime
|
||||
import frontmatter
|
||||
from glob import glob
|
||||
|
||||
# prefix to add /SOUPBOAT/ATLAS-API to all the routes
|
||||
# and to leave the @app.route() decorator more clean
|
||||
|
||||
|
||||
class PrefixMiddleware(object):
|
||||
def __init__(self, app, prefix=""):
|
||||
self.app = app
|
||||
self.prefix = prefix
|
||||
|
||||
def __call__(self, environ, start_response):
|
||||
|
||||
if environ["PATH_INFO"].startswith(self.prefix):
|
||||
environ["PATH_INFO"] = environ["PATH_INFO"][len(self.prefix) :]
|
||||
environ["SCRIPT_NAME"] = self.prefix
|
||||
return self.app(environ, start_response)
|
||||
else:
|
||||
start_response("404", [("Content-Type", "text/plain")])
|
||||
return ["This url does not belong to the app.".encode()]
|
||||
|
||||
|
||||
base_url = "/soupboat/cookbook"
|
||||
|
||||
# create flask application
|
||||
app = Flask(__name__)
|
||||
CORS(app)
|
||||
|
||||
# register the middleware to prefix all the requests with our base_url
|
||||
app.wsgi_app = PrefixMiddleware(app.wsgi_app, prefix=base_url)
|
||||
|
||||
|
||||
# save the incoming data into a markdown file
|
||||
# data is a dictionary with at least a 'title' key
|
||||
def create_recipe(data):
|
||||
# create filename from the title
|
||||
# TODO: ensure safe filename
|
||||
slug = data["title"].replace(" ", "-").lower()
|
||||
today = datetime.datetime.now().strftime("%d-%m-%Y_%H-%M-%S")
|
||||
|
||||
# create the list of properties from the incoming data, add the date
|
||||
recipe = {**data, "date": datetime.datetime.now()}
|
||||
post = frontmatter.Post("", **recipe)
|
||||
|
||||
# save the data in a markdown file
|
||||
# TODO: print directly yml file instead of md?
|
||||
# since we are not really using the body of the md but just the yml frontmatter
|
||||
with open(f"recipes/{slug}_{today}.md", "w") as f:
|
||||
documentation = frontmatter.dumps(post)
|
||||
f.write(documentation)
|
||||
print(f"{slug}_{today}.md - saved in the archive")
|
||||
|
||||
|
||||
# read the files from the recipes folder and return them in a list
|
||||
def get_recipes():
|
||||
recipes = []
|
||||
paths = glob("recipes/*.md")
|
||||
for path in paths:
|
||||
with open(path, "r") as f:
|
||||
meta, content = frontmatter.parse(f.read())
|
||||
recipes.append(meta)
|
||||
return recipes
|
||||
|
||||
|
||||
# sample object to test the md output
|
||||
r = {
|
||||
"title": "Test test test",
|
||||
"description": "A super simple description",
|
||||
"logs": ["first step", "second step", "third step"],
|
||||
"who": "a friend of mine",
|
||||
}
|
||||
|
||||
|
||||
@app.route("/", methods=["GET", "POST"])
|
||||
def home():
|
||||
if request.method == "POST":
|
||||
create_recipe(request.json)
|
||||
redirect(url_for("home.home"))
|
||||
|
||||
return "hello"
|
||||
|
||||
|
||||
# return the list of recipes in JSON format
|
||||
# TODO: get data from client
|
||||
@app.route("/get")
|
||||
def get():
|
||||
recipes = get_recipes()
|
||||
return jsonify(recipes)
|
||||
|
||||
|
||||
# TODO: set another port and setup nginx
|
||||
app.run(port=5000)
|
@ -0,0 +1,10 @@
|
||||
---
|
||||
date: 2022-05-31 01:38:40.484897
|
||||
description: A super simple description
|
||||
logs:
|
||||
- first step
|
||||
- second step
|
||||
- third step
|
||||
title: Test test test
|
||||
who: a friend of mine
|
||||
---
|
Loading…
Reference in New Issue