ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙfrom abc import ABC, abstractmethod __all__ = ("Formatter",) from pathlib import Path from prospector.message import Message class Formatter(ABC): def __init__(self, summary, messages, profile, paths_relative_to: Path = None): self.summary = summary self.messages = messages self.profile = profile self.paths_relative_to = paths_relative_to @abstractmethod def render(self, summary=True, messages=True, profile=False): raise NotImplementedError def _make_path(self, path: Path) -> str: if self.paths_relative_to is None: path = path.absolute() elif path.is_absolute(): path = path.relative_to(self.paths_relative_to) return str(path) def _message_to_dict(self, message: Message) -> dict: loc = { "path": self._make_path(message.location.path), "module": message.location.module, "function": message.location.function, "line": message.location.line, "character": message.location.character, } return { "source": message.source, "code": message.code, "location": loc, "message": message.message, }