Add staging procedure
This commit is contained in:
parent
ce5851c073
commit
3b56aab142
@ -93,8 +93,7 @@ def guess_mapping(emitter, receiver):
|
||||
|
||||
|
||||
def connect(emitter, receiver, mapping=None):
|
||||
guessed = guess_mapping(emitter, receiver)
|
||||
mapping = mapping or guessed
|
||||
mapping = mapping or guess_mapping(emitter, receiver)
|
||||
|
||||
for src, dst in mapping.items():
|
||||
# Disconnect all receiver inputs
|
||||
|
50
solar/solar/operations.py
Normal file
50
solar/solar/operations.py
Normal file
@ -0,0 +1,50 @@
|
||||
|
||||
|
||||
from solar import state
|
||||
from solar.core import signals
|
||||
from solar.core import resource
|
||||
|
||||
from dictdiffer import diff
|
||||
import networkx as nx
|
||||
|
||||
|
||||
def connections(res, graph):
|
||||
|
||||
for pred in graph.predecessors(res.name):
|
||||
edge = graph.get_edge_edge(pred, res.name)
|
||||
if ':' in edge['label']:
|
||||
parent, child = edge['label'].split(':')
|
||||
yield pred, res.name, {parent: child}
|
||||
else:
|
||||
yield pred, res.name, {edge['label']: edge['label']}
|
||||
|
||||
|
||||
def to_dict(resource, graph):
|
||||
return {'uid': resource.name,
|
||||
'path': resource.dest_path,
|
||||
'meta': resource.metadata,
|
||||
'tags': resource.tags,
|
||||
'args': resource.args_dict(),
|
||||
'connections': connections(resource, graph)}
|
||||
|
||||
|
||||
def stage_changes():
|
||||
resources = resource.load_all()
|
||||
conn_graph = signals.detailed_connection_graph()
|
||||
|
||||
commited = state.CD()
|
||||
log = state.SL()
|
||||
|
||||
for res_uid in nx.topological_sort(conn_graph):
|
||||
commited_data = commited.get(res_uid, {})
|
||||
staged_data = to_dict(resources[res_uid], conn_graph)
|
||||
df = diff(commited_data, staged_data)
|
||||
|
||||
if df:
|
||||
log_item = state.LogItem(
|
||||
utils.generate_uuid(),
|
||||
res_uid,
|
||||
df)
|
||||
log.add(log_item)
|
||||
return log
|
||||
|
@ -15,21 +15,6 @@
|
||||
import collections
|
||||
from collections import deque
|
||||
|
||||
from solar import utils
|
||||
|
||||
import dictdiffer as dd
|
||||
|
||||
|
||||
def create(resource, staged_data, commited_data):
|
||||
"""
|
||||
:param resource: Resource obj
|
||||
:param staged_data: dict
|
||||
:param commited_data: dict
|
||||
"""
|
||||
diff = dd.diff(
|
||||
staged_data[resource.uid], commited_data[resource.uid])
|
||||
return LogItem(utils.generate_uuid(), resource.uid, diff)
|
||||
|
||||
|
||||
class LogItem(object):
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user