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.
- hh_applicant_tool-0.2.1/README.md → hh_applicant_tool-0.2.2/PKG-INFO +26 -2
- hh_applicant_tool-0.2.1/PKG-INFO → hh_applicant_tool-0.2.2/README.md +10 -17
- {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/api/errors.py +6 -6
- {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/constants.py +1 -1
- {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/utils.py +1 -1
- {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/pyproject.toml +1 -1
- {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/__init__.py +0 -0
- {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/__main__.py +0 -0
- {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/api/__init__.py +0 -0
- {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/api/client.py +0 -0
- {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/color_log.py +0 -0
- {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/main.py +0 -0
- {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/__init__.py +0 -0
- {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/add_handler.py +0 -0
- {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/apply_similar.py +0 -0
- {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/authorize.py +0 -0
- {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/call_api.py +0 -0
- {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/clear_negotiations.py +0 -0
- {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/list_resumes.py +0 -0
- {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/refresh_token.py +0 -0
- {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/update_resumes.py +0 -0
- {hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/whoami.py +0 -0
- {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
|
-
!
|
|
18
|
+
> ! Наложен мораторий на доработки/переработки. Разработка будет возобновлена после 10 звезд 💫 Вы, блять, сучары 7000 раз эту хуйню скачали и всего 5 звезд поставили. Просто охуеть! Сколько нужно скачек хотя бы ради 50 звезд?
|
|
19
|
+
> > Да в пизду это приложение я им не пользуюсь. Ищите работу заграницей. Нахуй вам hh? Эта страна еще 12 лет правления любителя шагов доброй лоли не выдержит
|
|
20
|
+
|
|
21
|
+

|
|
22
|
+
[]()
|
|
23
|
+
[]()
|
|
24
|
+
[]()
|
|
25
|
+
[]()
|
|
26
|
+
[]()
|
|
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
|
-
!
|
|
3
|
+
> ! Наложен мораторий на доработки/переработки. Разработка будет возобновлена после 10 звезд 💫 Вы, блять, сучары 7000 раз эту хуйню скачали и всего 5 звезд поставили. Просто охуеть! Сколько нужно скачек хотя бы ради 50 звезд?
|
|
4
|
+
> > Да в пизду это приложение я им не пользуюсь. Ищите работу заграницей. Нахуй вам hh? Эта страна еще 12 лет правления любителя шагов доброй лоли не выдержит
|
|
5
|
+
|
|
6
|
+

|
|
7
|
+
[]()
|
|
8
|
+
[]()
|
|
9
|
+
[]()
|
|
10
|
+
[]()
|
|
11
|
+
[]()
|
|
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
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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/
|
|
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
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/__init__.py
RENAMED
|
File without changes
|
{hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/add_handler.py
RENAMED
|
File without changes
|
{hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/apply_similar.py
RENAMED
|
File without changes
|
{hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/authorize.py
RENAMED
|
File without changes
|
{hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/call_api.py
RENAMED
|
File without changes
|
|
File without changes
|
{hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/list_resumes.py
RENAMED
|
File without changes
|
{hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/refresh_token.py
RENAMED
|
File without changes
|
{hh_applicant_tool-0.2.1 → hh_applicant_tool-0.2.2}/hh_applicant_tool/operations/update_resumes.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|