Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 13 additions & 8 deletions src/buildkite_test_collector/collector/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,37 +8,42 @@
from ..pytest_plugin.logger import logger


# pylint: disable=too-few-public-methods
class API:
"""Buildkite Test Analytics API client"""

ENV_TOKEN = "BUILDKITE_ANALYTICS_TOKEN"
ENV_API_URL = "BUILDKITE_ANALYTICS_API_URL"

DEFAULT_API_URL = "https://analytics-api.buildkite.com/v1"

def __init__(self, env: Mapping[str, Optional[str]]):
"""Initialize the API client with environment variables"""
self.env = env
self.token = env.get(self.ENV_TOKEN)
self.api_url = env.get(self.ENV_API_URL) or self.DEFAULT_API_URL

def submit(self, payload: Payload, batch_size=100) -> Generator[Optional[Response], Any, Any]:
"""Submit a payload to the API"""
token = self.env.get("BUILDKITE_ANALYTICS_TOKEN")
api_url = self.env.get("BUILDKITE_ANALYTICS_API_URL") or "https://analytics-api.buildkite.com/v1"
response = None

if not token:
logger.warning("No `BUILDKITE_ANALYTICS_TOKEN` environment variable present")
if not self.token:
logger.warning("No %s environment variable present", self.ENV_TOKEN)
yield None

else:
for payload_slice in payload.into_batches(batch_size):
try:
response = post(api_url + "/uploads",
response = post(self.api_url + "/uploads",
json=payload_slice.as_json(),
headers={
"Content-Type": "application/json",
"Authorization": f"Token token=\"{token}\""
"Authorization": f"Token token=\"{self.token}\""
},
timeout=60)
response.raise_for_status()
yield response
except InvalidHeader as error:
logger.warning("Invalid `BUILDKITE_ANALYTICS_TOKEN` environment variable")
logger.warning("Invalid %s environment variable", self.ENV_TOKEN)
logger.warning(error)
yield None
except HTTPError as err:
Expand Down
4 changes: 2 additions & 2 deletions src/buildkite_test_collector/collector/run_env.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@

from .constants import COLLECTOR_NAME, VERSION # pylint: disable=W0611

# pylint: disable=R0902

# pylint: disable=too-few-public-methods
class RunEnvBuilder:
"""Builder class for RunEnv that allows injection of environment variables

Expand Down Expand Up @@ -116,6 +115,7 @@ def _generic_env(self) -> 'RunEnv':
)


# pylint: disable=too-many-instance-attributes
@dataclass(frozen=True)
class RunEnv:
"""The detected RunEnv"""
Expand Down