Fixed Questions Endpoint. Added pagination and added missing model

This commit is contained in:
Peter Annabel 2025-08-05 10:22:07 -05:00
parent 3339dbddc8
commit 0eba968c11
3 changed files with 47 additions and 1 deletions

View File

@ -1,6 +1,6 @@
[project]
name = "pysimplesat"
version = "0.1.2"
version = "0.1.3"
authors = [
{ name="Peter Annabel", email="peter.annabel@gmail.com" },
]

View File

@ -1,8 +1,10 @@
from pysimplesat.endpoints.base.base_endpoint import SimpleSatEndpoint
from pysimplesat.interfaces import (
IGettable,
IPaginateable,
)
from pysimplesat.models.simplesat import Question
from pysimplesat.responses.paginated_response import PaginatedResponse
from pysimplesat.types import (
JSON,
SimpleSatRequestParams,
@ -12,10 +14,43 @@ from pysimplesat.types import (
class QuestionsEndpoint(
SimpleSatEndpoint,
IGettable[Question, SimpleSatRequestParams],
IPaginateable[Question, SimpleSatRequestParams],
):
def __init__(self, client, parent_endpoint=None) -> None:
SimpleSatEndpoint.__init__(self, client, "questions", parent_endpoint=parent_endpoint)
IGettable.__init__(self, Question)
IPaginateable.__init__(self, Question)
def paginated(
self,
page: int,
limit: int,
params: SimpleSatRequestParams | None = None,
) -> PaginatedResponse[Question]:
"""
Performs a GET request against the /questions 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[Question]: 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("GET", params=params),
Question,
self,
"questions",
page,
limit,
params,
)
def get(
self,

View File

@ -68,6 +68,17 @@ class Survey(SimpleSatModel):
survey_type: str | None = Field(default=None, alias="SurveyType")
brand_name: str | None = Field(default=None, alias="BrandName")
class Question(SimpleSatModel):
id: int | None = Field(default=None, alias="Id")
survey: dict[str, int | str] | None = Field(default=None, alias="Survey")
order: int | None = Field(default=None, alias="Order")
metric: str | None = Field(default=None, alias="Metric")
text: str | None = Field(default=None, alias="Text")
rating_scale: bool | None = Field(default=None, alias="RatingScale")
required: bool | None = Field(default=None, alias="Required")
choices: list[str] | None = Field(default=None, alias="Choices")
rules: dict[str, Any] | None = Field(default=None, alias="Rules")
class CustomerBulk(SimpleSatModel):
request_id: str | None = Field(default=None, alias="RequestId")
detail: str | None = Field(default=None, alias="Detail")