mirror of
				https://github.com/brygphilomena/pysimplesat.git
				synced 2025-11-04 08:47:29 +00:00 
			
		
		
		
	Handled pagination for the search post requests
This commit is contained in:
		
							parent
							
								
									c63b4e53f5
								
							
						
					
					
						commit
						18ba951ea9
					
				@ -1,8 +1,10 @@
 | 
			
		||||
from pysimplesat.endpoints.base.base_endpoint import SimpleSatEndpoint
 | 
			
		||||
from pysimplesat.interfaces import (
 | 
			
		||||
    IPostable,
 | 
			
		||||
    IPaginateable,
 | 
			
		||||
)
 | 
			
		||||
from pysimplesat.models.simplesat import Answer
 | 
			
		||||
from pysimplesat.responses.paginated_response import PaginatedResponse
 | 
			
		||||
from pysimplesat.types import (
 | 
			
		||||
    JSON,
 | 
			
		||||
    SimpleSatRequestParams,
 | 
			
		||||
@ -12,13 +14,45 @@ from pysimplesat.types import (
 | 
			
		||||
class AnswersSearchEndpoint(
 | 
			
		||||
    SimpleSatEndpoint,
 | 
			
		||||
    IPostable[Answer, SimpleSatRequestParams],
 | 
			
		||||
    IPaginateable[Answer, SimpleSatRequestParams],
 | 
			
		||||
 | 
			
		||||
):
 | 
			
		||||
    def __init__(self, client, parent_endpoint=None) -> None:
 | 
			
		||||
        SimpleSatEndpoint.__init__(self, client, "search", parent_endpoint=parent_endpoint)
 | 
			
		||||
        IPostable.__init__(self, Answer)
 | 
			
		||||
        IPaginateable.__init__(self, Answer)
 | 
			
		||||
 | 
			
		||||
    def paginated(
 | 
			
		||||
        self,
 | 
			
		||||
        page: int,
 | 
			
		||||
        limit: int,
 | 
			
		||||
        params: SimpleSatRequestParams | None = None,
 | 
			
		||||
    ) -> PaginatedResponse[Answer]:
 | 
			
		||||
        """
 | 
			
		||||
        Performs a POST request against the /answers/search endpoint and returns an initialized PaginatedResponse object.
 | 
			
		||||
 | 
			
		||||
        Parameters:
 | 
			
		||||
            page (int): The page number to request.
 | 
			
		||||
            limit (int): The number of results to return per page.
 | 
			
		||||
            params (dict[str, int | str]): The parameters to send in the request query string.
 | 
			
		||||
        Returns:
 | 
			
		||||
            PaginatedResponse[Answer]: The initialized PaginatedResponse object.
 | 
			
		||||
        """
 | 
			
		||||
        if params:
 | 
			
		||||
            params["page[number]"] = page
 | 
			
		||||
            params["page[size]"] = limit
 | 
			
		||||
        else:
 | 
			
		||||
            params = {"page[number]": page, "page[size]": limit}
 | 
			
		||||
        return PaginatedResponse(
 | 
			
		||||
            super()._make_request("POST", params=params),
 | 
			
		||||
            Answer,
 | 
			
		||||
            self,
 | 
			
		||||
            "answers",
 | 
			
		||||
            page,
 | 
			
		||||
            limit,
 | 
			
		||||
            params,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    #TODO: How do I paginate a post?
 | 
			
		||||
    def post(self, data: JSON | None = None, params: SimpleSatRequestParams | None = None) -> Answer:
 | 
			
		||||
        """
 | 
			
		||||
        Performs a POST request against the /answers/search endpoint.
 | 
			
		||||
 | 
			
		||||
@ -1,8 +1,10 @@
 | 
			
		||||
from pysimplesat.endpoints.base.base_endpoint import SimpleSatEndpoint
 | 
			
		||||
from pysimplesat.interfaces import (
 | 
			
		||||
    IPostable,
 | 
			
		||||
    IPaginateable,
 | 
			
		||||
)
 | 
			
		||||
from pysimplesat.models.simplesat import Response
 | 
			
		||||
from pysimplesat.responses.paginated_response import PaginatedResponse
 | 
			
		||||
from pysimplesat.types import (
 | 
			
		||||
    JSON,
 | 
			
		||||
    SimpleSatRequestParams,
 | 
			
		||||
@ -12,11 +14,45 @@ from pysimplesat.types import (
 | 
			
		||||
class ResponsesSearchEndpoint(
 | 
			
		||||
    SimpleSatEndpoint,
 | 
			
		||||
    IPostable[Response, SimpleSatRequestParams],
 | 
			
		||||
    IPaginateable[Response, SimpleSatRequestParams],
 | 
			
		||||
 | 
			
		||||
):
 | 
			
		||||
    def __init__(self, client, parent_endpoint=None) -> None:
 | 
			
		||||
        SimpleSatEndpoint.__init__(self, client, "search", parent_endpoint=parent_endpoint)
 | 
			
		||||
        IPostable.__init__(self, Response)
 | 
			
		||||
        IPaginateable.__init__(self, Response)
 | 
			
		||||
 | 
			
		||||
    def paginated(
 | 
			
		||||
        self,
 | 
			
		||||
        page: int,
 | 
			
		||||
        limit: int,
 | 
			
		||||
        params: SimpleSatRequestParams | None = None,
 | 
			
		||||
    ) -> PaginatedResponse[Response]:
 | 
			
		||||
        """
 | 
			
		||||
        Performs a POST request against the /responses/search endpoint and returns an initialized PaginatedResponse object.
 | 
			
		||||
 | 
			
		||||
        Parameters:
 | 
			
		||||
            page (int): The page number to request.
 | 
			
		||||
            limit (int): The number of results to return per page.
 | 
			
		||||
            params (dict[str, int | str]): The parameters to send in the request query string.
 | 
			
		||||
        Returns:
 | 
			
		||||
            PaginatedResponse[Response]: The initialized PaginatedResponse object.
 | 
			
		||||
        """
 | 
			
		||||
        if params:
 | 
			
		||||
            params["page[number]"] = page
 | 
			
		||||
            params["page[size]"] = limit
 | 
			
		||||
        else:
 | 
			
		||||
            params = {"page[number]": page, "page[size]": limit}
 | 
			
		||||
        return PaginatedResponse(
 | 
			
		||||
            super()._make_request("POST", params=params),
 | 
			
		||||
            Response,
 | 
			
		||||
            self,
 | 
			
		||||
            "responses",
 | 
			
		||||
            page,
 | 
			
		||||
            limit,
 | 
			
		||||
            params,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    #TODO: How do I paginate a post?
 | 
			
		||||
    def post(self, data: JSON | None = None, params: SimpleSatRequestParams | None = None) -> Response:
 | 
			
		||||
 | 
			
		||||
@ -55,8 +55,8 @@ class TeamMember(SimpleSatModel):
 | 
			
		||||
class Response(SimpleSatModel):
 | 
			
		||||
    survey_id: int | None = Field(default=None, alias="SurveyId")
 | 
			
		||||
    tags: list | None = Field(default=None, alias="Tags")
 | 
			
		||||
    answers: dict[str, Any] | None = Field(default=None, alias="Answers")
 | 
			
		||||
    team_members: dict[str, Any] | None = Field(default=None, alias="TeamMembers")
 | 
			
		||||
    answers: list[dict[str, Any]] | None = Field(default=None, alias="Answers")
 | 
			
		||||
    team_members: list[dict[str, Any]] | None = Field(default=None, alias="TeamMembers")
 | 
			
		||||
    ticket: dict[str, Any] | None = Field(default=None, alias="Ticket")
 | 
			
		||||
    customer: dict[str, Any] | None = Field(default=None, alias="Customer")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -11,5 +11,9 @@ simplesat_api_client = SimpleSatAPIClient(
 | 
			
		||||
    privatekey,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
#account = simplesat_api_client.account.get()
 | 
			
		||||
#print(account)
 | 
			
		||||
#surveys = simplesat_api_client.surveys.get()
 | 
			
		||||
#print(surveys)
 | 
			
		||||
 | 
			
		||||
answers = simplesat_api_client.responses.search.paginated(1,5)
 | 
			
		||||
print(answers)
 | 
			
		||||
print(answers.data)
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user