hh-applicant-tool 0.6.6__tar.gz → 0.6.8__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.6.6/README.md → hh_applicant_tool-0.6.8/PKG-INFO +37 -1
- hh_applicant_tool-0.6.6/PKG-INFO → hh_applicant_tool-0.6.8/README.md +16 -21
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/operations/apply_similar.py +154 -11
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/operations/reply_employers.py +1 -1
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/types.py +1 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/pyproject.toml +1 -1
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/__init__.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/__main__.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/ai/__init__.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/ai/blackbox.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/api/__init__.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/api/client.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/api/errors.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/color_log.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/constants.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/jsonc.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/main.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/mixins.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/operations/__init__.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/operations/authorize.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/operations/call_api.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/operations/clear_negotiations.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/operations/config.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/operations/delete_telemetry.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/operations/get_employer_contacts.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/operations/list_resumes.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/operations/refresh_token.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/operations/update_resumes.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/operations/whoami.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/telemetry_client.py +0 -0
- {hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/utils.py +0 -0
|
@@ -1,3 +1,23 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: hh-applicant-tool
|
|
3
|
+
Version: 0.6.8
|
|
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
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
14
|
+
Provides-Extra: qt
|
|
15
|
+
Requires-Dist: prettytable (>=3.6.0,<4.0.0)
|
|
16
|
+
Requires-Dist: pyqt6 (==6.7.0) ; extra == "qt"
|
|
17
|
+
Requires-Dist: pyqt6-webengine (==6.7.0) ; extra == "qt"
|
|
18
|
+
Requires-Dist: requests[socks] (>=2.32.3,<3.0.0)
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
|
|
1
21
|
## HH Applicant Tool
|
|
2
22
|
|
|
3
23
|

|
|
@@ -45,6 +65,8 @@ $$('[data-qa="vacancy-serp__vacancy_response"]').forEach((el) => el.click());
|
|
|
45
65
|
|
|
46
66
|
### Установка
|
|
47
67
|
|
|
68
|
+
Универсальный с использованием pipx (требует пакета `python-pipx` в Arch):
|
|
69
|
+
|
|
48
70
|
```bash
|
|
49
71
|
# Версия с поддержкой авторизации через запуск окна с браузером (эта версия очень много весит)
|
|
50
72
|
# Можно использовать обычный pip
|
|
@@ -57,6 +79,18 @@ $ pipx install git+https://github.com/s3rgeym/hh-applicant-tool
|
|
|
57
79
|
$ pipx upgrade hh-applicant-tool
|
|
58
80
|
```
|
|
59
81
|
|
|
82
|
+
pipx добавляет исполняемый файл `hh-appplicant-tool` в `~/.local/bin`, делая эту команду доступной. Путь до `~/.local/bin` должен быть в `$PATH` (в большинстве дистрибутивов он добавлен).
|
|
83
|
+
|
|
84
|
+
Традиционный способ для Linux/Mac:
|
|
85
|
+
|
|
86
|
+
```sh
|
|
87
|
+
mkdir -p ~/.venvs
|
|
88
|
+
python -m venv ~/.venvs/hh-applicant-tool
|
|
89
|
+
# Это придется делать постоянно, чтобы команда hh-applicant-tool стала доступна
|
|
90
|
+
. ~/.venvs/hh-applicant-tool/bin/activate
|
|
91
|
+
pip install 'hh-applicant-tool[qt]'
|
|
92
|
+
```
|
|
93
|
+
|
|
60
94
|
Отдельно я распишу процесс установки в **Windows** в подробностях:
|
|
61
95
|
|
|
62
96
|
* Для начала поставьте последнюю версию **Python 3** любым удобным способом.
|
|
@@ -69,7 +103,8 @@ $ pipx upgrade hh-applicant-tool
|
|
|
69
103
|
```ps
|
|
70
104
|
PS> python -m venv hh-applicant-venv
|
|
71
105
|
PS> .\hh-applicant-venv\Scripts\activate
|
|
72
|
-
```
|
|
106
|
+
```
|
|
107
|
+
|
|
73
108
|
* Поставьте все пакеты в виртуальное окружение `hh-applicant-venv`:
|
|
74
109
|
```ps
|
|
75
110
|
(hh-applicant-venv) PS> pip install hh-applicant-tool[qt]
|
|
@@ -311,3 +346,4 @@ https://hh.ru/employer/1918903
|
|
|
311
346
|
* [HH.RU OpenAPI](https://api.hh.ru/openapi/redoc)
|
|
312
347
|
|
|
313
348
|
Для тестирования запросов к API используйте команду `call-api` и `jq` для вывода JSON в удобочитаемом формате.
|
|
349
|
+
|
|
@@ -1,22 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.3
|
|
2
|
-
Name: hh-applicant-tool
|
|
3
|
-
Version: 0.6.6
|
|
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
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
13
|
-
Provides-Extra: qt
|
|
14
|
-
Requires-Dist: prettytable (>=3.6.0,<4.0.0)
|
|
15
|
-
Requires-Dist: pyqt6 (==6.7.0) ; extra == "qt"
|
|
16
|
-
Requires-Dist: pyqt6-webengine (==6.7.0) ; extra == "qt"
|
|
17
|
-
Requires-Dist: requests[socks] (>=2.32.3,<3.0.0)
|
|
18
|
-
Description-Content-Type: text/markdown
|
|
19
|
-
|
|
20
1
|
## HH Applicant Tool
|
|
21
2
|
|
|
22
3
|

|
|
@@ -64,6 +45,8 @@ $$('[data-qa="vacancy-serp__vacancy_response"]').forEach((el) => el.click());
|
|
|
64
45
|
|
|
65
46
|
### Установка
|
|
66
47
|
|
|
48
|
+
Универсальный с использованием pipx (требует пакета `python-pipx` в Arch):
|
|
49
|
+
|
|
67
50
|
```bash
|
|
68
51
|
# Версия с поддержкой авторизации через запуск окна с браузером (эта версия очень много весит)
|
|
69
52
|
# Можно использовать обычный pip
|
|
@@ -76,6 +59,18 @@ $ pipx install git+https://github.com/s3rgeym/hh-applicant-tool
|
|
|
76
59
|
$ pipx upgrade hh-applicant-tool
|
|
77
60
|
```
|
|
78
61
|
|
|
62
|
+
pipx добавляет исполняемый файл `hh-appplicant-tool` в `~/.local/bin`, делая эту команду доступной. Путь до `~/.local/bin` должен быть в `$PATH` (в большинстве дистрибутивов он добавлен).
|
|
63
|
+
|
|
64
|
+
Традиционный способ для Linux/Mac:
|
|
65
|
+
|
|
66
|
+
```sh
|
|
67
|
+
mkdir -p ~/.venvs
|
|
68
|
+
python -m venv ~/.venvs/hh-applicant-tool
|
|
69
|
+
# Это придется делать постоянно, чтобы команда hh-applicant-tool стала доступна
|
|
70
|
+
. ~/.venvs/hh-applicant-tool/bin/activate
|
|
71
|
+
pip install 'hh-applicant-tool[qt]'
|
|
72
|
+
```
|
|
73
|
+
|
|
79
74
|
Отдельно я распишу процесс установки в **Windows** в подробностях:
|
|
80
75
|
|
|
81
76
|
* Для начала поставьте последнюю версию **Python 3** любым удобным способом.
|
|
@@ -88,7 +83,8 @@ $ pipx upgrade hh-applicant-tool
|
|
|
88
83
|
```ps
|
|
89
84
|
PS> python -m venv hh-applicant-venv
|
|
90
85
|
PS> .\hh-applicant-venv\Scripts\activate
|
|
91
|
-
```
|
|
86
|
+
```
|
|
87
|
+
|
|
92
88
|
* Поставьте все пакеты в виртуальное окружение `hh-applicant-venv`:
|
|
93
89
|
```ps
|
|
94
90
|
(hh-applicant-venv) PS> pip install hh-applicant-tool[qt]
|
|
@@ -330,4 +326,3 @@ https://hh.ru/employer/1918903
|
|
|
330
326
|
* [HH.RU OpenAPI](https://api.hh.ru/openapi/redoc)
|
|
331
327
|
|
|
332
328
|
Для тестирования запросов к API используйте команду `call-api` и `jq` для вывода JSON в удобочитаемом формате.
|
|
333
|
-
|
{hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/operations/apply_similar.py
RENAMED
|
@@ -37,10 +37,40 @@ class Namespace(BaseNamespace):
|
|
|
37
37
|
search: str
|
|
38
38
|
schedule: str
|
|
39
39
|
dry_run: bool
|
|
40
|
-
|
|
40
|
+
# Пошли доп фильтры, которых не было
|
|
41
|
+
experience: str
|
|
42
|
+
employment: list[str] | None
|
|
43
|
+
area: list[str] | None
|
|
44
|
+
metro: list[str] | None
|
|
45
|
+
professional_role: list[str] | None
|
|
46
|
+
industry: list[str] | None
|
|
47
|
+
employer_id: list[str] | None
|
|
48
|
+
excluded_employer_id: list[str] | None
|
|
49
|
+
currency: str | None
|
|
50
|
+
salary: int | None
|
|
51
|
+
only_with_salary: bool
|
|
52
|
+
label: list[str] | None
|
|
53
|
+
period: int | None
|
|
54
|
+
date_from: str | None
|
|
55
|
+
date_to: str | None
|
|
56
|
+
top_lat: float | None
|
|
57
|
+
bottom_lat: float | None
|
|
58
|
+
left_lng: float | None
|
|
59
|
+
right_lng: float | None
|
|
60
|
+
sort_point_lat: float | None
|
|
61
|
+
sort_point_lng: float | None
|
|
62
|
+
no_magic: bool
|
|
63
|
+
premium: bool
|
|
64
|
+
responses_count_enabled: bool
|
|
65
|
+
|
|
66
|
+
def _bool(v: bool) -> str:
|
|
67
|
+
return str(v).lower()
|
|
41
68
|
|
|
42
69
|
class Operation(BaseOperation, GetResumeIdMixin):
|
|
43
|
-
"""Откликнуться на все подходящие вакансии.
|
|
70
|
+
"""Откликнуться на все подходящие вакансии.
|
|
71
|
+
|
|
72
|
+
Описание фильтров для поиска вакансий: <https://api.hh.ru/openapi/redoc#tag/Poisk-vakansij-dlya-soiskatelya/operation/get-vacancies-similar-to-resume>
|
|
73
|
+
"""
|
|
44
74
|
|
|
45
75
|
def setup_parser(self, parser: argparse.ArgumentParser) -> None:
|
|
46
76
|
parser.add_argument("--resume-id", help="Идентефикатор резюме")
|
|
@@ -114,6 +144,38 @@ class Operation(BaseOperation, GetResumeIdMixin):
|
|
|
114
144
|
default=False,
|
|
115
145
|
action=argparse.BooleanOptionalAction,
|
|
116
146
|
)
|
|
147
|
+
parser.add_argument(
|
|
148
|
+
"--experience",
|
|
149
|
+
help="Уровень опыта работы в вакансии. Возможные значения: noExperience, between1And3, between3And6, moreThan6",
|
|
150
|
+
type=str,
|
|
151
|
+
default=None,
|
|
152
|
+
)
|
|
153
|
+
parser.add_argument("--employment", nargs="+", help="Тип занятости (employment)")
|
|
154
|
+
parser.add_argument("--area", nargs="+", help="Регион (area id)")
|
|
155
|
+
parser.add_argument("--metro", nargs="+", help="Станции метро (metro id)")
|
|
156
|
+
parser.add_argument("--professional-role", nargs="+", help="Проф. роль (id)")
|
|
157
|
+
parser.add_argument("--industry", nargs="+", help="Индустрия (industry id)")
|
|
158
|
+
parser.add_argument("--employer-id", nargs="+", help="ID работодателей")
|
|
159
|
+
parser.add_argument("--excluded-employer-id", nargs="+", help="Исключить работодателей")
|
|
160
|
+
parser.add_argument("--currency", help="Код валюты (RUR, USD, EUR)")
|
|
161
|
+
parser.add_argument("--salary", type=int, help="Минимальная зарплата")
|
|
162
|
+
parser.add_argument("--only-with-salary", default=False, action=argparse.BooleanOptionalAction)
|
|
163
|
+
parser.add_argument("--label", nargs="+", help="Метки вакансий (label)")
|
|
164
|
+
parser.add_argument("--period", type=int, help="Искать вакансии за N дней")
|
|
165
|
+
parser.add_argument("--date-from", help="Дата публикации с (YYYY-MM-DD)")
|
|
166
|
+
parser.add_argument("--date-to", help="Дата публикации по (YYYY-MM-DD)")
|
|
167
|
+
parser.add_argument("--top-lat", type=float, help="Гео: верхняя широта")
|
|
168
|
+
parser.add_argument("--bottom-lat", type=float, help="Гео: нижняя широта")
|
|
169
|
+
parser.add_argument("--left-lng", type=float, help="Гео: левая долгота")
|
|
170
|
+
parser.add_argument("--right-lng", type=float, help="Гео: правая долгота")
|
|
171
|
+
parser.add_argument("--sort-point-lat", type=float, help="Координата lat для сортировки по расстоянию")
|
|
172
|
+
parser.add_argument("--sort-point-lng", type=float, help="Координата lng для сортировки по расстоянию")
|
|
173
|
+
parser.add_argument("--no-magic", default=False, action=argparse.BooleanOptionalAction, help="Отключить авторазбор текста запроса")
|
|
174
|
+
parser.add_argument("--premium", default=False, action=argparse.BooleanOptionalAction, help="Только премиум вакансии")
|
|
175
|
+
parser.add_argument("--responses-count-enabled", default=False, action=argparse.BooleanOptionalAction, help="Включить счётчик откликов")
|
|
176
|
+
parser.add_argument("--search-field", nargs="+", help="Поля поиска (name, company_name и т.п.)")
|
|
177
|
+
parser.add_argument("--clusters", action=argparse.BooleanOptionalAction, help="Включить кластеры (по умолчанию None)")
|
|
178
|
+
#parser.add_argument("--describe-arguments", action=argparse.BooleanOptionalAction, help="Вернуть описание параметров запроса")
|
|
117
179
|
|
|
118
180
|
def run(
|
|
119
181
|
self, args: Namespace, api_client: ApiClient, telemetry_client: TelemetryClient
|
|
@@ -157,6 +219,32 @@ class Operation(BaseOperation, GetResumeIdMixin):
|
|
|
157
219
|
self.search = args.search
|
|
158
220
|
self.schedule = args.schedule
|
|
159
221
|
self.dry_run = args.dry_run
|
|
222
|
+
self.experience = args.experience
|
|
223
|
+
self.search_field = args.search_field
|
|
224
|
+
self.employment = args.employment
|
|
225
|
+
self.area = args.area
|
|
226
|
+
self.metro = args.metro
|
|
227
|
+
self.professional_role = args.professional_role
|
|
228
|
+
self.industry = args.industry
|
|
229
|
+
self.employer_id = args.employer_id
|
|
230
|
+
self.excluded_employer_id = args.excluded_employer_id
|
|
231
|
+
self.currency = args.currency
|
|
232
|
+
self.salary = args.salary
|
|
233
|
+
self.only_with_salary = args.only_with_salary
|
|
234
|
+
self.label = args.label
|
|
235
|
+
self.period = args.period
|
|
236
|
+
self.date_from = args.date_from
|
|
237
|
+
self.date_to = args.date_to
|
|
238
|
+
self.top_lat = args.top_lat
|
|
239
|
+
self.bottom_lat = args.bottom_lat
|
|
240
|
+
self.left_lng = args.left_lng
|
|
241
|
+
self.right_lng = args.right_lng
|
|
242
|
+
self.sort_point_lat = args.sort_point_lat
|
|
243
|
+
self.sort_point_lng = args.sort_point_lng
|
|
244
|
+
self.clusters = args.clusters
|
|
245
|
+
#self.describe_arguments = args.describe_arguments
|
|
246
|
+
self.no_magic = args.no_magic
|
|
247
|
+
self.premium = args.premium
|
|
160
248
|
self._apply_similar()
|
|
161
249
|
|
|
162
250
|
def _get_application_messages(self, message_list: TextIO | None) -> list[str]:
|
|
@@ -358,18 +446,73 @@ class Operation(BaseOperation, GetResumeIdMixin):
|
|
|
358
446
|
except TelemetryError as ex:
|
|
359
447
|
logger.error(ex)
|
|
360
448
|
|
|
449
|
+
def _get_search_params(self, page: int, per_page: int) -> dict:
|
|
450
|
+
params = {
|
|
451
|
+
"page": page,
|
|
452
|
+
"per_page": per_page,
|
|
453
|
+
"order_by": self.order_by,
|
|
454
|
+
}
|
|
455
|
+
if self.search:
|
|
456
|
+
params["text"] = self.search
|
|
457
|
+
if self.schedule:
|
|
458
|
+
params['schedule'] = self.schedule
|
|
459
|
+
if self.experience:
|
|
460
|
+
params['experience'] = self.experience
|
|
461
|
+
if self.search_field:
|
|
462
|
+
params["search_field"] = self.search_field
|
|
463
|
+
if self.employment:
|
|
464
|
+
params["employment"] = self.employment
|
|
465
|
+
if self.area:
|
|
466
|
+
params["area"] = self.area
|
|
467
|
+
if self.metro:
|
|
468
|
+
params["metro"] = self.metro
|
|
469
|
+
if self.professional_role:
|
|
470
|
+
params["professional_role"] = self.professional_role
|
|
471
|
+
if self.industry:
|
|
472
|
+
params["industry"] = self.industry
|
|
473
|
+
if self.employer_id:
|
|
474
|
+
params["employer_id"] = self.employer_id
|
|
475
|
+
if self.excluded_employer_id:
|
|
476
|
+
params["excluded_employer_id"] = self.excluded_employer_id
|
|
477
|
+
if self.currency:
|
|
478
|
+
params["currency"] = self.currency
|
|
479
|
+
if self.salary:
|
|
480
|
+
params["salary"] = self.salary
|
|
481
|
+
if self.only_with_salary is not None:
|
|
482
|
+
params["only_with_salary"] = _bool(self.only_with_salary)
|
|
483
|
+
if self.label:
|
|
484
|
+
params["label"] = self.label
|
|
485
|
+
if self.period:
|
|
486
|
+
params["period"] = self.period
|
|
487
|
+
if self.date_from:
|
|
488
|
+
params["date_from"] = self.date_from
|
|
489
|
+
if self.date_to:
|
|
490
|
+
params["date_to"] = self.date_to
|
|
491
|
+
if self.top_lat:
|
|
492
|
+
params["top_lat"] = self.top_lat
|
|
493
|
+
if self.bottom_lat:
|
|
494
|
+
params["bottom_lat"] = self.bottom_lat
|
|
495
|
+
if self.left_lng:
|
|
496
|
+
params["left_lng"] = self.left_lng
|
|
497
|
+
if self.right_lng:
|
|
498
|
+
params["right_lng"] = self.right_lng
|
|
499
|
+
if self.sort_point_lat:
|
|
500
|
+
params["sort_point_lat"] = self.sort_point_lat
|
|
501
|
+
if self.sort_point_lng:
|
|
502
|
+
params["sort_point_lng"] = self.sort_point_lng
|
|
503
|
+
if self.clusters is not None:
|
|
504
|
+
params["clusters"] = self.clusters
|
|
505
|
+
if self.no_magic is not None:
|
|
506
|
+
params["no_magic"] = _bool(self.no_magic)
|
|
507
|
+
if self.premium is not None:
|
|
508
|
+
params["premium"] = _bool(self.premium)
|
|
509
|
+
return params
|
|
510
|
+
|
|
361
511
|
def _get_vacancies(self, per_page: int = 100) -> list[VacancyItem]:
|
|
362
512
|
rv = []
|
|
513
|
+
# API отдает только 2000 результатов
|
|
363
514
|
for page in range(20):
|
|
364
|
-
params =
|
|
365
|
-
"page": page,
|
|
366
|
-
"per_page": per_page,
|
|
367
|
-
"order_by": self.order_by,
|
|
368
|
-
}
|
|
369
|
-
if self.search:
|
|
370
|
-
params["text"] = self.search
|
|
371
|
-
if self.schedule:
|
|
372
|
-
params['schedule'] = self.schedule
|
|
515
|
+
params = self._get_search_params(page, per_page)
|
|
373
516
|
res: ApiListResponse = self.api_client.get(
|
|
374
517
|
f"/resumes/{self.resume_id}/similar_vacancies", params
|
|
375
518
|
)
|
{hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/operations/reply_employers.py
RENAMED
|
@@ -61,7 +61,7 @@ class Operation(BaseOperation, GetResumeIdMixin):
|
|
|
61
61
|
"-m",
|
|
62
62
|
"--reply-message",
|
|
63
63
|
"--reply",
|
|
64
|
-
help="Отправить сообщение во все чаты, где ожидают ответа либо не прочитали ответ.
|
|
64
|
+
help="Отправить сообщение во все чаты, где ожидают ответа либо не прочитали ответ. Если не передать сообщение, то нужно будет вводить его в интерактивном режиме.",
|
|
65
65
|
)
|
|
66
66
|
parser.add_argument(
|
|
67
67
|
"-p",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/operations/__init__.py
RENAMED
|
File without changes
|
{hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/operations/authorize.py
RENAMED
|
File without changes
|
{hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/operations/call_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/operations/delete_telemetry.py
RENAMED
|
File without changes
|
|
File without changes
|
{hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/operations/list_resumes.py
RENAMED
|
File without changes
|
{hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/operations/refresh_token.py
RENAMED
|
File without changes
|
{hh_applicant_tool-0.6.6 → hh_applicant_tool-0.6.8}/hh_applicant_tool/operations/update_resumes.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|