Skip to content
Snippets Groups Projects
Commit b28603d5 authored by Calum Mackervoy's avatar Calum Mackervoy
Browse files

sends Create/Update activity on save

parent d1ccd098
No related branches found
No related tags found
1 merge request!125Resolve "backlink management"
......@@ -137,6 +137,80 @@ class ActivityPubService(object):
t = threading.Thread(target=cls.do_post, args=[inbox, activity])
t.start()
@classmethod
def send_create_activity(cls, actor, object, recipient):
'''
Sends a Create activity
:param actor: a valid Actor object, or a user instance
:param object: a valid ActivityStreams Object
:param recipient: a urlid to send the object to
'''
# bounds checking
if isinstance(actor, get_user_model()):
actor = {
'@type': 'foaf:user',
'@id': actor.urlid
}
summary = str(object['@id']) + " was created"
activity = {
"@context": [
"https://www.w3.org/ns/activitystreams",
settings.LDP_RDF_CONTEXT
],
"summary": summary,
"type": "Create",
"actor": actor,
"object": object
}
logger.debug('[Sender] sending create activity ' + str(activity))
print('[Sender] sending create activity ' + str(activity))
inbox = ActivityPubService._discover_inbox(recipient)
# send request
t = threading.Thread(target=cls.do_post, args=[inbox, activity])
t.start()
@classmethod
def send_update_activity(cls, actor, object, recipient):
'''
Sends an Update activity
:param actor: a valid Actor object, or a user instance
:param object: a valid ActivityStreams Object
:param recipient: a urlid to send the object to
'''
# bounds checking
if isinstance(actor, get_user_model()):
actor = {
'@type': 'foaf:user',
'@id': actor.urlid
}
summary = str(object['@id']) + " was created"
activity = {
"@context": [
"https://www.w3.org/ns/activitystreams",
settings.LDP_RDF_CONTEXT
],
"summary": summary,
"type": "Update",
"actor": actor,
"object": object
}
logger.debug('[Sender] sending update activity ' + str(activity))
print('[Sender] sending update activity ' + str(activity))
inbox = ActivityPubService._discover_inbox(recipient)
# send request
t = threading.Thread(target=cls.do_post, args=[inbox, activity])
t.start()
@classmethod
def send_delete_activity(cls, actor, object, origin):
'''
......@@ -227,11 +301,18 @@ def check_save_for_backlinks(sender, instance, created, **kwargs):
if len(targets.items()) > 0:
obj = ActivityPubService.build_object_tree(instance)
for key in targets.keys():
ActivityPubService.send_add_activity({
"type": "Service",
"name": "Backlinks Service"
}, obj, targets[key])
actor = {
"type": "Service",
"name": "Backlinks Service"
}
# Create Activity
if created:
for key in targets.keys():
ActivityPubService.send_create_activity(actor, obj, targets[key]['@id'])
# Update Activity
else:
for key in targets.keys():
ActivityPubService.send_update_activity(actor, obj, targets[key]['@id'])
@receiver([post_delete])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment