Skip to content
This repository has been archived by the owner on Oct 5, 2021. It is now read-only.

Commit

Permalink
little improvements on slack/taiga/trello/dockerfile
Browse files Browse the repository at this point in the history
  • Loading branch information
FoxMaSk committed Dec 10, 2016
1 parent af61f14 commit 0a6e761
Show file tree
Hide file tree
Showing 13 changed files with 210 additions and 146 deletions.
11 changes: 0 additions & 11 deletions .coveragerc
Expand Up @@ -17,14 +17,3 @@ omit =
django_th/management/commands/recycle.py
django_th/management/commands/read_n_pub.py
*/from_*.py


build:
tests:
override:
-
command: 'coverage run --source='.' manage.py test'
coverage:
file: '.coverage'
config_file: '.coveragerc'
format: 'py-cc'
3 changes: 2 additions & 1 deletion Dockerfile
@@ -1,8 +1,9 @@
FROM python:3.5
MAINTAINER FoxMaSk <foxmask@trigger-happy.eu>
ENV PYTHONUNBUFFERED 1
RUN mkdir /app
WORKDIR /app
ADD requirements.txt /app/
COPY requirements-docker.txt /app/
RUN pip install -r requirements-docker.txt && groupadd -r django && useradd -r -g django django
COPY . /app/
RUN chown -R django /app
14 changes: 8 additions & 6 deletions requirements-docker.txt
@@ -1,22 +1,24 @@
psycopg2
awesome-slugify==1.6.5
arrow==0.8.0
arrow==0.10.0
djangorestframework==3.5.3
Django==1.8.17
django-formtools==1.0
django-js-reverse==0.7.2
django-redis==4.6.0
evernote3
feedparser==5.2.1
github3.py==1.0.0a4
pocket==0.3.6
py-trello==0.6.1
pytidylib==0.3.1
py-trello==0.7.0
pytz==2016.7
pytidylib==0.3.2
pypandoc==1.3.3
requests-oauthlib==0.7.0
twython==3.4.0
wallabag_api==1.1.0
flake8==3.0.4
flake8==3.2.1
todoist-python==7.0.13
pushbullet.py==0.10.0
instapush==0.1.2
djangorestframework
Django==1.8.16
python-taiga==0.8.6
Empty file added th_slack/api/__init__.py
Empty file.
14 changes: 9 additions & 5 deletions th_slack/views.py → th_slack/api/views.py
Expand Up @@ -15,6 +15,7 @@ def consumer(trigger_id, data):
:param data:
:return:
"""
status = True
# consumer - the service which uses the data
default_provider.load_services()
service = TriggerService.objects.get(id=trigger_id)
Expand All @@ -27,7 +28,9 @@ def consumer(trigger_id, data):

getattr(service_consumer, '__init__')(service.consumer.token,
**kwargs)
getattr(service_consumer, 'save_data')(service.id, **data)
status = getattr(service_consumer, 'save_data')(service.id, **data)

return status


@api_view(['POST'])
Expand All @@ -39,7 +42,8 @@ def slack(request):
if slack:
data['title'] = 'From Slack #{}'.format(request.data['channel_name'])
data['content'] = request.data['text']
consumer(slack.trigger_id, data)
return Response({"message": "Success"})
else:
return Response({"message": "Bad request"})
status = consumer(slack.trigger_id, data)
if status:
return Response({"message": "Success"})
else:
return Response({"message": "Bad request"})
4 changes: 2 additions & 2 deletions th_slack/my_slack.py
Expand Up @@ -32,9 +32,9 @@ def read_data(self, **kwargs):
"""
trigger_id = kwargs.get('trigger_id')
kwargs['model_name'] = 'Slack'

# get the URL from the trigger id
data = super(ServiceSlack, self).read_data(**kwargs)
super(ServiceSlack, self).read_data(**kwargs)
data = kwargs.get('data', ())
cache.set('th_slack_' + str(trigger_id), data)
# return the data
return data
Expand Down
2 changes: 1 addition & 1 deletion th_slack/urls.py
@@ -1,6 +1,6 @@
from django.conf.urls import url
from rest_framework.urlpatterns import format_suffix_patterns
from th_slack import views
from th_slack.api import views

