def __init__(self, conn=None, *args, **kwds): """Constructs a Gephi graph streaming drawer that will post graphs to the given Gephi connection. If C{conn} is C{None}, the remaining arguments of the constructor are forwarded intact to the constructor of L{GephiConnection} in order to create a connection. This means that any of the following are valid: - C{GephiGraphStreamingDrawer()} will construct a drawer that connects to workspace 0 of the local Gephi instance on port 8080. - C{GephiGraphStreamingDrawer(workspace=2)} will connect to workspace 2 of the local Gephi instance on port 8080. - C{GephiGraphStreamingDrawer(port=1234)} will connect to workspace 0 of the local Gephi instance on port 1234. - C{GephiGraphStreamingDrawer(host="remote", port=1234, workspace=7)} will connect to workspace 7 of the Gephi instance on host C{remote}, port 1234. - C{GephiGraphStreamingDrawer(url="http://remote:1234/workspace7)} is the same as above, but with an explicit URL. """ super(GephiGraphStreamingDrawer, self).__init__() from igraph.remote.gephi import GephiGraphStreamer, GephiConnection self.connection = conn or GephiConnection(*args, **kwds) self.streamer = GephiGraphStreamer()
class GephiGraphStreamingDrawer(AbstractGraphDrawer): """Graph drawer that sends a graph to a file-like object (e.g., socket, URL connection, file) using the Gephi graph streaming format. The Gephi graph streaming format is a simple JSON-based format that can be used to post mutations to a graph (i.e. node and edge additions, removals and updates) to a remote component. For instance, one can open up Gephi (U{http://www.gephi.org}), install the Gephi graph streaming plugin and then send a graph from igraph straight into the Gephi window by using C{GephiGraphStreamingDrawer} with the appropriate URL where Gephi is listening. The C{connection} property exposes the L{GephiConnection} that the drawer uses. The drawer also has a property called C{streamer} which exposes the underlying L{GephiGraphStreamer} that is responsible for generating the JSON objects, encoding them and writing them to a file-like object. If you want to customize the encoding process, this is the object where you can tweak things to your taste. """ def __init__(self, conn=None, *args, **kwds): """Constructs a Gephi graph streaming drawer that will post graphs to the given Gephi connection. If C{conn} is C{None}, the remaining arguments of the constructor are forwarded intact to the constructor of L{GephiConnection} in order to create a connection. This means that any of the following are valid: - C{GephiGraphStreamingDrawer()} will construct a drawer that connects to workspace 0 of the local Gephi instance on port 8080. - C{GephiGraphStreamingDrawer(workspace=2)} will connect to workspace 2 of the local Gephi instance on port 8080. - C{GephiGraphStreamingDrawer(port=1234)} will connect to workspace 0 of the local Gephi instance on port 1234. - C{GephiGraphStreamingDrawer(host="remote", port=1234, workspace=7)} will connect to workspace 7 of the Gephi instance on host C{remote}, port 1234. - C{GephiGraphStreamingDrawer(url="http://remote:1234/workspace7)} is the same as above, but with an explicit URL. """ super(GephiGraphStreamingDrawer, self).__init__() from igraph.remote.gephi import GephiGraphStreamer, GephiConnection self.connection = conn or GephiConnection(*args, **kwds) self.streamer = GephiGraphStreamer() def draw(self, graph, *args, **kwds): """Draws (i.e. sends) the given graph to the destination of the drawer using the Gephi graph streaming API. The following keyword arguments are allowed: - ``encoder`` lets one specify an instance of ``json.JSONEncoder`` that will be used to encode the JSON objects. """ self.streamer.post(graph, self.connection, encoder=kwds.get("encoder"))