Skip to content

graph

django_spire.contrib.sync.database.graph

__all__ = ['DependencyGraph'] module-attribute

DependencyGraph

Source code in django_spire/contrib/sync/core/graph.py
def __init__(self, edges: dict[str, set[str]]) -> None:
    for label in edges:
        if not label:
            message = 'edges must not contain empty labels'
            raise InvalidParameterError(message)

    self._edges = {
        label: set(dependencies)
        for label, dependencies in edges.items()
    }

    all_labels = set(self._edges)

    for label, dependencies in self._edges.items():
        unknown = dependencies - all_labels

        if unknown:
            message = (
                f'Model {label!r} declares dependencies on '
                f'unknown models: {unknown}'
            )

            raise UnknownDependencyError(message)

    self._dependents: dict[str, set[str]] = {
        label: set() for label in self._edges
    }

    for label, dependencies in self._edges.items():
        for dep in dependencies:
            self._dependents[dep].add(label)

    self._order = self._compute_order()

dependencies

Source code in django_spire/contrib/sync/core/graph.py
def dependencies(self, label: str) -> set[str]:
    return set(self._edges.get(label, set()))

known_models

Source code in django_spire/contrib/sync/core/graph.py
def known_models(self) -> frozenset[str]:
    return frozenset(self._edges)

sync_order

Source code in django_spire/contrib/sync/core/graph.py
def sync_order(self) -> list[str]:
    return list(self._order)