code: def update_app(self, app):
          
          # don't update this app if it has already been updated
          if app in self.updated_apps:
              return
  
          # load the initial data class
          try:
              initial_data_class = self.load_app(app)
          except ImportError as e:
              message = str(e)
  
              # Check if this error is simply the app not having initial data
              if 'No module named' in message and 'fixtures' in message:
                  self.log('No initial data file for {0}'.format(app))
                  return
              else:
                  # This is an actual import error we should know about
                  raise
  
          self.log('Checking dependencies for {0}'.format(app))
  
          # get dependency list
          dependencies = self.get_dependency_call_list(app)
  
          # update initial data of dependencies
          for dependency in dependencies:
              self.update_app(dependency)
  
          self.log('Updating app {0}'.format(app))
  
          # Update the initial data of the app and gather any objects returned for deletion. Objects registered for
          # deletion can either be returned from the update_initial_data function or programmatically added with the
          # register_for_deletion function in the BaseInitialData class.
          initial_data_instance = initial_data_class()
          model_objs_registered_for_deletion = initial_data_instance.update_initial_data() or []
          model_objs_registered_for_deletion.extend(initial_data_instance.get_model_objs_registered_for_deletion())
  
          # Add the objects to be deleted from the app to the global list of objects to be deleted.
          self.model_objs_registered_for_deletion.extend(model_objs_registered_for_deletion)
  
          # keep track that this app has been updated
          self.updated_apps.add(app)
docs: Loads and runs `update_initial_data` of the specified app. Any dependencies contained within the
          initial data class will be run recursively. Dependency cycles are checked for and a cache is built
          for updated apps to prevent updating the same app more than once.
          :param app: The name of the app to update. This should be the same path as defined
              in settings.INSTALLED_APPS
          :type app: str