hh-applicant-tool 0.2.1__tar.gz → 0.2.2__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.2.1/README.md → hh_applicant_tool-0.2.2/PKG-INFO +26 -2
  2. hh_applicant_tool-0.2.1/PKG-INFO → hh_applicant_tool-0.2.2/README.md +10 -17
  3. {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/api/errors.py +6 -6
  4. {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/constants.py +1 -1
  5. {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/utils.py +1 -1
  6. {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/pyproject.toml +1 -1
  7. {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/__init__.py +0 -0
  8. {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/__main__.py +0 -0
  9. {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/api/__init__.py +0 -0
  10. {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/api/client.py +0 -0
  11. {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/color_log.py +0 -0
  12. {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/main.py +0 -0
  13. {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/__init__.py +0 -0
  14. {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/add_handler.py +0 -0
  15. {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/apply_similar.py +0 -0
  16. {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/authorize.py +0 -0
  17. {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/call_api.py +0 -0
  18. {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/clear_negotiations.py +0 -0
  19. {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/list_resumes.py +0 -0
  20. {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/refresh_token.py +0 -0
  21. {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/update_resumes.py +0 -0
  22. {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/whoami.py +0 -0
  23. {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/types.py +0 -0
@@ -1,6 +1,29 @@
1
+ Metadata-Version: 2.1
2
+ Name: hh-applicant-tool
3
+ Version: 0.2.2
4
+ Summary:
5
+ Author: Senior YAML Developer
6
+ Author-email: yamldeveloper@proton.me
7
+ Requires-Python: >=3.10,<4.0
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Programming Language :: Python :: 3.10
10
+ Classifier: Programming Language :: Python :: 3.11
11
+ Classifier: Programming Language :: Python :: 3.12
12
+ Requires-Dist: prettytable (>=3.6.0,<4.0.0)
13
+ Requires-Dist: requests (>=2.28.2,<3.0.0)
14
+ Description-Content-Type: text/markdown
15
+
1
16
  # HH Applicant Tool
2
17
 
3
- ![Publish to PyPI](https://github.com/s3rgeym/hh-applicant-tool/actions/workflows/publish.yml/badge.svg) [![PyPi Version](https://img.shields.io/pypi/v/hh-applicant-tool)](https://img.shields.io/pypi/v/hh-applicant-tool) [![Python Versions](https://img.shields.io/pypi/pyversions/hh-applicant-tool.svg)](https://img.shields.io/pypi/pyversions/hh-applicant-tool.svg) [![PyPI - Downloads](https://img.shields.io/pypi/dm/hh-applicant-tool)](https://img.shields.io/pypi/dm/hh-applicant-tool)
18
+ > ! Наложен мораторий на доработки/переработки. Разработка будет возобновлена после 10 звезд 💫 Вы, блять, сучары 7000 раз эту хуйню скачали и всего 5 звезд поставили. Просто охуеть! Сколько нужно скачек хотя бы ради 50 звезд?
19
+ > > Да в пизду это приложение я им не пользуюсь. Ищите работу заграницей. Нахуй вам hh? Эта страна еще 12 лет правления любителя шагов доброй лоли не выдержит
20
+
21
+ ![Publish to PyPI](https://github.com/s3rgeym/hh-applicant-tool/actions/workflows/publish.yml/badge.svg)
22
+ [![PyPi Version](https://img.shields.io/pypi/v/hh-applicant-tool)]()
23
+ [![Python Versions](https://img.shields.io/pypi/pyversions/hh-applicant-tool.svg)]()
24
+ [![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/s3rgeym/hh-applicant-tool)]()
25
+ [![PyPI - Downloads](https://img.shields.io/pypi/dm/hh-applicant-tool)]()
26
+ [![Total Downloads](https://static.pepy.tech/badge/hh-applicant-tool)]()
4
27
 
5
28
  Утилита для автоматизации действий на HH.RU таких как рассылка откликов на подходящие вакансии и обновление всех резюме.
6
29
 
@@ -105,7 +128,7 @@ https://hh.ru/employer/1918903
105
128
  | **update-resumes** | Обновить все резюме. Аналогично нажатию кнопки «Обновить дату». |
106
129
  | **apply-similar** | Откликнуться на все подходящие вакансии. Лимит = 200 в день |
107
130
  | **clear-negotiations** | Удаляет отказы и отменяет заявки, которые долго висят |
108
- | **call-api** | Вызов произвольного метода API с вводом результата. |
131
+ | **call-api** | Вызов произвольного метода API с выводом результата. |
109
132
  | **refresh-token** | Обновляет access_token. |
110
133
 
111
134
  Для начала нужно добавить обработчик протокола `hhandroid`, который используется Android-приложением для усложнения жизни честным автоматизаторам:
@@ -226,3 +249,4 @@ rm -f ~/.local/share/applications/hhandroid.desktop
226
249
  Утилита использует систему плагинов. Все они лежат в [operations](https://github.com/s3rgeym/hh-applicant-tool/tree/main/hh_applicant_tool/operations). Модули расположенные там автоматически добавляются как доступные операции. За основу для своего плагина можно взять [whoami.py](https://github.com/s3rgeym/hh-applicant-tool/tree/main/hh_applicant_tool/operations/whoami.py).
227
250
 
228
251
  Отдельные замечания у меня к API HH. Оно пиздец какое кривое. Например, при создании заявки возвращается пустой ответ либо редирект, хотя по логике должен возвраться созданный объект. Так же в ответах сервера нет `Content-Length`. Из-за этого нельзя узнать есть тело у ответа сервера нужно его пробовать прочитать. Я так понял там какой-то прокси оборачивает все запросы и отдает всегда `Transfer-Encoding: Chunked`. А еще он возвращает 502 ошибку, когда бекенд на Java падает либо долго отвечает (таймаут)? А вот [язык запросов](https://hh.ru/article/1175) мне понравился. Можно что-то типа этого использовать `NOT (!ID:123 OR !ID:456 OR !ID:789)` что бы отсеить какие-то вакансии.
252
+
@@ -1,20 +1,14 @@
1
- Metadata-Version: 2.1
2
- Name: hh-applicant-tool
3
- Version: 0.2.1
4
- Summary:
5
- Author: Senior YAML Developer
6
- Author-email: yamldeveloper@proton.me
7
- Requires-Python: >=3.10,<4.0
8
- Classifier: Programming Language :: Python :: 3
9
- Classifier: Programming Language :: Python :: 3.10
10
- Classifier: Programming Language :: Python :: 3.11
11
- Requires-Dist: prettytable (>=3.6.0,<4.0.0)
12
- Requires-Dist: requests (>=2.28.2,<3.0.0)
13
- Description-Content-Type: text/markdown
14
-
15
1
  # HH Applicant Tool
16
2
 
17
- ![Publish to PyPI](https://github.com/s3rgeym/hh-applicant-tool/actions/workflows/publish.yml/badge.svg) [![PyPi Version](https://img.shields.io/pypi/v/hh-applicant-tool)](https://img.shields.io/pypi/v/hh-applicant-tool) [![Python Versions](https://img.shields.io/pypi/pyversions/hh-applicant-tool.svg)](https://img.shields.io/pypi/pyversions/hh-applicant-tool.svg) [![PyPI - Downloads](https://img.shields.io/pypi/dm/hh-applicant-tool)](https://img.shields.io/pypi/dm/hh-applicant-tool)
3
+ > ! Наложен мораторий на доработки/переработки. Разработка будет возобновлена после 10 звезд 💫 Вы, блять, сучары 7000 раз эту хуйню скачали и всего 5 звезд поставили. Просто охуеть! Сколько нужно скачек хотя бы ради 50 звезд?
4
+ > > Да в пизду это приложение я им не пользуюсь. Ищите работу заграницей. Нахуй вам hh? Эта страна еще 12 лет правления любителя шагов доброй лоли не выдержит
5
+
6
+ ![Publish to PyPI](https://github.com/s3rgeym/hh-applicant-tool/actions/workflows/publish.yml/badge.svg)
7
+ [![PyPi Version](https://img.shields.io/pypi/v/hh-applicant-tool)]()
8
+ [![Python Versions](https://img.shields.io/pypi/pyversions/hh-applicant-tool.svg)]()
9
+ [![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/s3rgeym/hh-applicant-tool)]()
10
+ [![PyPI - Downloads](https://img.shields.io/pypi/dm/hh-applicant-tool)]()
11
+ [![Total Downloads](https://static.pepy.tech/badge/hh-applicant-tool)]()
18
12
 
19
13
  Утилита для автоматизации действий на HH.RU таких как рассылка откликов на подходящие вакансии и обновление всех резюме.
20
14
 
@@ -119,7 +113,7 @@ https://hh.ru/employer/1918903
119
113
  | **update-resumes** | Обновить все резюме. Аналогично нажатию кнопки «Обновить дату». |
120
114
  | **apply-similar** | Откликнуться на все подходящие вакансии. Лимит = 200 в день |
121
115
  | **clear-negotiations** | Удаляет отказы и отменяет заявки, которые долго висят |
122
- | **call-api** | Вызов произвольного метода API с вводом результата. |
116
+ | **call-api** | Вызов произвольного метода API с выводом результата. |
123
117
  | **refresh-token** | Обновляет access_token. |
124
118
 
125
119
  Для начала нужно добавить обработчик протокола `hhandroid`, который используется Android-приложением для усложнения жизни честным автоматизаторам:
@@ -240,4 +234,3 @@ rm -f ~/.local/share/applications/hhandroid.desktop
240
234
  Утилита использует систему плагинов. Все они лежат в [operations](https://github.com/s3rgeym/hh-applicant-tool/tree/main/hh_applicant_tool/operations). Модули расположенные там автоматически добавляются как доступные операции. За основу для своего плагина можно взять [whoami.py](https://github.com/s3rgeym/hh-applicant-tool/tree/main/hh_applicant_tool/operations/whoami.py).
241
235
 
242
236
  Отдельные замечания у меня к API HH. Оно пиздец какое кривое. Например, при создании заявки возвращается пустой ответ либо редирект, хотя по логике должен возвраться созданный объект. Так же в ответах сервера нет `Content-Length`. Из-за этого нельзя узнать есть тело у ответа сервера нужно его пробовать прочитать. Я так понял там какой-то прокси оборачивает все запросы и отдает всегда `Transfer-Encoding: Chunked`. А еще он возвращает 502 ошибку, когда бекенд на Java падает либо долго отвечает (таймаут)? А вот [язык запросов](https://hh.ru/article/1175) мне понравился. Можно что-то типа этого использовать `NOT (!ID:123 OR !ID:456 OR !ID:789)` что бы отсеить какие-то вакансии.
243
-
@@ -37,11 +37,11 @@ class ApiError(Exception):
37
37
  def response_headers(self) -> CaseInsensitiveDict:
38
38
  return self._response.headers
39
39
 
40
- def __getattr__(self, name: str) -> Any:
41
- try:
42
- return self._raw[name]
43
- except KeyError as ex:
44
- raise AttributeError(name) from ex
40
+ # def __getattr__(self, name: str) -> Any:
41
+ # try:
42
+ # return self._raw[name]
43
+ # except KeyError as ex:
44
+ # raise AttributeError(name) from ex
45
45
 
46
46
  def __str__(self) -> str:
47
47
  return str(self._raw)
@@ -58,7 +58,7 @@ class ClientError(ApiError):
58
58
  class BadRequest(ClientError):
59
59
  @property
60
60
  def limit_exceeded(self) -> bool:
61
- return any(x["value"] == "limit_exceeded" for x in self.errors)
61
+ return any(x["value"] == "limit_exceeded" for x in self._raw["errors"])
62
62
 
63
63
 
64
64
  class Forbidden(ClientError):
@@ -1,4 +1,4 @@
1
- DEFAULT_USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
1
+ DEFAULT_USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
2
2
  ANDROID_CLIENT_ID = (
3
3
  "HIOMIAS39CA9DICTA7JIO64LQKQJF5AGIK74G9ITJKLNEDAOH5FHS5G1JI7FOEGD"
4
4
  )
@@ -7,7 +7,7 @@ from pathlib import Path
7
7
  from threading import Lock
8
8
  from typing import Any
9
9
 
10
- print_err = partial(print, file=sys.stderr)
10
+ print_err = partial(print, file=sys.stderr, flush=True)
11
11
 
12
12
 
13
13
  class AttrDict(dict):
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "hh-applicant-tool"
3
- version = "0.2.1"
3
+ version = "0.2.2"
4
4
  description = ""
5
5
  authors = ["Senior YAML Developer <yamldeveloper@proton.me>"]
6
6
  readme = "README.md"