comparison wsgraph/model.py @ 15:ee45f44394a0

i need a name, Bastian
author Jeff Hammel <jhammel@mozilla.com>
date Mon, 10 Dec 2012 17:33:44 -0800
parents 7b8e40eda563
children 24d57daaca21
comparison
equal deleted inserted replaced
14:3d0430390e72 15:ee45f44394a0
1 from abc import abstractmethod 1 from abc import abstractmethod
2 from copy import deepcopy 2 from copy import deepcopy
3 from utils import iterable 3 from utils import isiterable
4 4
5 class GraphModel(object): 5 class GraphModel(object):
6 6
7 @abstractmethod 7 @abstractmethod
8 def node(self, name, **values): 8 def node(self, name, **values):
34 """ 34 """
35 if key is a basestring, return the node of that name; 35 if key is a basestring, return the node of that name;
36 if key is a 2-tuple/list, return the edge of that name 36 if key is a 2-tuple/list, return the edge of that name
37 """ 37 """
38 38
39 if isinstance(key, basestring) or (not iterable(key)): 39 if isinstance(key, basestring) or (not isiterable(key)):
40 return self.node(key) 40 return self.node(key)
41 else: 41 else:
42 return self.edge(*key) 42 return self.edge(*key)
43 43
44 def __contains__(self, key): 44 def __contains__(self, key):
45 """ 45 """
46 if key is ..., returns if that node is in the graph 46 if key is ..., returns if that node is in the graph
47 if key is a 2-tuple/list, returns if the edge is in the graph 47 if key is a 2-tuple/list, returns if the edge is in the graph
48 """ 48 """
49 # XXX not necessarily the best implementation! 49 # XXX not necessarily the best implementation!
50 if isinstance(key, basestring) or (not iterable(key)): 50 if isinstance(key, basestring) or (not isiterable(key)):
51 return key in self.nodes() 51 return key in self.nodes()
52 else: 52 else:
53 return tuple(key) in self.edges() 53 return tuple(key) in self.edges()
54 54
55
55 class MemoryCache(GraphModel): 56 class MemoryCache(GraphModel):
57 """volatile in-memory representation of a graph"""
56 58
57 def __init__(self): 59 def __init__(self):
58 self._edges = {} 60 self._edges = {}
59 self._nodes = {} 61 self._nodes = {}
60 62