Пример #1
0
	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
Пример #2
0
 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)
Пример #3
0
 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
Пример #4
0
	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
Пример #5
0
 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
Пример #6
0
	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
Пример #7
0
	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
Пример #8
0
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")
Пример #9
0
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}."
        )
Пример #10
0
	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)
Пример #11
0
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
Пример #12
0
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