mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-06-05 07:41:39 +00:00
refactor(browser): delete tools/browser_providers/ directory; migrate tests
The four files in tools/browser_providers/ (base.py, browserbase.py,
browser_use.py, firecrawl.py) have been migrated into
plugins/browser/<vendor>/provider.py over the previous commits. No
in-tree code references them anymore — the legacy class names
(BrowserbaseProvider / BrowserUseProvider / FirecrawlProvider) are
re-exported from tools.browser_tool as aliases to the plugin classes,
so existing test patches keep working.
Updates tests/tools/test_managed_browserbase_and_modal.py:
- Adds _load_plugin_module() helper next to _load_tool_module().
- Reroutes five _load_tool_module('tools.browser_providers.X', ...)
calls to _load_plugin_module('plugins.browser.X.provider', ...).
- Renames BrowserbaseProvider/BrowserUseProvider -> the new plugin
class names (BrowserbaseBrowserProvider / BrowserUseBrowserProvider).
- Updates is_configured() -> is_available() on the one assertion that
cared about the rename (the others stay on is_configured() via the
BrowserProvider ABC's backward-compat alias).
Net diff: -630 / +39 lines (tests + dead-code deletion). Verified
23/23 tests in test_browser_cloud_*.py + test_managed_browserbase_and_modal.py
still pass.
Closes the file-tree mismatch portion of #25214. Remaining work:
new plugin-level test coverage under tests/plugins/browser/, behaviour
parity subprocess sweep vs origin/main, and full tests/tools/ regression
sweep before opening the PR.
This commit is contained in:
parent
1b9c539c6e
commit
250caebeb1
6 changed files with 39 additions and 650 deletions
|
|
@ -10,7 +10,9 @@ from unittest.mock import patch
|
|||
import pytest
|
||||
|
||||
|
||||
TOOLS_DIR = Path(__file__).resolve().parents[2] / "tools"
|
||||
REPO_ROOT = Path(__file__).resolve().parents[2]
|
||||
TOOLS_DIR = REPO_ROOT / "tools"
|
||||
PLUGINS_DIR = REPO_ROOT / "plugins"
|
||||
|
||||
|
||||
def _load_tool_module(module_name: str, filename: str):
|
||||
|
|
@ -22,6 +24,21 @@ def _load_tool_module(module_name: str, filename: str):
|
|||
return module
|
||||
|
||||
|
||||
def _load_plugin_module(module_name: str, relpath: str):
|
||||
"""Load a plugin module by file path from ``plugins/``.
|
||||
|
||||
Mirror of :func:`_load_tool_module` for the plugin tree. Used by tests
|
||||
that exercise the per-vendor browser plugins' session-lifecycle
|
||||
behaviour after the PR #25214 migration.
|
||||
"""
|
||||
spec = spec_from_file_location(module_name, PLUGINS_DIR / relpath)
|
||||
assert spec and spec.loader
|
||||
module = module_from_spec(spec)
|
||||
sys.modules[module_name] = module
|
||||
spec.loader.exec_module(module)
|
||||
return module
|
||||
|
||||
|
||||
def _reset_modules(prefixes: tuple[str, ...]):
|
||||
for name in list(sys.modules):
|
||||
if name.startswith(prefixes):
|
||||
|
|
@ -200,13 +217,13 @@ def test_browserbase_does_not_use_gateway_only_configuration():
|
|||
})
|
||||
|
||||
with patch.dict(os.environ, env, clear=True):
|
||||
browserbase_module = _load_tool_module(
|
||||
"tools.browser_providers.browserbase",
|
||||
"browser_providers/browserbase.py",
|
||||
browserbase_module = _load_plugin_module(
|
||||
"plugins.browser.browserbase.provider",
|
||||
"browser/browserbase/provider.py",
|
||||
)
|
||||
provider = browserbase_module.BrowserbaseProvider()
|
||||
provider = browserbase_module.BrowserbaseBrowserProvider()
|
||||
|
||||
assert provider.is_configured() is False
|
||||
assert provider.is_available() is False
|
||||
|
||||
|
||||
def test_browser_use_managed_gateway_adds_idempotency_key_and_persists_external_call_id():
|
||||
|
|
@ -231,13 +248,13 @@ def test_browser_use_managed_gateway_adds_idempotency_key_and_persists_external_
|
|||
}
|
||||
|
||||
with patch.dict(os.environ, env, clear=True):
|
||||
browser_use_module = _load_tool_module(
|
||||
"tools.browser_providers.browser_use",
|
||||
"browser_providers/browser_use.py",
|
||||
browser_use_module = _load_plugin_module(
|
||||
"plugins.browser.browser_use.provider",
|
||||
"browser/browser_use/provider.py",
|
||||
)
|
||||
|
||||
with patch.object(browser_use_module.requests, "post", return_value=_Response()) as post:
|
||||
provider = browser_use_module.BrowserUseProvider()
|
||||
provider = browser_use_module.BrowserUseBrowserProvider()
|
||||
session = provider.create_session("task-browser-use-managed")
|
||||
|
||||
sent_headers = post.call_args.kwargs["headers"]
|
||||
|
|
@ -271,11 +288,11 @@ def test_browser_use_managed_gateway_reuses_pending_idempotency_key_after_timeou
|
|||
}
|
||||
|
||||
with patch.dict(os.environ, env, clear=True):
|
||||
browser_use_module = _load_tool_module(
|
||||
"tools.browser_providers.browser_use",
|
||||
"browser_providers/browser_use.py",
|
||||
browser_use_module = _load_plugin_module(
|
||||
"plugins.browser.browser_use.provider",
|
||||
"browser/browser_use/provider.py",
|
||||
)
|
||||
provider = browser_use_module.BrowserUseProvider()
|
||||
provider = browser_use_module.BrowserUseBrowserProvider()
|
||||
timeout = browser_use_module.requests.Timeout("timed out")
|
||||
|
||||
with patch.object(
|
||||
|
|
@ -333,11 +350,11 @@ def test_browser_use_managed_gateway_preserves_pending_idempotency_key_for_in_pr
|
|||
}
|
||||
|
||||
with patch.dict(os.environ, env, clear=True):
|
||||
browser_use_module = _load_tool_module(
|
||||
"tools.browser_providers.browser_use",
|
||||
"browser_providers/browser_use.py",
|
||||
browser_use_module = _load_plugin_module(
|
||||
"plugins.browser.browser_use.provider",
|
||||
"browser/browser_use/provider.py",
|
||||
)
|
||||
provider = browser_use_module.BrowserUseProvider()
|
||||
provider = browser_use_module.BrowserUseBrowserProvider()
|
||||
|
||||
with patch.object(
|
||||
browser_use_module.requests,
|
||||
|
|
@ -380,11 +397,11 @@ def test_browser_use_managed_gateway_uses_new_idempotency_key_for_a_new_session_
|
|||
}
|
||||
|
||||
with patch.dict(os.environ, env, clear=True):
|
||||
browser_use_module = _load_tool_module(
|
||||
"tools.browser_providers.browser_use",
|
||||
"browser_providers/browser_use.py",
|
||||
browser_use_module = _load_plugin_module(
|
||||
"plugins.browser.browser_use.provider",
|
||||
"browser/browser_use/provider.py",
|
||||
)
|
||||
provider = browser_use_module.BrowserUseProvider()
|
||||
provider = browser_use_module.BrowserUseBrowserProvider()
|
||||
|
||||
with patch.object(browser_use_module.requests, "post", side_effect=[_Response(), _Response()]) as post:
|
||||
provider.create_session("task-browser-use-new")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue