moving a lot of the fields of Activity into a TextField called

"other_fields". Not fully tested yet.
2019-08-17
Marnanel Thurman 2019-05-11 20:37:04 +01:00
rodzic b3e65c8ab6
commit ea6197e5e4
3 zmienionych plików z 64 dodań i 40 usunięć

Wyświetl plik

@ -141,19 +141,13 @@ class Activity(models.Model):
blank=True,
)
other_fields = models.TextField(
)
active = models.BooleanField(
default=True,
)
pending = models.BooleanField(
default=False,
)
source = models.CharField(
max_length=255,
null=True,
default=None)
@property
def url(self):
if self.remote_url is not None:
@ -303,24 +297,17 @@ class Activity(models.Model):
if 'id' not in value and sender is not None:
raise ValueError("Remote activities must have an id")
fields = {
record_fields = {
'active': True,
}
for f,v in value.items():
if f in [
'actor', 'object', 'target',
# 'to', 'cc',
]:
fields['f_'+f] = v
other_fields = value.copy()
try:
need_actor, need_object, need_target = cls.TYPES[value['type']]
except KeyError:
logger.debug('Unknown Activity type: %s', value['type'])
raise ValueError('{} is not an Activity type'.format(value['type']))
fields['f_type'] = TYPE_NAMES[value['type']]
if need_actor!=('actor' in value) or \
need_object!=('object' in value) or \
need_target!=('target' in value):
@ -331,7 +318,10 @@ class Activity(models.Model):
if o: result.append('object')
if t: result.append('target')
return '['+' '.join(result)+']'
if not result:
return 'none'
return '+'.join(result)
we_have = params(
'actor' in value,
@ -345,15 +335,36 @@ class Activity(models.Model):
need_target,
)
raise ValueError('Wrong parameters for type {}: we have {}, we need {}'.format(
value['type'],
we_have, we_need))
message = 'Wrong parameters for Activity type {}: we have {}, we need {}'.format(
value['type'], we_have, we_need)
logger.warn(message)
raise ValueError(message)
for f,v in value.items():
if f in [
'actor'
]:
fields['f_'+f] = v
del other_fields[f]
fields['f_type'] = TYPE_NAMES[value['type']]
if 'id' in value:
fields['remote_url'] = value['id']
# FIXME this allows people to create "remote" Activities
# with local URLs, which is weird and shouldn't happen.
record_fields['remote_url'] = value['id']
result = cls(**fields)
for f in ['id', 'type']:
if f in other_fields:
del other_fields[f]
record_fields['other_fields'] = other_fields
logger.debug('About to create Activity with fields: %s', record_fields)
result = cls(**record_fields)
result.save()
logger.debug('Activity created: %s', record_fields)
result.send_notifications()
return result

Wyświetl plik

@ -0,0 +1,27 @@
# Generated by Django 2.1.5 on 2019-05-11 14:04
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('django_kepi', '0017_auto_20190503_1400'),
]
operations = [
migrations.RemoveField(
model_name='activity',
name='pending',
),
migrations.RemoveField(
model_name='activity',
name='source',
),
migrations.AddField(
model_name='activity',
name='other_fields',
field=models.TextField(default=''),
preserve_default=False,
),
]

Wyświetl plik

@ -1,6 +1,5 @@
from django.test import TestCase
from django_kepi.models import Activity
from things_for_testing.models import ThingNote, ThingUser
FRED_URL = 'https://users.example.com/user/fred'
@ -8,8 +7,6 @@ class TestActivity(TestCase):
def test_parameters(self):
return # XXX
with self.assertRaisesMessage(ValueError, "is not an Activity type"):
Activity.create({
"id": "https://example.com/id/1",
@ -26,19 +23,8 @@ class TestActivity(TestCase):
},
sender="https://remote.example.com")
with self.assertRaisesMessage(ValueError, "Wrong parameters for type"):
with self.assertRaisesMessage(ValueError, "Wrong parameters for Activity type"):
Activity.create({
"id": "https://example.com/id/1",
"type": "Create",
})
fred = ThingUser(name="fred")
fred.save()
def test_note_creation(self):
note = ThingNote(
title='Hello world',
owner=FRED_URL,
)
note.save()