linkedapi 1.0.1__tar.gz → 1.0.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.
- {linkedapi-1.0.1 → linkedapi-1.0.2}/PKG-INFO +1 -1
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/__init__.py +7 -1
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/client.py +6 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/errors.py +2 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/__init__.py +5 -0
- linkedapi-1.0.2/linkedapi/operations/fetch_job.py +23 -0
- linkedapi-1.0.2/linkedapi/operations/search_jobs.py +15 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/types/__init__.py +28 -0
- linkedapi-1.0.2/linkedapi/types/jobs.py +131 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/pyproject.toml +1 -1
- {linkedapi-1.0.1 → linkedapi-1.0.2}/tests/test_errors.py +1 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/tests/test_operations.py +7 -1
- {linkedapi-1.0.1 → linkedapi-1.0.2}/.github/workflows/publish.yaml +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/.gitignore +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/LICENSE +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/README.md +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/admin/__init__.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/admin/accounts.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/admin/admin.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/admin/http_client.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/admin/limits.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/admin/subscription.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/config.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/core/__init__.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/core/operation.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/core/polling.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/http/__init__.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/http/base.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/http/linked_api_http_client.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/mappers/__init__.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/mappers/array.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/mappers/base.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/mappers/simple.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/mappers/then.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/mappers/void.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/check_connection_status.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/comment_on_post.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/create_post.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/custom_workflow.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/fetch_company.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/fetch_person.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/fetch_post.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/nv_fetch_company.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/nv_fetch_person.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/nv_search_companies.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/nv_search_people.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/nv_send_message.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/nv_sync_conversation.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/react_to_post.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/remove_connection.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/retrieve_connections.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/retrieve_pending_requests.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/retrieve_performance.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/retrieve_ssi.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/search_companies.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/search_people.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/send_connection_request.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/send_message.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/sync_conversation.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/operations/withdraw_connection_request.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/py.typed +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/types/account.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/types/admin/__init__.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/types/admin/accounts.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/types/admin/config.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/types/admin/limits.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/types/admin/subscription.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/types/base.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/types/company.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/types/connection.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/types/message.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/types/params.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/types/person.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/types/post.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/types/responses.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/types/search_companies.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/types/search_people.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/types/statistics.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/linkedapi/types/workflow.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/tests/conftest.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/tests/test_admin.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/tests/test_direct_methods.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/tests/test_http_client.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/tests/test_mappers.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/tests/test_models.py +0 -0
- {linkedapi-1.0.1 → linkedapi-1.0.2}/tests/test_polling.py +0 -0
|
@@ -34,6 +34,8 @@ from linkedapi.operations import (
|
|
|
34
34
|
CustomWorkflow,
|
|
35
35
|
FetchCompany,
|
|
36
36
|
FetchCompanyMapper,
|
|
37
|
+
FetchJob,
|
|
38
|
+
FetchJobMapper,
|
|
37
39
|
FetchPerson,
|
|
38
40
|
FetchPersonMapper,
|
|
39
41
|
FetchPost,
|
|
@@ -53,6 +55,7 @@ from linkedapi.operations import (
|
|
|
53
55
|
RetrievePerformance,
|
|
54
56
|
RetrieveSSI,
|
|
55
57
|
SearchCompanies,
|
|
58
|
+
SearchJobs,
|
|
56
59
|
SearchPeople,
|
|
57
60
|
SendConnectionRequest,
|
|
58
61
|
SendMessage,
|
|
@@ -62,7 +65,7 @@ from linkedapi.operations import (
|
|
|
62
65
|
from linkedapi.types import * # noqa: F403
|
|
63
66
|
from linkedapi.types import __all__ as _types_all
|
|
64
67
|
|
|
65
|
-
__version__ = "1.0.
|
|
68
|
+
__version__ = "1.0.2"
|
|
66
69
|
PredefinedOperation = Operation
|
|
67
70
|
|
|
68
71
|
__all__ = [
|
|
@@ -80,6 +83,8 @@ __all__ = [
|
|
|
80
83
|
"CustomWorkflow",
|
|
81
84
|
"FetchCompany",
|
|
82
85
|
"FetchCompanyMapper",
|
|
86
|
+
"FetchJob",
|
|
87
|
+
"FetchJobMapper",
|
|
83
88
|
"FetchPerson",
|
|
84
89
|
"FetchPersonMapper",
|
|
85
90
|
"FetchPost",
|
|
@@ -114,6 +119,7 @@ __all__ = [
|
|
|
114
119
|
"RetrievePerformance",
|
|
115
120
|
"RetrieveSSI",
|
|
116
121
|
"SearchCompanies",
|
|
122
|
+
"SearchJobs",
|
|
117
123
|
"SearchPeople",
|
|
118
124
|
"SendConnectionRequest",
|
|
119
125
|
"SendMessage",
|
|
@@ -13,6 +13,7 @@ from linkedapi.operations import (
|
|
|
13
13
|
CreatePost,
|
|
14
14
|
CustomWorkflow,
|
|
15
15
|
FetchCompany,
|
|
16
|
+
FetchJob,
|
|
16
17
|
FetchPerson,
|
|
17
18
|
FetchPost,
|
|
18
19
|
NvFetchCompany,
|
|
@@ -28,6 +29,7 @@ from linkedapi.operations import (
|
|
|
28
29
|
RetrievePerformance,
|
|
29
30
|
RetrieveSSI,
|
|
30
31
|
SearchCompanies,
|
|
32
|
+
SearchJobs,
|
|
31
33
|
SearchPeople,
|
|
32
34
|
SendConnectionRequest,
|
|
33
35
|
SendMessage,
|
|
@@ -60,9 +62,11 @@ class LinkedApi:
|
|
|
60
62
|
self.remove_connection = RemoveConnection(self.http_client)
|
|
61
63
|
self.search_companies = SearchCompanies(self.http_client)
|
|
62
64
|
self.search_people = SearchPeople(self.http_client)
|
|
65
|
+
self.search_jobs = SearchJobs(self.http_client)
|
|
63
66
|
self.fetch_company = FetchCompany(self.http_client)
|
|
64
67
|
self.fetch_person = FetchPerson(self.http_client)
|
|
65
68
|
self.fetch_post = FetchPost(self.http_client)
|
|
69
|
+
self.fetch_job = FetchJob(self.http_client)
|
|
66
70
|
self.react_to_post = ReactToPost(self.http_client)
|
|
67
71
|
self.comment_on_post = CommentOnPost(self.http_client)
|
|
68
72
|
self.create_post = CreatePost(self.http_client)
|
|
@@ -87,9 +91,11 @@ class LinkedApi:
|
|
|
87
91
|
self.remove_connection,
|
|
88
92
|
self.search_companies,
|
|
89
93
|
self.search_people,
|
|
94
|
+
self.search_jobs,
|
|
90
95
|
self.fetch_company,
|
|
91
96
|
self.fetch_person,
|
|
92
97
|
self.fetch_post,
|
|
98
|
+
self.fetch_job,
|
|
93
99
|
self.react_to_post,
|
|
94
100
|
self.comment_on_post,
|
|
95
101
|
self.create_post,
|
|
@@ -16,6 +16,7 @@ LinkedApiActionErrorType = Literal[
|
|
|
16
16
|
"searchingNotAllowed",
|
|
17
17
|
"companyNotFound",
|
|
18
18
|
"postNotFound",
|
|
19
|
+
"jobNotFound",
|
|
19
20
|
"commentingNotAllowed",
|
|
20
21
|
"noPostingPermission",
|
|
21
22
|
"noSalesNavigator",
|
|
@@ -35,6 +36,7 @@ LINKED_API_ACTION_ERROR_TYPES: tuple[str, ...] = (
|
|
|
35
36
|
"searchingNotAllowed",
|
|
36
37
|
"companyNotFound",
|
|
37
38
|
"postNotFound",
|
|
39
|
+
"jobNotFound",
|
|
38
40
|
"commentingNotAllowed",
|
|
39
41
|
"noPostingPermission",
|
|
40
42
|
"noSalesNavigator",
|
|
@@ -3,6 +3,7 @@ from linkedapi.operations.comment_on_post import CommentOnPost
|
|
|
3
3
|
from linkedapi.operations.create_post import CreatePost
|
|
4
4
|
from linkedapi.operations.custom_workflow import CustomWorkflow
|
|
5
5
|
from linkedapi.operations.fetch_company import FetchCompany, FetchCompanyMapper
|
|
6
|
+
from linkedapi.operations.fetch_job import FetchJob, FetchJobMapper
|
|
6
7
|
from linkedapi.operations.fetch_person import FetchPerson, FetchPersonMapper
|
|
7
8
|
from linkedapi.operations.fetch_post import FetchPost, FetchPostMapper
|
|
8
9
|
from linkedapi.operations.nv_fetch_company import NvFetchCompany, NvFetchCompanyMapper
|
|
@@ -18,6 +19,7 @@ from linkedapi.operations.retrieve_pending_requests import RetrievePendingReques
|
|
|
18
19
|
from linkedapi.operations.retrieve_performance import RetrievePerformance
|
|
19
20
|
from linkedapi.operations.retrieve_ssi import RetrieveSSI
|
|
20
21
|
from linkedapi.operations.search_companies import SearchCompanies
|
|
22
|
+
from linkedapi.operations.search_jobs import SearchJobs
|
|
21
23
|
from linkedapi.operations.search_people import SearchPeople
|
|
22
24
|
from linkedapi.operations.send_connection_request import SendConnectionRequest
|
|
23
25
|
from linkedapi.operations.send_message import SendMessage
|
|
@@ -31,6 +33,8 @@ __all__ = [
|
|
|
31
33
|
"CustomWorkflow",
|
|
32
34
|
"FetchCompany",
|
|
33
35
|
"FetchCompanyMapper",
|
|
36
|
+
"FetchJob",
|
|
37
|
+
"FetchJobMapper",
|
|
34
38
|
"FetchPerson",
|
|
35
39
|
"FetchPersonMapper",
|
|
36
40
|
"FetchPost",
|
|
@@ -50,6 +54,7 @@ __all__ = [
|
|
|
50
54
|
"RetrievePerformance",
|
|
51
55
|
"RetrieveSSI",
|
|
52
56
|
"SearchCompanies",
|
|
57
|
+
"SearchJobs",
|
|
53
58
|
"SearchPeople",
|
|
54
59
|
"SendConnectionRequest",
|
|
55
60
|
"SendMessage",
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from linkedapi.core import Operation
|
|
4
|
+
from linkedapi.mappers import ThenWorkflowMapper
|
|
5
|
+
from linkedapi.types import FetchJobParams, Job
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class FetchJobMapper(ThenWorkflowMapper[FetchJobParams, Job]):
|
|
9
|
+
def __init__(self) -> None:
|
|
10
|
+
super().__init__(
|
|
11
|
+
action_configs=[],
|
|
12
|
+
response_mappings=[],
|
|
13
|
+
base_action_type="st.openJob",
|
|
14
|
+
default_params={"basicInfo": True},
|
|
15
|
+
result_model=Job,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class FetchJob(Operation[FetchJobParams, Job]):
|
|
20
|
+
"""Fetch a LinkedIn job."""
|
|
21
|
+
|
|
22
|
+
operation_name = "fetchJob"
|
|
23
|
+
mapper = FetchJobMapper()
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from linkedapi.core import Operation
|
|
4
|
+
from linkedapi.mappers import ArrayWorkflowMapper
|
|
5
|
+
from linkedapi.types import SearchJobResult, SearchJobsParams
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class SearchJobs(Operation[SearchJobsParams, list[SearchJobResult]]):
|
|
9
|
+
"""Search jobs on standard LinkedIn."""
|
|
10
|
+
|
|
11
|
+
operation_name = "searchJobs"
|
|
12
|
+
mapper = ArrayWorkflowMapper[SearchJobsParams, SearchJobResult](
|
|
13
|
+
"st.searchJobs",
|
|
14
|
+
SearchJobResult,
|
|
15
|
+
)
|
|
@@ -83,6 +83,21 @@ from linkedapi.types.connection import (
|
|
|
83
83
|
SendConnectionRequestParams,
|
|
84
84
|
WithdrawConnectionRequestParams,
|
|
85
85
|
)
|
|
86
|
+
from linkedapi.types.jobs import (
|
|
87
|
+
FetchJobParams,
|
|
88
|
+
FetchJobResult,
|
|
89
|
+
Job,
|
|
90
|
+
JobCurrency,
|
|
91
|
+
JobDatePosted,
|
|
92
|
+
JobEmploymentType,
|
|
93
|
+
JobExperienceLevel,
|
|
94
|
+
JobSalary,
|
|
95
|
+
JobWorkplaceType,
|
|
96
|
+
SalaryPeriod,
|
|
97
|
+
SearchJobResult,
|
|
98
|
+
SearchJobsFilter,
|
|
99
|
+
SearchJobsParams,
|
|
100
|
+
)
|
|
86
101
|
from linkedapi.types.message import (
|
|
87
102
|
ConversationPollRequest,
|
|
88
103
|
ConversationPollResult,
|
|
@@ -223,6 +238,8 @@ __all__ = [
|
|
|
223
238
|
"EmploymentType",
|
|
224
239
|
"FetchCompanyParams",
|
|
225
240
|
"FetchCompanyResult",
|
|
241
|
+
"FetchJobParams",
|
|
242
|
+
"FetchJobResult",
|
|
226
243
|
"FetchPersonParams",
|
|
227
244
|
"FetchPersonResult",
|
|
228
245
|
"FetchPostParams",
|
|
@@ -230,6 +247,13 @@ __all__ = [
|
|
|
230
247
|
"GetConnectionSessionParams",
|
|
231
248
|
"GetLimitsParams",
|
|
232
249
|
"GetLimitsUsageParams",
|
|
250
|
+
"Job",
|
|
251
|
+
"JobCurrency",
|
|
252
|
+
"JobDatePosted",
|
|
253
|
+
"JobEmploymentType",
|
|
254
|
+
"JobExperienceLevel",
|
|
255
|
+
"JobSalary",
|
|
256
|
+
"JobWorkplaceType",
|
|
233
257
|
"LanguageProficiency",
|
|
234
258
|
"Limit",
|
|
235
259
|
"LimitCategory",
|
|
@@ -298,10 +322,14 @@ __all__ = [
|
|
|
298
322
|
"RetrievePendingRequestsResult",
|
|
299
323
|
"RetrievePerformanceResult",
|
|
300
324
|
"RetrieveSSIResult",
|
|
325
|
+
"SalaryPeriod",
|
|
301
326
|
"SearchCompaniesFilter",
|
|
302
327
|
"SearchCompaniesParams",
|
|
303
328
|
"SearchCompanyResult",
|
|
304
329
|
"SearchCompanySize",
|
|
330
|
+
"SearchJobResult",
|
|
331
|
+
"SearchJobsFilter",
|
|
332
|
+
"SearchJobsParams",
|
|
305
333
|
"SearchPeopleFilter",
|
|
306
334
|
"SearchPeopleParams",
|
|
307
335
|
"SearchPeopleResult",
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Literal, TypeAlias
|
|
4
|
+
|
|
5
|
+
from linkedapi.types.base import LinkedApiModel
|
|
6
|
+
from linkedapi.types.params import BaseActionParams, LimitParams
|
|
7
|
+
|
|
8
|
+
JobDatePosted = Literal["anyTime", "past24Hours", "pastWeek", "pastMonth"]
|
|
9
|
+
JobExperienceLevel = Literal[
|
|
10
|
+
"internship",
|
|
11
|
+
"entryLevel",
|
|
12
|
+
"associate",
|
|
13
|
+
"midSeniorLevel",
|
|
14
|
+
"director",
|
|
15
|
+
"executive",
|
|
16
|
+
]
|
|
17
|
+
JobEmploymentType = Literal[
|
|
18
|
+
"fullTime",
|
|
19
|
+
"partTime",
|
|
20
|
+
"contract",
|
|
21
|
+
"temporary",
|
|
22
|
+
"volunteer",
|
|
23
|
+
"internship",
|
|
24
|
+
"other",
|
|
25
|
+
]
|
|
26
|
+
JobWorkplaceType = Literal["onSite", "remote", "hybrid"]
|
|
27
|
+
SalaryPeriod = Literal["yearly", "monthly", "hourly"]
|
|
28
|
+
JobCurrency = Literal[
|
|
29
|
+
"usd",
|
|
30
|
+
"eur",
|
|
31
|
+
"gbp",
|
|
32
|
+
"inr",
|
|
33
|
+
"cad",
|
|
34
|
+
"aud",
|
|
35
|
+
"nzd",
|
|
36
|
+
"hkd",
|
|
37
|
+
"sgd",
|
|
38
|
+
"jpy",
|
|
39
|
+
"cny",
|
|
40
|
+
"chf",
|
|
41
|
+
"sek",
|
|
42
|
+
"nok",
|
|
43
|
+
"dkk",
|
|
44
|
+
"pln",
|
|
45
|
+
"czk",
|
|
46
|
+
"huf",
|
|
47
|
+
"ron",
|
|
48
|
+
"brl",
|
|
49
|
+
"mxn",
|
|
50
|
+
"ars",
|
|
51
|
+
"zar",
|
|
52
|
+
"aed",
|
|
53
|
+
"sar",
|
|
54
|
+
"ils",
|
|
55
|
+
"try",
|
|
56
|
+
"rub",
|
|
57
|
+
"uah",
|
|
58
|
+
"krw",
|
|
59
|
+
"thb",
|
|
60
|
+
"idr",
|
|
61
|
+
"myr",
|
|
62
|
+
"php",
|
|
63
|
+
"vnd",
|
|
64
|
+
"ngn",
|
|
65
|
+
"twd",
|
|
66
|
+
]
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class JobSalary(LinkedApiModel):
|
|
70
|
+
currency: JobCurrency | None = None
|
|
71
|
+
min_amount: float | None = None
|
|
72
|
+
max_amount: float | None = None
|
|
73
|
+
period: SalaryPeriod | None = None
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class SearchJobsFilter(LinkedApiModel):
|
|
77
|
+
location: str | None = None
|
|
78
|
+
date_posted: JobDatePosted | None = None
|
|
79
|
+
experience_levels: list[JobExperienceLevel] | None = None
|
|
80
|
+
employment_types: list[JobEmploymentType] | None = None
|
|
81
|
+
workplace_types: list[JobWorkplaceType] | None = None
|
|
82
|
+
companies: list[str] | None = None
|
|
83
|
+
industries: list[str] | None = None
|
|
84
|
+
job_functions: list[str] | None = None
|
|
85
|
+
easy_apply: bool | None = None
|
|
86
|
+
has_verifications: bool | None = None
|
|
87
|
+
under_10_applicants: bool | None = None
|
|
88
|
+
in_your_network: bool | None = None
|
|
89
|
+
fair_chance_employer: bool | None = None
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class SearchJobsParams(BaseActionParams, LimitParams):
|
|
93
|
+
term: str | None = None
|
|
94
|
+
filter: SearchJobsFilter | None = None
|
|
95
|
+
custom_search_url: str | None = None
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class SearchJobResult(LinkedApiModel):
|
|
99
|
+
job_id: str | None = None
|
|
100
|
+
job_url: str | None = None
|
|
101
|
+
title: str | None = None
|
|
102
|
+
company_name: str | None = None
|
|
103
|
+
location: str | None = None
|
|
104
|
+
workplace_type: str | None = None
|
|
105
|
+
salary: JobSalary | None = None
|
|
106
|
+
easy_apply: bool | None = None
|
|
107
|
+
is_promoted: bool | None = None
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
class FetchJobParams(BaseActionParams):
|
|
111
|
+
job_url: str
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
class Job(LinkedApiModel):
|
|
115
|
+
job_id: str | None = None
|
|
116
|
+
job_url: str | None = None
|
|
117
|
+
title: str | None = None
|
|
118
|
+
company_name: str | None = None
|
|
119
|
+
company_url: str | None = None
|
|
120
|
+
location: str | None = None
|
|
121
|
+
posted_date: str | None = None
|
|
122
|
+
applicants_count: int | None = None
|
|
123
|
+
workplace_type: str | None = None
|
|
124
|
+
employment_type: str | None = None
|
|
125
|
+
salary: JobSalary | None = None
|
|
126
|
+
description: str | None = None
|
|
127
|
+
apply_url: str | None = None
|
|
128
|
+
easy_apply: bool | None = None
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
FetchJobResult: TypeAlias = Job
|
|
@@ -20,10 +20,12 @@ def test_linked_api_exposes_all_predefined_operations() -> None:
|
|
|
20
20
|
"fetch_company",
|
|
21
21
|
"nv_fetch_company",
|
|
22
22
|
"fetch_post",
|
|
23
|
+
"fetch_job",
|
|
23
24
|
"search_people",
|
|
24
25
|
"nv_search_people",
|
|
25
26
|
"search_companies",
|
|
26
27
|
"nv_search_companies",
|
|
28
|
+
"search_jobs",
|
|
27
29
|
"send_connection_request",
|
|
28
30
|
"check_connection_status",
|
|
29
31
|
"withdraw_connection_request",
|
|
@@ -46,7 +48,7 @@ def test_linked_api_exposes_all_predefined_operations() -> None:
|
|
|
46
48
|
assert hasattr(operation, "execute")
|
|
47
49
|
assert hasattr(operation, "result")
|
|
48
50
|
assert hasattr(operation, "cancel")
|
|
49
|
-
assert len(linkedapi.operations) ==
|
|
51
|
+
assert len(linkedapi.operations) == 27
|
|
50
52
|
|
|
51
53
|
|
|
52
54
|
def test_operation_mappers_match_node_contract() -> None:
|
|
@@ -56,6 +58,10 @@ def test_operation_mappers_match_node_contract() -> None:
|
|
|
56
58
|
assert linkedapi.fetch_person.mapper.default_params == {"basicInfo": True}
|
|
57
59
|
assert isinstance(linkedapi.search_people.mapper, ArrayWorkflowMapper)
|
|
58
60
|
assert linkedapi.search_people.mapper.base_action_type == "st.searchPeople"
|
|
61
|
+
assert isinstance(linkedapi.search_jobs.mapper, ArrayWorkflowMapper)
|
|
62
|
+
assert linkedapi.search_jobs.mapper.base_action_type == "st.searchJobs"
|
|
63
|
+
assert linkedapi.fetch_job.mapper.base_action_type == "st.openJob"
|
|
64
|
+
assert linkedapi.fetch_job.mapper.default_params == {"basicInfo": True}
|
|
59
65
|
assert isinstance(linkedapi.send_connection_request.mapper, VoidWorkflowMapper)
|
|
60
66
|
assert linkedapi.send_connection_request.mapper.action_type == "st.sendConnectionRequest"
|
|
61
67
|
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|