mirror of
https://github.com/Skyvern-AI/skyvern.git
synced 2026-07-09 16:09:13 +00:00
fix(SKY-9283): auto-route browser type from profile source (#5734)
This commit is contained in:
parent
89400b0dad
commit
804f814097
7 changed files with 64 additions and 0 deletions
|
|
@ -0,0 +1,30 @@
|
|||
"""add source_browser_type to browser_profiles
|
||||
|
||||
Revision ID: 696a7bba1ce6
|
||||
Revises: a5fe08ea4990
|
||||
Create Date: 2026-04-30T09:04:59.788467+00:00
|
||||
|
||||
"""
|
||||
|
||||
from typing import Sequence, Union
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
from alembic import op
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = "696a7bba1ce6"
|
||||
down_revision: Union[str, None] = "a5fe08ea4990"
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
op.add_column(
|
||||
"browser_profiles",
|
||||
sa.Column("source_browser_type", sa.String(), nullable=True),
|
||||
)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
op.drop_column("browser_profiles", "source_browser_type")
|
||||
|
|
@ -991,6 +991,7 @@ class BrowserProfileModel(Base):
|
|||
organization_id = Column(String, nullable=False)
|
||||
name = Column(String, nullable=False)
|
||||
description = Column(String, nullable=True)
|
||||
source_browser_type = Column(String, nullable=True)
|
||||
created_at = Column(DateTime, default=datetime.datetime.utcnow, nullable=False)
|
||||
modified_at = Column(DateTime, default=datetime.datetime.utcnow, onupdate=datetime.datetime.utcnow, nullable=False)
|
||||
deleted_at = Column(DateTime, nullable=True)
|
||||
|
|
|
|||
|
|
@ -36,12 +36,14 @@ class BrowserSessionsRepository(BaseRepository):
|
|||
organization_id: str,
|
||||
name: str,
|
||||
description: str | None = None,
|
||||
source_browser_type: str | None = None,
|
||||
) -> BrowserProfile:
|
||||
async with self.Session() as session:
|
||||
browser_profile = BrowserProfileModel(
|
||||
organization_id=organization_id,
|
||||
name=name,
|
||||
description=description,
|
||||
source_browser_type=source_browser_type,
|
||||
)
|
||||
session.add(browser_profile)
|
||||
await session.commit()
|
||||
|
|
|
|||
|
|
@ -319,11 +319,14 @@ async def _create_profile_from_session(
|
|||
),
|
||||
)
|
||||
|
||||
source_browser_type = browser_session.browser_type.value if browser_session.browser_type else None
|
||||
|
||||
try:
|
||||
profile = await app.DATABASE.browser_sessions.create_browser_profile(
|
||||
organization_id=organization_id,
|
||||
name=name,
|
||||
description=description,
|
||||
source_browser_type=source_browser_type,
|
||||
)
|
||||
except IntegrityError as exc:
|
||||
_handle_duplicate_profile_name(organization_id=organization_id, name=name, exc=exc)
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ class BrowserProfile(BaseModel):
|
|||
organization_id: str
|
||||
name: str
|
||||
description: str | None = None
|
||||
source_browser_type: str | None = None
|
||||
created_at: datetime
|
||||
modified_at: datetime
|
||||
deleted_at: datetime | None = None
|
||||
|
|
|
|||
|
|
@ -32,6 +32,13 @@ class PersistentBrowserType(StrEnum):
|
|||
Chrome = "chrome"
|
||||
StealthChromium = "stealth-chromium"
|
||||
|
||||
@classmethod
|
||||
def from_source_browser_type(cls, value: str) -> "PersistentBrowserType | None":
|
||||
try:
|
||||
return cls(value)
|
||||
except ValueError:
|
||||
return None
|
||||
|
||||
|
||||
class Extensions(StrEnum):
|
||||
AdBlocker = "ad-blocker"
|
||||
|
|
|
|||
20
tests/unit/forge/sdk/test_source_browser_type.py
Normal file
20
tests/unit/forge/sdk/test_source_browser_type.py
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
from skyvern.forge.sdk.schemas.persistent_browser_sessions import PersistentBrowserType
|
||||
|
||||
|
||||
class TestPersistentBrowserTypeFromSourceBrowserType:
|
||||
def test_chrome(self) -> None:
|
||||
assert PersistentBrowserType.from_source_browser_type("chrome") == PersistentBrowserType.Chrome
|
||||
|
||||
def test_msedge(self) -> None:
|
||||
assert PersistentBrowserType.from_source_browser_type("msedge") == PersistentBrowserType.MSEdge
|
||||
|
||||
def test_stealth_chromium(self) -> None:
|
||||
assert (
|
||||
PersistentBrowserType.from_source_browser_type("stealth-chromium") == PersistentBrowserType.StealthChromium
|
||||
)
|
||||
|
||||
def test_unknown_returns_none(self) -> None:
|
||||
assert PersistentBrowserType.from_source_browser_type("unknown-browser") is None
|
||||
|
||||
def test_empty_string_returns_none(self) -> None:
|
||||
assert PersistentBrowserType.from_source_browser_type("") is None
|
||||
Loading…
Add table
Add a link
Reference in a new issue