- def fromJson(json, description):
- comment = getMember(json, 'comment', [unicode], description)
- type = Type.fromJson(mustGetMember(json, 'type', [dict, unicode],
- description),
- 'type of %s' % description)
- ephemeral = getMember(json, 'ephemeral', [bool], description)
- persistent = ephemeral != True
- return ColumnSchema(comment, type, persistent)
-
- def toJson(self):
- d = {"type": self.type.toJson()}
- if self.persistent == False:
- d["ephemeral"] = True
- if self.comment != None:
- d["comment"] = self.comment
- return d
-
-class Type:
- def __init__(self, key, keyRefTable=None, value=None, valueRefTable=None,
- min=1, max=1):
- self.key = key
- self.keyRefTable = keyRefTable
- self.value = value
- self.valueRefTable = valueRefTable
- self.min = min
- self.max = max
-
- @staticmethod
- def fromJson(json, description):
- if type(json) == unicode:
- return Type(json)
- else:
- key = mustGetMember(json, 'key', [unicode], description)
- keyRefTable = getMember(json, 'keyRefTable', [unicode], description)
- value = getMember(json, 'value', [unicode], description)
- valueRefTable = getMember(json, 'valueRefTable', [unicode], description)
- min = getMember(json, 'min', [int], description, 1)
- max = getMember(json, 'max', [int, unicode], description, 1)
- return Type(key, keyRefTable, value, valueRefTable, min, max)
-
- def toJson(self):
- if self.value == None and self.min == 1 and self.max == 1:
- return self.key
- else:
- d = {"key": self.key}
- if self.value != None:
- d["value"] = self.value
- if self.min != 1:
- d["min"] = self.min
- if self.max != 1:
- d["max"] = self.max
- return d
-
- def isScalar(self):
- return self.min == 1 and self.max == 1 and not self.value
-
- def isOptional(self):
- return self.min == 0 and self.max == 1
-
- def toEnglish(self):
- keyName = atomicTypeToEnglish(self.key, self.keyRefTable)
- if self.value:
- valueName = atomicTypeToEnglish(self.value, self.valueRefTable)
-
- if self.isScalar():
- return atomicTypeToEnglish(self.key, self.keyRefTable)
- elif self.isOptional():
- if self.value:
- return "optional %s-%s pair" % (keyName, valueName)