add account detail in item posts API

This commit is contained in:
mein Name 2025-02-04 12:20:08 -05:00 committed by Henri Dickson
parent 4841af7aef
commit 281d1f8bf2
6 changed files with 49 additions and 26 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 B

View file

@ -47,7 +47,7 @@ class Account(Schema):
# statuses_count: int | None # statuses_count: int | None
# followers_count: int | None # followers_count: int | None
# following_count: int | None # following_count: int | None
source: dict | None = None # source: dict | None = None
class MediaAttachment(Schema): class MediaAttachment(Schema):

View file

@ -192,7 +192,7 @@ class JournalSearchResult(SearchResult):
return ps return ps
@cached_property @cached_property
def posts(self): def posts(self) -> QuerySet[Post]:
if not self: if not self:
return Post.objects.none() return Post.objects.none()
ids = reduce( ids = reduce(

@ -1 +1 @@
Subproject commit 0ba7333d3641442f519983cf3a8b1fc395a7afa7 Subproject commit 549f58eb472504f8281d20a7000ab8cc6834f611

View file

@ -16,7 +16,7 @@ from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa from cryptography.hazmat.primitives.asymmetric import rsa
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import AbstractBaseUser from django.contrib.auth.models import AbstractBaseUser
from django.core.files.storage import FileSystemStorage from django.core.files.storage import Storage, storages
from django.db import models, transaction from django.db import models, transaction
from django.template.defaultfilters import linebreaks_filter from django.template.defaultfilters import linebreaks_filter
from django.utils import timezone from django.utils import timezone
@ -382,10 +382,8 @@ class Domain(models.Model):
return Domain.objects.filter(domain__in=domain_parts, blocked=True).exists() return Domain.objects.filter(domain__in=domain_parts, blocked=True).exists()
def upload_store(): def upload_store() -> Storage:
return FileSystemStorage( return storages["takahe"]
location=settings.TAKAHE_MEDIA_ROOT, base_url=settings.TAKAHE_MEDIA_URL
)
def upload_namer(prefix, instance, filename): def upload_namer(prefix, instance, filename):
@ -785,22 +783,35 @@ class Identity(models.Model):
return ( return (
self.icon.url self.icon.url
if self.icon if self.icon
else self.icon_uri or settings.SITE_INFO["user_icon"] else self.icon_uri
or (settings.SITE_INFO["site_url"] + settings.SITE_INFO["user_icon"])
) )
else: else:
return f"/proxy/identity_icon/{self.pk}/" return f"/proxy/identity_icon/{self.pk}/"
def local_image_url(self) -> RelativeAbsoluteUrl | None:
"""
Returns a background image for us, returning None if there isn't one
"""
if self.image:
return AutoAbsoluteUrl(self.image.url)
elif self.image_uri:
return ProxyAbsoluteUrl(
f"/proxy/identity_image/{self.pk}/",
remote_url=self.image_uri,
)
return None
def to_mastodon_json(self, source=False): def to_mastodon_json(self, source=False):
# from activities.models import Emoji, Post missing = StaticAbsoluteUrl("img/missing.png").absolute
header_image = self.local_image_url() or missing
# missing = StaticAbsoluteUrl("img/missing.png").absolute icon_image = self.local_icon_url()
metadata_value_text = (
# metadata_value_text = ( " ".join([m["value"] for m in self.metadata]) if self.metadata else ""
# " ".join([m["value"] for m in self.metadata]) if self.metadata else "" )
# ) emojis = Emoji.emojis_from_content(
# emojis = Emoji.emojis_from_content( f"{self.name} {self.summary} {metadata_value_text}", self.domain
# f"{self.name} {self.summary} {metadata_value_text}", self.domain )
# )
renderer = ContentRenderer(local=False) renderer = ContentRenderer(local=False)
result = { result = {
"id": str(self.pk), "id": str(self.pk),
@ -809,10 +820,10 @@ class Identity(models.Model):
"url": self.absolute_profile_uri() or "", "url": self.absolute_profile_uri() or "",
"display_name": self.name or "", "display_name": self.name or "",
"note": self.summary or "", "note": self.summary or "",
"avatar": settings.SITE_INFO["site_url"] + self.local_icon_url(), "avatar": icon_image,
"avatar_static": settings.SITE_INFO["site_url"] + self.local_icon_url(), "avatar_static": icon_image,
"header": "", # settings.SITE_INFO['site_url']+ header_image if header_image else missing, "header": header_image,
"header_static": "", # settings.SITE_INFO['site_url']+header_image if header_image else missing, "header_static": header_image,
"locked": bool(self.manually_approves_followers), "locked": bool(self.manually_approves_followers),
"fields": ( "fields": (
[ [
@ -826,13 +837,13 @@ class Identity(models.Model):
if self.metadata if self.metadata
else [] else []
), ),
"emojis": [], # [emoji.to_mastodon_json() for emoji in emojis], "emojis": [emoji.to_mastodon_json() for emoji in emojis],
"bot": self.actor_type.lower() in ["service", "application"], "bot": self.actor_type.lower() in ["service", "application"],
"group": self.actor_type.lower() == "group", "group": self.actor_type.lower() == "group",
"discoverable": self.discoverable, "discoverable": self.discoverable,
"indexable": self.indexable, "indexable": self.indexable,
"suspended": False, "suspended": self.restriction == Identity.Restriction.blocked,
"limited": False, "limited": self.restriction == Identity.Restriction.limited,
"created_at": format_ld_date( "created_at": format_ld_date(
self.created.replace(hour=0, minute=0, second=0, microsecond=0) self.created.replace(hour=0, minute=0, second=0, microsecond=0)
), ),
@ -1767,6 +1778,17 @@ class Emoji(models.Model):
) )
return self.fullcode return self.fullcode
def to_mastodon_json(self):
url = self.full_url().absolute
data = {
"shortcode": self.shortcode,
"url": url,
"static_url": self.remote_url or url,
"visible_in_picker": self.public,
"category": self.category or "",
}
return data
class HashtagQuerySet(models.QuerySet): class HashtagQuerySet(models.QuerySet):
def public(self): def public(self):

View file

@ -41,6 +41,7 @@ class PreferenceSchema(Schema):
def me(request): def me(request):
accts = SocialAccount.objects.filter(user=request.user) accts = SocialAccount.objects.filter(user=request.user)
return 200, { return 200, {
# "id": str(request.user.identity.pk),
"username": request.user.username, "username": request.user.username,
"url": settings.SITE_INFO["site_url"] + request.user.url, "url": settings.SITE_INFO["site_url"] + request.user.url,
"external_acct": ( "external_acct": (