From 9a1b4733da887963bf02d93195bf6d8383edb1da Mon Sep 17 00:00:00 2001 From: phillip Date: Fri, 27 Jun 2025 19:46:46 +0200 Subject: [PATCH] Dateien nach "/" hochladen --- README.md | 15 +++++++ main.py | 102 +++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 19 +++++++++ wsgi.py | 4 ++ 4 files changed, 140 insertions(+) create mode 100644 README.md create mode 100644 main.py create mode 100644 requirements.txt create mode 100644 wsgi.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..42b8384 --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +## Installation + +```bash + python3 -m venv env + source env/bin/acticate # Nur in linux i geuss + pip install -r requirements.txt +``` + +## ToDo + +- settings button to change displayed content +- (image generator without symbols) +- go back function (logo) +- logo +- footer \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..d7bfb7c --- /dev/null +++ b/main.py @@ -0,0 +1,102 @@ +from flask import Flask, render_template, request, redirect, url_for, session +from flask_sqlalchemy import SQLAlchemy +import os +import uuid +from datetime import timedelta, datetime +import pandas as pd +from io import StringIO +import time +import schedule + +app = Flask(__name__) +app.secret_key = os.urandom(24) +app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hours=24) +app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app_data.db' +app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False + +db = SQLAlchemy(app) + +class Data(db.Model): + session_id = db.Column(db.String(36), primary_key=True) + json_data = db.Column(db.Text, nullable=False) + +# Set up the application context +with app.app_context(): + # Create the database tables + db.create_all() + +def delete_old_csv_files(): + """ + Deletes CSV files in the src/csv directory that are older than 24 hours. + """ + current_time = time.time() + csv_dir = 'src/csv' + + for filename in os.listdir(csv_dir): + file_path = os.path.join(csv_dir, filename) + if os.path.isfile(file_path) and filename.endswith('.csv'): + file_age = current_time - os.path.getctime(file_path) + if file_age > 24 * 60 * 60: + os.remove(file_path) + +@app.route('/') +def index(): + return render_template('upload.html') + +@app.route('/upload', methods=['POST']) +def upload(): + session_id = str(uuid.uuid4()) + + if 'csv_file' not in request.files: + return 'No file part' + + file = request.files['csv_file'] + + if file.filename == '': + return 'No selected file' + + if file: + file.save(f'src/csv/{session_id}.csv') + + data = [] + + df = pd.read_csv(f'src/csv/{session_id}.csv') + data_json = df.to_json(orient='records') + + # Set up the application context before interacting with the database + with app.app_context(): + # Save the data JSON string in the database + db.session.add(Data(session_id=session_id, json_data=data_json)) + db.session.commit() + + return redirect(url_for('show_data', session_id=session_id)) + +@app.route('/show_data/') +def show_data(session_id): + result = Data.query.filter_by(session_id=session_id).first() + + if result is None: + return redirect(url_for('index')) + + data_json = result.json_data + + # Use StringIO to wrap the JSON string + data = pd.read_json(StringIO(data_json), orient='records') + + # Convert the DataFrame to a list of dictionaries + data_list = data.to_dict(orient='records') + + return render_template('show_data.html', data=data_list, current=0) + +@app.route('/about') +def about(): + return render_template('about.html') + +if __name__ == '__main__': + schedule.every(1).hours.do(delete_old_csv_files) + + app.run(host="0.0.0.0", port=5000, debug=False) + + while True: + schedule.run_pending() + time.sleep(1) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..5beef10 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,19 @@ +blinker==1.7.0 +click==8.1.7 +Flask==3.0.2 +Flask-SQLAlchemy==3.1.1 +greenlet==3.0.3 +gunicorn==21.2.0 +itsdangerous==2.1.2 +Jinja2==3.1.3 +MarkupSafe==2.1.5 +numpy==1.26.4 +packaging==23.2 +pandas==2.2.1 +python-dateutil==2.9.0.post0 +pytz==2024.1 +six==1.16.0 +SQLAlchemy==2.0.28 +typing_extensions==4.10.0 +tzdata==2024.1 +Werkzeug==3.0.1 diff --git a/wsgi.py b/wsgi.py new file mode 100644 index 0000000..5141388 --- /dev/null +++ b/wsgi.py @@ -0,0 +1,4 @@ +from main import app + +if __name__ == '__main__': + app.run()