Mercurial > hg > WSGraph
comparison wsgraph/model.py @ 0:cfcfa093e4b4
initial commit
| author | Jeff Hammel <jhammel@mozilla.com> |
|---|---|
| date | Sun, 09 Dec 2012 10:21:43 -0800 |
| parents | |
| children | f1f7a505e0d0 |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:cfcfa093e4b4 |
|---|---|
| 1 from abc import abstractmethod | |
| 2 | |
| 3 class GraphModel(object): | |
| 4 | |
| 5 @abstractmethod | |
| 6 def node(self, name, **values): | |
| 7 """get or set a node""" | |
| 8 | |
| 9 @abstractmethod | |
| 10 def nodes(self): | |
| 11 """returns a list of all nodes""" | |
| 12 | |
| 13 @abstractmethod | |
| 14 def edges(self): | |
| 15 """returns a list of all edges""" | |
| 16 | |
| 17 @abstractmethod | |
| 18 def edge(self, node1, node2, **values): | |
| 19 """returns edge from node1 to node2""" | |
| 20 | |
| 21 def __getitem__(self, key): | |
| 22 """ | |
| 23 if key is a basestring, return the node of that name; | |
| 24 if key is a 2-tuple/list, return the edge of that name | |
| 25 """ | |
| 26 | |
| 27 | |
| 28 class MemoryCache(GraphModel): | |
| 29 | |
| 30 def __init__(self): | |
| 31 self._edges = {} | |
| 32 self._nodes = {} | |
| 33 | |
| 34 def node(self, name, **values): | |
| 35 if values: | |
| 36 # setter | |
| 37 self._nodes[name] = values | |
| 38 else: | |
| 39 # getter | |
| 40 return self._nodes.get(name, None) | |
| 41 | |
| 42 def nodes(self): | |
| 43 return self._nodes.keys() | |
| 44 | |
| 45 def edge(self, node1, node2, **values): | |
| 46 if values: | |
| 47 # setter | |
| 48 self._edges[(node1, node2)] = values | |
| 49 else: | |
| 50 # getter | |
| 51 return self._edges.get((node1, node2), None) | |
| 52 | |
| 53 def edges(self): | |
| 54 return self._edges.keys() |
