def logs(self, **kwargs) -> Union[bytes, Iterator[bytes]]: """Get logs from the container. Keyword Args: stdout (bool): Include stdout. Default: True stderr (bool): Include stderr. Default: True stream (bool): Return generator of strings as the response. Default: False timestamps (bool): Show timestamps in output. Default: False tail (Union[str, int]): Output specified number of lines at the end of logs. Integer representing the number of lines to display, or the string all. Default: all since (Union[datetime, int]): Show logs since a given datetime or integer epoch (in seconds) follow (bool): Follow log output. Default: False until (Union[datetime, int]): Show logs that occurred before the given datetime or integer epoch (in seconds) """ params = { "follow": kwargs.get("follow", kwargs.get("stream", None)), "since": api.prepare_timestamp(kwargs.get("since")), "stderr": kwargs.get("stderr", None), "stdout": kwargs.get("stdout", True), "tail": kwargs.get("tail"), "timestamps": kwargs.get("timestamps"), "until": api.prepare_timestamp(kwargs.get("until")), } response = self.client.get(f"/containers/{self.id}/logs", params=params) response.raise_for_status() if bool(kwargs.get("stream", False)): return api.stream_frames(response) return api.frames(response)
def list( self, since: Union[datetime, int, None] = None, until: Union[datetime, int, None] = None, filters: Optional[Dict[str, Any]] = None, decode: bool = False, ) -> Iterator[Union[str, Dict[str, Any]]]: """Report on networks. Args: decode: When True, decode stream into dict's. Default: False filters: Criteria for including events. since: Get events newer than this time. until: Get events older than this time. Yields: When decode is True, Iterator[Dict[str, Any]] When decode is False, Iterator[str] """ params = { "filters": api.prepare_filters(filters), "since": api.prepare_timestamp(since), "stream": True, "until": api.prepare_timestamp(until), } response = self.client.get("/events", params=params, stream=True) response.raise_for_status() for item in response.iter_lines(): if decode: yield json.loads(item) else: yield item
def test_prepare_timestamp(self): time = datetime.datetime(2022, 1, 24, 12, 0, 0) self.assertEqual(api.prepare_timestamp(time), 1643025600) self.assertEqual(api.prepare_timestamp(2), 2) self.assertEqual(api.prepare_timestamp(None), None) with self.assertRaises(ValueError): api.prepare_timestamp("bad input")
def list( self, since: Union[datetime, int, None] = None, until: Union[datetime, int, None] = None, filters: Optional[Dict[str, Any]] = None, decode: bool = False, ): """Report on networks. Args: decode: When True, decode stream into dict's. Default: False filters: Criteria for including events. since: Get events newer than this time. until: Get events older than this time. Yields: When decode is True, Iterator[Dict[str, Any]] When decode is False, Iterator[str] """ params = { "filters": api.prepare_filters(filters), "since": api.prepare_timestamp(since), "stream": True, "until": api.prepare_timestamp(until), } response = self.client.get("/events", params=params, stream=True) if response.status_code != requests.codes.okay: body = response.json() raise APIError(body["cause"], response=response, explanation=body["message"]) for item in response.iter_lines(): if decode: yield json.loads(item) else: yield item