Trilby's Person class has a method "by_name()" which looks up a Person by name (or URL).

trilby-heavy
Marnanel Thurman 2020-04-23 19:00:39 +01:00
rodzic faad85af3d
commit f55de4589a
2 zmienionych plików z 54 dodań i 12 usunięć

Wyświetl plik

@ -234,8 +234,10 @@ class Person(models.Model):
def __init__(self, *args, **kwargs):
if 'username' in kwargs and 'local_user' not in kwargs:
new_user = TrilbyUser(username=kwargs['username'])
new_user = TrilbyUser(
username=kwargs['username'])
new_user.save()
kwargs['local_user'] = new_user
del kwargs['username']
@ -315,3 +317,38 @@ class Person(models.Model):
return self.remote_url
else:
return self.username
@classmethod
def by_name(cls, name,
local_only = False):
"""
Return the Person who has the given name.
If local_only==False, name can also be a remote URL.
"""
logger.info('looking up Person by name=%s; local_only=%s',
name, local_only)
if name.startswith('@'):
name = name[1:]
local_only = True
try:
return cls.objects.get(
local_user__username = name,
)
except cls.DoesNotExist:
pass
if local_only:
return None
try:
return cls.objects.get(
remote_url = name,
)
except cls.DoesNotExist:
pass
return None

Wyświetl plik

@ -26,6 +26,19 @@ logger = logging.Logger(name='kepi')
###########################
def get_person_or_404(name):
result = trilby_models.Person.by_name(
name = name,
local_only = True,
)
if result is None:
raise Http404("No such user.")
return result
###########################
class Instance(View):
def get(self, request, *args, **kwargs):
@ -208,10 +221,7 @@ class DoSomethingWithPerson(generics.GenericAPIView):
logger.debug(' -- user not logged in')
return error_response(401, 'Not logged in')
the_person = get_object_or_404(
self.get_queryset(),
local_user__username = name,
)
the_person = get_person_or_404(name)
result = self._do_something_with(the_person, request)
@ -691,9 +701,7 @@ class UserFeed(View):
def get(self, request, username, *args, **kwargs):
user = get_object_or_404(trilby_models.Person,
id = '@'+username,
)
user = get_person_or_404(username)
context = {
'self': request.build_absolute_uri(),
@ -785,10 +793,7 @@ class Followers_or_Following(generics.GenericAPIView):
logger.debug(' -- user not logged in')
return error_response(401, 'Not logged in')
the_person = get_object_or_404(
self.get_queryset(),
local_user__username = name,
)
the_person = get_person_or_404(name)
queryset = self._get_list_for(the_person)