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
@@ -597,19 +597,20 @@ def execute(self):
597597 return self ._response
598598
599599
600- class UploadPriorityScoresUseCase (BaseInteractiveUseCase ):
600+ class UploadPriorityScoresUseCase (BaseReportableUseCae ):
601601
602602 CHUNK_SIZE = 100
603603
604604 def __init__ (
605605 self ,
606+ reporter ,
606607 project : ProjectEntity ,
607608 folder : FolderEntity ,
608609 scores : List [PriorityScore ],
609610 project_folder_name : str ,
610611 backend_service_provider : SuerannotateServiceProvider
611612 ):
612- super ().__init__ ()
613+ super ().__init__ (reporter )
613614 self ._project = project
614615 self ._folder = folder
615616 self ._scores = scores
@@ -629,29 +630,37 @@ def get_clean_priority(priority):
629630 priority = float (str (float (priority )).split ('.' )[0 ] + '.' + str (float (priority )).split ('.' )[1 ][:5 ])
630631 return priority
631632
632- def execute (self ):
633- priorities = []
634- to_send = []
635- for i in self ._scores :
636- priorities .append ({
637- "name" : i .name ,
638- "entropy_value" : self .get_clean_priority (i .priority )
639- })
640- to_send .append (i .name )
641-
642- uploaded = []
643- for i in range (0 , len (priorities ), self .CHUNK_SIZE ):
644- res = self ._client .upload_priority_scores (
645- team_id = self ._project .team_id ,
646- project_id = self ._project .uuid ,
647- folder_id = self ._folder .uuid ,
648- priorities = priorities [i : i + self .CHUNK_SIZE ], # noqa: E203
649- )
650- uploaded += res ["data" ]
651- yield len (to_send [:i + self .CHUNK_SIZE ])
633+ @property
634+ def folder_path (self ):
635+ return f"{ self ._project .name } { f'/{ self ._folder .name } ' if self ._folder .name != 'root' else '' } "
652636
653- uploaded = [i ["name" ] for i in uploaded ]
654- skipped = list (set (to_send ) - set (uploaded ))
655- self ._response .data = (uploaded , skipped )
637+ def execute (self ):
638+ if self .is_valid ():
639+ priorities = []
640+ initial_scores = []
641+ for i in self ._scores :
642+ priorities .append ({
643+ "name" : i .name ,
644+ "entropy_value" : self .get_clean_priority (i .priority )
645+ })
646+ initial_scores .append (i .name )
647+ uploaded_score_names = []
648+ self .reporter .log_info (f"Uploading priority scores for { len (priorities )} item(s) from { self .folder_path } ." )
649+ iterations = range (0 , len (priorities ), self .CHUNK_SIZE )
650+ self .reporter .start_progress (iterations , "Uploading priority scores" )
651+ if iterations :
652+ for i in iterations :
653+ priorities_to_upload = priorities [i : i + self .CHUNK_SIZE ] # noqa: E203
654+ res = self ._client .upload_priority_scores (
655+ team_id = self ._project .team_id ,
656+ project_id = self ._project .uuid ,
657+ folder_id = self ._folder .uuid ,
658+ priorities = priorities_to_upload
659+ )
660+ self .reporter .update_progress (len (priorities_to_upload ))
661+ uploaded_score_names .extend (list (map (lambda x : x ["name" ], res .get ("data" , []))))
662+ skipped_score_names = list (set (initial_scores ) - set (uploaded_score_names ))
663+ self ._response .data = (uploaded_score_names , skipped_score_names )
664+ else :
665+ self .reporter .warning_messages ("Empty scores." )
656666 return self ._response
657-
0 commit comments