예제 #1
0
class JobMonitor:
    """Класс JobMonitor реализует помощник кадрового менеджера.

    Поля:
      - self.mailer (mailer.Mailer);
      - self.hh (hh.Hh);
      - self.reporter (reporter.Reporter).
    """
    def __init__(self):
        self.mailer = Mailer()
        self.hh = Hh()
        self.reporter = Reporter()

    def __str__(self):
        return "JobMonitor v 0.1"

    def run(self, timeout):
        sec_old = None
        while True:
            sec_new = time.perf_counter()
            if sec_old is None or sec_new - sec_old > timeout:
                utils.log("Проверяю...")

                requests = self.mailer.check_requests()
                utils.log("Найдено новых запросов: {}".format(len(requests)))

                for i, request in enumerate(requests, start=1):
                    utils.log("Обработка запроса №{}: {}".format(i, request))

                    vacancies = self.hh.search(
                        title=request['title'],
                        area=request['area'],
                        experience=request['experience'],
                        salary=request['salary'])
                    utils.log("Найдено вакансий: {}".format(len(vacancies)))
                    for vacancy in vacancies:
                        utils.log(vacancy)

                    filename = self.reporter.make(request, vacancies)
                    utils.log("Документ \"{}\" сформирован".format(filename))

                    self.mailer.send_mail(request, filename)
                    utils.log("Письмо отправлено!")

                sec_old = sec_new
            else:
                utils.log("Ожидаю.")
                time.sleep(5)
                self.mailer.noop()
class JobMonitor:
    """Класс JobMonitor реализует помощник кадрового менеджера.

    Поля:
      - self.mailer (mailer.Mailer);
      - self.hh (hh.Hh);
      - self.reporter (reporter.Reporter).

    Методы:
      - см. описание методов.
    """
    def __init__(self):
        """Инициализация класса.

        Создать атрибуты self.mailer, self.hh, self.reporter.
        """
        self.mailer = Mailer()
        self.hh = Hh()
        self.reporter = Reporter()
        #существуют ли экземпляры класса для верхних классов?

    def __str__(self):
        """Вернуть информацию о классе."""
        return "JobMonitor v 0.1"

    def run(self, timeout):
        """Проверять и отвечать на заявки каждые 'timeout' секунд."""
        sec_old = None
        while True:
            # Если 'sec_old' не установлен или не прошло нужное время,
            # поддерживаем соединение
            sec_new = time.perf_counter()
            if sec_old is None or sec_new - sec_old > timeout:
                utils.log("Проверяю...")

                # 1. Проверка почты и запросов клиентов
                requests = self.mailer.check_requests()
                utils.log("Найдено новых запросов: {}".format(len(requests)))

                # 2. Обработка запросов
                for i, request in enumerate(requests, start=1):
                    utils.log("Обработка запроса №{}: {}".format(i, request))

                    # 2.1. Поиск вакансий
                    print(request['title'],
                          request['area'],
                          request.get('salary', None),
                          request.get('experience', None),
                          sep='\n')

                    vacancies = self.hh.search(request['title'], 'Москва',
                                               request.get('salary', None),
                                               request.get('experience', None))
                    utils.log("Найдено вакансий: {}".format(len(vacancies)))
                    for vacancy in vacancies:
                        utils.log(vacancy)

                    # 2.2. Формирование отчета
                    filename = self.reporter.make(request, vacancies)
                    utils.log("Документ \"{}\" сформирован".format(filename))

                    # 2.3. Отправка ответа
                    self.mailer.send_mail(request, filename)
                    utils.log("Письмо отправлено!")

                sec_old = sec_new
            else:
                utils.log("Ожидаю.")
                # "Заморозка" потока на 5 с.
                time.sleep(5)
                self.mailer.noop()