view 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
line wrap: on
line source

from abc import abstractmethod

class GraphModel(object):

    @abstractmethod
    def node(self, name, **values):
        """get or set a node"""

    @abstractmethod
    def nodes(self):
        """returns a list of all nodes"""

    @abstractmethod
    def edges(self):
        """returns a list of all edges"""

    @abstractmethod
    def edge(self, node1, node2, **values):
        """returns edge from node1 to node2"""

    def __getitem__(self, key):
        """
        if key is a basestring, return the node of that name;
        if key is a 2-tuple/list, return the edge of that name
        """


class MemoryCache(GraphModel):

    def __init__(self):
        self._edges = {}
        self._nodes = {}

    def node(self, name, **values):
        if values:
            # setter
            self._nodes[name] = values
        else:
            # getter
            return self._nodes.get(name, None)

    def nodes(self):
        return self._nodes.keys()

    def edge(self, node1, node2, **values):
        if values:
            # setter
            self._edges[(node1, node2)] = values
        else:
            # getter
            return self._edges.get((node1, node2), None)

    def edges(self):
        return self._edges.keys()