Skip to content

Commit

Permalink
Goodby Async
Browse files Browse the repository at this point in the history
  • Loading branch information
an-dev committed May 8, 2022
1 parent 88a2658 commit 1c0d2d1
Show file tree
Hide file tree
Showing 7 changed files with 22 additions and 40 deletions.
1 change: 0 additions & 1 deletion Procfile
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
release: python manage.py migrate
web: gunicorn web.wsgi --log-file -
worker: REMAP_SIGTERM=SIGQUIT celery worker -A web -E --loglevel=info --without-gossip --without-mingle --without-heartbeat --max-tasks-per-child 15 --concurrency=3 -O fair
5 changes: 2 additions & 3 deletions web/core/decorators.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
import functools
import hashlib
import hmac
import logging
import os
import time
import functools

from django.core import signing
from django.http import HttpResponse
from django.utils import timezone
from slack.errors import SlackApiError

from web.core.messages import SlackMarkdownUpgradePromptMessage
from web.core.models import Workspace
from web.core.services import SlackMessageService
Expand Down Expand Up @@ -74,7 +73,7 @@ def wrapper(request, signed_value, *args, **kwargs):
except SlackApiError as sae:
logger.warning(f"Slack error: {sae}")
if sae.response['error'] == 'account_inactive':
disable_webhook.delay(user_slack_id)
disable_webhook(user_slack_id)
except Exception:
logger.exception("Could not verify if view needs subscription")
return HttpResponse(status=400)
Expand Down
13 changes: 6 additions & 7 deletions web/core/views/commands.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
import logging
from datetime import timedelta

from django.http import HttpResponse
from django.utils import timezone

from web.core.messages import SlackMarkdownUpgradeLinkMessage, SlackMarkdownHelpMessage, SlackHomeMessage
from web.core.models import Workspace, SlackUser
from web.core.messages import (SlackHomeMessage, SlackMarkdownHelpMessage,
SlackMarkdownUpgradeLinkMessage)
from web.core.models import SlackUser, Workspace
from web.core.services import SlackMessageService
from web.payments.services import WorkspaceUpgradeService
from web.payments.views import check_abandoned_upgrade
import logging


logger = logging.getLogger(__name__)

Expand All @@ -30,8 +29,8 @@ def upgrade(request):
# get workspace id + current timestamp
# if user doesn't upgrade in 1/2 days
# send email
tomorrow = timezone.now() + timedelta(days=1)
check_abandoned_upgrade.apply_async((user_id, workspace.slack_id), eta=tomorrow)
# tomorrow = timezone.now() + timedelta(days=1)
check_abandoned_upgrade(user_id, workspace.slack_id)
except Workspace.DoesNotExist:
logger.exception(f'Missing workspace: {request.POST}')
except Exception:
Expand Down
22 changes: 11 additions & 11 deletions web/core/views/main.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
import json
import logging
import os
import slack

import slack
from django.http import HttpResponse
from django.template.response import TemplateResponse
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods

from web.core.actions import *
from web.core.decorators import verify_request
from web.core.messages import STATIC_START_MSG
from web.core.modals import SlackDisconnectErrorModal, SlackConnectModal, \
SlackConnectModalWithError
from web.core.modals import (SlackConnectModal, SlackConnectModalWithError,
SlackDisconnectErrorModal)
from web.core.models import SlackUser, Workspace
from web.core.services import DisconnectUserService, OpenModalService, UpdateHomeMessageService, SetDestinationService, \
CreateFiltersService, CreateWebhookService, update_home
from web.core.actions import *
from web.utils import get_user_count, mail, get_calendly_email
from web.core.services import (CreateFiltersService, CreateWebhookService,
DisconnectUserService, OpenModalService,
SetDestinationService, UpdateHomeMessageService,
update_home)
from web.utils import get_calendly_email, get_user_count, mail

client_id = os.environ["SLACK_CLIENT_ID"]
client_secret = os.environ["SLACK_CLIENT_SECRET"]
Expand Down Expand Up @@ -53,8 +54,6 @@ def auth(request):
workspace.name = response['team'].get('name')
workspace.save()

get_user_count.delay(response['team']['id'])

