Skip to content

Commit

Permalink
fix: stars, test, black format, last10 wip
Browse files Browse the repository at this point in the history
  • Loading branch information
suchencjusz committed Feb 24, 2025
1 parent dec262d commit 103e025
Show file tree
Hide file tree
Showing 21 changed files with 402 additions and 199 deletions.
2 changes: 2 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[tool.black]
line-length = 120
11 changes: 4 additions & 7 deletions src/filman_crawler/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,8 @@

from filman_crawler.tasks.scrap_movie import Scraper as movie_scrapper
from filman_crawler.tasks.scrap_series import Scraper as series_scrapper
from filman_crawler.tasks.scrap_user_watched_movies import (
Scraper as user_watched_movies_scrapper,
)
from filman_crawler.tasks.scrap_user_watched_series import (
Scraper as user_watched_series_scrapper,
)
from filman_crawler.tasks.scrap_user_watched_movies import Scraper as user_watched_movies_scrapper
from filman_crawler.tasks.scrap_user_watched_series import Scraper as user_watched_series_scrapper
from filman_server.database.schemas import Task, TaskTypes

LOG_LEVEL = os.environ.get("LOG_LEVEL", "INFO")
Expand Down Expand Up @@ -60,7 +56,8 @@
TASK_TYPES = [task for task in ALLOWED_TASKS]

sentry_logging = LoggingIntegration(
level=logging.INFO, event_level=logging.ERROR # Capture info and above as breadcrumbs # Send errors as events
level=logging.INFO,
event_level=logging.ERROR, # Capture info and above as breadcrumbs # Send errors as events
)


Expand Down
10 changes: 1 addition & 9 deletions src/filman_crawler/tasks/scrap_user_watched_movies.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,7 @@

from filman_server.database.schemas import FilmWebUserWatchedMovieCreate

from .utils import (
DiscordNotifications,
FilmWeb,
Task,
Tasks,
TaskStatus,
TaskTypes,
Updaters,
)
from .utils import DiscordNotifications, FilmWeb, Task, Tasks, TaskStatus, TaskTypes, Updaters


class Scraper:
Expand Down
14 changes: 4 additions & 10 deletions src/filman_crawler/tasks/scrap_user_watched_series.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,7 @@

from filman_server.database.schemas import FilmWebUserWatchedSeriesCreate

from .utils import (
DiscordNotifications,
FilmWeb,
Task,
Tasks,
TaskStatus,
TaskTypes,
Updaters,
)
from .utils import DiscordNotifications, FilmWeb, Task, Tasks, TaskStatus, TaskTypes, Updaters


class Scraper:
Expand Down Expand Up @@ -69,7 +61,9 @@ def scrap(self, task: Task):
for series in new_series_watched:
try:
logging.debug(f"Fetching user series rate for series from filmweb: {series[0]}")
series_rate_data = self.fetch(f"https://www.filmweb.pl/api/v1/user/{task.task_job}/vote/serial/{series[0]}")
series_rate_data = self.fetch(
f"https://www.filmweb.pl/api/v1/user/{task.task_job}/vote/serial/{series[0]}"
)

if series_rate_data is None:
logging.error(f"Error fetching series rate for series: {series[0]}")
Expand Down
96 changes: 41 additions & 55 deletions src/filman_discord/endpoints/filmweb.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
import hikari
import lightbulb

from filman_discord.utils.filmweb_last10_logic import last10
from filman_discord.utils.filmweb_w2s_logic import MediaType, process_media
from filman_discord.utils.star_counter import star_emoji_counter


tracker_plugin = lightbulb.Plugin("Filmweb")


Expand All @@ -20,17 +20,30 @@ async def tracker_group(_: lightbulb.SlashContext) -> None:

@tracker_group.child
@lightbulb.option(
"typ", "film / serial", type=str, required=True, choices=["film", "serial"], default="film"
"typ",
"film / serial",
type=str,
required=True,
choices=["film", "serial"],
default="film",
)
@lightbulb.option("user", "UΕΌytkownik", type=hikari.User, required=False)
@lightbulb.command("last10", "ostatnio ocenione filmy", pass_options=True)
@lightbulb.implements(lightbulb.SlashSubCommand)
async def last10_subcommand(ctx: lightbulb.SlashContext, typ: str,) -> None:

async def last10_subcommand(
ctx: lightbulb.SlashContext,
typ: str,
user: hikari.User,
) -> None:

if user is None:
user = ctx.author

typ = "movie" if typ == "film" else "series"

