Source code for bugzoo.core.container

__all__ = ["Container"]

from typing import List, Iterator, Dict, Optional, Union, Any, Tuple, Iterable
import copy
import os
import tempfile

import docker
import attr

from .bug import Bug


def _convert_tools(tools: Iterable[str]) -> Tuple[str, ...]:
    return tuple(tools)


[docs]@attr.s(frozen=True) class Container(object): """ Containers provide ephemeral, mutable instances of registered bugs, and are used to conduct studies of software bugs. Behind the scenes, containers are implemented as `Docker containers <https://docker.com>`_. """ """ A unique identifier for this container. """ uid = attr.ib(type=str) """ The name of the bug that was used to provision this container. """ bug = attr.ib(type=str) """ The names of the tools that are mounted inside this container. """ tools = attr.ib(type=Tuple[str, ...], converter=_convert_tools) @property def id(self) -> str: return self.uid
[docs] @staticmethod def from_dict(d: Dict[str, Any]) -> 'Container': return Container(uid=d['uid'], bug=d['bug'], tools=d['tools'])
[docs] def to_dict(self) -> Dict[str, Any]: return {'uid': self.uid, 'bug': self.bug, 'tools': list(self.tools)}