44from fastapi import HTTPException
55from loguru import logger
66
7- from app .api .endpoints .manifest import get_config_id
87from app .core .config import settings
9- from app .core .constants import DEFAULT_MAX_ITEMS , DEFAULT_MIN_ITEMS
8+ from app .core .constants import DEFAULT_CATALOG_LIMIT , DEFAULT_MIN_ITEMS
109from app .core .settings import UserSettings , get_default_settings
1110from app .models .taste_profile import TasteProfile
1211from app .services .catalog_updater import catalog_updater
@@ -85,9 +84,6 @@ async def get_catalog(
8584 )
8685 whitelist = await integration_service .get_genre_whitelist (profile , content_type ) if profile else set ()
8786
88- # Get catalog limits
89- min_items , max_items = self ._get_catalog_limits (catalog_id , user_settings )
90-
9187 # Route to appropriate recommendation service
9288 recommendations = await self ._get_recommendations (
9389 catalog_id = catalog_id ,
@@ -98,16 +94,16 @@ async def get_catalog(
9894 watched_imdb = watched_imdb ,
9995 whitelist = whitelist ,
10096 library_items = library_items ,
101- max_items = max_items ,
97+ limit = DEFAULT_CATALOG_LIMIT ,
10298 )
10399
104- # Pad if needed
105- # TODO: This is risky because it can fetch too many unrelated items.
106- if recommendations and len (recommendations ) < PAD_RECOMMENDATIONS_THRESHOLD :
100+ # Pad if needed to meet minimum of 8 items
101+ # # TODO: This is risky because it can fetch too many unrelated items.
102+ if recommendations and len (recommendations ) < DEFAULT_MIN_ITEMS :
107103 recommendations = await pad_to_min (
108104 content_type ,
109105 recommendations ,
110- PAD_RECOMMENDATIONS_TARGET ,
106+ DEFAULT_MIN_ITEMS ,
111107 services ["tmdb" ],
112108 user_settings ,
113109 watched_tmdb ,
@@ -195,35 +191,6 @@ def _initialize_services(self, language: str, user_settings: UserSettings) -> di
195191 "all_based" : AllBasedService (tmdb_service , user_settings ),
196192 }
197193
198- def _get_catalog_limits (self , catalog_id : str , user_settings : UserSettings ) -> tuple [int , int ]:
199- try :
200- cfg_id = get_config_id ({"id" : catalog_id })
201- except Exception :
202- cfg_id = catalog_id
203-
204- try :
205- cfg = next ((c for c in user_settings .catalogs if c .id == cfg_id ), None )
206- if cfg and hasattr (cfg , "min_items" ) and hasattr (cfg , "max_items" ):
207- min_items = int (cfg .min_items or DEFAULT_MIN_ITEMS )
208- max_items = int (cfg .max_items or DEFAULT_MAX_ITEMS )
209- else :
210- min_items , max_items = DEFAULT_MIN_ITEMS , DEFAULT_MAX_ITEMS
211- except Exception :
212- min_items , max_items = DEFAULT_MIN_ITEMS , DEFAULT_MAX_ITEMS
213-
214- # Enforce caps
215- try :
216- min_items = max (1 , min (DEFAULT_MIN_ITEMS , int (min_items )))
217- max_items = max (min_items , min (DEFAULT_MAX_ITEMS , int (max_items )))
218- except (ValueError , TypeError ):
219- logger .warning (
220- "Invalid min/max items values. Falling back to defaults. "
221- f"min_items={ min_items } , max_items={ max_items } "
222- )
223- min_items , max_items = DEFAULT_MIN_ITEMS , DEFAULT_MAX_ITEMS
224-
225- return min_items , max_items
226-
227194 async def _get_recommendations (
228195 self ,
229196 catalog_id : str ,
@@ -234,7 +201,7 @@ async def _get_recommendations(
234201 watched_imdb : set [str ],
235202 whitelist : set [int ],
236203 library_items : dict ,
237- max_items : int ,
204+ limit : int ,
238205 ) -> list [dict [str , Any ]]:
239206 """Route to appropriate recommendation service based on catalog ID."""
240207 # Item-based recommendations
@@ -255,7 +222,7 @@ async def _get_recommendations(
255222 content_type = content_type ,
256223 watched_tmdb = watched_tmdb ,
257224 watched_imdb = watched_imdb ,
258- limit = max_items ,
225+ limit = limit ,
259226 whitelist = whitelist ,
260227 )
261228 logger .info (f"Found { len (recommendations )} recommendations for item { item_id } " )
@@ -270,7 +237,7 @@ async def _get_recommendations(
270237 profile = profile ,
271238 watched_tmdb = watched_tmdb ,
272239 watched_imdb = watched_imdb ,
273- limit = max_items ,
240+ limit = limit ,
274241 whitelist = whitelist ,
275242 )
276243 logger .info (f"Found { len (recommendations )} recommendations for theme { catalog_id } " )
@@ -285,7 +252,7 @@ async def _get_recommendations(
285252 content_type = content_type ,
286253 watched_tmdb = watched_tmdb ,
287254 watched_imdb = watched_imdb ,
288- limit = max_items ,
255+ limit = limit ,
289256 )
290257 else :
291258 recommendations = []
@@ -302,7 +269,7 @@ async def _get_recommendations(
302269 library_items = library_items ,
303270 watched_tmdb = watched_tmdb ,
304271 watched_imdb = watched_imdb ,
305- limit = max_items ,
272+ limit = limit ,
306273 )
307274 else :
308275 recommendations = []
@@ -318,7 +285,7 @@ async def _get_recommendations(
318285 watched_tmdb = watched_tmdb ,
319286 watched_imdb = watched_imdb ,
320287 whitelist = whitelist ,
321- limit = max_items ,
288+ limit = limit ,
322289 item_type = item_type ,
323290 profile = profile ,
324291 )
0 commit comments