@@ -266,38 +266,21 @@ def update_user_activity(
266266 )
267267 res .raise_for_status ()
268268
269- def _get_score_item (self , item : Union [int , str ], project_id : int , folder_id : int ):
270- if isinstance (item , int ):
271- item = self .service_provider .item_service .get (
272- project_id = project_id , item_id = item
273- ).data
274- else :
275- items = self .service_provider .item_service .list (
276- project_id , folder_id , Filter ("name" , item , OperatorEnum .EQ )
277- )
278- item = next (iter (items ), None )
279- if not item :
280- raise AppException ("Item not found." )
281- return item
282-
283269 def get_user_scores (
284270 self ,
285271 project : ProjectEntity ,
286- folder : FolderEntity ,
287- item : Union [int , str ],
272+ item : BaseItemEntity ,
288273 scored_user : str ,
289274 provided_score_names : Optional [List [str ]] = None ,
290275 ):
291- item = self ._get_score_item (item , project .id , folder .id )
292-
293276 score_fields_res = self .service_provider .work_management .list_scores ()
294277
295278 # validate provided score names
296279 all_score_names = [s .name for s in score_fields_res .data ]
297280 if provided_score_names and set (provided_score_names ) - set (all_score_names ):
298281 raise AppException ("Please provide valid score names." )
299282
300- score_id_field_options_map = {s .id : s for s in score_fields_res .data }
283+ score_id_form_entity_map = {s .id : s for s in score_fields_res .data }
301284
302285 score_values = self .service_provider .telemetry_scoring .get_score_values (
303286 project_id = project .id , item_id = item .id , user_id = scored_user
@@ -306,18 +289,18 @@ def get_user_scores(
306289
307290 scores = []
308291 for s_id , s_values in score_id_values_map .items ():
309- score_field = score_id_field_options_map .get (s_id )
310- if score_field :
292+ score_entity = score_id_form_entity_map .get (s_id )
293+ if score_entity :
311294 score = ScoreEntity (
312295 id = s_id ,
313- name = score_field .name ,
296+ name = score_entity .name ,
314297 value = s_values .value ,
315298 weight = s_values .weight ,
316- createdAt = score_field .createdAt ,
317- updatedAt = score_field .updatedAt ,
299+ createdAt = score_entity .createdAt ,
300+ updatedAt = score_entity .updatedAt ,
318301 )
319302 if provided_score_names :
320- if score_field .name in provided_score_names :
303+ if score_entity .name in provided_score_names :
321304 scores .append (score )
322305 else :
323306 scores .append (score )
@@ -352,37 +335,33 @@ def _validate_scores(
352335 def set_user_scores (
353336 self ,
354337 project : ProjectEntity ,
355- folder : FolderEntity ,
356- item : Union [int , str ],
338+ item : BaseItemEntity ,
357339 scored_user : str ,
358340 scores : List [Dict [str , Any ]],
359341 ):
360- item = self ._get_score_item (item , project .id , folder .id )
361-
362- filters = {"email" : scored_user }
363- users = self .list_users (project = project , ** filters )
342+ users = self .list_users (project = project , email = scored_user )
364343 if not users :
365- raise AppException ("Please provide a valid email assigned to the project ." )
344+ raise AppException ("User not found ." )
366345 user = users [0 ]
367- user_role = user .role
368- user . role = self .service_provider .get_role_name (project , int (user_role ))
346+ role_id = user .role
347+ role_name = self .service_provider .get_role_name (project , int (role_id ))
369348
370- score_fields_res = self . service_provider . work_management . list_scores ()
371- all_score_names = [ s .name for s in score_fields_res . data ]
372- score_name_field_options_map = { s . name : s for s in score_fields_res . data }
349+ score_name_field_options_map = {
350+ s .name : s for s in self . service_provider . work_management . list_scores (). data
351+ }
373352
374353 # get validate scores
375354 scores : List [ScorePayloadEntity ] = self ._validate_scores (
376- scores , all_score_names
355+ scores , list ( score_name_field_options_map . keys ())
377356 )
378357
379358 scores_to_create : List [dict ] = []
380359 for s in scores :
381360 score_to_create = {
382361 "item_id" : item .id ,
383362 "score_id" : score_name_field_options_map [s .name ].id ,
384- "user_role_name" : user . role ,
385- "user_role" : user_role ,
363+ "user_role_name" : role_name ,
364+ "user_role" : role_id ,
386365 "user_id" : user .email ,
387366 "value" : s .value ,
388367 "weight" : s .weight ,
@@ -1488,14 +1467,7 @@ def get_project_folder_by_path(
14881467 self , path : Union [str , Path ]
14891468 ) -> Tuple [ProjectEntity , FolderEntity ]:
14901469 project_name , folder_name = extract_project_folder (path )
1491- return self .get_project_folder (project_name , folder_name )
1492-
1493- def get_project_folder (
1494- self , project_name : str , folder_name : str = None
1495- ) -> Tuple [ProjectEntity , FolderEntity ]:
1496- project = self .get_project (project_name )
1497- folder = self .get_folder (project , folder_name )
1498- return project , folder
1470+ return self .get_project_folder ((project_name , folder_name ))
14991471
15001472 def get_project (self , name : str ) -> ProjectEntity :
15011473 project = self .projects .get_by_name (name ).data
@@ -1865,3 +1837,32 @@ def query_items_count(self, project_name: str, query: str = None) -> int:
18651837 if response .errors :
18661838 raise AppException (response .errors )
18671839 return response .data ["count" ]
1840+
1841+ def get_project_folder (
1842+ self , path : Union [str , Tuple [int , int ], Tuple [str , str ]]
1843+ ) -> Tuple [ProjectEntity , Optional [FolderEntity ]]:
1844+ if isinstance (path , str ):
1845+ project_name , folder_name = extract_project_folder (path )
1846+ project = self .get_project (project_name )
1847+ return project , self .get_folder (project , folder_name )
1848+
1849+ if isinstance (path , tuple ) and len (path ) == 2 :
1850+ project_pk , folder_pk = path
1851+ if all (isinstance (x , int ) for x in path ):
1852+ return (
1853+ self .get_project_by_id (project_pk ).data ,
1854+ self .get_folder_by_id (folder_pk , project_pk ).data ,
1855+ )
1856+ if all (isinstance (x , str ) for x in path ):
1857+ project = self .get_project (project_pk )
1858+ return project , self .get_folder (project , folder_pk )
1859+
1860+ raise AppException ("Provided project param is not valid." )
1861+
1862+ def get_item (
1863+ self , project : ProjectEntity , folder : FolderEntity , item : Union [int , str ]
1864+ ) -> BaseItemEntity :
1865+ if isinstance (item , int ):
1866+ return self .get_item_by_id (item_id = item , project = project )
1867+ else :
1868+ return self .items .get_by_name (project , folder , item )
0 commit comments