Handled pagination for the search post requests

This commit is contained in:
Peter Annabel 2025-08-01 08:27:09 -05:00
parent c63b4e53f5
commit 18ba951ea9
4 changed files with 79 additions and 5 deletions

View File

@ -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.

View File

@ -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:

View File

@ -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")

View File

@ -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)