Spaces:
Sleeping
Sleeping
| from sqlalchemy import Column, Integer, String, Boolean, Text, DateTime, create_engine, UniqueConstraint | |
| from sqlalchemy.orm import declarative_base, sessionmaker | |
| from datetime import datetime | |
| import json | |
| import os | |
| Base = declarative_base() | |
| class ConfigItem(Base): | |
| __tablename__ = 'configs' | |
| id = Column(Integer, primary_key=True, autoincrement=True) | |
| key = Column(String(255), unique=True, nullable=False, index=True) | |
| value = Column(Text, nullable=False) # JSON string | |
| type = Column(String(50), nullable=False) # string, int, float, bool, json | |
| group_name = Column(String(50), nullable=False, index=True) # api, model, data, evaluation | |
| description = Column(Text) | |
| is_active = Column(Boolean, default=True) | |
| created_at = Column(DateTime, default=datetime.utcnow) | |
| updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) | |
| class SensitiveWord(Base): | |
| __tablename__ = 'sensitive_words' | |
| id = Column(Integer, primary_key=True, autoincrement=True) | |
| word = Column(String(255), nullable=False, index=True) | |
| category = Column(String(50), nullable=False, index=True) | |
| subcategory = Column(String(50)) | |
| severity = Column(String(20), default='medium') | |
| is_active = Column(Boolean, default=True) | |
| created_at = Column(DateTime, default=datetime.utcnow) | |
| updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) | |
| __table_args__ = ( | |
| UniqueConstraint('word', 'category', 'subcategory', name='uix_word_cat_sub'), | |
| ) | |
| class WhitelistItem(Base): | |
| __tablename__ = 'whitelist' | |
| id = Column(Integer, primary_key=True, autoincrement=True) | |
| word = Column(String(255), unique=True, nullable=False, index=True) | |
| category = Column(String(50), default='general') | |
| is_active = Column(Boolean, default=True) | |
| created_at = Column(DateTime, default=datetime.utcnow) | |
| updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) | |
| class ApiKey(Base): | |
| __tablename__ = 'api_keys' | |
| id = Column(Integer, primary_key=True, autoincrement=True) | |
| access_key = Column(String(64), unique=True, nullable=False, index=True) | |
| secret_key = Column(String(128), nullable=False) # Should be hashed in production, but plaintext for demo HMAC | |
| name = Column(String(100), nullable=False) # e.g. "Admin Dashboard", "N8N Workflow" | |
| is_active = Column(Boolean, default=True) | |
| created_at = Column(DateTime, default=datetime.utcnow) | |
| expires_at = Column(DateTime, nullable=True) # None means never expires | |
| class TaskQueue(Base): | |
| __tablename__ = 'task_queue' | |
| id = Column(Integer, primary_key=True, autoincrement=True) | |
| task_id = Column(String(64), unique=True, nullable=False, index=True) | |
| queue_name = Column(String(50), nullable=False, index=True) | |
| payload = Column(Text, nullable=False) # JSON | |
| status = Column(String(20), default='queued', index=True) # queued, processing, completed, failed | |
| result = Column(Text, nullable=True) # JSON result or error | |
| created_at = Column(DateTime, default=datetime.utcnow) | |
| updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) | |
| # Database Setup | |
| BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | |
| DB_DIR = os.path.join(BASE_DIR, "data") | |
| if not os.path.exists(DB_DIR): | |
| os.makedirs(DB_DIR) | |
| DB_PATH = os.path.join(DB_DIR, "config.db") | |
| SQLALCHEMY_DATABASE_URL = f"sqlite:///{DB_PATH}" | |
| engine = create_engine( | |
| SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False} | |
| ) | |
| SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) | |
| def init_db(): | |
| Base.metadata.create_all(bind=engine) | |