kopia lustrzana https://gitlab.com/marnanel/chapeau
moving a lot of the fields of Activity into a TextField called
"other_fields". Not fully tested yet.2019-08-17
rodzic
b3e65c8ab6
commit
ea6197e5e4
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
),
|
||||
]
|
|
@ -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()
|
||||
|
|
Ładowanie…
Reference in New Issue