Skip to content

Commit

Permalink
Adapt Tools CLI to uv (#1455)
Browse files Browse the repository at this point in the history
* Adapt Tools CLI to UV

* Fix failing test
  • Loading branch information
vinibrsl authored Oct 16, 2024
1 parent 725d159 commit a6b7295
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 29 deletions.
4 changes: 3 additions & 1 deletion src/crewai/cli/plus_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@ def __init__(self, api_key: str) -> None:

def _make_request(self, method: str, endpoint: str, **kwargs) -> requests.Response:
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):
return self._make_request("POST", f"{self.TOOLS_RESOURCE}/login")
Expand Down
10 changes: 10 additions & 0 deletions src/crewai/cli/templates/tool/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Python-generated files
__pycache__/
*.py[oc]
build/
dist/
wheels/
*.egg-info

# Virtual environments
.venv
14 changes: 5 additions & 9 deletions src/crewai/cli/templates/tool/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
[tool.poetry]
[project]
name = "{{folder_name}}"
version = "0.1.0"
description = "Power up your crews with {{folder_name}}"
authors = ["Your Name <[email protected]>"]
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"
28 changes: 13 additions & 15 deletions src/crewai/cli/tools/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import subprocess
import tempfile
from pathlib import Path
from netrc import netrc
import stat

import click
from rich.console import Console
Expand Down Expand Up @@ -147,7 +149,7 @@ def login(self):

if login_response.status_code != 200:
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",
)
raise SystemExit
Expand All @@ -159,23 +161,19 @@ def login(self):
"Successfully authenticated to the tool repository.", style="bold green"
)

def _set_netrc_credentials(self, credentials):
# Create .netrc or _netrc file
netrc_filename = "_netrc" if platform.system() == "Windows" else ".netrc"
netrc_path = Path.home() / netrc_filename
def _set_netrc_credentials(self, credentials, netrc_path=None):
if not netrc_path:
netrc_filename = "_netrc" if platform.system() == "Windows" else ".netrc"
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
login {credentials['username']}
password {credentials['password']}
"""
netrc_instance = netrc(file=netrc_path)
netrc_instance.hosts["app.crewai.com"] = (credentials["username"], "", credentials["password"])

with open(netrc_path, "a") as netrc_file:
netrc_file.write(netrc_content)
with open(netrc_path, 'w') as file:
file.write(str(netrc_instance))

# Set appropriate permissions for Unix-like systems
if platform.system() != "Windows":
os.chmod(netrc_path, 0o600)
console.print(f"Added credentials to {netrc_filename}", style="bold green")
console.print(f"Added credentials to {netrc_path}", style="bold green")

def _add_package(self, tool_details):
tool_handle = tool_details["handle"]
Expand Down
12 changes: 8 additions & 4 deletions tests/cli/test_plus_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,16 +92,20 @@ def test_publish_tool_without_description(self, mock_make_request):
)
self.assertEqual(response, mock_response)

@patch("crewai.cli.plus_api.requests.request")
def test_make_request(self, mock_request):
@patch("crewai.cli.plus_api.requests.Session")
def test_make_request(self, mock_session):
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")

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
)
mock_session_instance.trust_env = False
self.assertEqual(response, mock_response)

@patch("crewai.cli.plus_api.PlusAPI._make_request")
Expand Down

0 comments on commit a6b7295

Please sign in to comment.