Adapt Tools CLI to uv (#1455)

* Adapt Tools CLI to UV

* Fix failing test
This commit is contained in:
Vini Brasil
2024-10-16 10:55:04 -03:00
committed by GitHub
parent 60a87c7f77
commit 42f960b2bd
5 changed files with 39 additions and 29 deletions

View File

@@ -25,7 +25,9 @@ class PlusAPI:
def _make_request(self, method: str, endpoint: str, **kwargs) -> requests.Response: def _make_request(self, method: str, endpoint: str, **kwargs) -> requests.Response:
url = urljoin(self.base_url, endpoint) url = urljoin(self.base_url, endpoint)
return requests.request(method, url, headers=self.headers, **kwargs) session = requests.Session()
session.trust_env = False
return session.request(method, url, headers=self.headers, **kwargs)
def login_to_tool_repository(self): def login_to_tool_repository(self):
return self._make_request("POST", f"{self.TOOLS_RESOURCE}/login") return self._make_request("POST", f"{self.TOOLS_RESOURCE}/login")

View File

@@ -0,0 +1,10 @@
# Python-generated files
__pycache__/
*.py[oc]
build/
dist/
wheels/
*.egg-info
# Virtual environments
.venv

View File

@@ -1,14 +1,10 @@
[tool.poetry] [project]
name = "{{folder_name}}" name = "{{folder_name}}"
version = "0.1.0" version = "0.1.0"
description = "Power up your crews with {{folder_name}}" description = "Power up your crews with {{folder_name}}"
authors = ["Your Name <you@example.com>"]
readme = "README.md" readme = "README.md"
requires-python = ">=3.10,<=3.13"
dependencies = [
"crewai[tools]>=0.70.1"
]
[tool.poetry.dependencies]
python = ">=3.10,<=3.13"
crewai = { extras = ["tools"], version = ">=0.70.1,<1.0.0" }
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

View File

@@ -4,6 +4,8 @@ import platform
import subprocess import subprocess
import tempfile import tempfile
from pathlib import Path from pathlib import Path
from netrc import netrc
import stat
import click import click
from rich.console import Console from rich.console import Console
@@ -147,7 +149,7 @@ class ToolCommand(BaseCommand, PlusAPIMixin):
if login_response.status_code != 200: if login_response.status_code != 200:
console.print( console.print(
"Failed to authenticate to the tool repository. Make sure you have the access to tools.", "Authentication failed. Verify access to the tool repository, or try `crewai login`. ",
style="bold red", style="bold red",
) )
raise SystemExit raise SystemExit
@@ -159,23 +161,19 @@ class ToolCommand(BaseCommand, PlusAPIMixin):
"Successfully authenticated to the tool repository.", style="bold green" "Successfully authenticated to the tool repository.", style="bold green"
) )
def _set_netrc_credentials(self, credentials): def _set_netrc_credentials(self, credentials, netrc_path=None):
# Create .netrc or _netrc file if not netrc_path:
netrc_filename = "_netrc" if platform.system() == "Windows" else ".netrc" netrc_filename = "_netrc" if platform.system() == "Windows" else ".netrc"
netrc_path = Path.home() / netrc_filename netrc_path = Path.home() / netrc_filename
netrc_path.touch(mode=stat.S_IRUSR | stat.S_IWUSR, exist_ok=True)
netrc_content = f"""machine app.crewai.com netrc_instance = netrc(file=netrc_path)
login {credentials['username']} netrc_instance.hosts["app.crewai.com"] = (credentials["username"], "", credentials["password"])
password {credentials['password']}
"""
with open(netrc_path, "a") as netrc_file: with open(netrc_path, 'w') as file:
netrc_file.write(netrc_content) file.write(str(netrc_instance))
# Set appropriate permissions for Unix-like systems console.print(f"Added credentials to {netrc_path}", style="bold green")
if platform.system() != "Windows":
os.chmod(netrc_path, 0o600)
console.print(f"Added credentials to {netrc_filename}", style="bold green")
def _add_package(self, tool_details): def _add_package(self, tool_details):
tool_handle = tool_details["handle"] tool_handle = tool_details["handle"]

View File

@@ -92,16 +92,20 @@ class TestPlusAPI(unittest.TestCase):
) )
self.assertEqual(response, mock_response) self.assertEqual(response, mock_response)
@patch("crewai.cli.plus_api.requests.request") @patch("crewai.cli.plus_api.requests.Session")
def test_make_request(self, mock_request): def test_make_request(self, mock_session):
mock_response = MagicMock() mock_response = MagicMock()
mock_request.return_value = mock_response
mock_session_instance = mock_session.return_value
mock_session_instance.request.return_value = mock_response
response = self.api._make_request("GET", "test_endpoint") response = self.api._make_request("GET", "test_endpoint")
mock_request.assert_called_once_with( mock_session.assert_called_once()
mock_session_instance.request.assert_called_once_with(
"GET", f"{self.api.base_url}/test_endpoint", headers=self.api.headers "GET", f"{self.api.base_url}/test_endpoint", headers=self.api.headers
) )
mock_session_instance.trust_env = False
self.assertEqual(response, mock_response) self.assertEqual(response, mock_response)
@patch("crewai.cli.plus_api.PlusAPI._make_request") @patch("crewai.cli.plus_api.PlusAPI._make_request")