Skip to content

Commit

Permalink
Name all arguments in functions and reneme channel_name field to chan…
Browse files Browse the repository at this point in the history
…nel_id field
  • Loading branch information
tijani committed Jun 6, 2021
1 parent 55fd9d0 commit 4fd5d8a
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 57 deletions.
26 changes: 19 additions & 7 deletions wagtail_live/adapters/slack/receiver.py
Expand Up @@ -21,17 +21,17 @@ class SlackEventsAPIReceiver(BaseMessageReceiver):
def dispatch(self, event):
message = event
if "subtype" in message and message["subtype"] == "message_changed":
self.change_message(message)
self.change_message(message=message)
return

elif "subtype" in message and message["subtype"] == "message_deleted":
self.delete_message(message)
self.delete_message(message=message)
return

else:
self.add_message(message)
self.add_message(message=message)

def get_channel_name_from_message(self, message):
def get_channel_id_from_message(self, message):
return message["channel"]

def get_message_id_from_message(self, message):
Expand All @@ -46,10 +46,22 @@ def get_message_files(self, message):
return []

def get_message_id_from_edited_message(self, message):
return self.get_message_id_from_message(message["previous_message"])
return self.get_message_id_from_message(message=message["previous_message"])

def get_message_text_from_edited_message(self, message):
return self.get_message_text(message["message"])
return self.get_message_text(message=message["message"])

def get_message_files_from_edited_message(self, message):
return self.get_message_files(message["message"])
return self.get_message_files(message=message["message"])

def is_embed(self, text):
# Strip leading `<` and trailing `>`.

return is_embed(text=text[1:-1])

def get_embed(self, text):

# Not sure if it's the normal behavior, but have repeatedly received links
# from SLack API that looks like below:
# <https://twitter.com/lephoceen/status/139?s=20|https://twitter.com/lephoceen/status/139?s=20>'
return text[1:-1].split("|")[0]
13 changes: 7 additions & 6 deletions wagtail_live/models.py
Expand Up @@ -22,17 +22,17 @@ class LiveBlogPage(Page, LivePageMixin):
class LivePageMixin(models.Model):
"""A helper class for pages using Wagtail Live.
Attributes:
channel_name (str):
Name of the corresponding channel in a messaging app.
channel_id (str):
Id of the corresponding channel in a messaging app.
last_update_at (DateTime):
Date and time of the last update for this channel/page.
live_posts (StreamField):
StreamField containing all the posts/messages published
respectively on this page/channel.
"""

channel_name = models.CharField(
help_text="Channel name",
channel_id = models.CharField(
help_text="Channel ID",
max_length=255,
)

Expand All @@ -50,7 +50,7 @@ class LivePageMixin(models.Model):
)

panels = [
FieldPanel("channel_name"),
FieldPanel("channel_id"),
FieldPanel("last_update_at"),
StreamFieldPanel("live_posts"),
]
Expand Down Expand Up @@ -101,7 +101,8 @@ def get_live_post_by_index(self, live_post_index):
live_post = self.live_posts[live_post_index]
except KeyError:
raise
return live_post
else:
return live_post

def get_live_post_by_id(self, live_post_id):
"""Retrieve a live post by its ID.
Expand Down
105 changes: 61 additions & 44 deletions wagtail_live/receivers.py
Expand Up @@ -65,32 +65,32 @@ def dispatch(self, event):

raise NotImplementedError

def get_channel_name_from_message(self, message):
"""Retrieve a channel name from a message.
def get_channel_id_from_message(self, message):
"""Retrieve a channel ID from a message.
Args:
message: A received message from a messaging app
Returns:
Name of the channel which the given message belongs to
ID of the channel which the given message belongs to
"""

raise NotImplementedError

def get_live_page_from_channel_name(self, channel_name):
"""Retrieve the live page with a given channel name.
def get_live_page_from_channel_id(self, channel_id):
"""Retrieve the live page with a given channel ID.
Args:
channel_name (str): Channel name
channel_id (str): Channel ID
Returns:
(LivePageMixin) The livepage corresponding to channel name.
(LivePageMixin) The livepage corresponding to channel ID.
Raises:
Http404 if a page with the given channel name doesn't exist.
Http404 if a page with the given channel ID doesn't exist.
"""

return get_object_or_404(self.model, channel_name=channel_name)
return get_object_or_404(self.model, channel_id=channel_id)

def get_message_id_from_message(self, message):
"""Retrieve message's ID.
Expand Down Expand Up @@ -168,6 +168,20 @@ def get_message_files_from_edited_message(self, message):

raise NotImplementedError

def is_embed(self, text):
"""Check if a text is an embed for this receiver.
Mesaging apps have different ways to handle embed.
By default, use the is_embed function.
"""

return is_embed(text=text)

def get_embed(self, text):
"""Retrieve the actual URL of the embed."""

