Add staging procedure

This commit is contained in:
Dmitry Shulyak 2015-05-29 10:07:41 +02:00
parent ce5851c073
commit 3b56aab142
3 changed files with 51 additions and 17 deletions

View File

@ -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
View 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

View File

@ -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):