Commit 6920c56c authored by Markus Mößler's avatar Markus Mößler
Browse files

initialization of yf web app

parent 5e44e080
Loading
Loading
Loading
Loading

.gitignore

0 → 100644
+35 −0
Original line number Diff line number Diff line
# === Node.js / React frontend ===
frontend/node_modules/
frontend/build/
frontend/.env
frontend/.DS_Store

# === Python backend ===
backend/__pycache__/
backend/.venv/
backend/venv/
backend/.env
*.pyc
*.pyo

# === Docker volumes and system files ===
db_data/
pg_data/*
*.log
*.sqlite3

# === OS/system files ===
.DS_Store
Thumbs.db

# === VSCode/editor configs (optional) ===
.vscode/
.idea/
*.swp

# === Python virtual env (top level, if any) ===
.venv/
venv/

# === dotenv files at root (if present) ===
.env

backend/Dockerfile

0 → 100644
+5 −0
Original line number Diff line number Diff line
FROM python:3.11-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["python", "app.py"]

backend/app.py

0 → 100644
+26 −0
Original line number Diff line number Diff line
import tornado.ioloop
import tornado.web
from db import init_db, get_nvda_data, store_nvda_data
import json

class NVDAHandler(tornado.web.RequestHandler):
    def get(self):
        data = get_nvda_data()
        self.write(json.dumps(data, default=str))  # default=str handles date serialization

class FetchAndStoreHandler(tornado.web.RequestHandler):
    def post(self):
        store_nvda_data()
        self.write({"status": "NVDA stock data fetched and stored."})

def make_app():
    return tornado.web.Application([
        (r"/api/nvda", NVDAHandler),
        (r"/api/nvda/fetch", FetchAndStoreHandler),
    ])

if __name__ == "__main__":
    init_db()
    app = make_app()
    app.listen(8000)
    tornado.ioloop.IOLoop.current().start()

backend/db.py

0 → 100644
+38 −0
Original line number Diff line number Diff line
import os
import pandas as pd
import yfinance as yf
from sqlalchemy import create_engine, text
from dotenv import load_dotenv

load_dotenv()

DATABASE_URL = os.getenv("DATABASE_URL", "postgresql://postgres:postgres@localhost:5432/postgres")
engine = create_engine(DATABASE_URL)

def init_db():
    with engine.connect() as conn:
        conn.execute(text("""
            CREATE TABLE IF NOT EXISTS nvda_stock (
                date DATE PRIMARY KEY,
                open FLOAT,
                high FLOAT,
                low FLOAT,
                close FLOAT,
                volume BIGINT
            )
        """))

def store_nvda_data():
    df = yf.Ticker("NVDA").history(period="5y")
    df = df[["Open", "High", "Low", "Close", "Volume"]]
    df.reset_index(inplace=True)
    df.columns = ["date", "open", "high", "low", "close", "volume"]

    with engine.begin() as conn:
        df.to_sql("nvda_stock", con=conn, if_exists="append", index=False, method="multi")

def get_nvda_data():
    with engine.connect() as conn:
        result = conn.execute(text("SELECT * FROM nvda_stock ORDER BY date DESC LIMIT 100"))
        rows = [dict(row) for row in result]
        return rows
+7 −0
Original line number Diff line number Diff line
yfinance
pandas
SQLAlchemy
psycopg2-binary
requests
tornado
python-dotenv
Loading