diff options
author | Andrew Godwin | 2022-11-09 22:29:33 -0700 |
---|---|---|
committer | Andrew Godwin | 2022-11-09 22:29:49 -0700 |
commit | 7746abbbb7700fa918450101bbc6d29ed9b4b608 (patch) | |
tree | 8768efd8201faa2fee18e5d3b46f33785002f5d6 /users/models/identity.py | |
parent | 61c324508e62bb640b4526183d0837fc57d742c2 (diff) | |
download | takahe-7746abbbb7700fa918450101bbc6d29ed9b4b608.tar.gz takahe-7746abbbb7700fa918450101bbc6d29ed9b4b608.tar.bz2 takahe-7746abbbb7700fa918450101bbc6d29ed9b4b608.zip |
Most of the way through the stator refactor
Diffstat (limited to 'users/models/identity.py')
-rw-r--r-- | users/models/identity.py | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/users/models/identity.py b/users/models/identity.py index 98262bc..5e2cd06 100644 --- a/users/models/identity.py +++ b/users/models/identity.py @@ -14,9 +14,21 @@ from django.utils import timezone from OpenSSL import crypto from core.ld import canonicalise +from stator.models import State, StateField, StateGraph, StatorModel from users.models.domain import Domain +class IdentityStates(StateGraph): + outdated = State(try_interval=3600) + updated = State() + + @outdated.add_transition(updated) + async def fetch_identity(identity: "Identity"): # type:ignore + if identity.local: + return True + return await identity.fetch_actor() + + def upload_namer(prefix, instance, filename): """ Names uploaded images etc. @@ -26,7 +38,7 @@ def upload_namer(prefix, instance, filename): return f"{prefix}/{now.year}/{now.month}/{now.day}/{filename}" -class Identity(models.Model): +class Identity(StatorModel): """ Represents both local and remote Fediverse identities (actors) """ @@ -35,6 +47,8 @@ class Identity(models.Model): # one around as well for making nice URLs etc. actor_uri = models.CharField(max_length=500, unique=True) + state = StateField(IdentityStates) + local = models.BooleanField() users = models.ManyToManyField("users.User", related_name="identities") |