Skip to content

Commit

Permalink
Clean up redundant comments, commented code, and redundant imports
Browse files Browse the repository at this point in the history
  • Loading branch information
eamin-dev committed Jul 14, 2024
1 parent 8fa7292 commit 43c04df
Show file tree
Hide file tree
Showing 12 changed files with 198 additions and 184 deletions.
4 changes: 1 addition & 3 deletions interactive/admin.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
from django.contrib import admin

from django.contrib import admin

from .models import InteractiveChannel


@admin.register(InteractiveChannel)
class InteractiveChannelAdmin(admin.ModelAdmin):
list_display = ('id', 'display_name', 'request_url')
list_display = ("id", "display_name", "request_url")
6 changes: 4 additions & 2 deletions interactive/api/permissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@


class IsRapidProGroupUser(permissions.BasePermission):
message = 'User is not allowed to access the webhook'
message = "User is not allowed to access the webhook"

def has_permission(self, request, view):
return request.user.groups.filter(name=settings.RAPIDPRO_BOT_GROUP_NAME).exists()
return request.user.groups.filter(
name=settings.RAPIDPRO_BOT_GROUP_NAME
).exists()
2 changes: 1 addition & 1 deletion interactive/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@ class RapidProMessageSerializer(serializers.Serializer):

def get_fields(self):
fields = super().get_fields()
fields['from'] = fields.pop('from_')
fields["from"] = fields.pop("from_")
return fields
6 changes: 4 additions & 2 deletions interactive/api/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

from .views import RapidProWebhook

app_name = 'interactive_api'
app_name = "interactive_api"

urlpatterns = [
path('rapidpro-webhook/', RapidProWebhook.as_view(), name='rapidpro_message_webhook')
path(
"rapidpro-webhook/", RapidProWebhook.as_view(), name="rapidpro_message_webhook"
)
]
59 changes: 33 additions & 26 deletions interactive/api/views.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
from django.utils.timezone import now
from rest_framework import status
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView

from interactive.models import Message
from rest_framework import status
from .serializers import RapidProMessageSerializer
from rest_framework.permissions import IsAuthenticated

from .permissions import IsRapidProGroupUser
from .serializers import RapidProMessageSerializer


class RapidProWebhook(APIView):
Expand All @@ -15,45 +17,50 @@ def post(self, request):
serializer = RapidProMessageSerializer(data=request.data)
serializer.is_valid(raise_exception=True)

# Extract validated data from serializer
rapidpro_message_id = serializer.validated_data.get('id')
to = serializer.validated_data.get('to')
text = serializer.validated_data.get('text')
quick_replies = serializer.validated_data.get('quick_replies')
from_field = serializer.validated_data.get('from')
channel = serializer.validated_data.get('channel')
rapidpro_message_id = serializer.validated_data.get("id")
to = serializer.validated_data.get("to")
text = serializer.validated_data.get("text")
quick_replies = serializer.validated_data.get("quick_replies")
from_field = serializer.validated_data.get("from")
channel = serializer.validated_data.get("channel")

# Get the latest message for the 'to' recipient
prev_msg = Message.objects.filter(to=to, channel=channel).order_by('-created_at').first()
prev_msg = (
Message.objects.filter(to=to, channel=channel)
.order_by("-created_at")
.first()
)

# Update or create a new message
if prev_msg:
prev_msg_text = prev_msg.text.strip()

if prev_msg_text.endswith('[CONTINUE]'):
if prev_msg_text.endswith("[CONTINUE]"):
text = prev_msg_text + text
else:
text = text

fields_to_update = {
'rapidpro_message_id': rapidpro_message_id,
'text': text,
'quick_replies': quick_replies,
'updated_at': now(),
"rapidpro_message_id": rapidpro_message_id,
"text": text,
"quick_replies": quick_replies,
"updated_at": now(),
}
Message.objects.filter(rapidpro_message_id=prev_msg.rapidpro_message_id).update(**fields_to_update)
Message.objects.filter(
rapidpro_message_id=prev_msg.rapidpro_message_id
).update(**fields_to_update)
else:
# Create a new message
message_data = {
'rapidpro_message_id': rapidpro_message_id,
'text': text,
'quick_replies': quick_replies,
'to': to,
'from_field': from_field,
'channel': channel,
'created_at': now(),
'updated_at': now()
"rapidpro_message_id": rapidpro_message_id,
"text": text,
"quick_replies": quick_replies,
"to": to,
"from_field": from_field,
"channel": channel,
"created_at": now(),
"updated_at": now(),
}
Message.objects.create(**message_data)

return Response(data='ok', status=status.HTTP_200_OK)
return Response(data="ok", status=status.HTTP_200_OK)
4 changes: 2 additions & 2 deletions interactive/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@


class InteractiveConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'interactive'
default_auto_field = "django.db.models.BigAutoField"
name = "interactive"
5 changes: 4 additions & 1 deletion interactive/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,7 @@


class MessageSendForm(forms.Form):
text = forms.CharField(widget=forms.TextInput(attrs={'class': 'btn btn-outline-secondary'}), min_length=1)
text = forms.CharField(
widget=forms.TextInput(attrs={"class": "btn btn-outline-secondary"}),
min_length=1,
)
89 changes: 38 additions & 51 deletions interactive/models.py
Original file line number Diff line number Diff line change
@@ -1,34 +1,34 @@
import re
from time import sleep
import time
import uuid

