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.
Files changed (86) hide show
  1. {linkedapi-1.0.0 → linkedapi-1.0.2}/PKG-INFO +1 -1
  2. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/__init__.py +7 -1
  3. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/client.py +6 -0
  4. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/errors.py +2 -0
  5. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/__init__.py +5 -0
  6. linkedapi-1.0.2/linkedapi/operations/fetch_job.py +23 -0
  7. linkedapi-1.0.2/linkedapi/operations/search_jobs.py +15 -0
  8. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/__init__.py +34 -0
  9. linkedapi-1.0.2/linkedapi/types/jobs.py +131 -0
  10. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/post.py +25 -0
  11. {linkedapi-1.0.0 → linkedapi-1.0.2}/pyproject.toml +1 -1
  12. {linkedapi-1.0.0 → linkedapi-1.0.2}/tests/test_errors.py +1 -0
  13. {linkedapi-1.0.0 → linkedapi-1.0.2}/tests/test_operations.py +7 -1
  14. {linkedapi-1.0.0 → linkedapi-1.0.2}/.github/workflows/publish.yaml +0 -0
  15. {linkedapi-1.0.0 → linkedapi-1.0.2}/.gitignore +0 -0
  16. {linkedapi-1.0.0 → linkedapi-1.0.2}/LICENSE +0 -0
  17. {linkedapi-1.0.0 → linkedapi-1.0.2}/README.md +0 -0
  18. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/admin/__init__.py +0 -0
  19. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/admin/accounts.py +0 -0
  20. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/admin/admin.py +0 -0
  21. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/admin/http_client.py +0 -0
  22. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/admin/limits.py +0 -0
  23. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/admin/subscription.py +0 -0
  24. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/config.py +0 -0
  25. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/core/__init__.py +0 -0
  26. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/core/operation.py +0 -0
  27. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/core/polling.py +0 -0
  28. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/http/__init__.py +0 -0
  29. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/http/base.py +0 -0
  30. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/http/linked_api_http_client.py +0 -0
  31. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/mappers/__init__.py +0 -0
  32. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/mappers/array.py +0 -0
  33. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/mappers/base.py +0 -0
  34. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/mappers/simple.py +0 -0
  35. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/mappers/then.py +0 -0
  36. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/mappers/void.py +0 -0
  37. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/check_connection_status.py +0 -0
  38. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/comment_on_post.py +0 -0
  39. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/create_post.py +0 -0
  40. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/custom_workflow.py +0 -0
  41. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/fetch_company.py +0 -0
  42. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/fetch_person.py +0 -0
  43. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/fetch_post.py +0 -0
  44. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/nv_fetch_company.py +0 -0
  45. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/nv_fetch_person.py +0 -0
  46. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/nv_search_companies.py +0 -0
  47. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/nv_search_people.py +0 -0
  48. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/nv_send_message.py +0 -0
  49. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/nv_sync_conversation.py +0 -0
  50. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/react_to_post.py +0 -0
  51. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/remove_connection.py +0 -0
  52. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/retrieve_connections.py +0 -0
  53. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/retrieve_pending_requests.py +0 -0
  54. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/retrieve_performance.py +0 -0
  55. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/retrieve_ssi.py +0 -0
  56. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/search_companies.py +0 -0
  57. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/search_people.py +0 -0
  58. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/send_connection_request.py +0 -0
  59. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/send_message.py +0 -0
  60. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/sync_conversation.py +0 -0
  61. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/operations/withdraw_connection_request.py +0 -0
  62. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/py.typed +0 -0
  63. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/account.py +0 -0
  64. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/admin/__init__.py +0 -0
  65. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/admin/accounts.py +0 -0
  66. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/admin/config.py +0 -0
  67. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/admin/limits.py +0 -0
  68. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/admin/subscription.py +0 -0
  69. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/base.py +0 -0
  70. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/company.py +0 -0
  71. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/connection.py +0 -0
  72. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/message.py +0 -0
  73. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/params.py +0 -0
  74. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/person.py +0 -0
  75. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/responses.py +0 -0
  76. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/search_companies.py +0 -0
  77. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/search_people.py +0 -0
  78. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/statistics.py +0 -0
  79. {linkedapi-1.0.0 → linkedapi-1.0.2}/linkedapi/types/workflow.py +0 -0
  80. {linkedapi-1.0.0 → linkedapi-1.0.2}/tests/conftest.py +0 -0
  81. {linkedapi-1.0.0 → linkedapi-1.0.2}/tests/test_admin.py +0 -0
  82. {linkedapi-1.0.0 → linkedapi-1.0.2}/tests/test_direct_methods.py +0 -0
  83. {linkedapi-1.0.0 → linkedapi-1.0.2}/tests/test_http_client.py +0 -0
  84. {linkedapi-1.0.0 → linkedapi-1.0.2}/tests/test_mappers.py +0 -0
  85. {linkedapi-1.0.0 → linkedapi-1.0.2}/tests/test_models.py +0 -0
  86. {linkedapi-1.0.0 → linkedapi-1.0.2}/tests/test_polling.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: linkedapi
3
- Version: 1.0.0
3
+ Version: 1.0.2
4
4
  Summary: Official synchronous Python SDK for Linked API.
5
5
  Project-URL: Homepage, https://linkedapi.io
6
6
  Project-URL: Repository, https://github.com/Linked-API/linkedapi-python
@@ -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.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
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "linkedapi"
7
- version = "1.0.0"
7
+ version = "1.0.2"
8
8
  description = "Official synchronous Python SDK for Linked API."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -42,6 +42,7 @@ def test_error_type_sets_match_node_contract() -> None:
42
42
  "searchingNotAllowed",
43
43
  "companyNotFound",
44
44
  "postNotFound",
45
+ "jobNotFound",
45
46
  "commentingNotAllowed",
46
47
  "noPostingPermission",
47
48
  "noSalesNavigator",
@@ -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) == 25
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