11 Commits
0.0.4 ... 0.0.9

Author SHA1 Message Date
24fb1c2941 libpq, 3
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2024-01-30 15:00:51 +01:00
cc3a6381d5 libpq 2024-01-30 14:59:46 +01:00
938562b9d8 requirements, 3
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2024-01-30 14:53:47 +01:00
103d60764b requirements, 2 2024-01-30 14:53:06 +01:00
8a446b8a8d requirements 2024-01-30 14:52:32 +01:00
5948cf3840 postgres, fix 3
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2024-01-30 14:48:31 +01:00
63dbfcc89f postgres, fix 2 2024-01-30 14:47:36 +01:00
439f6085e7 postgres 2024-01-30 14:47:07 +01:00
21479212f8 fix 2
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2024-01-30 14:18:52 +01:00
5d8997d45e fix 2024-01-30 14:16:59 +01:00
6e6effb1bc fix
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2024-01-30 14:07:42 +01:00
4 changed files with 54 additions and 91 deletions

View File

@ -7,9 +7,12 @@ COPY start.sh ${APP_DIR}/
WORKDIR ${APP_DIR} WORKDIR ${APP_DIR}
RUN pip install -r requirements.txt RUN \
apk add --no-cache build-base libpq-dev && \
pip install -r requirements.txt
EXPOSE 8080 EXPOSE 8080
CMD "./start.sh" CMD "./start.sh"

View File

