Package openmdao.gui

This package contains a graphical user interface for the openmdao framework.

class openmdao.gui.consoleserver.ConsoleServer(name='', host='', publish_updates=True)[source]

Bases: cmd.Cmd

Object which knows how to load a model and provides a command line interface and various methods to access and modify that model.

add_component(*args, **kwargs)[source]
add_file(filename, contents)[source]

Add file.

add_subscriber(pathname, publish)[source]

Publish the specified topic.


Cleanup various resources.


Save the current project macro and commit to the project repo.


Called on an input line when the command prefix is not recognized. In that case we execute the line as Python code.


Delete file from project. Returns False if file was not found; otherwise, returns True.


print remembered trace from last exception


Create directory (does nothing if directory already exists).

execfile(*args, **kwargs)[source]

Returns True if the given file (assumed to be a file in the project) has classes that have been instantiated in the current process or if the file is a macro file. Note that this doesn’t keep track of removes/deletions, so if an instance was created earlier and then deleted, it will still be reported.


get the attributes of the specified object


Serve a list of events that are available to a driver.


Get hierarchical dictionary of openmdao objects.

get_connections(pathname, src_name, dst_name)[source]

Get list of source variables, destination variables, and the connections between them.

get_container(pathname, report=True)[source]

Get the container with the specified pathname. Returns the container and the name of the root object.


Get current project name.


Get the structure of the specified assembly or of the global namespace if no pathname is specified; consists of the list of components and the connections between them (i.e., the dataflow).


Get contents of a file. Returns None if file was not found.


get a nested dictionary of files


Return this server’s _hist.


get the inputs and outputs of the assembly’s child components and indicate for each whether or not it is a passthrough variable


Return this server’s pid.


Return the current model as a project archive.


Return this server’s _recorded_cmds.


Get constructor argument signature for classname.


get a dictionary of types available for creation


Get the value of the object with the given pathname.


get the workflow for the specified driver or assembly if no driver or assembly is specified, get the workflows for all of the top-level assemblies

install_addon(url, distribution)[source]
load_project(*args, **kwargs)[source]
onecmd(*args, **kwargs)[source]

Have to override this because base class version strips the lines, making multi-line Python commands impossible.


This method is called after the line has been input but before it has been interpreted. If you want to modify the input line before execution (for example, variable substitution), do it here.


Publish the current component tree and subscribed components.

rename_file(oldpath, newname)[source]

Rename file.

replace_component(*args, **kwargs)[source]
revert_project(*args, **kwargs)[source]
run(*args, **kwargs)[source]
send_pub_msg(msg, topic)[source]

Publish the given message with the given topic.


Set current project name.

write_file(filename, contents)[source]

Write contents to file.


Decorator for methods that may have modified the model performs maintenance on root level containers/assemblies and publishes the potentially updated components.

class openmdao.gui.filemanager.FileManager(name, path, publish_updates=False)[source]

Bases: object

Object that keeps track of a collection of files (i.e., a directory) and optionally publishes an update when the collection is modified.

add_file(filename, contents)[source]

Add file to working directory. If it’s a zip file, unzip it.


Stop observer and cleanup the file directory.


Delete file in working directory. Returns False if file was not found; otherwise, returns True.


Create directory in working directory. (Does nothing if directory already exists.)


Get contents of file in working directory. Returns None if file was not found.


Get a nested dictionary of files in the working directory.


Publish the current file collection.

rename_file(oldpath, newname)[source]

Rename last component of oldpath to newname.

write_file(filename, contents)[source]

Write contents to file in working directory.

class openmdao.gui.filemanager.FilesPublisher(files)[source]


Publishes file collection when ANY file system event occurs.


Just publish the updated file collection.

class openmdao.gui.handlers.ExitHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers.ReqHandler

Shut it down; try to close the browser window.

class openmdao.gui.handlers.LoginHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers.ReqHandler

Currently we support a single user, the current user. This hook is for potential future development using Credentials.

class openmdao.gui.handlers.LogoutHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers.ReqHandler

Lets users log out of the application simply by deleting the nickname cookie.

class openmdao.gui.handlers.PluginDocsHandler(application, request, **kwargs)[source]

