Skip to content

Commit 91bdd20

Browse files
authored
[PBE-1392] add stop_at support (#158)
* [PBE-1392] add stop_at support * [PBE-1392] add members to channel_template * [PBE-1392] fix blocklist tests * [PBE-1392] change the default blocklist type
1 parent f757d82 commit 91bdd20

File tree

11 files changed

+37
-14
lines changed

11 files changed

+37
-14
lines changed

stream_chat/async_chat/campaign.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,12 @@ async def delete(self, **options: Any) -> StreamResponse:
3838
)
3939

4040
async def start(
41-
self, scheduled_for: Optional[Union[str, datetime.datetime]] = None
41+
self,
42+
scheduled_for: Optional[Union[str, datetime.datetime]] = None,
43+
stop_at: Optional[Union[str, datetime.datetime]] = None,
4244
) -> StreamResponse:
4345
return await self.client.start_campaign( # type: ignore
44-
campaign_id=self.campaign_id, scheduled_for=scheduled_for
46+
campaign_id=self.campaign_id, scheduled_for=scheduled_for, stop_at=stop_at
4547
)
4648

4749
async def stop(self) -> StreamResponse:

stream_chat/async_chat/client.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,7 @@ async def send_file(
485485
return await self._parse_response(response)
486486

487487
async def create_blocklist(
488-
self, name: str, words: Iterable[str], type: str = "regular"
488+
self, name: str, words: Iterable[str], type: str = "word"
489489
) -> StreamResponse:
490490
return await self.post(
491491
"blocklists", data={"name": name, "words": words, "type": type}
@@ -676,12 +676,17 @@ async def start_campaign(
676676
self,
677677
campaign_id: str,
678678
scheduled_for: Optional[Union[str, datetime.datetime]] = None,
679+
stop_at: Optional[Union[str, datetime.datetime]] = None,
679680
) -> StreamResponse:
680681
payload = {}
681682
if scheduled_for is not None:
682683
if isinstance(scheduled_for, datetime.datetime):
683684
scheduled_for = scheduled_for.isoformat()
684685
payload["scheduled_for"] = scheduled_for
686+
if stop_at is not None:
687+
if isinstance(stop_at, datetime.datetime):
688+
stop_at = stop_at.isoformat()
689+
payload["stop_at"] = stop_at
685690
return await self.post(f"campaigns/{campaign_id}/start", data=payload)
686691

687692
async def stop_campaign(self, campaign_id: str) -> StreamResponse:

stream_chat/base/campaign.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ def delete(self) -> Union[StreamResponse, Awaitable[StreamResponse]]:
4040

4141
@abc.abstractmethod
4242
def start(
43-
self, scheduled_for: Optional[Union[str, datetime.datetime]] = None
43+
self,
44+
scheduled_for: Optional[Union[str, datetime.datetime]] = None,
45+
stop_at: Optional[Union[str, datetime.datetime]] = None,
4446
) -> Union[StreamResponse, Awaitable[StreamResponse]]:
4547
pass
4648

stream_chat/base/client.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -765,7 +765,7 @@ def send_file(
765765

766766
@abc.abstractmethod
767767
def create_blocklist(
768-
self, name: str, words: Iterable[str], type: str = "regular"
768+
self, name: str, words: Iterable[str], type: str = "word"
769769
) -> Union[StreamResponse, Awaitable[StreamResponse]]:
770770
"""
771771
Create a blocklist
@@ -1102,6 +1102,7 @@ def start_campaign(
11021102
self,
11031103
campaign_id: str,
11041104
scheduled_for: Optional[Union[str, datetime.datetime]] = None,
1105+
stop_at: Optional[Union[str, datetime.datetime]] = None,
11051106
) -> Union[StreamResponse, Awaitable[StreamResponse]]:
11061107
"""
11071108
Start a campaign at given time or now if not specified

stream_chat/campaign.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,12 @@ def delete(self, **options: Any) -> StreamResponse:
3636
)
3737

3838
def start(
39-
self, scheduled_for: Optional[Union[str, datetime.datetime]] = None
39+
self,
40+
scheduled_for: Optional[Union[str, datetime.datetime]] = None,
41+
stop_at: Optional[Union[str, datetime.datetime]] = None,
4042
) -> StreamResponse:
4143
return self.client.start_campaign( # type: ignore
42-
campaign_id=self.campaign_id, scheduled_for=scheduled_for
44+
campaign_id=self.campaign_id, scheduled_for=scheduled_for, stop_at=stop_at
4345
)
4446

4547
def stop(self) -> StreamResponse:

stream_chat/client.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ def send_file(
467467
return self._parse_response(response)
468468

469469
def create_blocklist(
470-
self, name: str, words: Iterable[str], type: str = "regular"
470+
self, name: str, words: Iterable[str], type: str = "word"
471471
) -> StreamResponse:
472472
return self.post(
473473
"blocklists", data={"name": name, "words": words, "type": type}
@@ -609,7 +609,7 @@ def remove_segment_targets(
609609
)
610610

611611
def campaign( # type: ignore
612-
self, campaign_id: Optional[str] = None, data: CampaignData = None
612+
self, campaign_id: Optional[str] = None, data: Optional[CampaignData] = None
613613
) -> Campaign:
614614
return Campaign(client=self, campaign_id=campaign_id, data=data)
615615

@@ -649,12 +649,17 @@ def start_campaign(
649649
self,
650650
campaign_id: str,
651651
scheduled_for: Optional[Union[str, datetime.datetime]] = None,
652+
stop_at: Optional[Union[str, datetime.datetime]] = None,
652653
) -> StreamResponse:
653654
payload = {}
654655
if scheduled_for is not None:
655656
if isinstance(scheduled_for, datetime.datetime):
656657
scheduled_for = scheduled_for.isoformat()
657658
payload["scheduled_for"] = scheduled_for
659+
if stop_at is not None:
660+
if isinstance(stop_at, datetime.datetime):
661+
stop_at = stop_at.isoformat()
662+
payload["stop_at"] = stop_at
658663
return self.post(f"campaigns/{campaign_id}/start", data=payload)
659664

660665
def stop_campaign(self, campaign_id: str) -> StreamResponse:

stream_chat/tests/async_chat/test_campaign.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,11 @@ async def test_campaign_start_stop(
9292

9393
now = datetime.datetime.now(datetime.timezone.utc)
9494
one_hour_later = now + datetime.timedelta(hours=1)
95+
two_hours_later = now + datetime.timedelta(hours=2)
9596

96-
started = await campaign.start(scheduled_for=one_hour_later)
97+
started = await campaign.start(
98+
scheduled_for=one_hour_later, stop_at=two_hours_later
99+
)
97100
assert started.is_ok()
98101
assert "campaign" in started
99102
assert "id" in started["campaign"]

stream_chat/tests/async_chat/test_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -580,7 +580,7 @@ async def test_query_channels_members_in(
580580
assert len(response["channels"][0]["members"]) == 9
581581

582582
async def test_create_blocklist(self, client: StreamChatAsync):
583-
await client.create_blocklist(name="Foo", words=["fudge", "heck"])
583+
await client.create_blocklist(name="Foo", words=["fudge", "heck"], type="word")
584584

585585
async def test_list_blocklists(self, client: StreamChatAsync):
586586
response = await client.list_blocklists()

stream_chat/tests/test_campaign.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,9 @@ def test_campaign_start_stop(self, client: StreamChat, random_user: Dict):
9696

9797
now = datetime.datetime.now(datetime.timezone.utc)
9898
one_hour_later = now + datetime.timedelta(hours=1)
99+
two_hours_later = now + datetime.timedelta(hours=2)
99100

100-
started = campaign.start(scheduled_for=one_hour_later)
101+
started = campaign.start(scheduled_for=one_hour_later, stop_at=two_hours_later)
101102
assert started.is_ok()
102103
assert "campaign" in started
103104
assert "id" in started["campaign"]

stream_chat/tests/test_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,7 @@ def test_query_channels_members_in(
549549
assert len(response["channels"][0]["members"]) == 9
550550

551551
def test_create_blocklist(self, client: StreamChat):
552-
client.create_blocklist(name="Foo", words=["fudge", "heck"], type="regular")
552+
client.create_blocklist(name="Foo", words=["fudge", "heck"], type="word")
553553

554554
def test_list_blocklists(self, client: StreamChat):
555555
response = client.list_blocklists()

0 commit comments

Comments
 (0)