kopia lustrzana https://gitlab.com/marnanel/chapeau
Person.lookup() removed because it duplicates the functionality of fetch().
There is one difference, which I think isn't important in the circumstances. If lookup() is asked about a remote person that we don't already know about, it either creates a blank record for them and returns it, or raises an error. In these circumstances, fetch() will perform a lookup and populate the record accordingly.status-serialisers
rodzic
f4d05bba40
commit
a6e80e1de6
|
@ -55,8 +55,15 @@ def on_follow(message):
|
|||
fields = message.fields
|
||||
logger.debug('%s: on_follow %s', message, fields)
|
||||
|
||||
follower = trilby_models.Person.lookup(fields['actor'],
|
||||
create_missing_remote = True)
|
||||
if not bowler_utils.is_local(fields['object']):
|
||||
logger.info("%s: ignoring someone following non-local user",
|
||||
message)
|
||||
return None
|
||||
|
||||
follower = fetch(
|
||||
fields['actor'],
|
||||
expected_type = trilby_models.Person,
|
||||
)
|
||||
|
||||
if follower is None:
|
||||
# shouldn't happen
|
||||
|
@ -64,15 +71,19 @@ def on_follow(message):
|
|||
message,
|
||||
fields['actor'],
|
||||
)
|
||||
return
|
||||
return None
|
||||
|
||||
following = fetch(
|
||||
fields['object'],
|
||||
expected_type = trilby_models.Person,
|
||||
)
|
||||
|
||||
following = trilby_models.Person.lookup(fields['object'])
|
||||
if following is None:
|
||||
logger.info('%s: there is no local user %s',
|
||||
message,
|
||||
fields['object'],
|
||||
)
|
||||
return
|
||||
return None
|
||||
|
||||
result = trilby_models.Follow(
|
||||
follower = follower,
|
||||
|
@ -141,14 +152,15 @@ def on_create(message):
|
|||
)
|
||||
return None
|
||||
|
||||
poster = trilby_models.Person.lookup(
|
||||
name = fields['actor'],
|
||||
create_missing_remote = True,
|
||||
poster = fetch(
|
||||
fields['actor'],
|
||||
expected_type = trilby_models.Person,
|
||||
)
|
||||
|
||||
if 'inReplyTo' in newborn_fields:
|
||||
in_reply_to = trilby_models.Status.lookup(
|
||||
url = newborn_fields['inReplyTo'],
|
||||
in_reply_to = fetch(
|
||||
newborn_fields['inReplyTo'],
|
||||
expected_type = trilby_models.Status,
|
||||
)
|
||||
else:
|
||||
in_reply_to = None
|
||||
|
|
|
@ -14,6 +14,7 @@ from django.conf import settings
|
|||
from kepi.bowler_pub.create import create
|
||||
import kepi.trilby_api.utils as trilby_utils
|
||||
import kepi.trilby_api.models as trilby_models
|
||||
from kepi.sombrero_sendpub.fetch import fetch
|
||||
|
||||
REMOTE_ALICE = 'https://somewhere.example.com/users/alice'
|
||||
LOCAL_FRED = 'https://testserver/users/fred'
|
||||
|
@ -34,6 +35,8 @@ class TestCreate(TestCase):
|
|||
|
||||
if sender is None:
|
||||
sender = self._fred.url
|
||||
elif not isinstance(sender, str):
|
||||
sender = sender.url
|
||||
|
||||
create_form = {
|
||||
'id': LOCAL_STATUS_ID,
|
||||
|
@ -336,9 +339,8 @@ class TestCreate(TestCase):
|
|||
from kepi.trilby_api.models import Follow, Person
|
||||
|
||||
local_user = create_local_person()
|
||||
remote_alice = Person.lookup(REMOTE_ALICE,
|
||||
create_missing_remote = True,
|
||||
)
|
||||
remote_alice = fetch(REMOTE_ALICE,
|
||||
expected_type = Person)
|
||||
|
||||
following = Follow(
|
||||
follower = local_user,
|
||||
|
|
|
@ -125,61 +125,6 @@ class Person(PolymorphicModel):
|
|||
def emojis(self):
|
||||
return [] # FIXME
|
||||
|
||||
@classmethod
|
||||
def lookup(cls, name,
|
||||
create_missing_remote = False):
|
||||
# FIXME not yet tested
|
||||
# FIXME this should check @name@host form, too
|
||||
|
||||
if bowler_utils.is_local(name):
|
||||
|
||||
view = trilby_utils.find_local_view(
|
||||
name,
|
||||
which_views = ['PersonView'],
|
||||
)
|
||||
|
||||
if view is None:
|
||||
return None
|
||||
|
||||
try:
|
||||
result = LocalPerson.objects.get(
|
||||
local_user__username = view.kwargs['username'],
|
||||
)
|
||||
logger.debug('%s is local and exists: %s',
|
||||
name, result)
|
||||
|
||||
except LocalPerson.DoesNotExist:
|
||||
logger.debug('%s is local but doesn\'t exist.',
|
||||
name)
|
||||
|
||||
return None
|
||||
|
||||
else:
|
||||
try:
|
||||
result = RemotePerson.objects.get(
|
||||
url = name,
|
||||
)
|
||||
logger.debug('%s is remote and exists: %s',
|
||||
name, result)
|
||||
|
||||
except RemotePerson.DoesNotExist:
|
||||
|
||||
if not create_missing_remote:
|
||||
logger.debug('%s is remote but doesn\'t exist.',
|
||||
name)
|
||||
|
||||
return None
|
||||
|
||||
result = RemotePerson(
|
||||
url = name,
|
||||
)
|
||||
result.save()
|
||||
|
||||
logger.debug('%s is remote but didn\'t exist, so we created it: %s',
|
||||
name, result)
|
||||
|
||||
return result
|
||||
|
||||
########################################
|
||||
|
||||
class RemotePerson(Person):
|
||||
|
|
Ładowanie…
Reference in New Issue