Spaces:
Running
Running
File size: 3,225 Bytes
c001f24 d3d811e c001f24 d3d811e c001f24 c3812ef c001f24 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
import os
import sys
import json
from flask import Flask
from flask_cors import CORS
from flask_socketio import SocketIO
from datetime import datetime, date
from dotenv import load_dotenv
# Load environment variables from .env file
load_dotenv()
# Ensure the current directory is in the Python path
sys.path.append(os.path.abspath(os.path.dirname(__file__)))
from database import setup_database
socketio = SocketIO()
def humanize_datetime(dt_str):
"""Converts a datetime string to a human-friendly format."""
if not dt_str:
return ""
try:
# Split the string at the decimal point to handle microseconds
dt = datetime.fromisoformat(dt_str.split('.')[0])
today = date.today()
if dt.date() == today:
return "Today"
elif dt.date() == date.fromordinal(today.toordinal() - 1):
return "Yesterday"
else:
return dt.strftime('%b %d, %Y')
except (ValueError, TypeError):
return dt_str # Return original string if parsing fails
def create_app():
app = Flask(__name__)
CORS(app)
socketio.init_app(app, cors_allowed_origins="*")
# Register custom Jinja2 filter
app.jinja_env.filters['humanize'] = humanize_datetime
app.jinja_env.filters['chr'] = chr
app.jinja_env.filters['from_json'] = lambda x: json.loads(x) if x else []
# Configuration
app.config['SECRET_KEY'] = os.urandom(24)
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 * 4096
app.config['UPLOAD_FOLDER'] = 'uploads'
app.config['PROCESSED_FOLDER'] = 'processed'
app.config['OUTPUT_FOLDER'] = 'output'
app.config['TEMP_FOLDER'] = 'tmp'
# Ensure instance folders exist
for folder in [app.config['UPLOAD_FOLDER'], app.config['PROCESSED_FOLDER'], app.config['OUTPUT_FOLDER'], app.config['TEMP_FOLDER']]:
os.makedirs(folder, exist_ok=True)
with app.app_context():
setup_database()
# Setup Login Manager
from user_auth import setup_login_manager
setup_login_manager(app)
# Register Blueprints
from routes import main_bp
from json_processor import json_bp
from neetprep import neetprep_bp
from classifier_routes import classifier_bp
from dashboard import dashboard_bp
from image_routes import image_bp
from auth_routes import auth_bp
from settings_routes import settings_bp
from subjective_routes import subjective_bp
from camera_routes import camera_bp
from drive_routes import drive_bp
from qtab_routes import qtab_bp
app.register_blueprint(main_bp)
app.register_blueprint(json_bp)
app.register_blueprint(neetprep_bp)
app.register_blueprint(classifier_bp)
app.register_blueprint(dashboard_bp)
app.register_blueprint(image_bp)
app.register_blueprint(auth_bp)
app.register_blueprint(settings_bp)
app.register_blueprint(subjective_bp)
app.register_blueprint(camera_bp)
app.register_blueprint(drive_bp)
app.register_blueprint(qtab_bp)
# Initialize socketio handlers for camera routes (after app creation to avoid circular import)
from camera_routes import init_socketio_handlers
init_socketio_handlers(socketio)
return app
app = create_app() |