docs: def parse(self, resource):
          """ Parse a list of directories and reads it into a collection
  
          :param resource: List of folders
          :return: An inventory resource and a list of CtsTextMetadata metadata-objects
          """
          textgroups = []
          texts = []
          invalids = []
  
          for folder in resource:
              cts_files = glob("{base_folder}/data/*/__cts__.xml".format(base_folder=folder))
              for cts_file in cts_files:
                  textgroup, cts_file = self._parse_textgroup(cts_file)
                  textgroups.append((textgroup, cts_file))
  
          for textgroup, cts_textgroup_file in textgroups:
              cts_work_files = glob("{parent}/*/__cts__.xml".format(parent=os.path.dirname(cts_textgroup_file)))
  
              for cts_work_file in cts_work_files:
                  _, parsed_texts, directory = self._parse_work(cts_work_file, textgroup)
                  texts.extend([(text, directory) for text in parsed_texts])
  
          for text, directory in texts:
              # If text_id is not none, the text parsing errored
              if not self._parse_text(text, directory):
                  invalids.append(text)
  
          # Dispatching routine
          for textgroup, textgroup_path in textgroups:
              self._dispatch_container(textgroup, textgroup_path)
  
          # Clean invalids if there was a need
          self._clean_invalids(invalids)
  
          self.inventory = self.dispatcher.collection
          return self.inventory