Skip to content

Commit 72969fb

Browse files
committed
Moved all/most ActivityPub code to its own library. The goal is completely modularize it.
1 parent 39c00e0 commit 72969fb

44 files changed

Lines changed: 1249 additions & 1190 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

activitypub/__init__.py

Whitespace-only changes.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from app.utils.url import check_url
1919

2020
if TYPE_CHECKING:
21-
from app.actor import Actor
21+
from activitypub.actor import Actor
2222

2323
RawObject = dict[str, Any]
2424
AS_CTX = "https://www.w3.org/ns/activitystreams"

app/actor.py renamed to activitypub/actor.py

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
from sqlalchemy import select
1212
from sqlalchemy.orm import joinedload
1313

14-
from app import activitypub as ap
14+
import activitypub.models
15+
from activitypub import activitypub as ap
1516
from app import media
1617
from app.config import BASE_URL
1718
from app.config import USER_AGENT
@@ -22,7 +23,7 @@
2223
from app.utils.datetime import now
2324

2425
if typing.TYPE_CHECKING:
25-
from app.models import Actor as ActorModel
26+
from activitypub.models import Actor as ActorModel
2627

2728

2829
def _handle(raw_actor: ap.RawObject) -> str:
@@ -216,7 +217,7 @@ async def save_actor(db_session: AsyncSession, ap_actor: ap.RawObject) -> "Actor
216217
if ap_type := ap_actor.get("type") not in ap.ACTOR_TYPES:
217218
raise ValueError(f"Invalid type {ap_type} for actor {ap_actor}")
218219

219-
actor = models.Actor(
220+
actor = activitypub.models.Actor(
220221
ap_id=ap.get_id(ap_actor["id"]),
221222
ap_actor=ap_actor,
222223
ap_type=ap.as_list(ap_actor["type"])[0],
@@ -239,8 +240,8 @@ async def fetch_actor(
239240

240241
existing_actor = (
241242
await db_session.scalars(
242-
select(models.Actor).where(
243-
models.Actor.ap_id == actor_id,
243+
select(activitypub.models.Actor).where(
244+
activitypub.models.Actor.ap_id == actor_id,
244245
)
245246
)
246247
).one_or_none()
@@ -273,8 +274,8 @@ async def fetch_actor(
273274
# (like Birdsite LIVE) , which mean we may already have it in DB
274275
existing_actor_by_url = (
275276
await db_session.scalars(
276-
select(models.Actor).where(
277-
models.Actor.ap_id == ap.get_id(ap_actor),
277+
select(activitypub.models.Actor).where(
278+
activitypub.models.Actor.ap_id == ap.get_id(ap_actor),
278279
)
279280
)
280281
).one_or_none()
@@ -298,8 +299,8 @@ async def list_actors(db_session: AsyncSession, limit: int = 100) -> list["Actor
298299
return (
299300
(
300301
await db_session.scalars(
301-
select(models.Actor)
302-
.where(models.Actor.is_deleted.is_(False))
302+
select(activitypub.models.Actor)
303+
.where(activitypub.models.Actor.is_deleted.is_(False))
303304
.limit(limit)
304305
)
305306
)
@@ -350,9 +351,9 @@ async def get_actors_metadata(
350351
follower.ap_actor_id: follower.inbox_object.ap_id
351352
for follower in (
352353
await db_session.scalars(
353-
select(models.Follower)
354-
.where(models.Follower.ap_actor_id.in_(ap_actor_ids))
355-
.options(joinedload(models.Follower.inbox_object))
354+
select(activitypub.models.Follower)
355+
.where(activitypub.models.Follower.ap_actor_id.in_(ap_actor_ids))
356+
.options(joinedload(activitypub.models.Follower.inbox_object))
356357
)
357358
)
358359
.unique()
@@ -361,37 +362,37 @@ async def get_actors_metadata(
361362
following = {
362363
following.ap_actor_id
363364
for following in await db_session.execute(
364-
select(models.Following.ap_actor_id).where(
365-
models.Following.ap_actor_id.in_(ap_actor_ids)
365+
select(activitypub.models.Following.ap_actor_id).where(
366+
activitypub.models.Following.ap_actor_id.in_(ap_actor_ids)
366367
)
367368
)
368369
}
369370
sent_follow_requests = {
370371
follow_req.ap_object["object"]: follow_req.ap_id
371372
for follow_req in await db_session.execute(
372-
select(models.OutboxObject.ap_object, models.OutboxObject.ap_id).where(
373-
models.OutboxObject.ap_type == "Follow",
374-
models.OutboxObject.undone_by_outbox_object_id.is_(None),
375-
models.OutboxObject.activity_object_ap_id.in_(ap_actor_ids),
373+
select(activitypub.models.OutboxObject.ap_object, activitypub.models.OutboxObject.ap_id).where(
374+
activitypub.models.OutboxObject.ap_type == "Follow",
375+
activitypub.models.OutboxObject.undone_by_outbox_object_id.is_(None),
376+
activitypub.models.OutboxObject.activity_object_ap_id.in_(ap_actor_ids),
376377
)
377378
)
378379
}
379380
rejected_follow_requests = {
380381
reject.activity_object_ap_id
381382
for reject in await db_session.execute(
382-
select(models.InboxObject.activity_object_ap_id).where(
383-
models.InboxObject.ap_type == "Reject",
384-
models.InboxObject.ap_actor_id.in_(ap_actor_ids),
383+
select(activitypub.models.InboxObject.activity_object_ap_id).where(
384+
activitypub.models.InboxObject.ap_type == "Reject",
385+
activitypub.models.InboxObject.ap_actor_id.in_(ap_actor_ids),
385386
)
386387
)
387388
}
388389
blocks = {
389390
block.ap_actor_id
390391
for block in await db_session.execute(
391-
select(models.InboxObject.ap_actor_id).where(
392-
models.InboxObject.ap_type == "Block",
393-
models.InboxObject.undone_by_inbox_object_id.is_(None),
394-
models.InboxObject.ap_actor_id.in_(ap_actor_ids),
392+
select(activitypub.models.InboxObject.ap_actor_id).where(
393+
activitypub.models.InboxObject.ap_type == "Block",
394+
activitypub.models.InboxObject.undone_by_inbox_object_id.is_(None),
395+
activitypub.models.InboxObject.ap_actor_id.in_(ap_actor_ids),
395396
)
396397
)
397398
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
from bs4 import BeautifulSoup # type: ignore
99
from mistletoe import markdown # type: ignore
1010

11-
from app import activitypub as ap
12-
from app.actor import LOCAL_ACTOR
13-
from app.actor import Actor
14-
from app.actor import RemoteActor
11+
from activitypub import activitypub as ap
12+
from activitypub.actor import LOCAL_ACTOR
13+
from activitypub.actor import Actor
14+
from activitypub.actor import RemoteActor
1515
from app.config import ID
1616
from app.media import proxied_media_url
1717
from app.utils.datetime import now

0 commit comments

Comments
 (0)