code: def update_metadata(self, urls):
      if len(urls) == 0:
          LOGGER.debug("No urls to update metadata with")
  
      for url in urls:
          file_id = self.file_id_map[url]
          file_object = self.GetItemData(file_id)
          if (
              file_object.extracted
              and self.GetChildrenCount(file_id) == 0
          ):
              for detail in file_object.plane_details_text:
                  plane_id = self.AppendItem(
                      file_id, detail, data=file_object
                  )
                  self.SetItemFont(plane_id, self._plane_details_font)
                  self.SetItemTextColour(plane_id, PLANE_COLOR)
              self.Expand(file_id)
      self._metadata_extracted = True
  
imports: import logging
  import os
  import sys
  import uuid
  from urllib.request import url2pathname
  from urllib.parse import urlparse
  import wx
  import wx.lib.scrolledpanel
  from cellprofiler_core.pipeline import ImageFile
  from cellprofiler_core.preferences import report_progress
label_desc: Use image node_id 15 for calling the PathListCtrl obj's underlying member method code with example usage: obj.update_metadata(urls) without return types