client = slack.WebClient(token=token)
user_info = client.users_info(user=user_id)
su, new_user = SlackUser.objects.get_or_create(slack_id=user_id, workspace=workspace)
Expand All @@ -68,14 +67,15 @@ def auth(request):
client.chat_postMessage(
channel=su.slack_id,
text=f"Hi {su.slack_name}, I'm Calenduck. {STATIC_START_MSG}")
mail.send_welcome_email.delay(user_id)
mail.send_welcome_email(user_id)
else:
client.chat_postMessage(
channel=su.slack_id,
text=f"Welcome back {su.slack_name}. {STATIC_START_MSG}")

# Don't forget to let the user know that auth has succeeded!
msg = "Auth complete!"
get_user_count(response['team']['id'])

# UpdateHomeViewService(user_id, team_id)

Expand Down
7 changes: 2 additions & 5 deletions web/payments/views.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
import logging

import stripe
from celery import shared_task
from django.conf import settings
from django.core import signing
from django.template.response import TemplateResponse
from django.utils import timezone
from django.views.decorators.http import require_http_methods
from stripe.error import InvalidRequestError

from web.core.models import Subscription, SlackUser
from web.core.models import SlackUser, Subscription
from web.utils.mail import send_abandoned_upgrade_email

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -74,10 +72,9 @@ def success(request):
return TemplateResponse(request, 'web/success.html')


@shared_task()
def check_abandoned_upgrade(user_id, workspace_id):
su = SlackUser.objects.get(slack_id=user_id, workspace__slack_id=workspace_id)
if timezone.now().date() > su.workspace.trial_end and not hasattr(su.workspace, 'subscription'):
send_abandoned_upgrade_email.delay(su.slack_id)
send_abandoned_upgrade_email(su.slack_id)
else:
logger.info(f'Looks like {user_id} upgraded after all. Double check this!')
8 changes: 1 addition & 7 deletions web/utils/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,7 @@

import slack
from calendly import Calendly
from celery import shared_task
from slack.errors import SlackApiError

from web.core.models import Workspace, SlackUser, Webhook
from web.core.models import SlackUser, Webhook, Workspace
from web.utils.errors import InvalidTokenError

logger = logging.getLogger(__name__)
Expand All @@ -21,7 +18,6 @@ def user_connected(user: SlackUser):
return user.calendly_email and user.calendly_authtoken


@shared_task(autoretry_for=(SlackApiError,))
def get_user_count(workspace_slack_id):
try:
workspace = Workspace.objects.get(slack_id=workspace_slack_id)
Expand All @@ -35,7 +31,6 @@ def get_user_count(workspace_slack_id):
logger.exception('Could not get workspace size')


@shared_task(autoretry_for=(Exception,), max_retries=3)
def get_calendly_email(user_id):
su = SlackUser.objects.get(slack_id=user_id)
calendly = Calendly(su.calendly_authtoken)
Expand Down Expand Up @@ -78,6 +73,5 @@ def remove_calendly_hooks(calendly_client):
return res


@shared_task(autoretry_for=(Exception,), max_retries=3)
def disable_webhook(user_slack_id):
Webhook.objects.filter(user__slack_id=user_slack_id, enabled=True).update(enabled=False)
6 changes: 0 additions & 6 deletions web/utils/mail.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
import logging
from datetime import timedelta
from smtplib import SMTPServerDisconnected

from celery import shared_task
from django.conf import settings
from django.core.mail import send_mail
from django.template import loader
from django.utils import timezone

from web.core.models import SlackUser
from web.payments.services import WorkspaceUpgradeService

Expand Down Expand Up @@ -82,7 +79,6 @@ def template_slug(self):
return "abandoned-upgrade"


@shared_task(autoretry_for=(ValueError, SMTPServerDisconnected))
def send_welcome_email(user_id):
try:
email = SlackUser.objects.get(slack_id=user_id).slack_email
Expand All @@ -91,7 +87,6 @@ def send_welcome_email(user_id):
logger.exception("Could not send welcome email")


@shared_task(autoretry_for=(ValueError, SMTPServerDisconnected))
def send_trial_end_email():
try:
slack_users = SlackUser.objects \
Expand All @@ -102,7 +97,6 @@ def send_trial_end_email():
logger.exception("Could not send trial end email")


@shared_task(autoretry_for=(ValueError, SMTPServerDisconnected))
def send_abandoned_upgrade_email(user_id):
try:
su = SlackUser.objects.get(workspace__subscription__isnull=True, slack_id=user_id)
Expand Down

0 comments on commit 1c0d2d1

Please sign in to comment.