import requests
from django.contrib.auth import get_user_model
from django.db import models
from django.http import HttpResponse
from django.shortcuts import redirect, render
from django.utils.translation import gettext_lazy as _
import requests
from wagtail.models import Page
from wagtail.admin.panels import FieldPanel
from home.mixins import PageUtilsMixin, TitleIconMixin
from django.contrib.auth import get_user_model
from wagtail.models import Page

from home.mixins import PageUtilsMixin, TitleIconMixin
from interactive.forms import MessageSendForm
from interactive.services import ShortCodeService


# from interactive.services import ShortCodeService


class InteractiveChannel(models.Model):
display_name = models.CharField(
max_length=80,
help_text=_('Name for the interactive bot that the user will seen when interacting with it'),
help_text=_(
"Name for the interactive bot that the user will seen when interacting with it"
),
)
request_url = models.URLField(
max_length=200,
help_text=_('To set up a interactive bot channel on your RapidPro server and get a request URL, '
'follow the steps outline in the Section "Setting up a Chatbot channel" '
'here: https://github.com/unicef/iogt/blob/develop/messaging/README.md'),
help_text=_(
"To set up a interactive bot channel on your RapidPro server and get a request URL, "
'follow the steps outline in the Section "Setting up a Chatbot channel" '
"here: https://github.com/unicef/iogt/blob/develop/messaging/README.md"
),
)

def __str__(self):
Expand All @@ -47,23 +47,16 @@ class Message(models.Model):


class InteractivePage(Page, PageUtilsMixin, TitleIconMixin):
parent_page_types = [
"home.HomePage", "home.Section", 'home.FooterIndexPage'
]
parent_page_types = ["home.HomePage", "home.Section", "home.FooterIndexPage"]
subpage_types = []
template = 'interactive/interactive_game.html'
template = "interactive/interactive_game.html"

# button_text = models.CharField(max_length=255)
trigger_string = models.CharField(max_length=255)
channel = models.ForeignKey(
InteractiveChannel,
on_delete=models.PROTECT
)
channel = models.ForeignKey(InteractiveChannel, on_delete=models.PROTECT)

content_panels = Page.content_panels + [
# FieldPanel('button_text'),
FieldPanel('trigger_string'),
FieldPanel('channel'),
FieldPanel("trigger_string"),
FieldPanel("channel"),
]

def __str__(self):
Expand All @@ -77,44 +70,41 @@ def serve(self, request, *args, **kwargs):
user = self.get_user_identifier(request)

if not user:
return redirect('/')
return redirect("/")

if request.method == "POST":
form = MessageSendForm(request.POST)

if form.is_valid():
channel_url = self.channel.request_url

data = {
'from': user,
'text': form.cleaned_data['text']
}
data = {"from": user, "text": form.cleaned_data["text"]}

try:
response = requests.post(url=channel_url, data=data)
response.raise_for_status()
except requests.exceptions.RequestException as e:
return redirect('/')
return redirect("/")

return redirect(self.get_url(request))

return redirect(request.META.get('HTTP_REFERER', '/'))
return redirect(request.META.get("HTTP_REFERER", "/"))

self.send_message_on_language_switch(request, user)

context = self.get_context(request)
context['db_data'] = self.get_message_from_db(user=user)
context["db_data"] = self.get_message_from_db(user=user)

if not context['db_data']:
return redirect('/')
if not context["db_data"]:
return redirect("/")

return render(request, self.template, context)

def get_user_identifier(self, request):
if not request.session.session_key:
request.session.save()

user_uuid = request.session.setdefault('interactive_uuid', str(uuid.uuid4()))
user_uuid = request.session.setdefault("interactive_uuid", str(uuid.uuid4()))

# Get the authenticated user
user = request.user
Expand Down Expand Up @@ -144,14 +134,14 @@ def get_message_from_db(self, user):
if elapsed_time >= 5:
break

chat = Message.objects.filter(to=user).order_by('-created_at').first()
chat = Message.objects.filter(to=user).order_by("-created_at").first()
if not chat:
return None

text = chat.text.strip()

# Check if the message has a next message indicator
if text.endswith('[CONTINUE]'):
if text.endswith("[CONTINUE]"):
time.sleep(1)
else:
break # Exit the loop if the message does not end with '[CONTINUE]'
Expand All @@ -165,33 +155,30 @@ def get_message_from_db(self, user):
# Search for matches in the input string
match = re.search(pattern, text)

bg_color = ''
bg_color = ""
# Check if a match is found
if match:
# Extract the bg_color attributes
bg_color = match.group('bg_color')
bg_color = match.group("bg_color")

# Remove the [bg_color] tag from the input string
text = re.sub(pattern, '', text)
text = re.sub(pattern, "", text)

return {
'message': text,
'buttons': chat.quick_replies,
'bg_color': bg_color,
"message": text,
"buttons": chat.quick_replies,
"bg_color": bg_color,
}

def send_message_on_language_switch(self, request, user):
current_lang = request.build_absolute_uri().split('/')[3]
current_lang = request.build_absolute_uri().split("/")[3]

if request.META.get('HTTP_REFERER'):
referer_lang = request.META.get('HTTP_REFERER').split('/')[3]
if request.META.get("HTTP_REFERER"):
referer_lang = request.META.get("HTTP_REFERER").split("/")[3]
else:
referer_lang = current_lang

if referer_lang != current_lang:
data = {
'from': user,
'text': self.trigger_string
}
data = {"from": user, "text": self.trigger_string}

response = requests.post(url=self.channel.request_url, data=data)
Loading

0 comments on commit 43c04df

Please sign in to comment.