def sorted_filetype_items(self):
        processed_types = []
        file_type_items = deque(self.config['file_types'].items())
        while len(file_type_items):
            filetype, filetype_info = file_type_items.popleft()
            requirements = filetype_info.get('requires')
            if requirements is not None:
                missing = [req for req in requirements
                           if req not in processed_types]
                if missing:
                    file_type_items.append((filetype, filetype_info))
                    continue
            processed_types.append(filetype)
            yield filetype, filetype_info