36 lines
1.1 KiB
Python
36 lines
1.1 KiB
Python
from src.lib.post import (
|
|
get_all_posts_by_artist,
|
|
)
|
|
from src.pages.artists_types import (
|
|
ArtistDisplayData,
|
|
)
|
|
from src.types.paysites import Paysite, Paysites
|
|
from src.utils.utils import offset_list, sort_dict_list_by, take
|
|
|
|
|
|
def do_artist_post_search(artist_id, service, search, o, limit):
|
|
posts = get_all_posts_by_artist(artist_id, service)
|
|
search = search.lower()
|
|
|
|
matches = []
|
|
for post in posts:
|
|
if (
|
|
search in post["content"].lower()
|
|
or search in post["title"].lower()
|
|
or search in " ".join(post["tags"] or []).lower()
|
|
):
|
|
matches.append(post)
|
|
|
|
matches = sort_dict_list_by(matches, "published", True)
|
|
|
|
return take(limit, offset_list(o, matches)), len(matches)
|
|
|
|
|
|
def make_artist_display_data(artist: dict) -> ArtistDisplayData:
|
|
service_name: str = artist["service"]
|
|
pay_site: Paysite | None = getattr(Paysites, service_name, None)
|
|
|
|
if pay_site:
|
|
return ArtistDisplayData(service=pay_site.title, href=pay_site.user.profile(artist))
|
|
raise Exception("Service not found in Paysites")
|