Modify emoji loader for cache-optimized return value (#371)

Also fixes an apparent bug in `imageify_emojis.replacer` where `include_local` was not being used correctly (previous code path never returned anything.
This commit is contained in:
Corry Haines 2023-01-07 14:19:47 -08:00 committed by GitHub
parent db186fcd73
commit d8cee4097f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 14 deletions

View file

@ -146,15 +146,18 @@ class Emoji(StatorModel):
@classmethod @classmethod
@cached(cache=TTLCache(maxsize=1000, ttl=60)) @cached(cache=TTLCache(maxsize=1000, ttl=60))
def get_by_domain(cls, shortcode, domain: Domain | None) -> "Emoji": def get_by_domain(cls, shortcode, domain: Domain | None) -> "Emoji | None":
""" """
Given an emoji shortcode and optional domain, looks up the single Given an emoji shortcode and optional domain, looks up the single
emoji and returns it. Raises Emoji.DoesNotExist if there isn't one. emoji and returns it. Raises Emoji.DoesNotExist if there isn't one.
""" """
try:
if domain is None or domain.local: if domain is None or domain.local:
return cls.objects.get(local=True, shortcode=shortcode) return cls.objects.get(local=True, shortcode=shortcode)
else: else:
return cls.objects.get(domain=domain, shortcode=shortcode) return cls.objects.get(domain=domain, shortcode=shortcode)
except Emoji.DoesNotExist:
return None
@property @property
def fullcode(self): def fullcode(self):

View file

@ -214,16 +214,15 @@ class ContentRenderer:
shortcode = match.group(1).lower() shortcode = match.group(1).lower()
if shortcode in cached_emojis: if shortcode in cached_emojis:
return cached_emojis[shortcode].as_html() return cached_emojis[shortcode].as_html()
try:
emoji = Emoji.get_by_domain(shortcode, identity.domain) emoji = Emoji.get_by_domain(shortcode, identity.domain)
if emoji.is_usable: if emoji and emoji.is_usable:
return emoji.as_html() return emoji.as_html()
except Emoji.DoesNotExist: elif not emoji and include_local:
if include_local: emoji = Emoji.get_by_domain(shortcode, None)
try: if emoji:
return Emoji.get_by_domain(shortcode, identity.domain).as_html() return emoji.as_html()
except Emoji.DoesNotExist:
pass
return match.group() return match.group()
return Emoji.emoji_regex.sub(replacer, html) return Emoji.emoji_regex.sub(replacer, html)