bin-there-done-that/text/fetch_messages.py

64 lines
2.0 KiB
Python
Raw Permalink Normal View History

from flask import Flask, request, jsonify
import psycopg2
import logging
from dotenv import load_dotenv
import os
# Load environment variables from .env file
load_dotenv()
# Set up logging
logging.basicConfig(level=logging.DEBUG)
app = Flask(__name__)
# Database configuration
DB_HOST = os.getenv('DB_HOST')
DB_NAME = os.getenv('DB_NAME')
DB_USER = os.getenv('DB_USER')
DB_PASSWORD = os.getenv('DB_PASSWORD')
# Log environment variables
logging.debug(f"DB_HOST: {DB_HOST}, DB_NAME: {DB_NAME}, DB_USER: {DB_USER}")
# Connect to the database
def get_db_connection():
try:
conn = psycopg2.connect(dbname=DB_NAME, user=DB_USER, password=DB_PASSWORD, host=DB_HOST)
logging.debug("Database connection established")
return conn
except psycopg2.Error as e:
logging.error(f"Error connecting to the database: {e}")
return None
@app.route('/api/messages', methods=['GET'])
def get_messages():
logging.debug("Handling /api/messages request")
conn = get_db_connection()
if not conn:
return jsonify({"error": "Failed to connect to the database"}), 500
try:
cur = conn.cursor()
cur.execute("SELECT sender, message FROM messages ORDER BY id DESC")
messages = cur.fetchall()
cur.close()
# Log the fetched rows with types and values
for msg in messages:
logging.debug(f"Fetched message: {msg}, types: {[type(field) for field in msg]}")
# Ensure conversion to JSON-safe format
messages_list = [{"sender": msg[0], "message": msg[1]} for msg in messages]
logging.debug(f"Processed messages: {messages_list}")
return jsonify(messages_list)
except Exception as e:
logging.error(f"Error fetching messages: {e}")
return jsonify({"error": "Failed to fetch messages"}), 500
finally:
conn.close()
if __name__ == '__main__':
logging.debug("Starting Flask API server")
app.run(debug=True, host='0.0.0.0', port=5000)