From 8baa2f145e5affc7546777c64af6f4df22a0ec33 Mon Sep 17 00:00:00 2001 From: "[object Object]" Date: Sat, 9 Nov 2024 05:18:14 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BD=D0=B5=D0=BC=D0=BD=D0=BE=D0=B3=D0=BE=20?= =?UTF-8?q?=D0=BE=D1=82=D1=80=D0=B5=D0=B4=D0=B0=D0=BA=D1=82=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hh_applicant_tool/main.py | 16 +++--- hh_applicant_tool/operations/apply_similar.py | 54 +++++++++++++------ 2 files changed, 45 insertions(+), 25 deletions(-) diff --git a/hh_applicant_tool/main.py b/hh_applicant_tool/main.py index 10202c8..cc8fa32 100644 --- a/hh_applicant_tool/main.py +++ b/hh_applicant_tool/main.py @@ -23,12 +23,10 @@ class BaseOperation(metaclass=ABCMeta): - def setup_parser(self, parser: argparse.ArgumentParser) -> None: - ... + def setup_parser(self, parser: argparse.ArgumentParser) -> None: ... @abstractmethod - def run(self, args: argparse.Namespace) -> None | int: - ... + def run(self, args: argparse.Namespace) -> None | int: ... OPERATIONS = "operations" @@ -41,12 +39,16 @@ class Namespace(argparse.Namespace): class HHApplicantTool: """Утилита для автоматизации действий соискателя на сайте hh.ru. - Описание, исходники и предложения: . + + Исходники и предложения: + + Группа поддержки: """ def create_parser(self) -> argparse.ArgumentParser: parser = argparse.ArgumentParser( description=self.__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter, ) parser.add_argument( "-c", @@ -82,9 +84,7 @@ def run(self, argv: Sequence[str] | None) -> None | int: logger.setLevel(log_level) handler = ColorHandler() # [C] Critical Error Occurred - handler.setFormatter( - logging.Formatter("[%(levelname).1s] %(message)s") - ) + handler.setFormatter(logging.Formatter("[%(levelname).1s] %(message)s")) logger.addHandler(handler) if args.run: try: diff --git a/hh_applicant_tool/operations/apply_similar.py b/hh_applicant_tool/operations/apply_similar.py index 2b02bc5..72fab8c 100644 --- a/hh_applicant_tool/operations/apply_similar.py +++ b/hh_applicant_tool/operations/apply_similar.py @@ -87,11 +87,22 @@ def run(self, args: Namespace) -> None: page_min_interval, page_max_interval = args.page_interval self._apply_similar( - api, resume_id, args.force_message, application_messages, apply_min_interval, apply_max_interval, page_min_interval, page_max_interval + api, + resume_id, + args.force_message, + application_messages, + apply_min_interval, + apply_max_interval, + page_min_interval, + page_max_interval, ) def _get_vacancies( - self, api: ApiClient, resume_id: str, page_min_interval: float, page_max_interval: float + self, + api: ApiClient, + resume_id: str, + page_min_interval: float, + page_max_interval: float, ) -> list[VacancyItem]: rv = [] per_page = 100 @@ -125,26 +136,35 @@ def _apply_similar( page_max_interval: float, ) -> None: item: VacancyItem - for item in self._get_vacancies(api, resume_id, page_min_interval, page_max_interval): + for item in self._get_vacancies( + api, resume_id, page_min_interval, page_max_interval + ): try: if item["has_test"]: - print('Пропускаем тест', item["alternate_url"]) + print("Пропускаем тест", item["alternate_url"]) + continue + + relations = item.get("relations", []) + + # Там черезжопно нужно хеш отклика получать чтобы его отменить + # if "got_response" in relations: + # # Тупая пизда ее даже не рассматривала + # print( + # "Отменяем заявку чтобы отправить ее снова", + # item["alternate_url"], + # ) + # api.delete(f"/negotiations/active/{item['id']}") + # elif relations: + if relations: + print("Пропускаем ответ на заявку", item["alternate_url"]) continue - relations = item.get('relations', []) - - if 'got_response' in relations: - # Тупая пизда ее даже не рассматривала - print('Отменяем заявку чтобы отправить ее снова', item["alternate_url"]) - api.delete(f"/negotiations/active/{item['id']}") - else relations: - print('Пропускаем ответ на зяавку', item["alternate_url"]) - continue - # Задержка перед отправкой отклика - interval = random.uniform(apply_min_interval, apply_max_interval) + interval = random.uniform( + apply_min_interval, apply_max_interval + ) time.sleep(interval) - + params = { "resume_id": resume_id, "vacancy_id": item["id"], @@ -154,7 +174,7 @@ def _apply_similar( else "" ), } - + res = api.post("/negotiations", params) assert res == {} print(