dockerized

This commit is contained in:
Askill 2020-04-20 17:54:58 +02:00
parent ca593f6b2f
commit 68added41f
12 changed files with 115 additions and 91 deletions

View File

@ -1,5 +1,4 @@
FROM python
COPY ./certs /certs
COPY ./ /app
RUN pip install -r /app/requirements.txt

Binary file not shown.

View File

@ -1,12 +1,10 @@
from flask import Flask, request, g, render_template
from flask_restful import Resource, reqparse
from flask_restful_swagger_3 import Api
from flask_cors import CORS
import os
from json import dumps
import application.endpoints as endpoints
import application.config as config
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
api = Api(app, version='1', contact={"name":""}, license={"name":"Online Dienst Dokumentation"}, api_spec_url='/api/swagger')

View File

@ -4,11 +4,11 @@ from sqlalchemy.orm import sessionmaker, relationship, column_property
from datetime import datetime
from sqlalchemy.ext.declarative import declarative_base
import enum
from flask_sqlalchemy import SQLAlchemy
from flask import Flask
import time
engine = db.create_engine('mysql+mysqldb://root@server/fs?charset=utf8mb4', echo=False, encoding="utf8")
connection = engine.connect()
Base = declarative_base()
Session = sessionmaker(bind=engine)
@ -72,5 +72,14 @@ class Trunk(Base):
recipe_id = Column(Integer, ForeignKey('recipe.recipe_id'))
def initDB(counter):
try:
Base.metadata.create_all(engine)
except Exception as e:
print(e)
counter += 1
if counter < 13:
time.sleep(5)
initDB(counter)
Base.metadata.create_all(engine)
initDB(0)

View File

@ -12,29 +12,28 @@ import time
class RecipeList(Resource):
def get(self):
""" """
parser = reqparse.RequestParser()
parser.add_argument('ingred', type=str, action='append')
args = parser.parse_args()
ingreds = args["ingred"]
try:
parser = reqparse.RequestParser()
parser.add_argument('ingred', type=str, action='append')
args = parser.parse_args()
ingreds = args["ingred"]
start = time.time()
ingreds = [migrate.stemWord(ingred)[0] for ingred in ingreds + search.defaultArr]
end = time.time()
print("stem", end - start, "\n")
start = time.time()
indx = search.fastes(ingreds)
end = time.time()
print("get recipes",end - start, "\n")
start = time.time()
recs = search.getRecDict(indx, ingreds)
end = time.time()
print("calc overlay",end - start, "\n")
return flask.make_response(flask.jsonify({'data': recs}), 200)
ingreds = [migrate.stemWord(ingred)[0] for ingred in ingreds + search.defaultArr]
start = time.time()
indx = search.fastes(ingreds)
end = time.time()
print("get recipes",end - start, "\n")
start = time.time()
recs = search.getRecDict(indx, ingreds)
end = time.time()
print("calc overlay",end - start, "\n")
return flask.make_response(flask.jsonify({'data': recs}), 200)
except Exception as e:
print("error: -", e)
return flask.make_response(flask.jsonify({'error': str(e)}), 400)

View File

