diff --git a/django_kepi/__init__.py b/django_kepi/__init__.py index 433153a..cd4653a 100644 --- a/django_kepi/__init__.py +++ b/django_kepi/__init__.py @@ -30,3 +30,12 @@ ATSIGN_CONTEXT = [ "Emoji": "toot:Emoji" } ] + + +object_type_registry = { + 'Object': None, + } + +def register_type(a_typename, a_typeclass): + object_type_registry[a_typename] = a_typeclass + diff --git a/django_kepi/fixtures/kepi1.json b/django_kepi/fixtures/kepi1.json index 3e1434b..b888efe 100644 --- a/django_kepi/fixtures/kepi1.json +++ b/django_kepi/fixtures/kepi1.json @@ -14,5 +14,21 @@ "a_type": "Object", "verified": false } +}, +{ + "model": "django_kepi.ActivityObject", + "pk": 3, + "fields": { + "a_type": "Person", + "verified": true + } +}, +{ + "model": "things_for_testing.ThingUser", + "pk": 1, + "fields": { + "name": "Alice Test", + "activity_object": 3 + } } ] diff --git a/django_kepi/migrations/0002_activity.py b/django_kepi/migrations/0002_activity.py new file mode 100644 index 0000000..0703125 --- /dev/null +++ b/django_kepi/migrations/0002_activity.py @@ -0,0 +1,19 @@ +# Generated by Django 2.0.6 on 2018-08-12 07:48 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('django_kepi', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Activity', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ], + ), + ] diff --git a/django_kepi/models.py b/django_kepi/models.py index a35c37f..229b834 100644 --- a/django_kepi/models.py +++ b/django_kepi/models.py @@ -1,17 +1,16 @@ from django.db import models - -object_type_registry = { - 'Object': None, - } - -def register_type(a_typename, a_typeclass): - object_type_registry[a_typename] = a_typeclass +from django_kepi import object_type_registry class ActivityObject(models.Model): a_type = models.CharField(max_length=255, default='Object') verified = models.BooleanField(default=False) + # attachment | attributedTo | audience | content | context | + # name | endTime | generator | icon | image | inReplyTo | + # location | preview | published | replies | startTime | + # summary | tag | updated | url | to | bto | cc | bcc | mediaType | duration + def save(self, *args, **kwargs): if self.a_type not in object_type_registry: @@ -34,7 +33,7 @@ class ActivityObject(models.Model): )) if a_typeclass is not None: - instance = a_typeclass.objects.find(activity_object__pk=self.pk) + instance = a_typeclass.objects.get(activity_object__pk=self.pk) if instance is None: raise ValueError("ActivityObject {} has no corresponding instance in type {}".format( @@ -52,3 +51,8 @@ class ActivityObject(models.Model): }) return result + +class Activity(models.Model): + # actor | object | target | result | origin | instrument + pass + diff --git a/test_settings.py b/test_settings.py index 6b1da8e..1476b8f 100644 --- a/test_settings.py +++ b/test_settings.py @@ -9,10 +9,8 @@ INSTALLED_APPS = ( 'django.contrib.messages', 'django.contrib.staticfiles', - 'rest_framework', - 'django_fields', - 'django_kepi', + 'things_for_testing', ) diff --git a/tests/tests_unit.py b/tests/tests_unit.py index c9fc1de..2359fb9 100644 --- a/tests/tests_unit.py +++ b/tests/tests_unit.py @@ -34,3 +34,13 @@ class UserTests(TestCase): with self.assertRaises(ActivityObject.DoesNotExist): self._get_json('/obj/0') + + def test_one_to_one(self): + + activity = self._get_json('/obj/3') + + self.assertEqual(activity['id'], 3) + self.assertEqual(activity['type'], 'Person') + self.assertEqual(activity['name'], 'Alice Test') + + diff --git a/things_for_testing/__init__.py b/things_for_testing/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/things_for_testing/admin.py b/things_for_testing/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/things_for_testing/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/things_for_testing/apps.py b/things_for_testing/apps.py new file mode 100644 index 0000000..4f284dc --- /dev/null +++ b/things_for_testing/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class ThingsForTestingConfig(AppConfig): + name = 'things_for_testing' diff --git a/things_for_testing/migrations/0001_initial.py b/things_for_testing/migrations/0001_initial.py new file mode 100644 index 0000000..cb32875 --- /dev/null +++ b/things_for_testing/migrations/0001_initial.py @@ -0,0 +1,24 @@ +# Generated by Django 2.0.6 on 2018-08-12 07:57 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('django_kepi', '0002_activity'), + ] + + operations = [ + migrations.CreateModel( + name='ThingUser', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=256)), + ('activity_object', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='django_kepi.ActivityObject')), + ], + ), + ] diff --git a/things_for_testing/migrations/__init__.py b/things_for_testing/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/things_for_testing/models.py b/things_for_testing/models.py new file mode 100644 index 0000000..d2fe53d --- /dev/null +++ b/things_for_testing/models.py @@ -0,0 +1,19 @@ +from django.db import models +from django_kepi import register_type +from django_kepi.models import ActivityObject + +class ThingUser(models.Model): + + name = models.CharField(max_length=256) + activity_object = models.OneToOneField( + ActivityObject, + on_delete=models.CASCADE, + ) + + def activity_fields(self): + return { + 'name': self.name, + } + +register_type('Person', ThingUser) + diff --git a/things_for_testing/tests.py b/things_for_testing/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/things_for_testing/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/things_for_testing/views.py b/things_for_testing/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/things_for_testing/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here.