#! @PYTHON@
from datetime import date
+import ovs.db.error
+import ovs.db.schema
import getopt
import os
import re
argv0 = sys.argv[0]
-def printEdge(tableName, baseType, label):
- if baseType.refTable:
+def printEdge(tableName, type, baseType, label):
+ if baseType.ref_table_name:
+ if type.n_min == 0:
+ if type.n_max == 1:
+ arity = "?"
+ elif type.n_max == sys.maxint:
+ arity = "*"
+ else:
+ arity = "{,%d}" % type.n_max
+ elif type.n_min == 1:
+ if type.n_max == 1:
+ arity = ""
+ elif type.n_max == sys.maxint:
+ arity = "+"
+ else:
+ arity = "{1,%d}" % type.n_max
+
options = {}
- options['label'] = '"%s"' % label
- if baseType.refType == 'weak':
+ options['label'] = '"%s%s"' % (label, arity)
+ if baseType.ref_type == 'weak':
options['constraint'] = 'false'
+ options['style'] = 'dotted'
print "\t%s -> %s [%s];" % (
tableName,
- baseType.refTable,
+ baseType.ref_table_name,
', '.join(['%s=%s' % (k,v) for k,v in options.items()]))
def schemaToDot(schemaFile):
- schema = DbSchema.fromJson(ovs.json.from_file(schemaFile))
+ schema = ovs.db.schema.DbSchema.from_json(ovs.json.from_file(schemaFile))
print "digraph %s {" % schema.name
+ print '\tsize="6.5,4";'
+ print '\tmargin="0";'
+ print "\tnode [shape=box];"
+ print "\tedge [dir=none, arrowhead=none, arrowtail=none];"
for tableName, table in schema.tables.iteritems():
- print '\tsize="6.5,4";'
- print '\tmargin="0";'
- print "\tnode [shape=box];"
- print "\t%s;" % tableName
+ options = {}
+ if table.is_root:
+ options['style'] = 'bold'
+ print "\t%s [%s];" % (
+ tableName,
+ ', '.join(['%s=%s' % (k,v) for k,v in options.items()]))
for columnName, column in table.columns.iteritems():
if column.type.value:
- printEdge(tableName, column.type.key, "%s key" % columnName)
- printEdge(tableName, column.type.value, "%s value" % columnName)
+ printEdge(tableName, column.type, column.type.key, "%s key" % columnName)
+ printEdge(tableName, column.type, column.type.value, "%s value" % columnName)
else:
- printEdge(tableName, column.type.key, columnName)
+ printEdge(tableName, column.type, column.type.key, columnName)
print "}";
def usage():
print "ovsdb-dot (Open vSwitch) @VERSION@"
else:
sys.exit(0)
-
+
if len(args) != 1:
sys.stderr.write("%s: exactly 1 non-option argument required "
"(use --help for help)\n" % argv0)
sys.exit(1)
schemaToDot(args[0])
-
- except Error, e:
+
+ except ovs.db.error.Error, e:
sys.stderr.write("%s: %s\n" % (argv0, e.msg))
sys.exit(1)