@@ -144,11 +144,20 @@ def _get_access_grants(
144144 ) -> list [AccessGrantModel ]:
145145 return AccessGrants .get_grants_by_resource ("model" , model_id , db = db )
146146
147- def _to_model_model (self , model : Model , db : Optional [Session ] = None ) -> ModelModel :
147+ def _to_model_model (
148+ self ,
149+ model : Model ,
150+ access_grants : Optional [list [AccessGrantModel ]] = None ,
151+ db : Optional [Session ] = None ,
152+ ) -> ModelModel :
148153 model_data = ModelModel .model_validate (model ).model_dump (
149154 exclude = {"access_grants" }
150155 )
151- model_data ["access_grants" ] = self ._get_access_grants (model_data ["id" ], db = db )
156+ model_data ["access_grants" ] = (
157+ access_grants
158+ if access_grants is not None
159+ else self ._get_access_grants (model_data ["id" ], db = db )
160+ )
152161 return ModelModel .model_validate (model_data )
153162
154163 def insert_new_model (
@@ -181,26 +190,38 @@ def insert_new_model(
181190
182191 def get_all_models (self , db : Optional [Session ] = None ) -> list [ModelModel ]:
183192 with get_db_context (db ) as db :
193+ all_models = db .query (Model ).all ()
194+ model_ids = [model .id for model in all_models ]
195+ grants_map = AccessGrants .get_grants_by_resources ("model" , model_ids , db = db )
184196 return [
185- self ._to_model_model (model , db = db ) for model in db .query (Model ).all ()
197+ self ._to_model_model (
198+ model , access_grants = grants_map .get (model .id , []), db = db
199+ )
200+ for model in all_models
186201 ]
187202
188203 def get_models (self , db : Optional [Session ] = None ) -> list [ModelUserResponse ]:
189204 with get_db_context (db ) as db :
190205 all_models = db .query (Model ).filter (Model .base_model_id != None ).all ()
191206
192207 user_ids = list (set (model .user_id for model in all_models ))
208+ model_ids = [model .id for model in all_models ]
193209
194210 users = Users .get_users_by_user_ids (user_ids , db = db ) if user_ids else []
195211 users_dict = {user .id : user for user in users }
212+ grants_map = AccessGrants .get_grants_by_resources ("model" , model_ids , db = db )
196213
197214 models = []
198215 for model in all_models :
199216 user = users_dict .get (model .user_id )
200217 models .append (
201218 ModelUserResponse .model_validate (
202219 {
203- ** self ._to_model_model (model , db = db ).model_dump (),
220+ ** self ._to_model_model (
221+ model ,
222+ access_grants = grants_map .get (model .id , []),
223+ db = db ,
224+ ).model_dump (),
204225 "user" : user .model_dump () if user else None ,
205226 }
206227 )
@@ -209,9 +230,16 @@ def get_models(self, db: Optional[Session] = None) -> list[ModelUserResponse]:
209230
210231 def get_base_models (self , db : Optional [Session ] = None ) -> list [ModelModel ]:
211232 with get_db_context (db ) as db :
233+ all_models = (
234+ db .query (Model ).filter (Model .base_model_id == None ).all ()
235+ )
236+ model_ids = [model .id for model in all_models ]
237+ grants_map = AccessGrants .get_grants_by_resources ("model" , model_ids , db = db )
212238 return [
213- self ._to_model_model (model , db = db )
214- for model in db .query (Model ).filter (Model .base_model_id == None ).all ()
239+ self ._to_model_model (
240+ model , access_grants = grants_map .get (model .id , []), db = db
241+ )
242+ for model in all_models
215243 ]
216244
217245 def get_models_by_user_id (
@@ -325,11 +353,18 @@ def search_models(
325353
326354 items = query .all ()
327355
356+ model_ids = [model .id for model , _ in items ]
357+ grants_map = AccessGrants .get_grants_by_resources ("model" , model_ids , db = db )
358+
328359 models = []
329360 for model , user in items :
330361 models .append (
331362 ModelUserResponse (
332- ** self ._to_model_model (model , db = db ).model_dump (),
363+ ** self ._to_model_model (
364+ model ,
365+ access_grants = grants_map .get (model .id , []),
366+ db = db ,
367+ ).model_dump (),
333368 user = (
334369 UserResponse (** UserModel .model_validate (user ).model_dump ())
335370 if user
@@ -356,7 +391,18 @@ def get_models_by_ids(
356391 try :
357392 with get_db_context (db ) as db :
358393 models = db .query (Model ).filter (Model .id .in_ (ids )).all ()
359- return [self ._to_model_model (model , db = db ) for model in models ]
394+ model_ids = [model .id for model in models ]
395+ grants_map = AccessGrants .get_grants_by_resources (
396+ "model" , model_ids , db = db
397+ )
398+ return [
399+ self ._to_model_model (
400+ model ,
401+ access_grants = grants_map .get (model .id , []),
402+ db = db ,
403+ )
404+ for model in models
405+ ]
360406 except Exception :
361407 return []
362408
@@ -465,9 +511,18 @@ def sync_models(
465511
466512 db .commit ()
467513
514+ all_models = db .query (Model ).all ()
515+ model_ids = [model .id for model in all_models ]
516+ grants_map = AccessGrants .get_grants_by_resources (
517+ "model" , model_ids , db = db
518+ )
468519 return [
469- self ._to_model_model (model , db = db )
470- for model in db .query (Model ).all ()
520+ self ._to_model_model (
521+ model ,
522+ access_grants = grants_map .get (model .id , []),
523+ db = db ,
524+ )
525+ for model in all_models
471526 ]
472527 except Exception as e :
473528 log .exception (f"Error syncing models for user { user_id } : { e } " )
0 commit comments