Bases: tornado.web.StaticFileHandler

retrieve docs for a plugin

get(path, include_body=True)[source]
regex = <_sre.SRE_Pattern object at 0x5298940>
class openmdao.gui.handlers.ReqHandler(application, request, **kwargs)[source]

Bases: tornado.web.RequestHandler

override the get_current_user() method in request handlers to determine the current user based on the value of a cookie.


class openmdao.gui.handlers_projectdb.DeleteHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers.ReqHandler

Delete a project.

post(*args, **kwargs)[source]
class openmdao.gui.handlers_projectdb.DetailHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers.ReqHandler

Get/set project details.

get(*args, **kwargs)[source]
post(*args, **kwargs)[source]
class openmdao.gui.handlers_projectdb.DownloadHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers.ReqHandler

Download a copy of the project.

get(*args, **kwargs)[source]

Browser download of a project file

class openmdao.gui.handlers_projectdb.ImportHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers.ReqHandler

Get/set project details.

get(*args, **kwargs)[source]
post(*args, **kwargs)[source]
class openmdao.gui.handlers_projectdb.IndexHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers.ReqHandler

get project list

get(*args, **kwargs)[source]
class openmdao.gui.handlers_projectdb.NewHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers.ReqHandler

Add a project to the project database. This extracts the project file into a directory under the projects directory of user.

post(*args, **kwargs)[source]

class openmdao.gui.handlers_workspace.AddOnsHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers.ReqHandler

Addon installation utility. Eventually we will probably wrap the OpenMDAO plugin functions to work through here.

get(*args, **kwargs)[source]

Show available plugins; prompt for plugin to be installed.

post(*args, **kwargs)[source]

Easy_install the POSTed addon.

addons_url = ''
class openmdao.gui.handlers_workspace.AvailableEventsHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

Get a list of events that are available to a driver.

get(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.CloseHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

get(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.CommandHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

Get the command, send it to the cserver, and return response.

get(*args, **kwargs)[source]
post(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.ComponentHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

Add, get, or remove a component.

delete(*args, **kwargs)[source]
get(*args, **kwargs)[source]
post(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.ComponentsHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

get(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.ConnectionsHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

Get connections between two components in an assembly.

get(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.DataflowHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

Get the structure of the specified assembly or of the global namespace if no pathname is specified; consists of the list of components and the connections between them (i.e., the dataflow).

get(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.EditorHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

get(*args, **kwargs)[source]

Code Editor

class openmdao.gui.handlers_workspace.ExecHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

If a filename is POSTed, have the cserver execute the file; otherwise, just run() the project.

post(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.FileHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

Get/set the specified file/folder.

delete(*args, **kwargs)[source]
get(*args, **kwargs)[source]
post(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.FilesHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

Get a list of the user’s files in JSON format.

get(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.GeometryHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

get(*args, **kwargs)[source]

geometry viewer

class openmdao.gui.handlers_workspace.ModelHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

POST: get a new model (delete existing console server). GET: get JSON representation of the model.

post(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.ObjectHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

Get the data for a slotable object (including components).

get(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.OutstreamHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

Return the url of the zmq outstream server.

get(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.PassthroughsHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

Get the passthrough variables for the named assembly

get(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.PlotHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

GET: open a websocket server to supply updated values for the specified variable.

get(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.ProjectHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

GET: start up an empty workspace and prepare to load a project.

POST: commit the current project.

get(*args, **kwargs)[source]
post(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.ProjectLoadHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

GET: load model from the given project archive, or reload remembered project for session if no file given.

get(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.ProjectRevertHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

POST: revert back to the most recent commit of the project.

post(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.PublishHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

GET: tell the server to publish the specified topic/variable.

get(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.PubstreamHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

Return the url of the zmq publisher server.

get(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.RenameHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

Rename a file.

post(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.ReplaceHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

Replace a component.

post(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.ReqHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers.ReqHandler

Render the base template.

get(*args, **kwargs)[source]
post(*args, **kwargs)[source]

Render the base template with the posted content.

class openmdao.gui.handlers_workspace.SignatureHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

Get type constructor signature.

get(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.TestHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

Initialize the server manager & render the workspace.

get(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.TypesHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

Get hierarchy of package/types to populate the Palette.

get(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.UploadHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

File upload utility

get(*args, **kwargs)[source]
post(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.ValueHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

GET: get a value for the given pathname. TODO: combine with ComponentHandler? handle Containers as well?

get(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.VariableHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

Get a command to set a variable, send it to the cserver, and return response.

get(*args, **kwargs)[source]
post(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.WorkflowHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

get(*args, **kwargs)[source]
class openmdao.gui.handlers_workspace.WorkspaceHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

render the workspace

get(*args, **kwargs)[source]


This graphical user interface for OpenMDAO is implemented as a web application.

Running this file will start a tornado web server on a local port and open a browser on that port. An up-to-date version of Chrome or Firefox with support for WebSockets is required.

class openmdao.gui.omg.App(secret=None, external=False)[source]

Bases: tornado.web.Application

Openmdao web application. Extends tornado web app with URL mappings, settings and server manager.



class openmdao.gui.omg.AppServer(options)[source]

Bases: object

Openmdao web application server. Wraps tornado web app, runs http server, and opens browser.

static get_argument_parser()[source]

create a parser for command line arguments


Start server listening on port, launch browser if requested, and start the ioloop.


Shortcut to AppServer argument parser.


Return user’s GUI directory.


Process command line arguments and run., options=None, args=None)[source]

Launch the GUI with specified options.

class openmdao.gui.outstream.OutStream(pub_socket, name)[source]

Bases: object

A file like object that publishes the stream to a 0MQ PUB socket. (Borrowed from IPython, but stripped down a bit...)

class openmdao.gui.outstream.OutStreamRedirector(name, addr, filename='sys.stdout')[source]

Bases: multiprocessing.process.Process

listen for output on the given port and dump it to a file


class openmdao.gui.projdirfactory.ProjDirFactory(watchdir, use_observer=True, observer=None)[source]

Bases: openmdao.main.factory.Factory

A Factory that watches a Project directory and dynamically keeps the set of available types up-to-date as project files change.


If this factory is removed from the FactoryManager during execution, this function will stop the watchdog observer thread.

create(typ, version=None, server=None, res_desc=None, **ctor_args)[source]

Create and return an instance of the specified type, or None if this Factory can’t satisfy the request.


Return a list of available types.

get_signature(typname, version=None)[source]

Return constructor argument signature for typname, using the specified package version. The return value is a dictionary.

on_deleted(fpath, deleted_set)[source]
on_modified(fpath, added_set, changed_set, deleted_set)[source]
publish_updates(added_set, changed_set, deleted_set)[source]

The Projects object provides a basic interface for interacting with the project database used by the GUI.

class openmdao.gui.projectdb.Projects(pathname=None)[source]

Bases: object


Create a new clean database for the GUI user.


Does the database exist?


Get a dictionary containing the fields for a project id.

project_id: int
unique id for requested project.

Get a dictionary containing the fields that belong to a project with a specific path.

path: str (valid path)
path for requested project

Return a list of dictionaries for all projects owned by the user. Each dictionary contains all fields for that project id.


Update metadate modification time-stamp for project_id, setting ‘modified’ to the current time/date.

project_id: int
unique id for requested project.

Insert a new row into the project database.

data: dict
Dictionary containing all fields for the new entry.

Predict what the next auto-inserted rowid will be. This is here because the GUI handlers need to know the project_id even before the row is inserted.


Remove a project from the database

project_id: int
Unique id for requested project.
set(project_id, field, value)[source]

Set a single field in the project db.

project_id: int
Unique id for requested project.
field: str
Name of field to set.
value: various
Value of field to set.

Ref: (27 OCT/09)

In case anyone’s interested, here’s my that I use for doing a pickle-based session (stored as a file in a directory of your choosing) in Tornado. Feel free to use it however you please. If I write something more scalable one day, I’ll post it too.

Usage: In your application script, settings[“session_secret”] = ‘some secret password!!’ settings[“session_dir”] = ‘sessions’ # the directory to store sessions in application.session_manager = session.TornadoSessionManager(settings[“session_secret”], settings[“session_dir”])

In your RequestHandler (probably in __init__), self.session = session.TornadoSession(self.application.session_manager, self)

After that, you can use it like this (in get(), post(), etc): self.session[‘blah’] = 1234 blah = self.session[‘blah’]


The basic session mechanism is this: * Take some data, pickle it, store it somewhere. * Assign an id to it. Run that id through a HMAC (NOT just a hash function) to prevent tampering. * Put the id and HMAC output in a cookie. * When you get a request, load the id, verify the HMAC. If it matches, load the data from wherever you put it and depickle it.

exception openmdao.gui.session.InvalidSessionException[source]

Bases: exceptions.Exception

class openmdao.gui.session.Session(session_id, hmac_digest)[source]

Bases: dict

A Session is basically a dict with a session_id and an hmac_digest string to verify access rights.

class openmdao.gui.session.SessionManager(secret, session_dir='')[source]

Bases: object

SessionManager handles the cookie and file read/writes for a Session,

get(session_id=None, hmac_digest=None)[source]
class openmdao.gui.session.TornadoSession(tornado_session_manager, request_handler)[source]

Bases: openmdao.gui.session.Session

A TornadoSession is a Session object for use in Tornado.

class openmdao.gui.session.TornadoSessionManager(secret, session_dir='')[source]

Bases: openmdao.gui.session.SessionManager

A TornadoSessionManager is a SessionManager that is specifically for use in Tornado and uses Tornado’s cookies.

set(requestHandler, session)[source]

Utility functions used by openmdao GUI.


Create directory if it doesn’t exist.


Create a nested dictionary for a file structure with names relative to the starting directory.


Find the chrome executable.


Look for an executable given a list of the possible names.

openmdao.gui.util.launch_browser(port, preferred_browser=None)[source]

Launch web browser on specified port. Try to use preferred browser if specified; fall back to default. (Chrome will launch in “app mode”.)

openmdao.gui.util.makenode(doc, path)[source]

Return a document node containing a directory tree for the path. modified version of:


Create a nested dict for a package structure.


Print the contents of a dictionary.


Pretty print json data.


Print the contents of a list.


Return a dict containing full name vs. short name where short name is still unique within the given list. Each entry in the initial list of dotted names is assumed to be unique.

class openmdao.gui.zmqserver.ZMQServer(options)[source]

Bases: object

Wraps an an openmdao object with ZMQ and runs it as a server.

static get_options_parser()[source]

Create a parser for command line arguments.

static spawn_server(classpath, rep_url, pub_url, out_url)[source]

run server in it’s own process


Process command line arguments, create server, and start it up.

class openmdao.gui.zmqservermanager.ZMQServerManager(classpath, external=False)[source]

Bases: object

creates and keeps track of ZMQ servers for the given class


delete all servers


delete the server(s) associated with an id

get_out_server_url(server_id, ws_url)[source]

get the output socket web server for the server associated with an id, create one if none exists


get the url of the output socket for the server associated with an id

get_pub_server_url(server_id, ws_url)[source]

get the publisher socket web server for the server associated with an id, create one if none exists


get the url of the publisher socket for the server associated with an id


get server associated with an id, create one if none exists


class openmdao.gui.zmqstreamserver.ZMQStreamApp(zmqstream_addr, websocket_url)[source]

Bases: tornado.web.Application

A web application that serves a ZMQStream over a WebSocket.

class openmdao.gui.zmqstreamserver.ZMQStreamHandler(application, request, **kwargs)[source]

Bases: tornado.websocket.WebSocketHandler

A handler that forwards output from a ZMQStream to a WebSocket.

class openmdao.gui.zmqstreamserver.ZMQStreamServer(options)[source]

Bases: object

Runs an http server that serves a ZMQStream over a WebSocket.

static get_options_parser()[source]

create a parser for command line arguments


Start server listening on port & start the ioloop.

static spawn_process(zmq_url, ws_port, ws_url='/', external=False)[source]

run zmqstreamserver in it’s own process, mapping a zmq stream to a websocket.

args: zmq_url the url of the ZMQStream ws_port the port to serve the WebSocket on ws_url the url to map to the WebSocket


Process command line arguments, create server, and start it up.