def create_all(self, progress_callback: Optional[callable] = None) -> Dict[str, object]:
        """
        Creates all the models discovered from fixture files in :attr:`fixtures_dir`.

        :param progress_callback: An optional function to track progress. It must take three
                               parameters:
                                - an :class:`Identifier`
                                - the model instance
                                - and a boolean specifying whether the model was created
        :return: A dictionary keyed by identifier where the values are model instances.
        """
        if not self._loaded:
            self._load_data()

        # build up a directed acyclic graph to determine the model instantiation order
        dag = nx.DiGraph()
        for model_class_name, dependencies in self.relationships.items():
            dag.add_node(model_class_name)
            for dep in dependencies:
                dag.add_edge(model_class_name, dep)

        try:
            creation_order = reversed(list(nx.topological_sort(dag)))
        except nx.NetworkXUnfeasible:
            raise Exception('Circular dependency detected between models: '
                            ', '.join(['{a} -> {b}'.format(a=a, b=b)
                                       for a, b in nx.find_cycle(dag)]))

        # create or update the models in the determined order
        rv = {}
        for model_class_name in creation_order:
            for identifier_key, data in self.model_fixtures[model_class_name].items():
                identifier = Identifier(model_class_name, identifier_key)
                data = self.factory.maybe_convert_values(identifier, data)
                self._cache[identifier_key] = data

                model_instance, created = self.factory.create_or_update(identifier, data)
                if progress_callback:
                    progress_callback(identifier, model_instance, created)
                rv[identifier_key] = model_instance

        self.factory.commit()
        return rv