ofproto: Fix treatment of out-of-band controllers.
[openvswitch] / ovsdb / OVSDB.py
index 5297229ff8a6cb0a6a8365a42031bd129ee9f178..6e426e57183484625933a3204409a1d1944ae8d9 100644 (file)
@@ -193,16 +193,28 @@ class Atom:
         elif self.type == 'uuid':
             return self.value.value
 
+# Returns integer x formatted in decimal with thousands set off by commas.
+def commafy(x):
+    return _commafy("%d" % x)
+def _commafy(s):
+    if s.startswith('-'):
+        return '-' + _commafy(s[1:])
+    elif len(s) <= 3:
+        return s
+    else:
+        return _commafy(s[:-3]) + ',' + _commafy(s[-3:])
+
 class BaseType:
     def __init__(self, type,
                  enum=None,
-                 refTable=None,
+                 refTable=None, refType="strong",
                  minInteger=None, maxInteger=None,
                  minReal=None, maxReal=None,
                  minLength=None, maxLength=None):
         self.type = type
         self.enum = enum
         self.refTable = refTable
+        self.refType = refType
         self.minInteger = minInteger
         self.maxInteger = maxInteger
         self.minReal = minReal
@@ -221,17 +233,23 @@ class BaseType:
                 enumType = Type(atomicType, None, 0, 'unlimited')
                 enum = Datum.fromJson(enumType, enum)
             refTable = getMember(json, 'refTable', [unicode], description)
+            refType = getMember(json, 'refType', [unicode], description)
+            if refType == None:
+                refType = "strong"
             minInteger = getMember(json, 'minInteger', [int, long], description)
             maxInteger = getMember(json, 'maxInteger', [int, long], description)
             minReal = getMember(json, 'minReal', [int, long, float], description)
             maxReal = getMember(json, 'maxReal', [int, long, float], description)
             minLength = getMember(json, 'minLength', [int], description)
             maxLength = getMember(json, 'minLength', [int], description)
-            return BaseType(atomicType, enum, refTable, minInteger, maxInteger, minReal, maxReal, minLength, maxLength)
+            return BaseType(atomicType, enum, refTable, refType, minInteger, maxInteger, minReal, maxReal, minLength, maxLength)
 
     def toEnglish(self, escapeLiteral=returnUnchanged):
         if self.type == 'uuid' and self.refTable:
-            return escapeLiteral(self.refTable)
+            s = escapeLiteral(self.refTable)
+            if self.refType == 'weak':
+                s = "weak reference to " + s
+            return s
         else:
             return self.type
 
@@ -246,13 +264,14 @@ class BaseType:
                                                  ', '.join(literals[1:-1]),
                                                  literals[-1])
         elif self.minInteger != None and self.maxInteger != None:
-            return 'in range [%d,%d]' % (self.minInteger, self.maxInteger)
+            return 'in range %s to %s' % (commafy(self.minInteger),
+                                         commafy(self.maxInteger))
         elif self.minInteger != None:
-            return 'at least %d' % self.minInteger
+            return 'at least %s' % commafy(self.minInteger)
         elif self.maxInteger != None:
-            return 'at most %d' % self.maxInteger
+            return 'at most %s' % commafy(self.maxInteger)
         elif self.minReal != None and self.maxReal != None:
-            return 'in range [%g, %g]' % (self.minReal, self.maxReal)
+            return 'in range %g to %g' % (self.minReal, self.maxReal)
         elif self.minReal != None:
             return 'at least %g' % self.minReal
         elif self.maxReal != None: