Назад к задачам
Junior — Senior
6

Создание и рассылка отчёта

Компании, где спрашивали:

Ubic
Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Необходимо выполнить ревью класса ReportGenerator, который реализует следующие функции:

  • формирование отчёта в виде обычного текста или HTML‑страницы;
  • запись полученного отчёта в файл;
  • отправку отчёта на указанный email‑адрес;
  • загрузку ранее сохранённого отчёта из файла.
class ReportGenerator:
    def __init__(self, data):
        self.data = data
        self.report = ""
        self.filename = "report.txt"
        self.report_type = "text"

    def generate_report(self):
        print("Generating report...")
        if self.report_type == "text":
            self.report = self._generate_text_report()
        elif self.report_type == "html":
            self.report = self._generate_html_report()
        else:
            print("Unsupported report type")
        print("Report generated.")

    def _generate_text_report(self):
        report = "Text Report\n"
        for item in self.data:
            report += f"- {item}\n"
        return report

    def _generate_html_report(self):
        report = "<html><body><h1>HTML Report</h1><ul>"
        for item in self.data:
            report += f"<li>{item}</li>"
        report += "</ul></body></html>"
        return report

    def save_report(self):
        with open(self.filename, "w") as f:
            f.write(self.report)
        print(f"Report saved to {self.filename}")

    def send_report(self, email):
        print(f"Sending report to {email}")
        if "@" not in email:
            raise Exception("Invalid email address")
        print("Report sent.")

    def load_previous_report(self):
        print("Loading previous report...")
        with open(self.filename, "r") as f:
            self.report = f.read()
        print("Previous report loaded.")