#
# to do: rewrite it seperate file
#
# to do: catch 401 402 if user is not present etc. itp. itd.

async with ctx.bot.d.client_session.get(
f"http://filman_server:8000/filmweb/user/watched/movies/get_all",
Expand All @@ -42,61 +55,19 @@ async def last10_subcommand(ctx: lightbulb.SlashContext, typ: str,) -> None:
flags=hikari.MessageFlag.EPHEMERAL,
)
return

movies = await resp.json()

movies = sorted(movies, key=lambda x: datetime.strptime(x["date"], "%Y-%m-%dT%H:%M:%S"), reverse=True)

if len(movies) == 0:
embed = hikari.Embed(
title=f"Nie oceniono jeszcze ΕΌadnych filmΓ³w!",
colour=0xFF4400,
timestamp=datetime.now().astimezone(),
)
embed.set_footer(
text=f"Requested by {ctx.author}",
icon=ctx.author.display_avatar_url,
)
await ctx.respond(embed)
return
media = await resp.json()

# to do: movies != 0
last10_embed = last10(media, typ)

if len(movies) > 10:
movies = movies[0:25]
else:
movies = movies[0:len(movies)]

embed = hikari.Embed(
title=f"Ostatnio ocenione filmy",
colour=0xFFC200,
timestamp=datetime.now().astimezone(),
)

temp_star_list = ""

for movie in movies:
temp_star_list += f"{star_emoji_counter(movie['rate'])} {movie[typ]['title']} ({movie[typ]['year']})\n"

embed.add_field(
name="Filmy",
value=temp_star_list,
inline=False,
)


embed.set_footer(
text=f"Requested by {ctx.author}",
icon=ctx.author.display_avatar_url,
)

await ctx.respond(embed)
# await ctx.respond(embed)


#
#
#


