Skip to content

Commit

Permalink
feat(specs): add /schedule endpoint (generated)
Browse files Browse the repository at this point in the history
algolia/api-clients-automation#3350

Co-authored-by: algolia-bot <accounts+algolia-api-client-bot@algolia.com>
Co-authored-by: Fernando Beck <fe.beck25@gmail.com>
Co-authored-by: Pierre Millot <pierre.millot@algolia.com>
  • Loading branch information
3 people committed Aug 20, 2024
1 parent b8794d4 commit 9195f09
Show file tree
Hide file tree
Showing 3 changed files with 221 additions and 0 deletions.
64 changes: 64 additions & 0 deletions algoliasearch/abtesting/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@
from algoliasearch.abtesting.models.ab_test_response import ABTestResponse
from algoliasearch.abtesting.models.add_ab_tests_request import AddABTestsRequest
from algoliasearch.abtesting.models.list_ab_tests_response import ListABTestsResponse
from algoliasearch.abtesting.models.schedule_ab_test_response import (
ScheduleABTestResponse,
)
from algoliasearch.abtesting.models.schedule_ab_tests_request import (
ScheduleABTestsRequest,
)
from algoliasearch.http.api_response import ApiResponse
from algoliasearch.http.request_options import RequestOptions
from algoliasearch.http.serializer import bodySerializer
Expand Down Expand Up @@ -706,6 +712,64 @@ async def list_ab_tests(
)
).deserialize(ListABTestsResponse)

async def schedule_ab_test_with_http_info(
self,
schedule_ab_tests_request: ScheduleABTestsRequest,
request_options: Optional[Union[dict, RequestOptions]] = None,
) -> ApiResponse[str]:
"""
Schedule an A/B test to be started at a later time.
Required API Key ACLs:
- editSettings
:param schedule_ab_tests_request: (required)
:type schedule_ab_tests_request: ScheduleABTestsRequest
:param request_options: The request options to send along with the query, they will be merged with the transporter base parameters (headers, query params, timeouts, etc.). (optional)
:return: Returns the raw algoliasearch 'APIResponse' object.
"""

if schedule_ab_tests_request is None:
raise ValueError(
"Parameter `schedule_ab_tests_request` is required when calling `schedule_ab_test`."
)

_data = {}
if schedule_ab_tests_request is not None:
_data = schedule_ab_tests_request

return await self._transporter.request(
verb=Verb.POST,
path="/2/abtests/schedule",
request_options=self._request_options.merge(
data=dumps(bodySerializer(_data)),
user_request_options=request_options,
),
use_read_transporter=False,
)

async def schedule_ab_test(
self,
schedule_ab_tests_request: ScheduleABTestsRequest,
request_options: Optional[Union[dict, RequestOptions]] = None,
) -> ScheduleABTestResponse:
"""
Schedule an A/B test to be started at a later time.
Required API Key ACLs:
- editSettings
:param schedule_ab_tests_request: (required)
:type schedule_ab_tests_request: ScheduleABTestsRequest
:param request_options: The request options to send along with the query, they will be merged with the transporter base parameters (headers, query params, timeouts, etc.). (optional)
:return: Returns the deserialized response in a 'ScheduleABTestResponse' result object.
"""
return (
await self.schedule_ab_test_with_http_info(
schedule_ab_tests_request, request_options
)
).deserialize(ScheduleABTestResponse)

async def stop_ab_test_with_http_info(
self,
id: Annotated[StrictInt, Field(description="Unique A/B test identifier.")],
Expand Down
63 changes: 63 additions & 0 deletions algoliasearch/abtesting/models/schedule_ab_test_response.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# coding: utf-8

"""
Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT.
"""

from __future__ import annotations

from json import loads
from typing import Any, Dict, Self

from pydantic import BaseModel, ConfigDict, Field, StrictInt


class ScheduleABTestResponse(BaseModel):
"""
ScheduleABTestResponse
"""

ab_test_schedule_id: StrictInt = Field(
description="Unique scheduled A/B test identifier.", alias="abTestScheduleID"
)

model_config = ConfigDict(
use_enum_values=True, populate_by_name=True, validate_assignment=True
)

def to_json(self) -> str:
return self.model_dump_json(by_alias=True, exclude_unset=True)

@classmethod
def from_json(cls, json_str: str) -> Self:
"""Create an instance of ScheduleABTestResponse from a JSON string"""
return cls.from_dict(loads(json_str))

def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
_dict = self.model_dump(
by_alias=True,
exclude={},
exclude_none=True,
)
return _dict

@classmethod
def from_dict(cls, obj: Dict) -> Self:
"""Create an instance of ScheduleABTestResponse from a dict"""
if obj is None:
return None

if not isinstance(obj, dict):
return cls.model_validate(obj)

_obj = cls.model_validate({"abTestScheduleID": obj.get("abTestScheduleID")})
return _obj
94 changes: 94 additions & 0 deletions algoliasearch/abtesting/models/schedule_ab_tests_request.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
# coding: utf-8

"""
Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT.
"""

from __future__ import annotations

from json import loads
from typing import Annotated, Any, Dict, List, Self

from pydantic import BaseModel, ConfigDict, Field, StrictStr

from algoliasearch.abtesting.models.add_ab_tests_variant import AddABTestsVariant


class ScheduleABTestsRequest(BaseModel):
"""
ScheduleABTestsRequest
"""

name: StrictStr = Field(description="A/B test name.")
variants: Annotated[List[AddABTestsVariant], Field(min_length=2, max_length=2)] = (
Field(description="A/B test variants.")
)
scheduled_at: StrictStr = Field(
description="Date and time when the A/B test is scheduled to start, in RFC 3339 format.",
alias="scheduledAt",
)
end_at: StrictStr = Field(
description="End date and time of the A/B test, in RFC 3339 format.",
alias="endAt",
)

model_config = ConfigDict(
use_enum_values=True, populate_by_name=True, validate_assignment=True
)

def to_json(self) -> str:
return self.model_dump_json(by_alias=True, exclude_unset=True)

@classmethod
def from_json(cls, json_str: str) -> Self:
"""Create an instance of ScheduleABTestsRequest from a JSON string"""
return cls.from_dict(loads(json_str))

def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
_dict = self.model_dump(
by_alias=True,
exclude={},
exclude_none=True,
)
_items = []
if self.variants:
for _item in self.variants:
if _item:
_items.append(_item.to_dict())
_dict["variants"] = _items
return _dict

@classmethod
def from_dict(cls, obj: Dict) -> Self:
"""Create an instance of ScheduleABTestsRequest from a dict"""
if obj is None:
return None

if not isinstance(obj, dict):
return cls.model_validate(obj)

_obj = cls.model_validate(
{
"name": obj.get("name"),
"variants": (
[
AddABTestsVariant.from_dict(_item)
for _item in obj.get("variants")
]
if obj.get("variants") is not None
else None
),
"scheduledAt": obj.get("scheduledAt"),
"endAt": obj.get("endAt"),
}
)
return _obj

0 comments on commit 9195f09

Please sign in to comment.