urlpatterns = [
url(r'', views.slack,)
Expand Down
Empty file added th_taiga/api/__init__.py
Empty file.
184 changes: 184 additions & 0 deletions th_taiga/api/views.py
@@ -0,0 +1,184 @@
import hmac
import hashlib

from rest_framework.response import Response
from rest_framework.decorators import api_view

from django_th.models import TriggerService
from django_th.services import default_provider

from th_taiga.models import Taiga


def epic(taiga_obj, action, data):
"""
:param taiga_obj: taiga object
:param action: craete/change/delete
:param data: data to return
:return: data
"""
if action == 'create' and taiga_obj.notify_epic_create:
data['type_action'] = 'New Epic created'
elif action == 'change' and taiga_obj.notify_epic_change:
data['type_action'] = 'Changed Epic'
elif action == 'delete' and taiga_obj.notify_epic_delete:
data['type_action'] = 'Deleted Epic'
return data


def issue(taiga_obj, action, data):
"""
:param taiga_obj: taiga object
:param action: craete/change/delete
:param data: data to return
:return: data
"""
if action == 'create' and taiga_obj.notify_issue_create:
data['type_action'] = 'New Issue created'
elif action == 'change' and taiga_obj.notify_issue_change:
data['type_action'] = 'Changed Issue'
elif action == 'delete' and taiga_obj.notify_issue_delete:
data['type_action'] = 'Deleted Issue'
return data


def userstory(taiga_obj, action, data):
"""
:param taiga_obj: taiga object
:param action: craete/change/delete
:param data: data to return
:return: data
"""
if action == 'create' and taiga_obj.notify_userstory_create:
data['type_action'] = 'New Userstory created'
elif action == 'change' and taiga_obj.notify_userstory_change:
data['type_action'] = 'Changed Userstory'
elif action == 'delete' and taiga_obj.notify_userstory_delete:
data['type_action'] = 'Deleted Userstory'
return data


def task(taiga_obj, action, data):
"""
:param taiga_obj: taiga object
:param action: craete/change/delete
:param data: data to return
:return: data
"""
if action == 'create' and taiga_obj.notify_task_create:
data['type_action'] = 'New Task created'
elif action == 'change' and taiga_obj.notify_task_change:
data['type_action'] = 'Changed Task'
elif action == 'delete' and taiga_obj.notify_task_delete:
data['type_action'] = 'Deleted Task'
return data


def wikipage(taiga_obj, action, data):
"""
:param taiga_obj: taiga object
:param action: craete/change/delete
:param data: data to return
:return: data
"""
if action == 'create' and taiga_obj.notify_wikipage_create:
data['type_action'] = 'New Wikipage created'
elif action == 'change' and taiga_obj.notify_wikipage_change:
data['type_action'] = 'Changed Wikipage'
elif action == 'delete' and taiga_obj.notify_wikipage_delete:
data['type_action'] = 'Deleted Wikipage'
return data


def relateduserstory(taiga_obj, action, data):
"""
:param taiga_obj: taiga object
:param action: craete/change/delete
:param data: data to return
:return: data
"""
if action == 'create' and taiga_obj.notify_relateduserstory_create:
data['type_action'] = 'New Related Userstory created'
elif action == 'delete' and taiga_obj.notify_relateduserstory_delete:
data['type_action'] = 'Deleted Related Userstory'
return data


def data_filter(trigger_id, **data):
"""
check if we want to track event for a given action
:param trigger_id:
:param data:
:return:
"""
taiga_obj = Taiga.objects.get(trigger_id=trigger_id)

action = data.get('action')
domain = data.get('type')
data = data.get('data')

if domain == 'epic':
data = epic(taiga_obj, action, data)
elif domain == 'issue':
data = issue(taiga_obj, action, data)
elif domain == 'userstory':
data = userstory(taiga_obj, action, data)
elif domain == 'task':
data = task(taiga_obj, action, data)
elif domain == 'wikipage':
data = wikipage(taiga_obj, action, data)
elif domain == 'relateduserstory':
data = relateduserstory(taiga_obj, action, data)
else:
data = []

return data


def consumer(trigger_id, data):
"""
call the consumer and handle the data
:param trigger_id:
:param data:
:return:
"""
status = True
# consumer - the service which uses the data
default_provider.load_services()
service = TriggerService.objects.get(id=trigger_id)

service_consumer = default_provider.get_service(
str(service.consumer.name.name))
kwargs = {'user': service.user}

data = data_filter(trigger_id, **data)
if len(data) > 0:

getattr(service_consumer, '__init__')(service.consumer.token,
**kwargs)
status = getattr(service_consumer, 'save_data')(service.id, **data)

return status


def verify_signature(data, key, signature):
mac = hmac.new(key.encode("utf-8"), msg=data, digestmod=hashlib.sha1)
return mac.hexdigest() == signature


@api_view(['POST'])
def taiga(request, trigger_id, key):
signature = request.META.get('HTTP_X_TAIGA_WEBHOOK_SIGNATURE')
# check that the data are ok with the provided signature
if verify_signature(request._request.body, key, signature):
status = consumer(trigger_id, request.data)
if status:
return Response({"message": "Success"})
else:
return Response({"message": "Failed!"})
2 changes: 1 addition & 1 deletion th_taiga/my_taiga.py
Expand Up @@ -46,7 +46,7 @@ def read_data(self, **kwargs):
kwargs['model_name'] = 'Taiga'

super(ServiceTaiga, self).read_data(**kwargs)
data = kwargs.get('data')
data = kwargs.get('data', ())
cache.set('th_taiga_' + str(trigger_id), data)
# return the data
return data
Expand Down
2 changes: 1 addition & 1 deletion th_taiga/urls.py
@@ -1,6 +1,6 @@
from django.conf.urls import url
from rest_framework.urlpatterns import format_suffix_patterns
from th_taiga import views
from th_taiga.api import views

urlpatterns = [
url(r'(?P<trigger_id>\d+)/(?P<key>[a-zA-Z0-9-]+)$', views.taiga,)
Expand Down

0 comments on commit 0a6e761

Please sign in to comment.