Mercurial > hg > WSGraph
comparison wsgraph/model.py @ 37:f17a6577cc0d
make default type configurable
| author | Jeff Hammel <jhammel@mozilla.com> |
|---|---|
| date | Sat, 15 Dec 2012 23:22:19 -0800 |
| parents | 16673636dcb6 |
| children | df2a719a9b6e |
comparison
equal
deleted
inserted
replaced
| 36:5ea58a6ea820 | 37:f17a6577cc0d |
|---|---|
| 83 return key in self.nodes() | 83 return key in self.nodes() |
| 84 else: | 84 else: |
| 85 return tuple(key) in self.edges() | 85 return tuple(key) in self.edges() |
| 86 | 86 |
| 87 | 87 |
| 88 class DirectedGraph(Graph): | |
| 89 """mix-in class for directed graphs""" | |
| 90 # TODO: is this possible without super or other black magicks? | |
| 91 | |
| 92 | |
| 88 class MemoryCache(Graph): | 93 class MemoryCache(Graph): |
| 89 """volatile in-memory representation of a graph""" | 94 """volatile in-memory representation of a graph""" |
| 90 | 95 |
| 91 def __init__(self): | 96 def __init__(self, node_type=dict): |
| 92 self._edges = {} | 97 self._edges = {} |
| 93 self._nodes = {} | 98 self._nodes = {} |
| 99 self.node_type = node_type | |
| 94 | 100 |
| 95 def node(self, name, value=None): | 101 def node(self, name, value=None): |
| 96 if value is not None: | 102 if value is not None: |
| 97 # setter | 103 # setter |
| 98 self._nodes[name] = deepcopy(value) | 104 self._nodes[name] = deepcopy(value) |
| 107 def edge(self, node1, node2, value=None): | 113 def edge(self, node1, node2, value=None): |
| 108 if value is not None: | 114 if value is not None: |
| 109 # setter | 115 # setter |
| 110 self._edges[(node1, node2)] = deepcopy(value) | 116 self._edges[(node1, node2)] = deepcopy(value) |
| 111 for node in node1, node2: | 117 for node in node1, node2: |
| 112 self._nodes.setdefault(node, {}) | 118 self._nodes.setdefault(node, self.node_type()) |
| 113 else: | 119 else: |
| 114 # getter | 120 # getter |
| 115 # TODO: deepcopy | 121 # TODO: deepcopy |
| 116 return deepcopy(self._edges.get((node1, node2), None)) | 122 return deepcopy(self._edges.get((node1, node2), None)) |
| 117 | 123 |
| 118 def edges(self): | 124 def edges(self): |
| 119 return self._edges.keys() | 125 return self._edges.keys() |
| 126 | |
| 120 | 127 |
| 121 class FileCache(MemoryCache): | 128 class FileCache(MemoryCache): |
| 122 """on-disk JSON file cache""" | 129 """on-disk JSON file cache""" |
| 123 | 130 |
| 124 def __init__(self, filename): | 131 def __init__(self, filename): |
