chapeau/things_for_testing/models.py

115 wiersze
2.6 KiB
Python
Czysty Zwykły widok Historia

2018-08-12 13:06:26 +00:00
from django.db import models
2018-09-06 17:47:01 +00:00
from django_kepi import register_type, TombstoneException
from django_kepi import models as kepi_models
2018-08-12 13:06:26 +00:00
class ThingUser(models.Model):
name = models.CharField(max_length=256)
2018-08-12 13:06:26 +00:00
favourite_colour = models.CharField(
max_length=256,
default='chartreuse',
)
2018-08-24 17:13:57 +00:00
remote = models.BooleanField(
default=True,
)
2018-09-06 17:23:53 +00:00
def __str__(self):
return '[ThingUser {}]'.format(self.name)
@property
def activity(self):
if self.name=='Queen Anne':
raise TombstoneException(original_type=self.activity_type)
return {
'id': self.activity_id,
'type': self.activity_type,
'name': self.name,
'favourite_colour': self.favourite_colour,
}
@property
def activity_type(self):
return 'Person'
@property
def activity_id(self):
if self.remote:
return self.name
else:
return 'https://example.com/user/{}'.format(
self.name,
)
2018-08-19 20:47:54 +00:00
@classmethod
def find_activity(cls, url):
PREFIX = "https://example.com/user/"
if url.startswith(PREFIX):
name = url[len(PREFIX):]
else:
name = url
return cls.objects.get(name=name)
2018-10-03 18:36:39 +00:00
@classmethod
def activitypub_create(cls, fields):
result = cls(
name=fields['id'],
remote=True,
)
result.save()
return result
2018-10-03 18:36:39 +00:00
2018-08-24 17:13:57 +00:00
register_type('Person', ThingUser)
2018-08-19 20:47:54 +00:00
class ThingArticle(models.Model):
title = models.CharField(max_length=256)
2018-08-24 17:13:57 +00:00
ftype = 'Article'
2018-08-19 20:47:54 +00:00
def serialize(self):
return {
'id': self.activity_id,
2018-08-19 20:47:54 +00:00
'type': 'Article',
'title': self.title,
}
@property
def activity_id(self):
2018-08-19 20:47:54 +00:00
return 'https://articles.example.com/{}'.format(
self.title,
)
2018-08-24 17:13:57 +00:00
@classmethod
def activity_create(cls, type_name, actor, fields):
2018-08-27 18:13:30 +00:00
pass
2018-08-24 17:13:57 +00:00
2018-08-27 18:13:30 +00:00
@classmethod
def activity_update(cls, type_name, actor, fields, partial):
pass
@classmethod
def activity_delete(cls, type_name, actor):
pass
@classmethod
def activity_like(cls, type_name, actor, fobject):
pass
2018-08-19 20:47:54 +00:00
@classmethod
def find_activity(cls, url):
PREFIX = "https://articles.example.com/"
if not url.startswith(PREFIX):
return None
title = url[len(PREFIX):]
return cls.objects.get(title=title)
2018-08-24 17:13:57 +00:00
register_type('Article', ThingArticle)
2018-08-27 17:53:52 +00:00