teoat's picture
Upload core/plugin_system/models.py with huggingface_hub
3b7834d verified
import uuid
from sqlalchemy import (
JSON,
Boolean,
Column,
DateTime,
ForeignKey,
Integer,
String,
Text,
)
from sqlalchemy.orm import relationship
from core.database import Base, utc_now
class PluginRegistry(Base):
__tablename__ = "plugin_registry"
plugin_id = Column(String, primary_key=True, default=lambda: str(uuid.uuid4()))
namespace = Column(String, unique=True, nullable=False, index=True)
version = Column(String, nullable=False)
trust_level = Column(
String, nullable=False
) # 'official', 'verified', 'community', 'custom'
status = Column(
String, default="inactive", index=True
) # 'active', 'inactive', 'quarantined'
metadata_json = Column(JSON, nullable=False)
signature = Column(Text)
created_at = Column(DateTime, default=utc_now)
updated_at = Column(DateTime, default=utc_now, onupdate=utc_now)
created_by = Column(String, ForeignKey("users.id"))
# Relationships
dependencies = relationship(
"PluginDependency", back_populates="plugin", cascade="all, delete-orphan"
)
permissions = relationship(
"PluginPermission", back_populates="plugin", cascade="all, delete-orphan"
)
executions = relationship("PluginExecution", back_populates="plugin")
class PluginDependency(Base):
__tablename__ = "plugin_dependencies"
dependency_id = Column(String, primary_key=True, default=lambda: str(uuid.uuid4()))
plugin_id = Column(String, ForeignKey("plugin_registry.plugin_id"), index=True)
depends_on_namespace = Column(String, nullable=False)
version_constraint = Column(String, nullable=False)
is_required = Column(Boolean, default=True)
created_at = Column(DateTime, default=utc_now)
plugin = relationship("PluginRegistry", back_populates="dependencies")
class PluginPermission(Base):
__tablename__ = "plugin_permissions"
permission_id = Column(String, primary_key=True, default=lambda: str(uuid.uuid4()))
plugin_id = Column(String, ForeignKey("plugin_registry.plugin_id"), index=True)
permission_name = Column(String, nullable=False)
granted_at = Column(DateTime, default=utc_now)
granted_by = Column(String, ForeignKey("users.id"))
plugin = relationship("PluginRegistry", back_populates="permissions")
class PluginExecution(Base):
__tablename__ = "plugin_executions"
execution_id = Column(String, primary_key=True, default=lambda: str(uuid.uuid4()))
plugin_id = Column(String, ForeignKey("plugin_registry.plugin_id"), index=True)
started_at = Column(DateTime, default=utc_now)
completed_at = Column(DateTime)
status = Column(String) # 'success', 'failure', 'timeout'
execution_time_ms = Column(Integer)
error_message = Column(Text)
input_hash = Column(String)
output_hash = Column(String)
plugin = relationship("PluginRegistry", back_populates="executions")