@ -50,14 +50,14 @@
}
.recipe-name{
margin: 1rem 0;
}
.recipe-instructions{
display: grid;
width:70%;
}
.recipe-score{
margin: 1rem 1rem;
}
.recipe-container{
padding:0;

View File

@ -1,72 +1,84 @@
var rl = document.getElementById("recipe-list")
var rl
function loadData() {
rl = document.getElementById("recipe-list")
// make string of get params for request
getParams = makeGetParamString()
searchString = document.getElementById("search-field").value
searchArray = searchString.split(',');
getParams = ""
searchArray.forEach(
function (item, index) {
if (index > 0) {
getParams += "&ingred=" + item.trim()
}
else {
getParams += "?ingred=" + item.trim()
}
});
console.log(getParams)
getJSON("/api/v1/recipe/" + getParams,
function (error, data) {
data = data["data"] // remove wrapper
console.log(data)
let keys = Object.keys(data).reverse();
rl.innerHTML = ""
keys.forEach(
function (key) {
data1 = data[key]
ingredString = ""
data1[3].forEach(
function(ingred){
ingredString += `${ingred}<br>`
}
)
recString = `
<a href="${data1[2]}">
<div class="card text-white bg-dark mb-3" style="max-width: 100%">
<div class="card-body recipe-container">
<div class="row">
<div class="col-4">
<img class="recipe-img" src="https://images.lecker.de/,id=091149c4,b=lecker,w=610,cg=c.jpg">
</div>
<div class="col-7">
<div class="row">
<div class="col">
<span><h4 class="recipe-name">${data1[1]}</h4></span>
</div>
</div>
<div class="row">
<div class="col">
<div class="recipe-ingredients">${ingredString}</div>
</div>
</div>
</div>
<div class="col-1">
<span class="recipe-score badge badge-primary badge-pill">${(key*100).toFixed(0) + "%"}</span>
</div>
</div>
</div>
</div>
</a>
`
rl.innerHTML += recString
})
renderRecipeList(data)
},
null
);
}
function makeGetParamString(){
searchString = document.getElementById("search-field").value
searchArray = searchString.split(',');
getParams = ""
searchArray.forEach(
function (item, index) {
if(item.trim() !== ""){
if (index > 0) {
getParams += "&ingred=" + item.trim()
}
else {
getParams += "?ingred=" + item.trim()
}
}
});
return getParams
}
function renderRecipeList(data){
let keys = Object.keys(data).reverse(); // iterate in reverse order, highest score up top
rl.innerHTML = ""
keys.forEach(
function (key) {
data1 = data[key]
ingredString = ""
data1[3].forEach(
function(ingred){
ingredString += `${ingred}<br>`
}
)
recString = `
<a href="${data1[2]}">
<div class="card text-white bg-dark mb-3" style="max-width: 100%">
<div class="card-body recipe-container">
<div class="row">
<div class="col-4">
<img class="recipe-img" src="data:image/png;base64,${data1[4]}">
</div>
<div class="col-7">
<div class="row">
<div class="col">
<span><h4 class="recipe-name">${data1[1]}</h4></span>
</div>
</div>
<div class="row">
<div class="col">
<div class="recipe-ingredients">${ingredString}</div>
</div>
</div>
</div>
<div class="col-1">
<span class="recipe-score badge badge-primary badge-pill">${(key*100).toFixed(0) + "%"}</span>
</div>
</div>
</div>
</div>
</a>
`
rl.innerHTML += recString
})
}

View File

@ -2,4 +2,7 @@ flask
flask_restful
sqlalchemy
requests
flask-restful-swagger-3
flask-restful-swagger-3
mysqlclient
nltk
opencv-python

4
run.py
View File

@ -1,4 +1,8 @@
from application import app
import nltk
nltk.download('stopwords')
nltk.download('punkt')
app.run(host="0.0.0.0", port='5001', debug=True, threaded=True)

View File

@ -61,7 +61,7 @@ def getRecDict(indx, inputArr):
for key in heapq.nlargest(10, outDict.keys()):
key2 = outDict[key]
rec = dbSession.query(Recipe).filter(Recipe.recipe_id==key2).first()
outDict2[key] = (key2, rec.name, rec.url, [r[0] + ": " + r[1] for r in dbSession.query(Ingredient.name, Ingredient.ingredient_amount).filter(Ingredient.recipe_id==key2).all()])
outDict2[key] = (key2, rec.name, rec.url, [r[0] + ": " + r[1] for r in dbSession.query(Ingredient.name, Ingredient.ingredient_amount).filter(Ingredient.recipe_id==key2).all()], rec.img.decode('utf-8'))
return outDict2
def printDict(indx, inputArr):