def wrap(self, err: UntypyTypeError) -> UntypyTypeError: (original_expected, _ind) = err.next_type_and_indicator() err = ArgumentExecutionContext(self.wf, None, self.arg_name).wrap(err) responsable = WrappedFunction.find_location(self.wf) (decl, ind) = err.next_type_and_indicator() err = err.with_frame( Frame(decl, ind, declared=self.wf.declared(), responsable=responsable)) err = err.with_note( f"The argument '{self.arg_name}' of method '{WrappedFunction.find_original(self.wf).__name__}' violates the {self.wf.protocol.protocol_type()} '{self.wf.protocol.proto.__name__}'." ) err = err.with_note( f"The annotation '{original_expected}' is incompatible with the {self.wf.protocol.protocol_type()}'s annotation '{self.wf.checker_for(self.arg_name).describe()}'\nwhen checking against the following value:" ) previous_chain = UntypyTypeError( self.me, f"{self.wf.protocol.protoname()}" ).with_note( f"Type '{type(self.me).__name__}' does not implement {self.wf.protocol.protocol_type()} '{self.wf.protocol.protoname()}' correctly." ) previous_chain = self.ctx.wrap(previous_chain) # err = err.with_inverted_responsibility_type() return err.with_previous_chain(previous_chain)
def wrap(self, err: UntypyTypeError) -> UntypyTypeError: (original_expected, _ind) = err.next_type_and_indicator() err = ArgumentExecutionContext(self.wf, None, self.arg_name).wrap(err) responsable = WrappedFunction.find_location(self.wf) (decl, ind) = err.next_type_and_indicator() err = err.with_frame( Frame(decl, ind, declared=self.wf.declared(), responsable=responsable)) err = err.with_note( f"Argument {self.arg_name} of method {WrappedFunction.find_original(self.wf).__name__} violates the type declared by the {self.wf.protocol.protocol_type()} {self.wf.protocol.proto.__name__}." ) err = err.with_note( f"Annotation {original_expected} is incompatible with the {self.wf.protocol.protocol_type()}'s annotation {self.wf.checker_for(self.arg_name).describe()}." ) previous_chain = UntypyTypeError( self.me, f"{self.wf.protocol.protoname()}" ).with_header( f"{type(self.me).__name__} does not implement {self.wf.protocol.protocol_type()} {self.wf.protocol.protoname()} correctly." ) previous_chain = self.ctx.wrap(previous_chain) # err = err.with_inverted_responsibility_type() return err.with_previous_chain(previous_chain)
def wrap(self, err: UntypyTypeError) -> UntypyTypeError: err = ReturnExecutionContext(self.wf).wrap(err) if err.responsibility_type is self.invert: return err responsable = WrappedFunction.find_location(self.wf) (decl, ind) = err.next_type_and_indicator() err = err.with_inverted_responsibility_type() err = err.with_frame( Frame(decl, ind, declared=self.wf.declared(), responsable=responsable)) inner = self.wf.inner if isinstance(inner, WrappedFunction): err = err.with_note( f"The return value of method '{WrappedFunction.find_original(self.wf).__name__}' does violate the {self.wf.protocol.protocol_type()} '{self.wf.protocol.proto.__name__}'." ) err = err.with_note( f"The annotation '{inner.checker_for('return').describe()}' is incompatible with the {self.wf.protocol.protocol_type()}'s annotation '{self.wf.checker_for('return').describe()}'\nwhen checking against the following value:" ) previous_chain = UntypyTypeError( self.me, f"{self.wf.protocol.protoname()}" ).with_note( f"Type '{type(self.me).__name__}' does not implement {self.wf.protocol.protocol_type()} '{self.wf.protocol.protoname()}' correctly." ) previous_chain = self.ctx.wrap(previous_chain) return err.with_previous_chain(previous_chain)
def wrap(self, err: UntypyTypeError) -> UntypyTypeError: (original_expected, _ind) = err.next_type_and_indicator() err = ArgumentExecutionContext(self.tc.inner, None, self.arg_name).wrap(err) func_decl = WrappedFunction.find_location(self.tc.inner) name = WrappedFunction.find_original(self.tc.inner).__name__ (decl, ind) = err.next_type_and_indicator() err = err.with_frame( Frame(decl, ind, declared=None, responsable=func_decl)) previous_chain = UntypyTypeError( f"def {name}{self.tc.inner.describe()}", f"{self.tc.describe()}") (decl, ind) = previous_chain.next_type_and_indicator() previous_chain = previous_chain.with_frame( Frame(decl, ind, declared=func_decl, responsable=None)) err = err.with_note( f"The argument '{self.arg_name}' of method '{name}' violates the signature of {self.tc.describe()}." ) previous_chain = self.upper.wrap(previous_chain) return err.with_previous_chain(previous_chain)
def wrap(self, err: UntypyTypeError) -> UntypyTypeError: full = self.upper.wrap(err) # now remove responsability in frames: frames_to_add = [] for frame in full.frames: if frame not in err.frames: frame.responsable = None frames_to_add.append(frame) for frame in frames_to_add: err = err.with_frame(frame) for note in full.notes: err = err.with_note(note) if full.previous_chain is not None: err = err.with_previous_chain(full.previous_chain) return err