feat: refactor provider name generation to use incremental naming & enforce unique constraints
parent
23a5ff410e
commit
7364d051d2
@ -0,0 +1,42 @@
|
|||||||
|
import logging
|
||||||
|
import re
|
||||||
|
from collections.abc import Sequence
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
from core.tools.entities.tool_entities import CredentialType
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def generate_provider_name(
|
||||||
|
providers: Sequence[Any], credential_type: CredentialType, fallback_context: str = "provider"
|
||||||
|
) -> str:
|
||||||
|
try:
|
||||||
|
return generate_incremental_name(
|
||||||
|
[provider.name for provider in providers],
|
||||||
|
f"{credential_type.get_name()}",
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(f"Error generating next provider name for {fallback_context}: {str(e)}")
|
||||||
|
return f"{credential_type.get_name()} 1"
|
||||||
|
|
||||||
|
|
||||||
|
def generate_incremental_name(
|
||||||
|
names: Sequence[str],
|
||||||
|
default_pattern: str,
|
||||||
|
) -> str:
|
||||||
|
pattern = rf"^{re.escape(default_pattern)}\s+(\d+)$"
|
||||||
|
numbers = []
|
||||||
|
|
||||||
|
for name in names:
|
||||||
|
if not name:
|
||||||
|
continue
|
||||||
|
match = re.match(pattern, name.strip())
|
||||||
|
if match:
|
||||||
|
numbers.append(int(match.group(1)))
|
||||||
|
|
||||||
|
if not numbers:
|
||||||
|
return f"{default_pattern} 1"
|
||||||
|
|
||||||
|
max_number = max(numbers)
|
||||||
|
return f"{default_pattern} {max_number + 1}"
|
||||||
@ -1,35 +0,0 @@
|
|||||||
import logging
|
|
||||||
import re
|
|
||||||
from collections.abc import Sequence
|
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
from core.tools.entities.tool_entities import CredentialType
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
def generate_provider_name(
|
|
||||||
providers: Sequence[Any],
|
|
||||||
credential_type: CredentialType,
|
|
||||||
fallback_context: str = "provider"
|
|
||||||
) -> str:
|
|
||||||
try:
|
|
||||||
default_pattern = f"{credential_type.get_name()}"
|
|
||||||
|
|
||||||
pattern = rf"^{re.escape(default_pattern)}\s+(\d+)$"
|
|
||||||
numbers = []
|
|
||||||
|
|
||||||
for provider in providers:
|
|
||||||
if provider.name:
|
|
||||||
match = re.match(pattern, provider.name.strip())
|
|
||||||
if match:
|
|
||||||
numbers.append(int(match.group(1)))
|
|
||||||
|
|
||||||
if not numbers:
|
|
||||||
return f"{default_pattern} 1"
|
|
||||||
|
|
||||||
max_number = max(numbers)
|
|
||||||
return f"{default_pattern} {max_number + 1}"
|
|
||||||
except Exception as e:
|
|
||||||
logger.warning(f"Error generating next provider name for {fallback_context}: {str(e)}")
|
|
||||||
return f"{credential_type.get_name()} 1"
|
|
||||||
@ -0,0 +1,33 @@
|
|||||||
|
"""add_pipeline_info_13
|
||||||
|
|
||||||
|
Revision ID: fcb46171d891
|
||||||
|
Revises: 2008609cf2bb
|
||||||
|
Create Date: 2025-07-18 21:34:31.914500
|
||||||
|
|
||||||
|
"""
|
||||||
|
from alembic import op
|
||||||
|
import models as models
|
||||||
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = 'fcb46171d891'
|
||||||
|
down_revision = '2008609cf2bb'
|
||||||
|
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.create_unique_constraint('datasource_provider_unique_name', ['tenant_id', 'plugin_id', 'provider', 'name'])
|
||||||
|
|
||||||
|
# ### 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_constraint('datasource_provider_unique_name', type_='unique')
|
||||||
|
|
||||||
|
# ### end Alembic commands ###
|
||||||
Loading…
Reference in New Issue