base.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from abc import ABC, abstractmethod
  2. __all__ = ("Formatter",)
  3. from pathlib import Path
  4. from prospector.message import Message
  5. class Formatter(ABC):
  6. def __init__(self, summary, messages, profile, paths_relative_to: Path = None):
  7. self.summary = summary
  8. self.messages = messages
  9. self.profile = profile
  10. self.paths_relative_to = paths_relative_to
  11. @abstractmethod
  12. def render(self, summary=True, messages=True, profile=False):
  13. raise NotImplementedError
  14. def _make_path(self, path: Path) -> str:
  15. if self.paths_relative_to is None:
  16. path = path.absolute()
  17. elif path.is_absolute():
  18. path = path.relative_to(self.paths_relative_to)
  19. return str(path)
  20. def _message_to_dict(self, message: Message) -> dict:
  21. loc = {
  22. "path": self._make_path(message.location.path),
  23. "module": message.location.module,
  24. "function": message.location.function,
  25. "line": message.location.line,
  26. "character": message.location.character,
  27. }
  28. return {
  29. "source": message.source,
  30. "code": message.code,
  31. "location": loc,
  32. "message": message.message,
  33. }