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
Marnanel Thurman 2020-08-23 18:10:50 +01:00
rodzic f4d05bba40
commit a6e80e1de6
3 zmienionych plików z 27 dodań i 68 usunięć

Wyświetl plik

@ -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

Wyświetl plik

@ -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,

Wyświetl plik

@ -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):