return text

def process_text(self, live_page, live_post, message_text):
"""Processes the text of a message.
Expand All @@ -185,24 +199,23 @@ def process_text(self, live_page, live_post, message_text):
"""

message_parts = message_text.split("\n")
for part in message_parts:
for text in message_parts:
block_type = ""

if is_embed(part[1:-1]):
# Strip leading `<` and trailing `>`.
# Not sure if it's the normal behavior, but have repeatedly received links
# from SLack API that looks like below:
# <https://twitter.com/lephoceen/status/139?s=20|https://twitter.com/lephoceen/status/139?s=20>'

url = part[1:-1].split("|")[0]
block = construct_embed_block(url)
if self.is_embed(text=text):
url = self.get_embed(text=text)
block = construct_embed_block(url=url)
block_type = EMBED

else:
block = construct_text_block(part)
block = construct_text_block(text=text)
block_type = TEXT

live_page.add_block_to_live_post(block_type, block, live_post)
live_page.add_block_to_live_post(
block_type=block_type,
block=block,
live_block=live_post,
)

def process_files(self, live_page, live_post, files):
"""Processes the files of a message.
Expand Down Expand Up @@ -236,8 +249,12 @@ def process_files(self, live_page, live_post, files):
),
)
img.save()
block = construct_image_block(img)
live_page.add_block_to_live_post(IMAGE, block, live_post)
block = construct_image_block(image=img)
live_page.add_block_to_live_post(
block_type=IMAGE,
block=block,
live_block=live_post,
)

def add_message(self, message):
"""Add a received message from a messaging app to the corresponding channel.
Expand All @@ -246,23 +263,23 @@ def add_message(self, message):
message: A message received from a messaging app
"""

message_id = self.get_message_id_from_message(message)
channel_name = self.get_channel_name_from_message(message)
message_id = self.get_message_id_from_message(message=message)
channel_id = self.get_channel_id_from_message(message=message)
try:
live_page = self.get_live_page_from_channel_name(channel_name)
live_page = self.get_live_page_from_channel_id(channel_id=channel_id)
except Http404:
# maybe create the LivePage here?
return

live_post = construct_live_post_block(message_id, now())
live_post = construct_live_post_block(message_id=message_id, created=now())

message_text = self.get_message_text(message)
self.process_text(live_page, live_post, message_text)
message_text = self.get_message_text(message=message)
self.process_text(live_page=live_page, live_post=live_post, message_text=message_text)

files = self.get_message_files(message)
self.process_files(live_page, live_post, files)
files = self.get_message_files(message=message)
self.process_files(live_page=live_page, live_post=live_post, files=files)

live_page.add_live_post(live_post, message_id)
live_page.add_live_post(live_post=live_post, live_post_id=message_id)

def change_message(self, message):
"""Change a message when it's edited from a messaging app.
Expand All @@ -271,23 +288,23 @@ def change_message(self, message):
message: A message edited from a messaging app
"""

message_id = self.get_message_id_from_edited_message(message)
channel_name = self.get_channel_name_from_message(message)
message_id = self.get_message_id_from_edited_message(message=message)
channel_id = self.get_channel_id_from_message(message=message)
try:
live_page = self.get_live_page_from_channel_name(channel_name)
live_page = self.get_live_page_from_channel_id(channel_id=channel_id)
except Http404:
return

live_post = live_page.get_live_post_by_id(live_post_id=message_id)
live_page.clear_live_post_content(live_post)
live_page.clear_live_post_content(live_post=live_post)

message_text = self.get_message_text_from_edited_message(message)
self.process_text(live_page, live_post.value, message_text)
message_text = self.get_message_text_from_edited_message(message=message)
self.process_text(live_page=live_page, live_post=live_post.value, message_text=message_text)

files = self.get_message_files_from_edited_message(message)
self.process_files(live_page, live_post.value, files)
files = self.get_message_files_from_edited_message(message=message)
self.process_files(live_page=live_page, live_post=live_post.value, files=files)

live_page.update_live_post(live_post)
live_page.update_live_post(live_post=live_post)

def delete_message(self, message):
"""Delete a message when it's deleted from a messaging app.
Expand All @@ -296,11 +313,11 @@ def delete_message(self, message):
message: A message deleted from a messaging app
"""

message_id = self.get_message_id_from_edited_message(message)
channel_name = self.get_channel_name_from_message(message)
message_id = self.get_message_id_from_edited_message(message=message)
channel_id = self.get_channel_id_from_message(message=message)
try:
live_page = self.get_live_page_from_channel_name(channel_name)
live_page = self.get_live_page_from_channel_id(channel_id=channel_id)
except Http404:
return

live_page.delete_live_post(message_id)
live_page.delete_live_post(live_post_id=message_id)

0 comments on commit 4fd5d8a

Please sign in to comment.