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.

Files changed (23) hide show
  1. {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/PKG-INFO +5 -5
  2. {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/README.md +4 -4
  3. {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/main.py +7 -0
  4. {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/apply_similar.py +23 -6
  5. {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/pyproject.toml +1 -1
  6. {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/__init__.py +0 -0
  7. {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/__main__.py +0 -0
  8. {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/api/__init__.py +0 -0
  9. {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/api/client.py +0 -0
  10. {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/api/errors.py +0 -0
  11. {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/color_log.py +0 -0
  12. {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/constants.py +0 -0
  13. {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/__init__.py +0 -0
  14. {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/authorize.py +0 -0
  15. {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/call_api.py +0 -0
  16. {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/clear_negotiations.py +0 -0
  17. {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/list_resumes.py +0 -0
  18. {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/refresh_token.py +0 -0
  19. {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/update_resumes.py +0 -0
  20. {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/operations/whoami.py +0 -0
  21. {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/telemetry_client.py +0 -0
  22. {hh_applicant_tool-0.3.9 → hh_applicant_tool-0.4.0}/hh_applicant_tool/types.py +0 -0
  23. {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.9
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
- [Исходники сервера](https://gist.github.com/s3rgeym/b9fb04ef529a511326413c1090597ac5)
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
- [Исходники сервера](https://gist.github.com/s3rgeym/b9fb04ef529a511326413c1090597ac5)
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)]):
@@ -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 = None,
160
- reply_message: str | None = 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._collect_vacancy_telemetry(telemetry_data, vacancies)
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
- employer_id
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
- self._send_telemetry(telemetry_client, telemetry_data)
365
+ if self.enable_telemetry:
366
+ # Я собираюсь выложить контакты херок в общественный доступ
367
+ self._send_telemetry(telemetry_client, telemetry_data)
351
368
 
352
369
  def _get_vacancies(
353
370
  self,
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "hh-applicant-tool"
3
- version = "0.3.9"
3
+ version = "0.4.0"
4
4
  description = ""
5
5
  authors = ["Senior YAML Developer <yamldeveloper@proton.me>"]
6
6
  readme = "README.md"