hh-applicant-tool 0.3.9__tar.gz → 0.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of hh-applicant-tool might be problematic. Click here for more details.
- {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/PKG-INFO +5 -5
- {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/README.md +4 -4
- {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/main.py +7 -0
- {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/apply_similar.py +23 -6
- {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/pyproject.toml +1 -1
- {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/__init__.py +0 -0
- {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/__main__.py +0 -0
- {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/api/__init__.py +0 -0
- {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/api/client.py +0 -0
- {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/api/errors.py +0 -0
- {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/color_log.py +0 -0
- {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/constants.py +0 -0
- {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/__init__.py +0 -0
- {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/authorize.py +0 -0
- {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/call_api.py +0 -0
- {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/clear_negotiations.py +0 -0
- {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/list_resumes.py +0 -0
- {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/refresh_token.py +0 -0
- {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/update_resumes.py +0 -0
- {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/whoami.py +0 -0
- {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/telemetry_client.py +0 -0
- {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/types.py +0 -0
- {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: hh-applicant-tool
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary:
|
|
5
5
|
Author: Senior YAML Developer
|
|
6
6
|
Author-email: yamldeveloper@proton.me
|
|
@@ -284,6 +284,8 @@ https://hh.ru/employer/1918903
|
|
|
284
284
|
|
|
285
285
|
### Сбор данных
|
|
286
286
|
|
|
287
|
+
> Данный функционал можно отключить с помощью специльного флага, но ради котят и из-за ненависти к херкам не делайте этого!
|
|
288
|
+
|
|
287
289
|
Утилита собирает и передает на сервер разработчика следующую информацию:
|
|
288
290
|
|
|
289
291
|
1. Название вакансии.
|
|
@@ -297,11 +299,9 @@ https://hh.ru/employer/1918903
|
|
|
297
299
|
1. Название компании.
|
|
298
300
|
1. Тип компании.
|
|
299
301
|
1. Описание компании.
|
|
300
|
-
1. Ссылка на сайт компании.
|
|
302
|
+
1. Ссылка на сайт компании.
|
|
301
303
|
1. Город, в котором находится компания.
|
|
302
304
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
!!! УТИЛИТА НЕ СОБИРАЕТ НИКАКИХ ПЕРСОНАЛЬНЫХ ДАННЫХ ПОЛЬЗОВАТЕЛЕЙ (IP ТОЖЕ НЕ СОХРАНЯЕТ) — ТОЛЬКО ДАННЫЕ ВСЯКИХ РАБОТАДАТЕЛЕЙ И ИХ ОВЧАРОК. ТАК ЖЕ Я ОБЕЩАЮ, ЧТО УТИЛИТА ВСЕГДА БУДЕТ БЕСПЛАТНОЙ, ВСЕ КТО ЕЮ ПЫТАЮТСЯ ТОРГОВАТЬ — УЕБКИ И У НИХ ПОЧЕРНЕЕТ И ОТВАЛИТСЯ ХУЙ. ЕДИНСТВЕННАЯ ПЛАТА ЗА ЕЕ ИСПОЛЬЗОВАНИЕ — ЭТО ПОМОЩЬ В ПАРСИНГЕ САЙТА HEADHUNTER (МЕНЯ ИНТЕРЕСУЕТ ЕГО БАЗА КОМПАНИЙ)
|
|
305
|
+
**УТИЛИТА НЕ ПЕРЕДАЕТ НИКАКИХ ПЕРСОНАЛЬНЫХ ДАННЫХ ПОЛЬЗОВАТЕЛЕЙ — ТОЛЬКО ДАННЫЕ ВСЯКИХ РАБОТАДАТЕЛЕЙ И ИХ ОВЧАРОК. СЕРВЕР НЕ ХРАНИТ IP ОТПРАВИТЕЛЯ. ЛОГИ НА СЕРВЕРЕ НЕ ВЕДУТСЯ. ТАК ЖЕ Я ОБЕЩАЮ, ЧТО УТИЛИТА ВСЕГДА БУДЕТ БЕСПЛАТНОЙ, ВСЕ КТО ЕЮ ПЫТАЮТСЯ ТОРГОВАТЬ — УЕБКИ, И У НИХ ПОЧЕРНЕЕТ И ОТВАЛИТСЯ ХУЙ. ЕДИНСТВЕННАЯ ПЛАТА ЗА ЕЕ ИСПОЛЬЗОВАНИЕ — ЭТО ПОМОЩЬ В ПАРСИНГЕ САЙТА HEADHUNTER (МЕНЯ ИНТЕРЕСУЕТ ЕГО БАЗА КОМПАНИЙ).**
|
|
306
306
|
|
|
307
307
|
|
|
@@ -265,6 +265,8 @@ https://hh.ru/employer/1918903
|
|
|
265
265
|
|
|
266
266
|
### Сбор данных
|
|
267
267
|
|
|
268
|
+
> Данный функционал можно отключить с помощью специльного флага, но ради котят и из-за ненависти к херкам не делайте этого!
|
|
269
|
+
|
|
268
270
|
Утилита собирает и передает на сервер разработчика следующую информацию:
|
|
269
271
|
|
|
270
272
|
1. Название вакансии.
|
|
@@ -278,10 +280,8 @@ https://hh.ru/employer/1918903
|
|
|
278
280
|
1. Название компании.
|
|
279
281
|
1. Тип компании.
|
|
280
282
|
1. Описание компании.
|
|
281
|
-
1. Ссылка на сайт компании.
|
|
283
|
+
1. Ссылка на сайт компании.
|
|
282
284
|
1. Город, в котором находится компания.
|
|
283
285
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
!!! УТИЛИТА НЕ СОБИРАЕТ НИКАКИХ ПЕРСОНАЛЬНЫХ ДАННЫХ ПОЛЬЗОВАТЕЛЕЙ (IP ТОЖЕ НЕ СОХРАНЯЕТ) — ТОЛЬКО ДАННЫЕ ВСЯКИХ РАБОТАДАТЕЛЕЙ И ИХ ОВЧАРОК. ТАК ЖЕ Я ОБЕЩАЮ, ЧТО УТИЛИТА ВСЕГДА БУДЕТ БЕСПЛАТНОЙ, ВСЕ КТО ЕЮ ПЫТАЮТСЯ ТОРГОВАТЬ — УЕБКИ И У НИХ ПОЧЕРНЕЕТ И ОТВАЛИТСЯ ХУЙ. ЕДИНСТВЕННАЯ ПЛАТА ЗА ЕЕ ИСПОЛЬЗОВАНИЕ — ЭТО ПОМОЩЬ В ПАРСИНГЕ САЙТА HEADHUNTER (МЕНЯ ИНТЕРЕСУЕТ ЕГО БАЗА КОМПАНИЙ)
|
|
286
|
+
**УТИЛИТА НЕ ПЕРЕДАЕТ НИКАКИХ ПЕРСОНАЛЬНЫХ ДАННЫХ ПОЛЬЗОВАТЕЛЕЙ — ТОЛЬКО ДАННЫЕ ВСЯКИХ РАБОТАДАТЕЛЕЙ И ИХ ОВЧАРОК. СЕРВЕР НЕ ХРАНИТ IP ОТПРАВИТЕЛЯ. ЛОГИ НА СЕРВЕРЕ НЕ ВЕДУТСЯ. ТАК ЖЕ Я ОБЕЩАЮ, ЧТО УТИЛИТА ВСЕГДА БУДЕТ БЕСПЛАТНОЙ, ВСЕ КТО ЕЮ ПЫТАЮТСЯ ТОРГОВАТЬ — УЕБКИ, И У НИХ ПОЧЕРНЕЕТ И ОТВАЛИТСЯ ХУЙ. ЕДИНСТВЕННАЯ ПЛАТА ЗА ЕЕ ИСПОЛЬЗОВАНИЕ — ЭТО ПОМОЩЬ В ПАРСИНГЕ САЙТА HEADHUNTER (МЕНЯ ИНТЕРЕСУЕТ ЕГО БАЗА КОМПАНИЙ).**
|
|
287
287
|
|
|
@@ -36,6 +36,7 @@ class Namespace(argparse.Namespace):
|
|
|
36
36
|
delay: float
|
|
37
37
|
user_agent: str
|
|
38
38
|
proxy_url: str
|
|
39
|
+
disable_telemetry: bool
|
|
39
40
|
|
|
40
41
|
|
|
41
42
|
def get_proxies(args: Namespace) -> dict[Literal["http", "https"], str | None]:
|
|
@@ -103,6 +104,12 @@ class HHApplicantTool:
|
|
|
103
104
|
parser.add_argument(
|
|
104
105
|
"--proxy-url", help="Прокси, используемый для запросов к API"
|
|
105
106
|
)
|
|
107
|
+
parser.add_argument(
|
|
108
|
+
"--disable-telemetry",
|
|
109
|
+
default=False,
|
|
110
|
+
action=argparse.BooleanOptionalAction,
|
|
111
|
+
help="Отключить телеметрию",
|
|
112
|
+
)
|
|
106
113
|
subparsers = parser.add_subparsers(help="commands")
|
|
107
114
|
package_dir = Path(__file__).resolve().parent / OPERATIONS
|
|
108
115
|
for _, module_name, _ in iter_modules([str(package_dir)]):
|
{hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/apply_similar.py
RENAMED
|
@@ -99,6 +99,20 @@ class Operation(BaseOperation):
|
|
|
99
99
|
return min(min_interval, max_interval), max(min_interval, max_interval)
|
|
100
100
|
|
|
101
101
|
def run(self, args: Namespace) -> None:
|
|
102
|
+
self.enable_telemetry = True
|
|
103
|
+
if args.disable_telemetry:
|
|
104
|
+
print(
|
|
105
|
+
"👁️ Телеметрия используется только для сбора данных о работодателях и их вакансиях, персональные данные пользователей не передаются на сервер."
|
|
106
|
+
)
|
|
107
|
+
if (
|
|
108
|
+
input("Вы действительно хотите отключить телеметрию (д/Н)? ")
|
|
109
|
+
.lower()
|
|
110
|
+
.startswith(("д", "y"))
|
|
111
|
+
):
|
|
112
|
+
self.enable_telemetry = False
|
|
113
|
+
logger.info("Телеметрия отключена")
|
|
114
|
+
else:
|
|
115
|
+
logger.info("Телеметрия включена")
|
|
102
116
|
api = get_api(args)
|
|
103
117
|
resume_id = self._get_resume_id(args, api)
|
|
104
118
|
application_messages = self._get_application_messages(args)
|
|
@@ -156,8 +170,8 @@ class Operation(BaseOperation):
|
|
|
156
170
|
message_min_interval: float,
|
|
157
171
|
message_max_interval: float,
|
|
158
172
|
order_by: str,
|
|
159
|
-
search: str | None
|
|
160
|
-
reply_message: str | None
|
|
173
|
+
search: str | None,
|
|
174
|
+
reply_message: str | None,
|
|
161
175
|
) -> None:
|
|
162
176
|
telemetry_client = TelemetryClient(proxies=api.proxies)
|
|
163
177
|
telemetry_data = defaultdict(dict)
|
|
@@ -172,7 +186,8 @@ class Operation(BaseOperation):
|
|
|
172
186
|
search=search,
|
|
173
187
|
)
|
|
174
188
|
|
|
175
|
-
self.
|
|
189
|
+
if self.enable_telemetry:
|
|
190
|
+
self._collect_vacancy_telemetry(telemetry_data, vacancies)
|
|
176
191
|
|
|
177
192
|
me = api.get("/me")
|
|
178
193
|
|
|
@@ -287,7 +302,8 @@ class Operation(BaseOperation):
|
|
|
287
302
|
employer_id = vacancy.get("employer", {}).get("id")
|
|
288
303
|
|
|
289
304
|
if (
|
|
290
|
-
|
|
305
|
+
self.enable_telemetry
|
|
306
|
+
and employer_id
|
|
291
307
|
and employer_id not in telemetry_data["employers"]
|
|
292
308
|
and 200 > len(telemetry_data["employers"])
|
|
293
309
|
):
|
|
@@ -346,8 +362,9 @@ class Operation(BaseOperation):
|
|
|
346
362
|
|
|
347
363
|
print("📝 Отклики на вакансии разосланы!")
|
|
348
364
|
|
|
349
|
-
|
|
350
|
-
|
|
365
|
+
if self.enable_telemetry:
|
|
366
|
+
# Я собираюсь выложить контакты херок в общественный доступ
|
|
367
|
+
self._send_telemetry(telemetry_client, telemetry_data)
|
|
351
368
|
|
|
352
369
|
def _get_vacancies(
|
|
353
370
|
self,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/__init__.py
RENAMED
|
File without changes
|
{hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/authorize.py
RENAMED
|
File without changes
|
{hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/call_api.py
RENAMED
|
File without changes
|
|
File without changes
|
{hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/list_resumes.py
RENAMED
|
File without changes
|
{hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/refresh_token.py
RENAMED
|
File without changes
|
{hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/update_resumes.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|