diff options
Diffstat (limited to 'users/models')
-rw-r--r-- | users/models/identity.py | 16 |
1 files changed, 14 insertions, 2 deletions
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 ### |