@@ -114,6 +114,20 @@ def display_progress_bar(self, line: str):
114114 """Display and update the progress bar for the given line."""
115115 percentage_done = None
116116 result = None
117+ # create the progress bar
118+ if self .progress_bar == None :
119+ self .progress_bar = ProgressBar (
120+ value = 1 / 100 ,
121+ width = 500 ,
122+ bar_height = 32 ,
123+ color = "#00d886" ,
124+ bgcolor = "#eeeeee" ,
125+ )
126+ # text to display the percentage
127+ self .percentage_text = Text ("1%" )
128+ self ._container .content .controls .append (
129+ Row ([self .percentage_text , self .progress_bar ])
130+ )
117131 # get the progress numbers from the output lines
118132 if (type (line ) == str ) and line .strip ():
119133 result = re .search (
@@ -122,23 +136,29 @@ def display_progress_bar(self, line: str):
122136 )
123137 if result :
124138 if result .group (2 ):
125- percentage_done = 100
139+ percentage_done = 99
126140 elif result .group (1 ):
127141 percentage_done = int (result .group (1 ))
142+ if percentage_done == 0 :
143+ percentage_done = 1
144+ elif percentage_done == 100 :
145+ percentage_done = 99
128146
129- # create the progress bar on first occurrence
130- if percentage_done == 0 :
131- self .progress_bar = ProgressBar (
132- width = 500 , bar_height = 32 , color = "#00d886" , bgcolor = "#eeeeee"
133- )
134- self .percentage_text = Text (f"{ percentage_done } %" )
135- self ._container .content .controls .append (
136- Row ([self .percentage_text , self .progress_bar ])
137- )
138147 # update the progress bar
139- if self .progress_bar :
140- self .progress_bar .value = percentage_done / 100
141- self .percentage_text .value = f"{ percentage_done } %"
148+ self .set_progress_bar (percentage_done )
149+
150+ def set_progress_bar (self , percentage_done : int ):
151+ """Set the progress bar to the given percentage.
152+
153+ Args:
154+ percentage_done (int): Percentage of the progress bar to be filled.
155+ """
156+ assert (
157+ percentage_done >= 0 and percentage_done <= 100
158+ ), "Percentage must be between 0 and 100"
159+ if self .progress_bar :
160+ self .progress_bar .value = percentage_done / 100
161+ self .percentage_text .value = f"{ percentage_done } %"
142162
143163 def display_progress_ring (
144164 self ,
0 commit comments