@tracker_group.child
# @lightbulb.cooldown(1, 60, bucket=lightbulb.CooldownBucketType.user)
@lightbulb.option("filmweb_username", "nazwa uΕΌytkownika na filmwebie", required=True, type=str)
Expand Down Expand Up @@ -420,11 +391,26 @@ async def cancel_subcommand(ctx: lightbulb.SlashContext) -> None:
@lightbulb.option("user3", "Trzeci uΕΌytkownik", type=hikari.User, required=False)
@lightbulb.option("user2", "Drugi uΕΌytkownik", type=hikari.User, required=False)
@lightbulb.option("user1", "Pierwszy uΕΌytkownik (wymagany)", type=hikari.User, required=True)
@lightbulb.option("common", "Losuj tylko z wspΓ³lnych elemntΓ³w list", type=bool, required=False, autocomplete=False)
@lightbulb.option(
"typ", "Wybierz co chcesz losować: film / serial", type=str, required=True, choices=["film", "serial"], default="film"
"common",
"Losuj tylko z wspΓ³lnych elemntΓ³w list",
type=bool,
required=False,
autocomplete=False,
)
@lightbulb.option(
"typ",
"Wybierz co chcesz losować: film / serial",
type=str,
required=True,
choices=["film", "serial"],
default="film",
)
@lightbulb.command(
"w2s",
"Wylosuj film lub serial z listy 'chcę obejrzeć' dla użytkownika/użytkowników",
pass_options=True,
)
@lightbulb.command("w2s", "Wylosuj film lub serial z listy 'chcę obejrzeć' dla użytkownika/użytkowników", pass_options=True)
@lightbulb.implements(lightbulb.SlashSubCommand)
async def w2s_subcommand(
ctx: lightbulb.SlashContext,
Expand Down
2 changes: 1 addition & 1 deletion src/filman_discord/endpoints/info.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ async def info_basic_command(ctx: lightbulb.SlashContext) -> None:

embed.add_field(
name="Wersja i ostatnia aktualizacja",
value="`1.1.8Av` - `2025-01-05`",
value="`1.1.9v` - `2025-02-24`",
)

embed.add_field(
Expand Down
12 changes: 9 additions & 3 deletions src/filman_discord/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,9 @@ async def send_discord_notification_watched(
user_id = 0
message_destinations = []

async with bot.d.client_session.get(f"http://filman_server:8000/users/get?filmweb_id={filmweb_id}") as resp:
async with bot.d.client_session.get(
f"http://filman_server:8000/users/get?filmweb_id={filmweb_id}"
) as resp:
if not resp.ok:
return

Expand Down Expand Up @@ -216,7 +218,9 @@ async def send_discord_notification_watched(
user_id = 0
message_destinations = []

async with bot.d.client_session.get(f"http://filman_server:8000/users/get?filmweb_id={filmweb_id}") as resp:
async with bot.d.client_session.get(
f"http://filman_server:8000/users/get?filmweb_id={filmweb_id}"
) as resp:
if not resp.ok:
return

Expand Down Expand Up @@ -310,7 +314,9 @@ async def send_discord_notification_watched(
discord_id,
)

async with bot.d.client_session.get(f"http://filman_server:8000/tasks/update/status/{task_id}/completed") as resp:
async with bot.d.client_session.get(
f"http://filman_server:8000/tasks/update/status/{task_id}/completed"
) as resp:
if not resp.ok:
print(f"Error updating task status: {resp.status} {resp.reason}")

Expand Down
53 changes: 53 additions & 0 deletions src/filman_discord/utils/filmweb_last10_logic.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import hikari
import lightbulb

def last10(media: list, typ: str) -> hikari.Embed:



# movies = sorted(movies, key=lambda x: datetime.strptime(x["date"], "%Y-%m-%dT%H:%M:%S"), reverse=True)

# if len(movies) == 0:
# embed = hikari.Embed(
# title=f"Nie oceniono jeszcze ΕΌadnych filmΓ³w!",
# colour=0xFF4400,
# timestamp=datetime.now().astimezone(),
# )
# embed.set_footer(
# text=f"Requested by {ctx.author}",
# icon=ctx.author.display_avatar_url,
# )
# await ctx.respond(embed)
# return

# # to do: movies != 0

# if len(movies) > 10:
# movies = movies[0:25]
# else:
# movies = movies[0:len(movies)]

# embed = hikari.Embed(
# title=f"Ostatnio ocenione filmy",
# colour=0xFFC200,
# timestamp=datetime.now().astimezone(),
# )

# temp_star_list = ""

# for movie in movies:
# temp_star_list += f"{star_emoji_counter(movie['rate'])} {movie[typ]['title']} ({movie[typ]['year']})\n"

# embed.add_field(
# name="Filmy",
# value=temp_star_list,
# inline=False,
# )


# embed.set_footer(
# text=f"Requested by {ctx.author}",
# icon=ctx.author.display_avatar_url,
# )

# await ctx.respond(embed)
10 changes: 8 additions & 2 deletions src/filman_discord/utils/filmweb_w2s_logic.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,10 @@ class MediaType(Enum):

async def fetch_filmweb_id(user: any) -> str | None:
logger.debug(f"Fetching Filmweb ID for user: {user.id}")
response = requests.get(f"http://filman_server:8000/filmweb/user/mapping/get", params={"discord_id": user.id})
response = requests.get(
f"http://filman_server:8000/filmweb/user/mapping/get",
params={"discord_id": user.id},
)
if response.status_code == 200:
filmweb_id = response.json().get("filmweb_id")
if filmweb_id:
Expand All @@ -29,7 +32,10 @@ async def fetch_filmweb_id(user: any) -> str | None:

async def fetch_media_to_watch(filmweb_id: str, media_type: MediaType) -> dict[str, any] | None:
logger.debug(f"Fetching list of media to watch for Filmweb ID: {filmweb_id}")
response = requests.get(f"https://www.filmweb.pl/api/v1/user/{filmweb_id}/want2see/{media_type.value}", timeout=5)
response = requests.get(
f"https://www.filmweb.pl/api/v1/user/{filmweb_id}/want2see/{media_type.value}",
timeout=5,
)
if response.status_code == 200:
return response.json()
else:
Expand Down
16 changes: 8 additions & 8 deletions src/filman_discord/utils/star_counter.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
def star_emoji_counter(stars: float) -> str:
"""
Convert float rating to emoji string using moon phases.
:param stars: float rating between 0.0 and 10.0
:return: str with 10 moon emoji representing the rating
"""
Expand All @@ -12,26 +12,26 @@ def star_emoji_counter(stars: float) -> str:
stars = round(stars, 1)
stars_full = int(stars)
decimal_part = round(stars - stars_full, 1)

full = "πŸŒ•"
near_full = "πŸŒ–"
half = "πŸŒ—"
near_zero = "🌘"
zero = "πŸŒ‘"

result = ""

result += full * stars_full

if decimal_part > 0:
if decimal_part >= 0.75:
result += near_full
elif decimal_part >= 0.3:
result += half
elif decimal_part > 0:
result += near_zero

remaining = 10 - len(result)
result += zero * remaining
return result

return result
Loading

0 comments on commit 103e025

Please sign in to comment.