diff options
author | Andrew Godwin | 2022-11-27 17:05:31 -0700 |
---|---|---|
committer | Andrew Godwin | 2022-11-27 17:05:31 -0700 |
commit | 3b079526a2ea78b68555094ca498faea31022759 (patch) | |
tree | 28414e93aa7d412148fbcba6ecd6e2a0b09ecb5f /users/models | |
parent | 2f443414a7e029f83292873257d2940b5a10cc64 (diff) | |
download | takahe-3b079526a2ea78b68555094ca498faea31022759.tar.gz takahe-3b079526a2ea78b68555094ca498faea31022759.tar.bz2 takahe-3b079526a2ea78b68555094ca498faea31022759.zip |
User fetching and inbox message cleaning
Diffstat (limited to 'users/models')
-rw-r--r-- | users/models/identity.py | 20 | ||||
-rw-r--r-- | users/models/inbox_message.py | 10 |
2 files changed, 25 insertions, 5 deletions
diff --git a/users/models/identity.py b/users/models/identity.py index 805755a..6957526 100644 --- a/users/models/identity.py +++ b/users/models/identity.py @@ -23,19 +23,31 @@ from users.models.system_actor import SystemActor class IdentityStates(StateGraph): - outdated = State(try_interval=3600) - updated = State() + """ + There are only two states in a cycle. + Identities sit in "updated" for up to system.identity_max_age, and then + go back to "outdated" for refetching. + """ + + outdated = State(try_interval=3600, force_initial=True) + updated = State(try_interval=86400, attempt_immediately=False) outdated.transitions_to(updated) + updated.transitions_to(outdated) @classmethod async def handle_outdated(cls, identity: "Identity"): # Local identities never need fetching if identity.local: - return "updated" + return cls.updated # Run the actor fetch and progress to updated if it succeeds if await identity.fetch_actor(): - return "updated" + return cls.updated + + @classmethod + async def handle_updated(cls, instance: "Identity"): + if instance.state_age > Config.system.identity_max_age: + return cls.outdated class Identity(StatorModel): diff --git a/users/models/inbox_message.py b/users/models/inbox_message.py index 589f933..079c572 100644 --- a/users/models/inbox_message.py +++ b/users/models/inbox_message.py @@ -1,14 +1,17 @@ from asgiref.sync import sync_to_async from django.db import models +from core.models import Config from stator.models import State, StateField, StateGraph, StatorModel class InboxMessageStates(StateGraph): received = State(try_interval=300) - processed = State() + processed = State(try_interval=86400, attempt_immediately=False) + purged = State() # This is actually deletion, it will never get here received.transitions_to(processed) + processed.transitions_to(purged) @classmethod async def handle_received(cls, instance: "InboxMessage"): @@ -80,6 +83,11 @@ class InboxMessageStates(StateGraph): raise ValueError(f"Cannot handle activity of type {unknown}") return cls.processed + @classmethod + async def handle_processed(cls, instance: "InboxMessage"): + if instance.state_age > Config.system.inbox_message_purge_after: + await InboxMessage.objects.filter(pk=instance.pk).adelete() + class InboxMessage(StatorModel): """ |