async def list_state(self, request):
        """Fetches list of data leaves, optionally filtered by address prefix.

        Request:
            query:
                - head: The id of the block to use as the head of the chain
                - address: Return leaves whose addresses begin with this prefix

        Response:
            data: An array of leaf objects with address and data keys
            head: The head used for this query (most recent if unspecified)
            link: The link to this exact query, including head block
            paging: Paging info and nav, like total resources and a next link
        """
        paging_controls = self._get_paging_controls(request)
        validator_query = client_pb2.ClientStateListRequest(
            head_id=request.url.query.get('head', None),
            address=request.url.query.get('address', None),
            paging=self._make_paging_message(paging_controls))

        response = await self._query_validator(
            Message.CLIENT_STATE_LIST_REQUEST,
            client_pb2.ClientStateListResponse,
            validator_query)

        return self._wrap_paginated_response(
            request=request,
            response=response,
            controls=paging_controls,
            data=response.get('leaves', []))
Exemple #2
0
 def state_list(self, request):
     # CLIENT_STATE_LIST_REQUEST
     root = RouteHandler._safe_get(request.match_info, 'merkle_root')
     # if no prefix is defined return all
     prefix = RouteHandler._safe_get(request.rel_url.query, 'prefix')
     client_request = client.ClientStateListRequest(merkle_root=root,
                                                    prefix=prefix)
     return self._generic_get(
         web_request=request,
         msg_type=Message.CLIENT_STATE_LIST_REQUEST,
         msg_content=client_request,
         resp_proto=client.ClientStateListResponse,
     )
Exemple #3
0
 def state_list(self, request):
     # CLIENT_STATE_LIST_REQUEST
     root = request.match_info.get("merkle_root", "")
     params = request.rel_url.query
     # if no prefix is defined return all
     prefix = params.get("prefix", "")
     client_request = client.ClientStateListRequest(merkle_root=root,
                                                    prefix=prefix)
     return self._generic_get(
         web_request=request,
         msg_type=Message.CLIENT_STATE_LIST_REQUEST,
         msg_content=client_request,
         resp_proto=client.ClientStateListResponse,
     )
Exemple #4
0
    def state_list(self, request):
        """
        Fetch a list of data leaves from the validator's state merkle-tree
        """
        head = request.url.query.get('head', '')
        address = request.url.query.get('address', '')

        response = self._query_validator(
            Message.CLIENT_STATE_LIST_REQUEST, client.ClientStateListResponse,
            client.ClientStateListRequest(head_id=head, address=address))

        return RouteHandler._wrap_response(data=response.get('leaves', []),
                                           metadata=RouteHandler._get_metadata(
                                               request, response))