def mergeThings(self, out, lst): try: assert allEqualTo(out, lst, type), (out, lst) mergerFunc = self.mergersFor(out).get(None, None) if mergerFunc is not None: mergerFunc(self, out, lst) elif hasattr(out, '__dict__'): self.mergeObjects(out, lst) elif isinstance(out, list): self.mergeLists(out, lst) else: assert allEqualTo(out, lst), (out, lst) except Exception as e: e.args = e.args + (type(out).__name__,) raise
def mergeThings(self, out, lst): if not allEqualTo(out, lst, type): raise MismatchedTypes(self, expected=type(out).__name__, got=[type(x).__name__ for x in lst]) mergerFunc = self.mergersFor(out).get(None, None) if mergerFunc is not None: mergerFunc(self, out, lst) elif hasattr(out, '__dict__'): self.mergeObjects(out, lst) elif isinstance(out, list): self.mergeLists(out, lst) else: if not allEqualTo(out, lst): raise ShouldBeConstant(self, expected=out, got=lst)
def mergeThings(self, out, lst): try: assert allEqualTo(out, lst, type), (out, lst) mergerFunc = self.mergersFor(out).get(None, None) if mergerFunc is not None: mergerFunc(self, out, lst) elif hasattr(out, '__dict__'): self.mergeObjects(out, lst) elif isinstance(out, list): self.mergeLists(out, lst) else: assert allEqualTo(out, lst), (out, lst) except Exception as e: e.args = e.args + (type(out).__name__, ) raise
def checkFormatEnum(self, out, lst, validate=lambda _: True): fmt = out.Format formatEnum = out.formatEnum ok = False try: fmt = formatEnum(fmt) except ValueError: pass else: ok = validate(fmt) if not ok: raise UnsupportedFormat( self, subtable=type(out).__name__, value=fmt ) expected = fmt got = [] for v in lst: fmt = getattr(v, "Format", None) try: fmt = formatEnum(fmt) except ValueError: pass got.append(fmt) if not allEqualTo(expected, got): raise InconsistentFormats( self, subtable=type(out).__name__, expected=expected, got=got, ) return expected
def mergeLists(self, out, lst): assert allEqualTo(out, lst, len), (len(out), [len(v) for v in lst]) for i, (value, values) in enumerate(zip(out, zip(*lst))): try: self.mergeThings(value, values) except Exception as e: e.args = e.args + ('[%d]' % i, ) raise
def mergeLists(self, out, lst): assert allEqualTo(out, lst, len), (len(out), [len(v) for v in lst]) for i,(value,values) in enumerate(zip(out, zip(*lst))): try: self.mergeThings(value, values) except Exception as e: e.args = e.args + ('[%d]' % i,) raise
def mergeLists(self, out, lst): if not allEqualTo(out, lst, len): raise LengthsDiffer(self, expected=len(out), got=[len(x) for x in lst]) for i,(value,values) in enumerate(zip(out, zip(*lst))): try: self.mergeThings(value, values) except VarLibMergeError as e: e.stack.append('[%d]' % i) raise
def merge(merger, self, lst): if not allEqualTo(self.Format, (l.Format for l in lst)): raise InconsistentFormats(self, subtable="mark-to-mark positioning lookup", expected=self.Format, got=[l.Format for l in lst]) if self.Format == 1: _MarkBasePosFormat1_merge(self, lst, merger, 'Mark1', 'Mark2') else: raise UnsupportedFormat(self, subtable="mark-to-mark positioning lookup")
def merge(merger, self, lst): if not allEqualTo(self.Format, (l.Format for l in lst)): raise VarLibMergeError( f"MarkMarkPos formats inconsistent across masters, " f"expected {self.Format} but got {[l.Format for l in lst]}.") if self.Format == 1: _MarkBasePosFormat1_merge(self, lst, merger, 'Mark1', 'Mark2') else: raise VarLibMergeError( f"Cannot merge MarkMarkPos lookup, unsupported format {self.Format}." )
def mergeThings(self, out, lst): if not allEqualTo(out, lst, type): raise MismatchedTypes(self, expected=type(out).__name__, got=[type(x).__name__ for x in lst] ) mergerFunc = self.mergersFor(out).get(None, None) if mergerFunc is not None: mergerFunc(self, out, lst) elif isinstance(out, enum.Enum): # need to special-case Enums as have __dict__ but are not regular 'objects', # otherwise mergeObjects/mergeThings get trapped in a RecursionError if not allEqualTo(out, lst): raise ShouldBeConstant(self, expected=out, got=lst) elif hasattr(out, '__dict__'): self.mergeObjects(out, lst) elif isinstance(out, list): self.mergeLists(out, lst) else: if not allEqualTo(out, lst): raise ShouldBeConstant(self, expected=out, got=lst)
def merge(merger, self, lst): assert allEqualTo(self.Format, (l.Format for l in lst)) if self.Format == 1: _MarkBasePosFormat1_merge(self, lst, merger, 'Mark1', 'Mark2') else: assert False