thingy_objects
Marnanel Thurman 2018-08-19 21:47:54 +01:00
rodzic f9c3447013
commit e1a3aca719
4 zmienionych plików z 160 dodań i 10 usunięć

Wyświetl plik

@ -3,6 +3,7 @@ from django_kepi import object_type_registry
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.conf import settings
import json
import datetime
import warnings
@ -12,7 +13,7 @@ import warnings
RESOLVE_FAILSAFE = 10
SERIALIZE = 'serialize'
URL_IDENTIFIER = 'url_identifier'
class Cobject(models.Model):
class Meta:
@ -40,8 +41,6 @@ class Cobject(models.Model):
result = {
'id': self.url_identifier(),
'type': self.__class__.__name__,
'published': self.published, # XXX format
'updated': self.updated, # XXX format
}
for (field, field_name) in [
@ -88,6 +87,23 @@ class Cobject(models.Model):
return result
def serialize_as_str(self):
def json_default(obj):
if isinstance(obj, datetime.datetime):
return obj.isoformat()+'Z'
else:
raise TypeError("{} is not serializable".format(
type(obj)))
return json.dumps(
self.serialize(),
sort_keys=True,
indent=2, # no reason not to be pretty
default=json_default,
)
class Activity_with_actor_and_fobject(Cobject):
class Meta:

Wyświetl plik

@ -1,21 +1,115 @@
from django.test import TestCase, Client
from django_kepi.models import Create
from things_for_testing.models import ThingUser
import json
from django_kepi.models import Create, Like
from things_for_testing.models import ThingUser, ThingArticle
class UserTests(TestCase):
def test_basic_objects(self):
def test_create(self):
actor = ThingUser(
name='Fred',
name='Dijkstra',
)
actor.save()
article = ThingArticle(
title='Go To statement considered harmful',
)
article.save()
activity = Create(
actor=actor,
fobject=actor,
fobject=article,
)
activity.save()
raise ValueError(str(activity.serialize()))
#raise ValueError(str(activity.serialize()))
def test_update(self):
actor = ThingUser(
name='Dijkstra',
)
actor.save()
article = ThingArticle(
title='Go To statement considered harmful',
)
article.save()
activity = Create(
actor=actor,
fobject=article,
)
activity.save()
article2 = ThingArticle(
title='Actually I rather like spaghetti code',
)
article2.save()
activity = Update(
actor=actor,
fobject=article2,
)
activity.save()
#raise ValueError(str(activity.serialize()))
def test_delete(self):
actor = ThingUser(
name='Dijkstra',
)
actor.save()
article = ThingArticle(
title='Go To statement considered harmful',
)
article.save()
activity = Create(
actor=actor,
fobject=article,
)
activity.save()
delete = Update(
actor=actor,
fobject=article,
)
delete.save()
# fetch by object ID (we can't do this atm) will get Tombstone
#raise ValueError(str(activity.serialize()))
def test_like(self):
liker = ThingUser(
name='Uncle Bulgaria',
)
liker.save()
author = ThingUser(
name='Dijkstra',
)
author.save()
article = ThingArticle(
title='Go To statement considered harmful',
)
article.save()
create = Create(
actor=author,
fobject=article,
)
create.save()
like = Like(
actor=liker,
fobject=article,
)
like.save()
raise ValueError(like.serialize_as_str())

Wyświetl plik

@ -0,0 +1,20 @@
# Generated by Django 2.0.6 on 2018-08-19 15:09
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('things_for_testing', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='ThingArticle',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=256)),
],
),
]

Wyświetl plik

@ -11,6 +11,8 @@ class ThingUser(models.Model):
def serialize(self):
return {
'id': self.url_identifier(),
'type': 'Person',
'name': self.name,
}
@ -18,3 +20,21 @@ class ThingUser(models.Model):
return 'https://example.com/user/{}'.format(
self.name,
)
class ThingArticle(models.Model):
title = models.CharField(max_length=256)
def serialize(self):
return {
'id': self.url_identifier(),
'type': 'Article',
'title': self.title,
}
def url_identifier(self):
return 'https://articles.example.com/{}'.format(
self.title,
)