This commit is contained in:
jyong
2025-07-02 11:33:00 +08:00
parent f33b6c0c73
commit 39d3f58082
6 changed files with 50 additions and 2 deletions

View File

@@ -96,6 +96,7 @@ class DatasourceAuth(Resource):
parser = reqparse.RequestParser()
parser.add_argument("provider", type=str, required=True, nullable=False, location="json")
parser.add_argument("name", type=str, required=True, nullable=False, location="json")
parser.add_argument("plugin_id", type=str, required=True, nullable=False, location="json")
parser.add_argument("credentials", type=dict, required=True, nullable=False, location="json")
args = parser.parse_args()
@@ -108,6 +109,7 @@ class DatasourceAuth(Resource):
provider=args["provider"],
plugin_id=args["plugin_id"],
credentials=args["credentials"],
name=args["name"],
)
except CredentialsValidateFailedError as ex:
raise ValueError(str(ex))

View File

@@ -12,7 +12,7 @@ from sqlalchemy.dialects import postgresql
# revision identifiers, used by Alembic.
revision = 'b35c3db83d09'
down_revision = '4474872b0ee6'
down_revision = '0ab65e1cc7fa'
branch_labels = None
depends_on = None

View File

@@ -0,0 +1,33 @@
"""add_pipeline_info_9
Revision ID: 15e40b74a6d2
Revises: a1025f709c06
Create Date: 2025-07-02 11:32:44.125790
"""
from alembic import op
import models as models
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '15e40b74a6d2'
down_revision = 'a1025f709c06'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('datasource_providers', schema=None) as batch_op:
batch_op.add_column(sa.Column('name', sa.String(length=255), nullable=False))
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('datasource_providers', schema=None) as batch_op:
batch_op.drop_column('name')
# ### end Alembic commands ###

View File

@@ -29,6 +29,7 @@ class DatasourceProvider(Base):
)
id = db.Column(StringUUID, server_default=db.text("uuid_generate_v4()"))
tenant_id = db.Column(StringUUID, nullable=False)
name: Mapped[str] = db.Column(db.String(255), nullable=False)
provider: Mapped[str] = db.Column(db.String(255), nullable=False)
plugin_id: Mapped[str] = db.Column(db.TEXT, nullable=False)
auth_type: Mapped[str] = db.Column(db.String(255), nullable=False)

View File

@@ -22,7 +22,7 @@ class DatasourceProviderService:
self.provider_manager = PluginDatasourceManager()
def datasource_provider_credentials_validate(
self, tenant_id: str, provider: str, plugin_id: str, credentials: dict
self, tenant_id: str, provider: str, plugin_id: str, credentials: dict, name: str
) -> None:
"""
validate datasource provider credentials.
@@ -31,6 +31,15 @@ class DatasourceProviderService:
:param provider:
:param credentials:
"""
# check name is exist
datasource_provider = (
db.session.query(DatasourceProvider)
.filter_by(tenant_id=tenant_id, name=name)
.first()
)
if datasource_provider:
raise ValueError("Authorization name is already exists")
credential_valid = self.provider_manager.validate_provider_credentials(
tenant_id=tenant_id,
user_id=current_user.id,
@@ -55,6 +64,7 @@ class DatasourceProviderService:
credentials[key] = encrypter.encrypt_token(tenant_id, value)
datasource_provider = DatasourceProvider(
tenant_id=tenant_id,
name=name,
provider=provider,
plugin_id=plugin_id,
auth_type="api_key",
@@ -120,6 +130,7 @@ class DatasourceProviderService:
{
"credentials": copy_credentials,
"type": datasource_provider.auth_type,
"name": datasource_provider.name,
}
)

View File

@@ -38,6 +38,7 @@ class CustomizedPipelineTemplateRetrieval(PipelineTemplateRetrievalBase):
pipeline_customized_templates = (
db.session.query(PipelineCustomizedTemplate)
.filter(PipelineCustomizedTemplate.tenant_id == tenant_id, PipelineCustomizedTemplate.language == language)
.order_by(PipelineCustomizedTemplate.position.asc(), PipelineCustomizedTemplate.created_at.desc())
.all()
)
recommended_pipelines_results = []