from datetime import datetime from json import JSONDecodeError from typing import Any, cast from sqlalchemy import func from sqlalchemy.dialects.postgresql import JSONB from sqlalchemy.orm import Mapped from configs import dify_config from extensions.ext_storage import storage from services.entities.knowledge_entities.knowledge_entities import ParentMode, Rule from .account import Account from .base import Base from .engine import db from .model import App, Tag, TagBinding, UploadFile from .types import StringUUID class DatasourceOauthParamConfig(Base): # type: ignore[name-defined] __tablename__ = "datasource_oauth_params" __table_args__ = ( db.PrimaryKeyConstraint("id", name="datasource_oauth_config_pkey"), db.UniqueConstraint("plugin_id", "provider", name="datasource_oauth_config_datasource_id_provider_idx"), ) id = db.Column(StringUUID, server_default=db.text("uuid_generate_v4()")) datasource_name: Mapped[str] = db.Column(db.String(255), nullable=False) plugin_id: Mapped[str] = db.Column(StringUUID, nullable=False) provider: Mapped[str] = db.Column(db.String(255), nullable=False) system_credentials: Mapped[dict] = db.Column(JSONB, nullable=False) class DatasourceProvider(Base): __tablename__ = "datasource_providers" __table_args__ = ( db.PrimaryKeyConstraint("id", name="datasource_provider_pkey"), db.UniqueConstraint("plugin_id", "provider", name="datasource_provider_plugin_id_provider_idx"), ) id = db.Column(StringUUID, server_default=db.text("uuid_generate_v4()")) datasource_name: Mapped[str] = db.Column(db.String(255), nullable=False) plugin_id: Mapped[str] = db.Column(StringUUID, nullable=False) provider: Mapped[str] = db.Column(db.String(255), nullable=False) auth_type: Mapped[str] = db.Column(db.String(255), nullable=False) encrypted_credentials: Mapped[dict] = db.Column(JSONB, nullable=False) created_at: Mapped[datetime] = db.Column(db.DateTime, nullable=False, default=datetime.now) updated_at: Mapped[datetime] = db.Column(db.DateTime, nullable=False, default=datetime.now)