data-str / app.py
Dooratre's picture
Update app.py
89b759b verified
"""
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
CORVO AI - Complete Teaching Platform
Main Application Entry Point
Run: python app.py
Open: http://localhost:5000
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
"""
import os
from flask import Flask, redirect, url_for, session, flash, render_template, send_from_directory
from flask_socketio import SocketIO
from config import SECRET_KEY, DEBUG, HOST, PORT, REQUIRED_DIRS
# โ”€โ”€โ”€ Create Flask app โ”€โ”€โ”€
app = Flask(__name__)
app.secret_key = SECRET_KEY
socketio = SocketIO(app, cors_allowed_origins="*", async_mode='threading')
# โ”€โ”€โ”€ Create required directories โ”€โ”€โ”€
for d in REQUIRED_DIRS:
os.makedirs(d, exist_ok=True)
# โ”€โ”€โ”€ Initialize databases โ”€โ”€โ”€
from database.users import init_users_db
from database.cards import init_cards_db
from database.chat_history import init_chat_history_db
init_users_db()
init_cards_db()
init_chat_history_db()
# โ”€โ”€โ”€ Initialize AI engines โ”€โ”€โ”€
from chat.agent import AIAgent
from board.engine import BoardEngine
agent = AIAgent()
board_engine = BoardEngine()
# โ”€โ”€โ”€ Register blueprints โ”€โ”€โ”€
# Auth
from auth.routes import auth_bp, init_auth_socketio
init_auth_socketio(socketio)
app.register_blueprint(auth_bp)
# Chat
from chat.routes import chat_bp, init_chat_agent
init_chat_agent(agent)
app.register_blueprint(chat_bp)
# Board
from board.routes import board_bp, init_board_engine
init_board_engine(board_engine)
app.register_blueprint(board_bp)
# Exam
from exam.routes import exam_bp
app.register_blueprint(exam_bp)
# Media
from media.routes import media_bp, init_media_agent
init_media_agent(agent)
app.register_blueprint(media_bp)
# Market
from market.routes import market_bp
app.register_blueprint(market_bp)
# WebSocket
from websocket.events import register_socketio_events
register_socketio_events(socketio)
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# ROOT ROUTES
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
from auth.helpers import is_session_valid
from database.users import load_users_db, get_user
from subjects.definitions import SUBJECTS, is_board_enabled
@app.route('/')
def index():
if is_session_valid():
return redirect(url_for('dashboard'))
return redirect(url_for('auth.signup'))
@app.route('/dashboard')
def dashboard():
if not is_session_valid():
session.clear()
flash('ุงู†ุชู‡ุช ุงู„ุฌู„ุณุฉุŒ ูŠุฑุฌู‰ ุชุณุฌูŠู„ ุงู„ุฏุฎูˆู„ ู…ุฑุฉ ุฃุฎุฑู‰.', 'error')
return redirect(url_for('auth.login'))
username = session['username']
users_db = load_users_db()
user_data = users_db.get(username, {})
student_type = user_data.get('student_type', 'ุนู„ู…ูŠ')
all_subjects = SUBJECTS.get(student_type, [])
purchased_subjects = user_data.get('purchased_subjects', ['islamic'])
my_subjects = []
for s in all_subjects:
if s['id'] in purchased_subjects:
subject_info = dict(s)
subject_info['board_enabled'] = is_board_enabled(s['id'])
my_subjects.append(subject_info)
available_subjects = [s for s in all_subjects if s['id'] not in purchased_subjects]
return render_template('dashboard.html',
username=username,
user_data=user_data,
my_subjects=my_subjects,
available_subjects=available_subjects,
balance=user_data.get('balance', 0))
@app.route('/static/<path:filename>')
def serve_static(filename):
return send_from_directory('static', filename)
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# MAIN
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
if __name__ == '__main__':
print("\n" + "โ•" * 60)
print(" ๐ŸŽ“ CORVO AI - Complete Teaching Platform")
print("โ•" * 60)
print()
print(" ๐Ÿ“‹ Architecture:")
print(" โ”œโ”€โ”€ auth/ โ†’ Login, signup, sessions")
print(" โ”œโ”€โ”€ chat/ โ†’ Text AI chat (multi-subject)")
print(" โ”œโ”€โ”€ board/ โ†’ Interactive whiteboard (multi-subject)")
print(" โ”œโ”€โ”€ exam/ โ†’ MCQ exam generation")
print(" โ”œโ”€โ”€ media/ โ†’ Voice & image processing")
print(" โ”œโ”€โ”€ market/ โ†’ Subject purchasing & cards")
print(" โ”œโ”€โ”€ websocket/ โ†’ Real-time session management")
print(" โ”œโ”€โ”€ database/ โ†’ JSON file persistence")
print(" โ””โ”€โ”€ subjects/ โ†’ Subject definitions & loading")
print()
print(" ๐Ÿ”ง FEATURES:")
print(" โœ… Multi-subject support (chat + board)")
print(" โœ… Per-user per-subject chat history")
print(" โœ… Interactive whiteboard with TTS")
print(" โœ… Board supports ANY subject dynamically")
print(" โœ… <page>N</page> โ†’ per-subject book page images")
print(" โœ… <svg>keyword</svg> โ†’ Icons8 hand-drawn icons")
print(" โœ… MCQ exam generation per subject/chapter")
print(" โœ… Voice input & image analysis")
print(" โœ… Card-based balance & subject purchasing")
print()
print(f" ๐ŸŒ Open: http://localhost:{PORT}")
print("โ•" * 60 + "\n")
socketio.run(app, debug=DEBUG, host="0.0.0.0", port=7860, allow_unsafe_werkzeug=True)