@ -4,6 +4,7 @@ from flask_oidc import OpenIDConnect
from werkzeug.middleware.proxy_fix import ProxyFix from werkzeug.middleware.proxy_fix import ProxyFix
import os import os
import json import json
import psycopg2
app = Flask(__name__) app = Flask(__name__)
app.config.update({ app.config.update({
@ -19,61 +20,17 @@ app.config.update({
oidc = OpenIDConnect(app) oidc = OpenIDConnect(app)
# Datenbankverbindung konfigurieren
def get_db_connection():
conn = sqlite3.connect('nutrition.db') # 'nutrition.db' ist der Name der Datenbankdatei
conn.row_factory = sqlite3.Row # Ermöglicht den Zugriff auf Daten durch Spaltennamen
return conn
#def init_db():
# conn = get_db_connection()
# cursor = conn.cursor()
#
# # Erstellen der Tabelle
# cursor.execute('''
# CREATE TABLE IF NOT EXISTS nutrition_table (
# id INTEGER PRIMARY KEY,
# name TEXT NOT NULL,
# kcal REAL,
# EW REAL,
# Fett REAL,
# KH REAL,
# BST REAL,
# CA REAL
# )
# ''')
#
# # Testdaten einfügen
# test_data = [
# ('Apfel', 52, 0.3, 0.2, 14, 0.2, 6),
# ('Banane', 89, 1.1, 0.3, 23, 0.3, 5),
# ('Karotte', 41, 0.9, 0.2, 10, 0.2, 3),
# ('Tomate', 18, 0.9, 0.2, 3.9, 0.2, 4),
# ('Brokkoli', 34, 2.8, 0.4, 6.6, 0.4, 2),
# ('Spinat', 23, 2.9, 0.4, 3.6, 0.4, 99),
# ('Kartoffel', 77, 2, 0.1, 17, 0.1, 12),
# ('Huhn', 239, 27, 14, 0, 0, 2),
# ('Lachs', 208, 20, 13, 0, 0, 1),
# ('Ei', 155, 13, 11, 1.1, 1, 1)
# ]
#
# cursor.executemany('INSERT INTO nutrition_table (name, kcal, EW, Fett, KH, BST, CA) VALUES (?, ?, ?, ?, ?, ?, ?)', test_data)
#
# conn.commit()
# conn.close()
def calculate_nutrition(food, weight): def calculate_nutrition(food, weight):
conn = get_db_connection() try:
cursor = conn.cursor() conn = psycopg2.connect()
with conn.cursor() as cursor:
# Abfrage der Nährwertdaten aus der Datenbank # Abfrage der Nährwertdaten aus der Datenbank
cursor.execute('SELECT kcal, EW, Fett, KH, BST, CA FROM nutrition_table WHERE name = ?', (food,)) cursor.execute('SELECT kcal, EW, Fett, KH, BST, CA FROM nutrition_table WHERE name = ?', (food,))
result = cursor.fetchone() result = cursor.fetchone()
conn.close()
if result: if result:
# Runden und Berechnen der Nährwerte basierend auf dem Gewicht # Runden und Berechnen der Nährwerte basierend auf dem Gewicht
@ -89,12 +46,14 @@ def calculate_nutrition(food, weight):
return nutrition_values return nutrition_values
else: else:
return None return None
finally:
if conn:
conn.close()
# Index-Route # Index-Route
@app.route('/') @app.route('/')
@oidc.require_login @oidc.require_login
@oidc.require_keycloak_role('user')
def index(): def index():
return render_template('index.html') return render_template('index.html')
@ -102,24 +61,22 @@ def index():
@app.route('/get_products') @app.route('/get_products')
@oidc.require_login @oidc.require_login
@oidc.require_keycloak_role('user')
def get_products(): def get_products():
conn = get_db_connection() try:
cursor = conn.cursor() conn = psycopg2.connect()
with conn.cursor() as cursor:
cursor.execute('SELECT name FROM nutrition_table') cursor.execute('SELECT name FROM nutrition_table')
products = cursor.fetchall() products = cursor.fetchall()
conn.close()
print("ter") print("ter")
return {'products': [product[0] for product in products]} return {'products': [product[0] for product in products]}
finally:
if conn:
conn.close()
# Route zum Hinzufügen und Berechnen von Lebensmitteln # Route zum Hinzufügen und Berechnen von Lebensmitteln
@app.route('/add_lm', methods=['GET']) @app.route('/add_lm', methods=['GET'])
@oidc.require_login @oidc.require_login
@oidc.require_keycloak_role('user')
def add_lm(): def add_lm():
food = request.args.get('food') food = request.args.get('food')
weight = float(request.args.get('weight')) weight = float(request.args.get('weight'))
@ -155,19 +112,20 @@ def add_nutrition():
print("test") print("test")
# Verbindung zur Datenbank herstellen und Daten einfügen # Verbindung zur Datenbank herstellen und Daten einfügen
conn = get_db_connection() try:
cursor = conn.cursor() conn = psycopg2.connect()
with conn.cursor() as cursor:
cursor.execute("INSERT INTO nutrition_table (name, kcal, ew, fett, kh, bst, ca) VALUES (?, ?, ?, ?, ?, ?, ?)", cursor.execute("INSERT INTO nutrition_table (name, kcal, ew, fett, kh, bst, ca) VALUES (?, ?, ?, ?, ?, ?, ?)",
(food, kcal, ew, fett, kh, bst, ca)) (food, kcal, ew, fett, kh, bst, ca))
conn.commit()
conn.close()
return redirect(url_for('nutrition')) return redirect(url_for('nutrition'))
finally:
if conn:
conn.close()
@app.route('/nutrition') @app.route('/nutrition')
@oidc.require_login @oidc.require_login
@oidc.require_keycloak_role('user')
def nutrition(): def nutrition():
return render_template('nutrition.html') return render_template('nutrition.html')

View File

@ -1,14 +1,13 @@
import csv import csv
import sqlite3 import psycopg2
# Pfad zur Ihrer CSV-Datei # Pfad zur Ihrer CSV-Datei
csv_file_path = 'nu.csv' csv_file_path = 'nu.csv'
# Pfad zur Ihrer SQLite-Datenbank # Pfad zur Ihrer SQLite-Datenbank
sqlite_db_path = 'nutrition.db'
# Verbindung zur SQLite-Datenbank herstellen # Verbindung zur SQLite-Datenbank herstellen
conn = sqlite3.connect(sqlite_db_path) conn = psycopg2.connect()
cursor = conn.cursor() cursor = conn.cursor()
# Erstellen der Tabelle (falls noch nicht vorhanden) # Erstellen der Tabelle (falls noch nicht vorhanden)
@ -29,8 +28,9 @@ with open(csv_file_path, newline='', encoding='utf-8') as csvfile:
reader = csv.reader(csvfile) reader = csv.reader(csvfile)
next(reader, None) # Überspringen der Kopfzeile next(reader, None) # Überspringen der Kopfzeile
for row in reader: for row in reader:
cursor.execute('INSERT INTO nutrition_table (name, kcal, EW, Fett, KH, BST, Ca) VALUES (?, ?, ?, ?, ?, ?, ?)', row) cursor.execute('INSERT INTO nutrition_table (name, kcal, EW, Fett, KH, BST, Ca) VALUES (%s, %s, %s, %s, %s, %s, %s)', row)
# Änderungen speichern und Verbindung schließen # Änderungen speichern und Verbindung schließen
conn.commit() conn.commit()
conn.close() conn.close()

View File

@ -13,6 +13,8 @@ itsdangerous==2.1.2
Jinja2==3.1.3 Jinja2==3.1.3
MarkupSafe==2.1.4 MarkupSafe==2.1.4
packaging==23.2 packaging==23.2
psycopg==3.1.17
psycopg2==2.9.9
pycparser==2.21 pycparser==2.21
requests==2.31.0 requests==2.31.0
typing_extensions==4.9.0 typing_extensions==4.9.0