From cfae183e80c2147c65d09cf56f5cbe51fc574feb Mon Sep 17 00:00:00 2001 From: Andrew Godwin Date: Mon, 21 Nov 2022 08:31:14 -0700 Subject: Don't error fetching people if they're in the DB --- users/models/identity.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'users/models/identity.py') diff --git a/users/models/identity.py b/users/models/identity.py index dc2ee26..d7572d6 100644 --- a/users/models/identity.py +++ b/users/models/identity.py @@ -5,7 +5,7 @@ from urllib.parse import urlparse import httpx import urlman from asgiref.sync import async_to_sync, sync_to_async -from django.db import models +from django.db import IntegrityError, models from django.template.defaultfilters import linebreaks_filter from django.templatetags.static import static from django.utils import timezone @@ -387,7 +387,19 @@ class Identity(StatorModel): else: self.domain = await get_domain(actor_url_parts.hostname) self.fetched = timezone.now() - await sync_to_async(self.save)() + try: + await sync_to_async(self.save)() + except IntegrityError as e: + # See if we can fetch a PK and save there + if self.pk is None: + try: + other_row = await Identity.objects.aget(actor_uri=self.actor_uri) + except Identity.DoesNotExist: + raise ValueError( + f"Could not save Identity at end of actor fetch: {e}" + ) + self.pk: Optional[int] = other_row.pk + await sync_to_async(self.save)() return True ### Cryptography ### -- cgit v1.2.3