def get_actions_list(self, firewall, # type: Firewall status=None, # type: Optional[List[str]] sort=None, # type: Optional[List[str]] page=None, # type: Optional[int] per_page=None # type: Optional[int] ): # type: (...) -> PageResults[List[BoundAction], Meta] """Returns all action objects for a Firewall. :param firewall: :class:`BoundFirewall <hcloud.firewalls.client.BoundFirewall>` or :class:`Firewall <hcloud.firewalls.domain.Firewall>` :param status: List[str] (optional) Response will have only actions with specified statuses. Choices: `running` `success` `error` :param sort: List[str] (optional) Specify how the results are sorted. Choices: `id` `id:asc` `id:desc` `command` `command:asc` `command:desc` `status` `status:asc` `status:desc` `progress` `progress:asc` `progress:desc` `started` `started:asc` `started:desc` `finished` `finished:asc` `finished:desc` :param page: int (optional) Specifies the page to fetch :param per_page: int (optional) Specifies how many results are returned by page :return: (List[:class:`BoundAction <hcloud.actions.client.BoundAction>`], :class:`Meta <hcloud.core.domain.Meta>`) """ params = {} if status is not None: params["status"] = status if sort is not None: params["sort"] = sort if page is not None: params["page"] = page if per_page is not None: params["per_page"] = per_page response = self._client.request( url="/firewalls/{firewall_id}/actions".format(firewall_id=firewall.id), method="GET", params=params) actions = [BoundAction(self._client.actions, action_data) for action_data in response['actions']] return add_meta_to_result(actions, response, 'actions')
def get_actions_list( self, image, # type: Image sort=None, # type: Optional[List[str]] page=None, # type: Optional[int] per_page=None # type: Optional[int] ): # type: (...) -> PageResults[List[BoundAction], Meta] """Returns a list of action objects for an image. :param image: :class:`BoundImage <hcloud.images.client.BoundImage>` or :class:`Image <hcloud.images.domain.Image>` :param sort: List[str] (optional) Specify how the results are sorted. Choices: `id` `id:asc` `id:desc` `command` `command:asc` `command:desc` `status` `status:asc` `status:desc` `progress` `progress:asc` `progress:desc` `started` `started:asc` `started:desc` `finished` `finished:asc` `finished:desc` :param page: int (optional) Specifies the page to fetch :param per_page: int (optional) Specifies how many results are returned by page :return: (List[:class:`BoundAction <hcloud.actions.client.BoundAction>`], :class:`Meta <hcloud.core.domain.Meta>`) """ params = {} if sort is not None: params["sort"] = sort if page is not None: params["page"] = page if per_page is not None: params["per_page"] = per_page response = self._client.request( url="/images/{image_id}/actions".format(image_id=image.id), method="GET", params=params) actions = [ BoundAction(self._client.actions, action_data) for action_data in response['actions'] ] return add_meta_to_result(actions, response, 'actions')
def get_actions_list(self, volume, status=None, sort=None, page=None, per_page=None): # type: (Volume, Optional[List[str]], Optional[List[str]], Optional[int], Optional[int]) -> PageResults[List[BoundAction], Meta] """Returns all action objects for a volume. :param volume: :class:`BoundVolume <hcloud.volumes.client.BoundVolume>` or :class:`Volume <hcloud.volumes.domain.Volume>` :param status: List[str] (optional) Response will have only actions with specified statuses. Choices: `running` `success` `error` :param sort: List[str] (optional) Specify how the results are sorted. Choices: `id` `id:asc` `id:desc` `command` `command:asc` `command:desc` `status` `status:asc` `status:desc` `progress` `progress:asc` `progress:desc` `started` `started:asc` `started:desc` `finished` `finished:asc` `finished:desc` :param page: int (optional) Specifies the page to fetch :param per_page: int (optional) Specifies how many results are returned by page :return: (List[:class:`BoundAction <hcloud.actions.client.BoundAction>`], :class:`Meta <hcloud.core.domain.Meta>`) """ params = {} # type: Dict[str, Any] if status is not None: params["status"] = status if sort is not None: params["sort"] = sort if page is not None: params["page"] = page if per_page is not None: params["per_page"] = per_page response = self._client.request(url="/volumes/{volume_id}/actions".format(volume_id=volume.id), method="GET", params=params) actions = [BoundAction(self._client.actions, action_data) for action_data in response['actions']] return add_meta_to_result(actions, response, 'actions')
def _add_meta_to_result( self, results, # type: List[BoundModelBase] response # type: json ): # type: (...) -> PageResult self._is_list_attribute_implemented() return add_meta_to_result(results, response, self.results_list_attribute_name)
def test_add_meta_to_result(self): json_content = { "meta": { "pagination": { "page": 2, "per_page": 10, "previous_page": 1, "next_page": 3, "last_page": 10, "total_entries": 100 } } } result = add_meta_to_result([1, 2, 3], json_content, "id_list") assert result.id_list == [1, 2, 3] assert result.meta.pagination.page == 2 assert result.meta.pagination.per_page == 10 assert result.meta.pagination.next_page == 3 assert result.meta.pagination.last_page == 10 assert result.meta.pagination.total_entries == 100
def get_actions_list(self, status, page=None, per_page=None): json_content = json_content_function(page) results = [(r, page, status, per_page) for r in json_content['actions']] return add_meta_to_result(results, json_content, 'actions')