From 5e5312fe74fea5aa08357243b6ee9b740f2ff0cb Mon Sep 17 00:00:00 2001 From: Oly Date: Thu, 7 Sep 2017 14:05:00 +0100 Subject: [PATCH 1/7] testing new celery task for auto notifications --- config/settings/common.py | 5 +++ env.example | 4 ++ mhackspace/base/models.py | 3 ++ mhackspace/base/tasks.py | 70 +++++++++++++++++++++++++++++++++++ mhackspace/requests/models.py | 9 +++++ 5 files changed, 91 insertions(+) diff --git a/config/settings/common.py b/config/settings/common.py index 33cc399..b18098a 100644 --- a/config/settings/common.py +++ b/config/settings/common.py @@ -461,3 +461,8 @@ CORS_ORIGIN_WHITELIST = ( 'vector.im', 'riot.im' ) + +MATRIX_USER=env('MATRIX_USERNAME') +MATRIX_PASSWORD=env('MATRIX_PASSWORD') +MATRIX_ROOM=env('MATRIX_ROOM') +MSG_PREFIX = '[MH]' diff --git a/env.example b/env.example index 87a5eb1..8d7451e 100644 --- a/env.example +++ b/env.example @@ -51,3 +51,7 @@ GOCARDLESS_APP_ID=demo GOCARDLESS_APP_SECRET=demo GOCARDLESS_ACCESS_TOKEN=demo GOCARDLESS_MERCHANT_ID=demo + +MATRIX_ROOM=fmCpNwqgIiuwATlcdw:matrix.org +MATRIX_USERNAME=mhackspace +MATRIX_PASSWORD= diff --git a/mhackspace/base/models.py b/mhackspace/base/models.py index adb810d..07d3fe1 100644 --- a/mhackspace/base/models.py +++ b/mhackspace/base/models.py @@ -11,6 +11,8 @@ from spirit.comment.models import Comment # from django.contrib.auth.models import User from django.core.mail import EmailMessage from django.db.models.signals import post_save +from mhackspace.base.tasks import matrix_message + class BannerImage(models.Model): url = models.URLField() @@ -65,6 +67,7 @@ def send_topic_update_email(sender, instance, **kwargs): to=[user_email], headers={'Reply-To': 'no-reply@maidstone-hackspace.org.uk'}) email.send() + matrix_message.delay('[MH] %s' % instance.topic.title) post_save.connect(send_topic_update_email, sender=Comment) diff --git a/mhackspace/base/tasks.py b/mhackspace/base/tasks.py index 58f1aac..86cb8bb 100644 --- a/mhackspace/base/tasks.py +++ b/mhackspace/base/tasks.py @@ -1,7 +1,77 @@ +import requests from celery import shared_task +from django.conf import settings from mhackspace.feeds.helper import import_feeds @shared_task def update_homepage_feeds(): return import_feeds() + +matrix_url = "https://matrix.org/_matrix/client/r0" +matrix_login_url = matrix_url + "/login" +matrix_join_room_alias_url = matrix_url + "/join/{room}?access_token={access_token}" +matrix_join_room_id_url = matrix_url + "rooms/%21{room}/join?access_token={access_token}" +matrix_send_msg_url = matrix_url + "/rooms/%21{room}/send/m.room.message?access_token={access_token}" + +@shared_task +def matrix_message(message): + #login + details = { + "type":"m.login.password", + "user":settings.MATRIX_USER, + "password":settings.MATRIX_PASSWORD} + r0 = requests.post(matrix_login_url, json = details) + access_token = r0.json().get('access_token') + + #join room by id + url_params = { + 'room': settings.MATRIX_ROOM, + 'access_token': access_token} + url = matrix_join_room_id_url.format(**url_params) + r1 = requests.post(url) + + #send message + url_params = { + "room": settings.MATRIX_ROOM, + "access_token": access_token} + url = matrix_send_msg_url.format(**url_params) + details = { + "msgtype":"m.text", + "body":message} + r2 = requests.post(url, json = details) + return True + +# url = "https://matrix.org/_matrix/client/r0/join/{room_alias}?access_token={access_token}".format( +# **{'access_token': access_token, +# 'room_alias': '#maidstone-hackspace:matrix.org'}) +# response = requests.post(url) + + +# return import_feeds() +# url = "https://matrix.org/_matrix/client/r0/rooms/%21{room}:matrix.org/join?access_token={access_token}".format( +# **{'room': 'fmCpNwqgIiuwATlcdw', +# 'access_token': access_token}) +# r = requests.get(url) +# fmCpNwqgIiuwATlcdw:matrix.org + + +#join room by id +# url = "https://matrix.org/_matrix/client/r0/rooms/%21{room}/join?access_token={access_token}".format( +# **{'room': 'fmCpNwqgIiuwATlcdw:matrix.org', +# 'access_token': access_token}) +# response = requests.post(url) + + +# url = "https://matrix.org/_matrix/client/r0/rooms/%21{room}/send/m.room.message?access_token={access_token}".format( +# **{'room': 'fmCpNwqgIiuwATlcdw:matrix.org', +# 'access_token': access_token}) +# details = {"msgtype":"m.text", "body":"poke from python"} #{"type":"m.login.password", "user":"oly", "password":""} +# r = requests.post(url, json = details) +# return r.json() + + +# url = "https://matrix.org/_matrix/client/r0/rooms/%21{room}/join?access_token={access_token}".format( +# **{'room': 'fmCpNwqgIiuwATlcdw:matrix.org', +# 'access_token': access_token}) +# response = requests.post(url) diff --git a/mhackspace/requests/models.py b/mhackspace/requests/models.py index 9370b5b..d3cf76f 100644 --- a/mhackspace/requests/models.py +++ b/mhackspace/requests/models.py @@ -3,6 +3,8 @@ from django.conf import settings from django.db import models from django.utils import timezone +from django.db.models.signals import post_save +from mhackspace.base.tasks import matrix_message REQUEST_TYPES = ( @@ -40,3 +42,10 @@ class UserRequests(models.Model): # class Meta: # ordering = ('created_date',) + + +def send_topic_update_email(sender, instance, **kwargs): + matrix_message.delay('[MH] New Request - %s' % instance.title) + + +post_save.connect(send_topic_update_email, sender=UserRequests) From 80601ce00023c5266a02ff308ac1a6ba2aa1fc86 Mon Sep 17 00:00:00 2001 From: Oly Date: Fri, 8 Sep 2017 13:35:36 +0100 Subject: [PATCH 2/7] matrix tasks for spirit and wiki --- mhackspace/base/models.py | 15 ++++++++++++++- mhackspace/base/tasks.py | 13 +++++++------ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/mhackspace/base/models.py b/mhackspace/base/models.py index 07d3fe1..b1d3e6f 100644 --- a/mhackspace/base/models.py +++ b/mhackspace/base/models.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals, absolute_import +from django.contrib.sites.models import Site from django.db import models from django.utils import timezone @@ -8,6 +9,7 @@ from stdimage.utils import UploadToAutoSlugClassNameDir from stdimage.validators import MinSizeValidator from spirit.comment.models import Comment +from wiki.models.article import ArticleRevision # from django.contrib.auth.models import User from django.core.mail import EmailMessage from django.db.models.signals import post_save @@ -67,7 +69,18 @@ def send_topic_update_email(sender, instance, **kwargs): to=[user_email], headers={'Reply-To': 'no-reply@maidstone-hackspace.org.uk'}) email.send() - matrix_message.delay('[MH] %s' % instance.topic.title) + matrix_message.delay('%s https://%s%s' % ( + instance.topic.title, + Site.objects.get_current().domain, + instance.topic.get_absolute_url())) +def wiki_article_updated(sender, instance, **kwargs): + matrix_message.delay('%s https://%s%s' % ( + instance.title, + Site.objects.get_current().domain, + instance.article.get_absolute_url())) + + +post_save.connect(wiki_article_updated, sender=ArticleRevision) post_save.connect(send_topic_update_email, sender=Comment) diff --git a/mhackspace/base/tasks.py b/mhackspace/base/tasks.py index 86cb8bb..414801c 100644 --- a/mhackspace/base/tasks.py +++ b/mhackspace/base/tasks.py @@ -14,9 +14,10 @@ matrix_join_room_alias_url = matrix_url + "/join/{room}?access_token={access_tok matrix_join_room_id_url = matrix_url + "rooms/%21{room}/join?access_token={access_token}" matrix_send_msg_url = matrix_url + "/rooms/%21{room}/send/m.room.message?access_token={access_token}" + @shared_task def matrix_message(message): - #login + # login details = { "type":"m.login.password", "user":settings.MATRIX_USER, @@ -24,22 +25,22 @@ def matrix_message(message): r0 = requests.post(matrix_login_url, json = details) access_token = r0.json().get('access_token') - #join room by id + # join room by id url_params = { 'room': settings.MATRIX_ROOM, 'access_token': access_token} url = matrix_join_room_id_url.format(**url_params) r1 = requests.post(url) - #send message + # send message url_params = { "room": settings.MATRIX_ROOM, "access_token": access_token} url = matrix_send_msg_url.format(**url_params) details = { - "msgtype":"m.text", - "body":message} - r2 = requests.post(url, json = details) + "msgtype": "m.text", + "body": "%s %s" % (settings.MSG_PREFIX, message)} + r2 = requests.post(url, json=details) return True # url = "https://matrix.org/_matrix/client/r0/join/{room_alias}?access_token={access_token}".format( From 409f6651c3996207379c42c5f1e8242ccadf585e Mon Sep 17 00:00:00 2001 From: Oly Date: Fri, 8 Sep 2017 13:50:22 +0100 Subject: [PATCH 3/7] bump site version to use correct domain --- config/settings/stage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/settings/stage.py b/config/settings/stage.py index 6ef74ac..fc60406 100644 --- a/config/settings/stage.py +++ b/config/settings/stage.py @@ -17,7 +17,7 @@ from .common import * # noqa # See: https://docs.djangoproject.com/en/dev/ref/settings/#secret-key # Raises ImproperlyConfigured exception if DJANGO_SECRET_KEY not in os.environ SECRET_KEY = env('DJANGO_SECRET_KEY') - +SITE_ID = 2 # This ensures that Django will be able to detect a secure connection # properly on Heroku. From d1d7ae7365a488805269bb4bd6df45c491022c8e Mon Sep 17 00:00:00 2001 From: Oliver Marks Date: Fri, 8 Sep 2017 21:49:59 +0100 Subject: [PATCH 4/7] update message text, ignore errors for now --- mhackspace/base/models.py | 6 +-- mhackspace/base/tasks.py | 82 +++++++++++++-------------------------- 2 files changed, 29 insertions(+), 59 deletions(-) diff --git a/mhackspace/base/models.py b/mhackspace/base/models.py index b1d3e6f..8f067e8 100644 --- a/mhackspace/base/models.py +++ b/mhackspace/base/models.py @@ -69,15 +69,13 @@ def send_topic_update_email(sender, instance, **kwargs): to=[user_email], headers={'Reply-To': 'no-reply@maidstone-hackspace.org.uk'}) email.send() - matrix_message.delay('%s https://%s%s' % ( - instance.topic.title, + matrix_message.delay('https://%s%s' % ( Site.objects.get_current().domain, instance.topic.get_absolute_url())) def wiki_article_updated(sender, instance, **kwargs): - matrix_message.delay('%s https://%s%s' % ( - instance.title, + matrix_message.delay('https://%s%s' % ( Site.objects.get_current().domain, instance.article.get_absolute_url())) diff --git a/mhackspace/base/tasks.py b/mhackspace/base/tasks.py index 414801c..2a0898b 100644 --- a/mhackspace/base/tasks.py +++ b/mhackspace/base/tasks.py @@ -17,62 +17,34 @@ matrix_send_msg_url = matrix_url + "/rooms/%21{room}/send/m.room.message?access_ @shared_task def matrix_message(message): - # login - details = { - "type":"m.login.password", - "user":settings.MATRIX_USER, - "password":settings.MATRIX_PASSWORD} - r0 = requests.post(matrix_login_url, json = details) - access_token = r0.json().get('access_token') + # we dont rely on theses, so ignore if it goes wrong + # TODO at least log that something has gone wrong + try: + # login + details = { + "type":"m.login.password", + "user":settings.MATRIX_USER, + "password":settings.MATRIX_PASSWORD} + r0 = requests.post(matrix_login_url, json = details) + access_token = r0.json().get('access_token') - # join room by id - url_params = { - 'room': settings.MATRIX_ROOM, - 'access_token': access_token} - url = matrix_join_room_id_url.format(**url_params) - r1 = requests.post(url) + # join room by id + url_params = { + 'room': settings.MATRIX_ROOM, + 'access_token': access_token} + url = matrix_join_room_id_url.format(**url_params) + r1 = requests.post(url) - # send message - url_params = { - "room": settings.MATRIX_ROOM, - "access_token": access_token} - url = matrix_send_msg_url.format(**url_params) - details = { - "msgtype": "m.text", - "body": "%s %s" % (settings.MSG_PREFIX, message)} - r2 = requests.post(url, json=details) + # send message + url_params = { + "room": settings.MATRIX_ROOM, + "access_token": access_token} + url = matrix_send_msg_url.format(**url_params) + details = { + "msgtype": "m.text", + "body": "%s %s" % (settings.MSG_PREFIX, message)} + r2 = requests.post(url, json=details) + except: + pass return True -# url = "https://matrix.org/_matrix/client/r0/join/{room_alias}?access_token={access_token}".format( -# **{'access_token': access_token, -# 'room_alias': '#maidstone-hackspace:matrix.org'}) -# response = requests.post(url) - - -# return import_feeds() -# url = "https://matrix.org/_matrix/client/r0/rooms/%21{room}:matrix.org/join?access_token={access_token}".format( -# **{'room': 'fmCpNwqgIiuwATlcdw', -# 'access_token': access_token}) -# r = requests.get(url) -# fmCpNwqgIiuwATlcdw:matrix.org - - -#join room by id -# url = "https://matrix.org/_matrix/client/r0/rooms/%21{room}/join?access_token={access_token}".format( -# **{'room': 'fmCpNwqgIiuwATlcdw:matrix.org', -# 'access_token': access_token}) -# response = requests.post(url) - - -# url = "https://matrix.org/_matrix/client/r0/rooms/%21{room}/send/m.room.message?access_token={access_token}".format( -# **{'room': 'fmCpNwqgIiuwATlcdw:matrix.org', -# 'access_token': access_token}) -# details = {"msgtype":"m.text", "body":"poke from python"} #{"type":"m.login.password", "user":"oly", "password":""} -# r = requests.post(url, json = details) -# return r.json() - - -# url = "https://matrix.org/_matrix/client/r0/rooms/%21{room}/join?access_token={access_token}".format( -# **{'room': 'fmCpNwqgIiuwATlcdw:matrix.org', -# 'access_token': access_token}) -# response = requests.post(url) From 97e8397d383722e31b69432f0b7d04989dc715b8 Mon Sep 17 00:00:00 2001 From: Oly Date: Tue, 12 Sep 2017 13:37:03 +0100 Subject: [PATCH 5/7] Added requests to admin area, added meta data to homepage. --- mhackspace/requests/admin.py | 16 ++++++++++++++++ mhackspace/templates/base.html | 14 ++++++++++---- 2 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 mhackspace/requests/admin.py diff --git a/mhackspace/requests/admin.py b/mhackspace/requests/admin.py new file mode 100644 index 0000000..946c28c --- /dev/null +++ b/mhackspace/requests/admin.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +from django.contrib import admin +from django.db import models +from django.contrib.admin import ModelAdmin +from draceditor.widgets import AdminDraceditorWidget +from draceditor.models import DraceditorField + +from mhackspace.requests.models import UserRequests + + +@admin.register(UserRequests) +class RequestsAdmin(ModelAdmin): + list_display = ('title', 'description', 'created_date') + # list_filter = ('author', 'categories', 'members_only') + + diff --git a/mhackspace/templates/base.html b/mhackspace/templates/base.html index 997c3bc..49743d9 100644 --- a/mhackspace/templates/base.html +++ b/mhackspace/templates/base.html @@ -30,12 +30,18 @@ - {% block css %} - {% endblock %} - {% block head-extra %}{% endblock head-extra %} + {% block css %}{% endblock %} + + {% block head-extra %} + + + + + {% endblock head-extra %} +