code: def bundle_changed(self, event):
          # type: (BundleEvent) -> None
          
          kind = event.get_kind()
          bundle = event.get_bundle()
  
          if kind == BundleEvent.STOPPING_PRECLEAN:
              # A bundle is gone, remove its factories after the deactivator has
              # been called. That way, the deactivator can kill manually started
              # components.
              self._unregister_bundle_factories(bundle)
  
          elif kind == BundleEvent.STARTED:
              # A bundle is staring, register its factories before its activator
              # is called. That way, the activator can use the registered
              # factories.
              self._register_bundle_factories(bundle)
  
          elif kind == BundleEvent.UPDATE_BEGIN:
              # A bundle will be updated, store its auto-restart component
              self._autorestart_store_components(bundle)
  
          elif kind == BundleEvent.UPDATED:
              # Update has finished, restart stored components
              self._autorestart_components(bundle)
              self._autorestart_clear_components(bundle)
  
          elif kind == BundleEvent.UPDATE_FAILED:
              # Update failed, clean the stored components
              self._autorestart_clear_components(bundle)
docs: A bundle event has been triggered
  
          :param event: The bundle event