ocean-data-factory-sweden / kso

Notebooks to upload/download marine footage, connect to a citizen science project, train machine learning models and publish marine biological observations.
GNU General Public License v3.0
4 stars 12 forks source link

Tut 6 and 9 Issue with choosing footage in Alvis #381

Closed Bergylta closed 3 months ago

Bergylta commented 3 months ago

šŸ› Bug

A clear and concise description of what the bug is.

To Reproduce (REQUIRED)

Input: Choose footage: Existing footage choosen footage: gp_greb_c_1 (has tested on others as well, same result)

pp.choose_footage()

Output:

AttributeError                            Traceback (most recent call last)
File ~/.local/lib/python3.8/site-packages/ipywidgets/widgets/widget.py:756, in Widget._handle_msg(self, msg)
    754         if 'buffer_paths' in data:
    755             _put_buffers(state, data['buffer_paths'], msg['buffers'])
--> 756         self.set_state(state)
    758 # Handle a state request.
    759 elif method == 'request_state':

File ~/.local/lib/python3.8/site-packages/ipywidgets/widgets/widget.py:625, in Widget.set_state(self, sync_data)
    622 if name in self.keys:
    623     from_json = self.trait_metadata(name, 'from_json',
    624                                     self._trait_from_json)
--> 625     self.set_trait(name, from_json(sync_data[name], self))

File /usr/lib/python3.8/contextlib.py:120, in _GeneratorContextManager.__exit__(self, type, value, traceback)
    118 if type is None:
    119     try:
--> 120         next(self.gen)
    121     except StopIteration:
    122         return False

File /usr/local/lib/python3.8/dist-packages/traitlets/traitlets.py:1502, in HasTraits.hold_trait_notifications(self)
   1500 for changes in cache.values():
   1501     for change in changes:
-> 1502         self.notify_change(change)

File ~/.local/lib/python3.8/site-packages/ipywidgets/widgets/widget.py:686, in Widget.notify_change(self, change)
    683     if name in self.keys and self._should_send_property(name, getattr(self, name)):
    684         # Send new state to front-end
    685         self.send_state(key=name)
--> 686 super(Widget, self).notify_change(change)

File /usr/local/lib/python3.8/dist-packages/traitlets/traitlets.py:1517, in HasTraits.notify_change(self, change)
   1515 def notify_change(self, change):
   1516     """Notify observers of a change event"""
-> 1517     return self._notify_observers(change)

File /usr/local/lib/python3.8/dist-packages/traitlets/traitlets.py:1564, in HasTraits._notify_observers(self, event)
   1561 elif isinstance(c, EventHandler) and c.name is not None:
   1562     c = getattr(self, c.name)
-> 1564 c(event)

File ~/.local/lib/python3.8/site-packages/ipywidgets/widgets/widget_selection.py:363, in _MultipleSelection._propagate_index(self, change)
    361     self.label = label
    362 if self.value != value:
--> 363     self.value = value

File /usr/local/lib/python3.8/dist-packages/traitlets/traitlets.py:732, in TraitType.__set__(self, obj, value)
    730     raise TraitError('The "%s" trait is read-only.' % self.name)
    731 else:
--> 732     self.set(obj, value)

File /usr/local/lib/python3.8/dist-packages/traitlets/traitlets.py:721, in TraitType.set(self, obj, value)
    717     silent = False
    718 if silent is not True:
    719     # we explicitly compare silent to True just in case the equality
    720     # comparison above returns something other than True/False
--> 721     obj._notify_trait(self.name, old_value, new_value)

File /usr/local/lib/python3.8/dist-packages/traitlets/traitlets.py:1505, in HasTraits._notify_trait(self, name, old_value, new_value)
   1504 def _notify_trait(self, name, old_value, new_value):
-> 1505     self.notify_change(
   1506         Bunch(
   1507             name=name,
   1508             old=old_value,
   1509             new=new_value,
   1510             owner=self,
   1511             type="change",
   1512         )
   1513     )

File ~/.local/lib/python3.8/site-packages/ipywidgets/widgets/widget.py:686, in Widget.notify_change(self, change)
    683     if name in self.keys and self._should_send_property(name, getattr(self, name)):
    684         # Send new state to front-end
    685         self.send_state(key=name)
--> 686 super(Widget, self).notify_change(change)

File /usr/local/lib/python3.8/dist-packages/traitlets/traitlets.py:1517, in HasTraits.notify_change(self, change)
   1515 def notify_change(self, change):
   1516     """Notify observers of a change event"""
-> 1517     return self._notify_observers(change)

File /usr/local/lib/python3.8/dist-packages/traitlets/traitlets.py:1564, in HasTraits._notify_observers(self, event)
   1561 elif isinstance(c, EventHandler) and c.name is not None:
   1562     c = getattr(self, c.name)
-> 1564 c(event)

File /usr/src/app/kso-dev/kso_utils/widgets.py:312, in choose_footage.<locals>.update_movie(change)
    304 selected_movies = [change["new"]]
    306 # Get the df and paths of the selected movies
    307 (
    308     selected_movies_paths,
    309     selected_movies,
    310     selected_movies_df,
    311     selected_movies_ids,
--> 312 ) = movie_utils.get_info_selected_movies(
    313     selected_movies=selected_movies,
    314     footage_source=footage_source,
    315     df=df,
    316     project=project,
    317     server_connection=server_connection,
    318 )
    320 # Display the movie
    321 if preview_media:

File /usr/src/app/kso-dev/kso_utils/movie_utils.py:296, in get_info_selected_movies(selected_movies, footage_source, df, project, server_connection)
    286     selected_movies_paths = [
    287         get_movie_path(
    288             project=project,
   (...)
    292         for f_path in selected_movies_df["fpath"]
    293     ]
    295     # Remove movie extension to match yolo_format labels
--> 296     selected_movies_no_ext = tuple(
    297         filename.rsplit(".", 1)[0] for filename in selected_movies
    298     )
    300     selected_movies_ids = {
    301         key: value
    302         for key, value in zip(
   (...)
    305         )
    306     }
    308 elif footage_source == "New Footage":

File /usr/src/app/kso-dev/kso_utils/movie_utils.py:297, in <genexpr>(.0)
    286     selected_movies_paths = [
    287         get_movie_path(
    288             project=project,
   (...)
    292         for f_path in selected_movies_df["fpath"]
    293     ]
    295     # Remove movie extension to match yolo_format labels
    296     selected_movies_no_ext = tuple(
--> 297         filename.rsplit(".", 1)[0] for filename in selected_movies
    298     )
    300     selected_movies_ids = {
    301         key: value
    302         for key, value in zip(
   (...)
    305         )
    306     }
    308 elif footage_source == "New Footage":

AttributeError: 'tuple' object has no attribute 'rsplit'

Expected behavior

A clear and concise description of what you expected to happen.

Additional context

most recent Git pulled yesterday afternoon at 14:00

jannesgg commented 3 months ago

Solved by separating testing behaviour from normal behaviour.