feat: add required env var validation for brightdata

Co-authored-by: Greyson Lalonde <greyson.r.lalonde@gmail.com>
This commit is contained in:
Mike Plachta
2025-10-02 09:35:29 -07:00
committed by GitHub
parent 5456c80556
commit c5ac5fa78a
3 changed files with 45 additions and 12 deletions

View File

@@ -3,7 +3,7 @@ import os
from typing import Any from typing import Any
import aiohttp import aiohttp
from crewai.tools import BaseTool from crewai.tools import BaseTool, EnvVar
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
@@ -414,6 +414,15 @@ class BrightDataDatasetTool(BaseTool):
format: str = "json" format: str = "json"
zipcode: str | None = None zipcode: str | None = None
additional_params: dict[str, Any] | None = None additional_params: dict[str, Any] | None = None
env_vars: list[EnvVar] = Field(
default_factory=lambda: [
EnvVar(
name="BRIGHT_DATA_API_KEY",
description="API key for Bright Data",
required=True,
),
]
)
def __init__( def __init__(
self, self,
@@ -422,8 +431,9 @@ class BrightDataDatasetTool(BaseTool):
format: str = "json", format: str = "json",
zipcode: str | None = None, zipcode: str | None = None,
additional_params: dict[str, Any] | None = None, additional_params: dict[str, Any] | None = None,
**kwargs: Any,
): ):
super().__init__() super().__init__(**kwargs)
self.dataset_type = dataset_type self.dataset_type = dataset_type
self.url = url self.url = url
self.format = format self.format = format
@@ -441,7 +451,7 @@ class BrightDataDatasetTool(BaseTool):
zipcode: str | None = None, zipcode: str | None = None,
additional_params: dict[str, Any] | None = None, additional_params: dict[str, Any] | None = None,
polling_interval: int = 1, polling_interval: int = 1,
) -> dict: ) -> str:
"""Asynchronously trigger and poll Bright Data dataset scraping. """Asynchronously trigger and poll Bright Data dataset scraping.
Args: Args:

View File

@@ -2,7 +2,7 @@ import os
from typing import Any from typing import Any
import urllib.parse import urllib.parse
from crewai.tools import BaseTool from crewai.tools import BaseTool, EnvVar
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
import requests import requests
@@ -89,6 +89,15 @@ class BrightDataSearchTool(BaseTool):
search_type: str | None = None search_type: str | None = None
device_type: str = "desktop" device_type: str = "desktop"
parse_results: bool = True parse_results: bool = True
env_vars: list[EnvVar] = Field(
default_factory=lambda: [
EnvVar(
name="BRIGHT_DATA_API_KEY",
description="API key for Bright Data",
required=True,
),
]
)
def __init__( def __init__(
self, self,
@@ -99,8 +108,9 @@ class BrightDataSearchTool(BaseTool):
search_type: str | None = None, search_type: str | None = None,
device_type: str = "desktop", device_type: str = "desktop",
parse_results: bool = True, parse_results: bool = True,
**kwargs: Any,
): ):
super().__init__() super().__init__(**kwargs)
self.base_url = self._config.API_URL self.base_url = self._config.API_URL
self.query = query self.query = query
self.search_engine = search_engine self.search_engine = search_engine
@@ -110,8 +120,8 @@ class BrightDataSearchTool(BaseTool):
self.device_type = device_type self.device_type = device_type
self.parse_results = parse_results self.parse_results = parse_results
self.api_key = os.getenv("BRIGHT_DATA_API_KEY") self.api_key = os.getenv("BRIGHT_DATA_API_KEY") or ""
self.zone = os.getenv("BRIGHT_DATA_ZONE") self.zone = os.getenv("BRIGHT_DATA_ZONE") or ""
if not self.api_key: if not self.api_key:
raise ValueError("BRIGHT_DATA_API_KEY environment variable is required.") raise ValueError("BRIGHT_DATA_API_KEY environment variable is required.")
if not self.zone: if not self.zone:

View File

@@ -1,7 +1,7 @@
import os import os
from typing import Any from typing import Any
from crewai.tools import BaseTool from crewai.tools import BaseTool, EnvVar
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
import requests import requests
@@ -69,18 +69,31 @@ class BrightDataWebUnlockerTool(BaseTool):
url: str | None = None url: str | None = None
format: str = "raw" format: str = "raw"
data_format: str = "markdown" data_format: str = "markdown"
env_vars: list[EnvVar] = Field(
default_factory=lambda: [
EnvVar(
name="BRIGHT_DATA_API_KEY",
description="API key for Bright Data",
required=True,
),
]
)
def __init__( def __init__(
self, url: str | None = None, format: str = "raw", data_format: str = "markdown" self,
url: str | None = None,
format: str = "raw",
data_format: str = "markdown",
**kwargs: Any,
): ):
super().__init__() super().__init__(**kwargs)
self.base_url = self._config.API_URL self.base_url = self._config.API_URL
self.url = url self.url = url
self.format = format self.format = format
self.data_format = data_format self.data_format = data_format
self.api_key = os.getenv("BRIGHT_DATA_API_KEY") self.api_key = os.getenv("BRIGHT_DATA_API_KEY") or ""
self.zone = os.getenv("BRIGHT_DATA_ZONE") self.zone = os.getenv("BRIGHT_DATA_ZONE") or ""
if not self.api_key: if not self.api_key:
raise ValueError("BRIGHT_DATA_API_KEY environment variable is required.") raise ValueError("BRIGHT_DATA_API_KEY environment variable is required.")
if not self.zone: if not self.zone: