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. 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.


return current state as JSON


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, consisting 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.


Return this server’s pid.


Return the current model as a project archive.


Return this server’s _recorded_cmds.


get the value of the object with the given pathname

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

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

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

lets users log into the application simply by specifying a nickname, which is then saved in a cookie.

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]
class openmdao.gui.handlers.ReqHandler(application, request, **kwargs)[source]

Bases: tornado.web.RequestHandler

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


class openmdao.gui.handlers_projectdb.AddHandler(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 users projects directory.

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

Bases: openmdao.gui.handlers.ReqHandler

delete a project

get(*args, **kwargs)[source]
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.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

create a new (empty) project

get(*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.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, 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, consisting 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 users 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

get(*args, **kwargs)[source]
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.PlotHandler(application, request, **kwargs)[source]

Bases: openmdao.gui.handlers_workspace.ReqHandler

GET: open a websocket server to supply updated valaues 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 fom 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.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.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, 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)[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


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.

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, using 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.


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 contains 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)[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='/')[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