2424from lib .core .exceptions import AppException
2525from lib .core .reporter import Reporter
2626from lib .core .repositories import BaseManageableRepository
27- from lib .core .usecases .base import BaseInteractiveUseCase
2827from lib .core .service_types import UploadAnnotationAuthData
2928from lib .core .serviceproviders import SuerannotateServiceProvider
29+ from lib .core .types import PriorityScore
3030from lib .core .usecases .base import BaseReportableUseCae
3131from lib .core .usecases .images import GetBulkImages
3232from lib .core .usecases .images import ValidateAnnotationUseCase
3333from lib .core .video_convertor import VideoFrameGenerator
3434from superannotate .logger import get_default_logger
3535from superannotate_schemas .validators import AnnotationValidators
36- from lib . core . types import PriorityScore
36+
3737
3838logger = get_default_logger ()
3939
@@ -626,19 +626,20 @@ def execute(self):
626626 return self ._response
627627
628628
629- class UploadPriorityScoresUseCase (BaseInteractiveUseCase ):
629+ class UploadPriorityScoresUseCase (BaseReportableUseCae ):
630630
631631 CHUNK_SIZE = 100
632632
633633 def __init__ (
634634 self ,
635+ reporter ,
635636 project : ProjectEntity ,
636637 folder : FolderEntity ,
637638 scores : List [PriorityScore ],
638639 project_folder_name : str ,
639640 backend_service_provider : SuerannotateServiceProvider
640641 ):
641- super ().__init__ ()
642+ super ().__init__ (reporter )
642643 self ._project = project
643644 self ._folder = folder
644645 self ._scores = scores
@@ -658,29 +659,37 @@ def get_clean_priority(priority):
658659 priority = float (str (float (priority )).split ('.' )[0 ] + '.' + str (float (priority )).split ('.' )[1 ][:5 ])
659660 return priority
660661
661- def execute (self ):
662- priorities = []
663- to_send = []
664- for i in self ._scores :
665- priorities .append ({
666- "name" : i .name ,
667- "entropy_value" : self .get_clean_priority (i .priority )
668- })
669- to_send .append (i .name )
670-
671- uploaded = []
672- for i in range (0 , len (priorities ), self .CHUNK_SIZE ):
673- res = self ._client .upload_priority_scores (
674- team_id = self ._project .team_id ,
675- project_id = self ._project .uuid ,
676- folder_id = self ._folder .uuid ,
677- priorities = priorities [i : i + self .CHUNK_SIZE ], # noqa: E203
678- )
679- uploaded += res ["data" ]
680- yield len (to_send [:i + self .CHUNK_SIZE ])
662+ @property
663+ def folder_path (self ):
664+ return f"{ self ._project .name } { f'/{ self ._folder .name } ' if self ._folder .name != 'root' else '' } "
681665
682- uploaded = [i ["name" ] for i in uploaded ]
683- skipped = list (set (to_send ) - set (uploaded ))
684- self ._response .data = (uploaded , skipped )
666+ def execute (self ):
667+ if self .is_valid ():
668+ priorities = []
669+ initial_scores = []
670+ for i in self ._scores :
671+ priorities .append ({
672+ "name" : i .name ,
673+ "entropy_value" : self .get_clean_priority (i .priority )
674+ })
675+ initial_scores .append (i .name )
676+ uploaded_score_names = []
677+ self .reporter .log_info (f"Uploading priority scores for { len (priorities )} item(s) from { self .folder_path } ." )
678+ iterations = range (0 , len (priorities ), self .CHUNK_SIZE )
679+ self .reporter .start_progress (iterations , "Uploading priority scores" )
680+ if iterations :
681+ for i in iterations :
682+ priorities_to_upload = priorities [i : i + self .CHUNK_SIZE ] # noqa: E203
683+ res = self ._client .upload_priority_scores (
684+ team_id = self ._project .team_id ,
685+ project_id = self ._project .uuid ,
686+ folder_id = self ._folder .uuid ,
687+ priorities = priorities_to_upload
688+ )
689+ self .reporter .update_progress (len (priorities_to_upload ))
690+ uploaded_score_names .extend (list (map (lambda x : x ["name" ], res .get ("data" , []))))
691+ skipped_score_names = list (set (initial_scores ) - set (uploaded_score_names ))
692+ self ._response .data = (uploaded_score_names , skipped_score_names )
693+ else :
694+ self .reporter .warning_messages ("Empty scores." )
685695 return self ._response
686-
0 commit comments