MCPcopy
hub / github.com/django/django / remove_replacement_node

Method remove_replacement_node

django/db/migrations/graph.py:161–196  ·  view source on GitHub ↗

The inverse operation to `remove_replaced_nodes`. Almost. Remove the replacement node `replacement` and remap its child nodes to `replaced` - the list of nodes it would have replaced. Don't remap its parent nodes as they are expected to be correct already.

(self, replacement, replaced)

Source from the content-addressed store, hash-verified

159 parent.add_child(replacement_node)
160
161 def remove_replacement_node(self, replacement, replaced):
162 """
163 The inverse operation to `remove_replaced_nodes`. Almost. Remove the
164 replacement node `replacement` and remap its child nodes to `replaced`
165 - the list of nodes it would have replaced. Don't remap its parent
166 nodes as they are expected to be correct already.
167 """
168 self.nodes.pop(replacement, None)
169 try:
170 replacement_node = self.node_map.pop(replacement)
171 except KeyError as err:
172 raise NodeNotFoundError(
173 "Unable to remove replacement node %r. It was either never added"
174 " to the migration graph, or has been removed already."
175 % (replacement,),
176 replacement,
177 ) from err
178 replaced_nodes = set()
179 replaced_nodes_parents = set()
180 for key in replaced:
181 replaced_node = self.node_map.get(key)
182 if replaced_node:
183 replaced_nodes.add(replaced_node)
184 replaced_nodes_parents |= replaced_node.parents
185 # We're only interested in the latest replaced node, so filter out
186 # replaced nodes that are parents of other replaced nodes.
187 replaced_nodes -= replaced_nodes_parents
188 for child in replacement_node.children:
189 child.parents.remove(replacement_node)
190 for replaced_node in replaced_nodes:
191 replaced_node.add_child(child)
192 child.add_parent(replaced_node)
193 for parent in replacement_node.parents:
194 parent.children.remove(replacement_node)
195 # NOTE: There is no need to remap parent dependencies as we can
196 # assume the replaced nodes already have the correct ancestry.
197
198 def validate_consistency(self):
199 """Ensure there are no dummy nodes remaining in the graph."""

Callers 2

replace_migrationMethod · 0.80

Calls 7

NodeNotFoundErrorClass · 0.85
add_childMethod · 0.80
add_parentMethod · 0.80
popMethod · 0.45
getMethod · 0.45
addMethod · 0.45
removeMethod · 0.45

Tested by 1