Source code for evergreen.host

# -*- encoding: utf-8 -*-
"""Host representation of evergreen."""
from __future__ import absolute_import

from typing import TYPE_CHECKING, Any, Dict

from evergreen.base import _BaseEvergreenObject, evg_attrib, evg_datetime_attrib

if TYPE_CHECKING:
    from evergreen.api import EvergreenApi
    from evergreen.build import Build
    from evergreen.version import Version


[docs]class HostDistro(_BaseEvergreenObject): """Representation of a distro.""" distro_id = evg_attrib("distro_id") provider = evg_attrib("provider") image_id = evg_attrib("image_id") def __init__(self, json: Dict[str, Any], api: "EvergreenApi") -> None: """ Create an instance of a distro. :param json: json of distro. :param api: Evergreen API. """ super(HostDistro, self).__init__(json, api)
[docs]class RunningTask(_BaseEvergreenObject): """Representation of a running task.""" task_id = evg_attrib("task_id") name = evg_attrib("name") dispatch_time = evg_datetime_attrib("dispatch_time") version_id = evg_attrib("version_id") build_id = evg_attrib("build_id") def __init__(self, json: Dict[str, Any], api: "EvergreenApi") -> None: """ Create an instance of a Running Task. :param json: json of running task. :param api: Evergreen API. """ super(RunningTask, self).__init__(json, api)
[docs] def get_build(self) -> "Build": """ Get build for the running task. :return: build object for task. """ return self._api.build_by_id(self.build_id)
[docs] def get_version(self) -> "Version": """ Get version for the running task. :return: version object for task. """ return self._api.version_by_id(self.version_id)
[docs]class Host(_BaseEvergreenObject): """Representation of an Evergreen host.""" host_id = evg_attrib("host_id") host_url = evg_attrib("host_url") provisioned = evg_attrib("provisioned") started_by = evg_attrib("started_by") host_type = evg_attrib("host_type") user = evg_attrib("user") status = evg_attrib("status") user_host = evg_attrib("user_host") def __init__(self, json: Dict[str, Any], api: "EvergreenApi") -> None: """Create an instance of an evergreen host.""" super(Host, self).__init__(json, api) @property def running_task(self) -> RunningTask: """Get the running task on this host.""" return RunningTask(self.json["running_task"], self._api) @property def distro(self) -> HostDistro: """Get the distro on this host.""" return HostDistro(self.json["distro"], self._api)
[docs] def get_build(self) -> "Build": """ Get the build for the build using this host. :return: build for task running on this host. """ return self.running_task.get_build()
[docs] def get_version(self) -> "Version": """ Get the version for the task using this host. :return: version for task running on this host. """ return self.running_task.get_version()
def __str__(self) -> str: """Get a human readable string version of this host.""" return "{host_id}: {distro_id} - {status}".format( host_id=self.host_id, distro_id=self.distro.distro_id, status=self.status )