refactor: extract common embed checking logic

This commit is contained in:
2025-12-20 20:51:45 +01:00
parent a818df4a6c
commit 0e91c95e9b

View File

@@ -19,27 +19,34 @@ class PostAnalyzer:
'app.bsky.embed.record_with_media' 'app.bsky.embed.record_with_media'
} }
@staticmethod
def _get_embed(post_record):
return getattr(post_record, 'embed', None)
@staticmethod
def _get_embed_type_base(embed):
embed_type = getattr(embed, 'py_type', None)
if embed_type:
return embed_type.split('#')[0]
return None
@staticmethod @staticmethod
def has_media(post_record): def has_media(post_record):
embed = getattr(post_record, 'embed', None) embed = PostAnalyzer._get_embed(post_record)
if not embed: if not embed:
return False return False
embed_type = getattr(embed, 'py_type', None) embed_type_base = PostAnalyzer._get_embed_type_base(embed)
if embed_type: if embed_type_base:
embed_type_base = embed_type.split('#')[0]
if embed_type_base in PostAnalyzer.MEDIA_TYPES: if embed_type_base in PostAnalyzer.MEDIA_TYPES:
return True return True
if embed_type_base in PostAnalyzer.QUOTE_WITH_MEDIA_TYPES: if embed_type_base in PostAnalyzer.QUOTE_WITH_MEDIA_TYPES:
media = getattr(embed, 'media', None) media = getattr(embed, 'media', None)
if media: if media:
media_type = getattr(media, 'py_type', None) media_type_base = PostAnalyzer._get_embed_type_base(media)
if media_type: if media_type_base and media_type_base in PostAnalyzer.MEDIA_TYPES:
media_type_base = media_type.split('#')[0] return True
if media_type_base in PostAnalyzer.MEDIA_TYPES:
return True
for attr in ('images', 'video', 'external'): for attr in ('images', 'video', 'external'):
if hasattr(embed, attr): if hasattr(embed, attr):
@@ -51,15 +58,13 @@ class PostAnalyzer:
@staticmethod @staticmethod
def has_quote(post_record): def has_quote(post_record):
embed = getattr(post_record, 'embed', None) embed = PostAnalyzer._get_embed(post_record)
if not embed: if not embed:
return False return False
embed_type = getattr(embed, 'py_type', None) embed_type_base = PostAnalyzer._get_embed_type_base(embed)
if embed_type: if embed_type_base and embed_type_base in PostAnalyzer.QUOTE_TYPES:
embed_type_base = embed_type.split('#')[0] return True
if embed_type_base in PostAnalyzer.QUOTE_TYPES:
return True
return (hasattr(embed, 'record') or return (hasattr(embed, 'record') or
(isinstance(embed, dict) and embed.get('record'))) (isinstance(embed, dict) and embed.get('record')))