linkedapi 1.0.0__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.0 → linkedapi-1.0.2}/PKG-INFO +1 -1
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/__init__.py +7 -1
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/client.py +6 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/errors.py +2 -0
- {linkedapi-1.0.0 → 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.0 → linkedapi-1.0.2}/linkedapi/types/__init__.py +34 -0
- linkedapi-1.0.2/linkedapi/types/jobs.py +131 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/post.py +25 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/pyproject.toml +1 -1
- {linkedapi-1.0.0 → linkedapi-1.0.2}/tests/test_errors.py +1 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/tests/test_operations.py +7 -1
- {linkedapi-1.0.0 → linkedapi-1.0.2}/.github/workflows/publish.yaml +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/.gitignore +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/LICENSE +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/README.md +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/admin/__init__.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/admin/accounts.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/admin/admin.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/admin/http_client.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/admin/limits.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/admin/subscription.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/config.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/core/__init__.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/core/operation.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/core/polling.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/http/__init__.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/http/base.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/http/linked_api_http_client.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/mappers/__init__.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/mappers/array.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/mappers/base.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/mappers/simple.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/mappers/then.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/mappers/void.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/check_connection_status.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/comment_on_post.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/create_post.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/custom_workflow.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/fetch_company.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/fetch_person.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/fetch_post.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/nv_fetch_company.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/nv_fetch_person.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/nv_search_companies.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/nv_search_people.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/nv_send_message.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/nv_sync_conversation.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/react_to_post.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/remove_connection.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/retrieve_connections.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/retrieve_pending_requests.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/retrieve_performance.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/retrieve_ssi.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/search_companies.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/search_people.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/send_connection_request.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/send_message.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/sync_conversation.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/withdraw_connection_request.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/py.typed +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/account.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/admin/__init__.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/admin/accounts.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/admin/config.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/admin/limits.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/admin/subscription.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/base.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/company.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/connection.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/message.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/params.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/person.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/responses.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/search_companies.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/search_people.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/statistics.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/workflow.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/tests/conftest.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/tests/test_admin.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/tests/test_direct_methods.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/tests/test_http_client.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/tests/test_mappers.py +0 -0
- {linkedapi-1.0.0 → linkedapi-1.0.2}/tests/test_models.py +0 -0
- {linkedapi-1.0.0 → 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,
|
|
@@ -122,6 +137,8 @@ from linkedapi.types.post import (
|
|
|
122
137
|
FetchPostParams,
|
|
123
138
|
FetchPostResult,
|
|
124
139
|
Post,
|
|
140
|
+
PostActorType,
|
|
141
|
+
PostAuthor,
|
|
125
142
|
PostComment,
|
|
126
143
|
PostCommenterType,
|
|
127
144
|
PostCommentsRetrievalConfig,
|
|
@@ -129,6 +146,7 @@ from linkedapi.types.post import (
|
|
|
129
146
|
PostEngagerType,
|
|
130
147
|
PostReaction,
|
|
131
148
|
PostReactionsRetrievalConfig,
|
|
149
|
+
PostReposter,
|
|
132
150
|
PostType,
|
|
133
151
|
Reaction,
|
|
134
152
|
ReactionType,
|
|
@@ -220,6 +238,8 @@ __all__ = [
|
|
|
220
238
|
"EmploymentType",
|
|
221
239
|
"FetchCompanyParams",
|
|
222
240
|
"FetchCompanyResult",
|
|
241
|
+
"FetchJobParams",
|
|
242
|
+
"FetchJobResult",
|
|
223
243
|
"FetchPersonParams",
|
|
224
244
|
"FetchPersonResult",
|
|
225
245
|
"FetchPostParams",
|
|
@@ -227,6 +247,13 @@ __all__ = [
|
|
|
227
247
|
"GetConnectionSessionParams",
|
|
228
248
|
"GetLimitsParams",
|
|
229
249
|
"GetLimitsUsageParams",
|
|
250
|
+
"Job",
|
|
251
|
+
"JobCurrency",
|
|
252
|
+
"JobDatePosted",
|
|
253
|
+
"JobEmploymentType",
|
|
254
|
+
"JobExperienceLevel",
|
|
255
|
+
"JobSalary",
|
|
256
|
+
"JobWorkplaceType",
|
|
230
257
|
"LanguageProficiency",
|
|
231
258
|
"Limit",
|
|
232
259
|
"LimitCategory",
|
|
@@ -271,6 +298,8 @@ __all__ = [
|
|
|
271
298
|
"PersonLanguage",
|
|
272
299
|
"PersonSkill",
|
|
273
300
|
"Post",
|
|
301
|
+
"PostActorType",
|
|
302
|
+
"PostAuthor",
|
|
274
303
|
"PostComment",
|
|
275
304
|
"PostCommenterType",
|
|
276
305
|
"PostCommentsRetrievalConfig",
|
|
@@ -278,6 +307,7 @@ __all__ = [
|
|
|
278
307
|
"PostEngagerType",
|
|
279
308
|
"PostReaction",
|
|
280
309
|
"PostReactionsRetrievalConfig",
|
|
310
|
+
"PostReposter",
|
|
281
311
|
"PostType",
|
|
282
312
|
"ReactToPostParams",
|
|
283
313
|
"Reaction",
|
|
@@ -292,10 +322,14 @@ __all__ = [
|
|
|
292
322
|
"RetrievePendingRequestsResult",
|
|
293
323
|
"RetrievePerformanceResult",
|
|
294
324
|
"RetrieveSSIResult",
|
|
325
|
+
"SalaryPeriod",
|
|
295
326
|
"SearchCompaniesFilter",
|
|
296
327
|
"SearchCompaniesParams",
|
|
297
328
|
"SearchCompanyResult",
|
|
298
329
|
"SearchCompanySize",
|
|
330
|
+
"SearchJobResult",
|
|
331
|
+
"SearchJobsFilter",
|
|
332
|
+
"SearchJobsParams",
|
|
299
333
|
"SearchPeopleFilter",
|
|
300
334
|
"SearchPeopleParams",
|
|
301
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
|
|
@@ -6,6 +6,7 @@ from linkedapi.types.base import LinkedApiModel
|
|
|
6
6
|
from linkedapi.types.params import BaseActionParams, LimitParams
|
|
7
7
|
|
|
8
8
|
PostType = Literal["original", "repost"]
|
|
9
|
+
PostActorType = Literal["person", "company"]
|
|
9
10
|
ReactionType = Literal["like", "celebrate", "support", "love", "insightful", "funny"]
|
|
10
11
|
PostCommenterType = Literal["person", "company"]
|
|
11
12
|
PostEngagerType = Literal["person", "company"]
|
|
@@ -60,14 +61,38 @@ class PostReaction(LinkedApiModel):
|
|
|
60
61
|
type: ReactionType | None = None
|
|
61
62
|
|
|
62
63
|
|
|
64
|
+
class PostAuthor(LinkedApiModel):
|
|
65
|
+
type: PostActorType | None = None
|
|
66
|
+
name: str | None = None
|
|
67
|
+
profile_url: str | None = None
|
|
68
|
+
headline: str | None = None
|
|
69
|
+
company_url: str | None = None
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class PostReposter(LinkedApiModel):
|
|
73
|
+
type: PostActorType | None = None
|
|
74
|
+
name: str | None = None
|
|
75
|
+
profile_url: str | None = None
|
|
76
|
+
headline: str | None = None
|
|
77
|
+
company_url: str | None = None
|
|
78
|
+
|
|
79
|
+
|
|
63
80
|
class Post(LinkedApiModel):
|
|
64
81
|
url: str | None = None
|
|
65
82
|
time: str | None = None
|
|
66
83
|
type: PostType | None = None
|
|
84
|
+
activity_urn: str | None = None
|
|
85
|
+
author: PostAuthor | None = None
|
|
86
|
+
reposter: PostReposter | None = None
|
|
67
87
|
repost_text: str | None = None
|
|
88
|
+
hashtags: list[str] | None = None
|
|
89
|
+
mentions: list[str] | None = None
|
|
90
|
+
external_links: list[str] | None = None
|
|
68
91
|
text: str | None = None
|
|
69
92
|
images: list[str] | None = None
|
|
93
|
+
document_slides: list[str] | None = None
|
|
70
94
|
has_video: bool | None = None
|
|
95
|
+
video_thumbnail: str | None = None
|
|
71
96
|
has_poll: bool | None = None
|
|
72
97
|
reactions_count: int | None = None
|
|
73
98
|
comments_count: int | None = None
|
|
@@ -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
|