feature: subscription system

This commit is contained in:
Matthieu Fesselier 2019-02-20 10:18:46 +07:00
parent 41f15006db
commit 9fc9fd4cce
2 changed files with 24 additions and 25 deletions

View File

@ -1,13 +1,14 @@
# import requests
# import logging
# import datetime
# from threading import Thread
import requests
import logging
import datetime
from threading import Thread
from django.db import models
from django.conf import settings
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User
from django.contrib.admin.models import LogEntry
from djangoldp.models import Model
class Notification(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='inbox')
@ -41,22 +42,21 @@ class Subscription(models.Model):
return '{}'.format(self.object)
# --- SUBSCRIPTION SYSTEM ---
# @receiver(post_save, dispatch_uid="callback_notif")
# def send_notification(sender, instance, **kwargs):
# if (sender != Notification and sender != LogEntry):
# threads = []
# url = sender.url # TODO : get URL of saved resource
# for subscription in Subscription.objects.filter(object=url):
# process = Thread(target=send_request, args=[subscription.inbox, url])
# process.start()
# threads.append(process)
# def send_request(target, object):
# try:
# req=requests.post(target,
# json={"@context":"https://cdn.happy-dev.fr/owl/hdcontext.jsonld",
# "object": object, "type": "system", "read": False},
# headers={"Content-Type": "application/ld+json"})
# except:
# logging.error('Djangoldp_notifications: Error with request')
# return True
@receiver(post_save, dispatch_uid="callback_notif")
def send_notification(sender, instance, **kwargs):
if (sender != Notification and sender != LogEntry):
threads = []
url = "http://127.0.0.1:8000" + Model.get_absolute_url(instance) + '/' # TODO : get host
for subscription in Subscription.objects.filter(object=url):
process = Thread(target=send_request, args=[subscription.inbox, url])
process.start()
threads.append(process)
def send_request(target, object):
try:
req=requests.post(target,
json={"@context":"https://cdn.happy-dev.fr/owl/hdcontext.jsonld",
"object": object, "type": "system", "read": False},
headers={"Content-Type": "application/ld+json"})
except:
logging.error('Djangoldp_notifications: Error with request')
return True

View File

@ -2,9 +2,8 @@
from django.conf.urls import url
from .models import Notification, Subscription
from djangoldp.views import LDPViewSet
from djangoldp.permissions import InboxPermissions
urlpatterns = [
url(r'^notifications/', LDPViewSet.urls(model=Notification, permission_classes=(InboxPermissions,))),
url(r'^notifications/', LDPViewSet.urls(model=Notification, permission_classes=[])),
url(r'^subscriptions/', LDPViewSet.urls(model=Subscription)),
]