|
|
|
|
|
|
|
|
import os |
|
|
from datetime import datetime |
|
|
from typing import Optional |
|
|
|
|
|
from flask import Flask, render_template |
|
|
|
|
|
|
|
|
from src.config import AppConfig |
|
|
from src.hn_mood_reader import HnMoodReader, FeedEntry |
|
|
|
|
|
|
|
|
app = Flask(__name__) |
|
|
|
|
|
|
|
|
global_reader: Optional[HnMoodReader] = None |
|
|
|
|
|
def initialize_reader() -> HnMoodReader: |
|
|
""" |
|
|
Initializes the HnMoodReader instance. This function is called once |
|
|
when the application starts. |
|
|
""" |
|
|
print("Attempting to initialize the mood reader model...") |
|
|
model_name = os.environ.get("MOOD_MODEL", AppConfig.DEFAULT_MOOD_READER_MODEL) |
|
|
try: |
|
|
reader = HnMoodReader(model_name=model_name) |
|
|
print("Model loaded successfully.") |
|
|
return reader |
|
|
except Exception as e: |
|
|
|
|
|
print(f"FATAL: Could not initialize model '{model_name}'. Error: {e}", file=sys.stderr) |
|
|
sys.exit(1) |
|
|
|
|
|
|
|
|
global_reader = initialize_reader() |
|
|
|
|
|
|
|
|
@app.route('/') |
|
|
def index(): |
|
|
"""Main page route.""" |
|
|
try: |
|
|
scored_entries = global_reader.fetch_and_score_feed() |
|
|
|
|
|
return render_template( |
|
|
'index.html', |
|
|
entries=scored_entries, |
|
|
model_name=global_reader.model_name, |
|
|
last_updated=datetime.now().strftime('%H:%M:%S') |
|
|
) |
|
|
except Exception as e: |
|
|
|
|
|
return render_template('error.html', error=str(e)), 500 |
|
|
|
|
|
if __name__ == '__main__': |
|
|
|
|
|
|
|
|
app.run(host='0.0.0.0', port=5000, debug=False, use_reloader=False) |
|
|
|