Source code for bugzoo.client

import logging

from .api import APIClient
from .bug import BugManager
from .container import ContainerManager
from .file import FileManager
from .dockerm import DockerManager
from ..exceptions import ConnectionFailure

logger = logging.getLogger(__name__)  # type: logging.Logger
logger.setLevel(logging.DEBUG)

__all__ = ('Client',)


[docs]class Client(object):
[docs] def __init__(self, base_url: str = None, *, timeout_connection: int = 30 ) -> None: """ Constructs a new client for communicating with a BugZoo server. Parameters: base_url: the base URL of the BugZoo server. timeout_connection: the maximum number of seconds to wait whilst attempting to connect to the server before declaring the connection to have failed. Raises: ConnectionFailure: if a connection to the server could not be established within the timeout window. """ if base_url is None: base_url = "http://127.0.0.1:6060" self.__api = APIClient(base_url, timeout_connection=timeout_connection) self.__bugs = BugManager(self.__api) self.__containers = ContainerManager(self.__api) self.__files = FileManager(self.__api, self.__bugs) self.__docker = DockerManager(self.__api)
@property def bugs(self) -> BugManager: """ Provides access to the historical bugs that are registered with the server. Can be used to install, download, and uninstall registered bugs, or to dynamically register new bugs with the server. """ return self.__bugs @property def containers(self) -> ContainerManager: """ Provides access to the containers running on the server. Can be used to execute tests (as well as arbitrary shell commands), build from source code, apply patches, compute coverage, and more. """ return self.__containers @property def files(self) -> FileManager: """ Provides access to the file systems used by running containers. Can be used to read from and write to files in containers, and to copy data between the host machine and a given container. """ return self.__files @property def docker(self) -> DockerManager: return self.__docker
[docs] def shutdown(self) -> None: """Instructs the connected BugZoo server to shutdown.""" with self.__api.post("shutdown") as r: if r.status_code != 202: raise Exception("failed to shutdown server")