From 43fc57a01028b374234042ab59fdbdd48157a88e Mon Sep 17 00:00:00 2001 From: LV-426 Date: Sun, 14 Dec 2014 22:45:27 +0200 Subject: Attr_Diff: __type_node, __type_link separation --- src-py/model/graph.py | 49 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 11 deletions(-) (limited to 'src-py/model') diff --git a/src-py/model/graph.py b/src-py/model/graph.py index 86a195d4..b40b805a 100644 --- a/src-py/model/graph.py +++ b/src-py/model/graph.py @@ -5,31 +5,58 @@ class Attr_Diff(dict): changed or removed Example: - attr_diff = {n_id: {'attr_write': {'attr_0': 0, - 'attr_1': 'a'}, - 'attr_remove': ['attr_2'] } + attr_diff = {'__type_node' : {n_id: {'__attr_write': {'attr_0': 0, + 'attr_1': 'a'}, + '__attr_remove': ['attr_2'] }} + '__type_link' : {l_id: ... } } """ def __init__(self): - pass + self['__type_node'] = {} + self['__type_link'] = {} def init_node_attr_diff(self, n_id): - ret = {'attr_write': {}, - 'attr_remove': []} - self[n_id] = ret + ret = {'__attr_write': {}, + '__attr_remove': []} + self['__type_node'][n_id] = ret + return ret + + @staticmethod + def from_json_dict(json_dict): + ret = Attr_Diff() + for obj_type in ret.keys(): + obj_ad_set = json_dict.get(obj_type) + if None != obj_ad_set: + for o_id, ad in obj_ad_set.items(): + if None != ad.get('__attr_write'): + for k, v in ad['__attr_write'].items(): + ret.add_node_attr_write(o_id, k, v) + if None != ad.get('__attr_remove'): + for k in ad['__attr_remove']: + ret.add_node_attr_rm(o_id, k) return ret + @property + def type__node(self): + return self['__type_node'] + + @property + def type__link(self): + return self['__type_link'] + def add_node_attr_write(self, n_id, attr_name, attr_val): - n_attr_diff = self.get(n_id) + + + n_attr_diff = self['__type_node'].get(n_id) if None == n_attr_diff: n_attr_diff = self.init_node_attr_diff(n_id) - n_attr_diff['attr_write'][attr_name] = attr_val + n_attr_diff['__attr_write'][attr_name] = attr_val def add_node_attr_rm(self, n_id, attr_name): - n_attr_diff = self.get(n_id) + n_attr_diff = self['__type_node'].get(n_id) if None == n_attr_diff: n_attr_diff = self.init_node_attr_diff(n_id) - n_attr_diff['attr_remove'].append(attr_name) + n_attr_diff['__attr_remove'].append(attr_name) class Topo_Diff(object): """ -- cgit v1.3.1