code: def fetch_items(self, category, **kwargs):
          
          from_date = kwargs['from_date']
  
          logger.info("Fetching modules from %s", str(from_date))
  
          from_date_ts = datetime_to_utc(from_date).timestamp()
  
          nmodules = 0
          stop_fetching = False
  
          raw_pages = self.client.modules()
  
          for raw_modules in raw_pages:
              modules = [mod for mod in self.parse_json(raw_modules)]
  
              for module in modules:
                  # Check timestamps to stop fetching more modules
                  # because modules fetched sorted by 'updated_at'
                  # from newest to oldest.
                  updated_at_ts = self.metadata_updated_on(module)
  
                  if from_date_ts > updated_at_ts:
                      stop_fetching = True
                      break
  
                  owner = module['owner']['username']
                  name = module['name']
                  module['releases'] = self.__fetch_and_parse_releases(owner, name)
                  module['owner_data'] = self.__get_or_fetch_owner(owner)
  
                  yield module
                  nmodules += 1
  
              if stop_fetching:
                  break
  
          logger.info("Fetch process completed: %s modules fetched", nmodules)
docs: Fetch the modules
  
          :param category: the category of items to fetch
          :param kwargs: backend arguments
  
          :returns: a generator of items