linkedapi 1.3.1__tar.gz → 1.3.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.3.1 → linkedapi-1.3.2}/PKG-INFO +1 -1
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/__init__.py +7 -7
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/client.py +9 -9
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/__init__.py +6 -6
- linkedapi-1.3.2/linkedapi/operations/accept_invitation.py +12 -0
- linkedapi-1.3.2/linkedapi/operations/ignore_invitation.py +12 -0
- linkedapi-1.3.2/linkedapi/operations/retrieve_invitations.py +15 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/types/__init__.py +10 -6
- linkedapi-1.3.2/linkedapi/types/connection.py +172 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/pyproject.toml +1 -1
- {linkedapi-1.3.1 → linkedapi-1.3.2}/tests/test_operations.py +84 -12
- linkedapi-1.3.1/linkedapi/operations/accept_connection_request.py +0 -12
- linkedapi-1.3.1/linkedapi/operations/ignore_connection_request.py +0 -12
- linkedapi-1.3.1/linkedapi/operations/retrieve_connection_requests.py +0 -15
- linkedapi-1.3.1/linkedapi/types/connection.py +0 -100
- {linkedapi-1.3.1 → linkedapi-1.3.2}/.github/workflows/publish.yaml +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/.gitignore +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/LICENSE +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/README.md +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/admin/__init__.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/admin/accounts.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/admin/admin.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/admin/http_client.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/admin/limits.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/admin/subscription.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/admin/webhooks.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/config.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/core/__init__.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/core/operation.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/core/polling.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/errors.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/http/__init__.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/http/base.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/http/linked_api_http_client.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/mappers/__init__.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/mappers/array.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/mappers/base.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/mappers/send_message.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/mappers/simple.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/mappers/then.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/mappers/void.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/check_connection_status.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/comment_on_post.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/create_post.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/custom_workflow.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/fetch_company.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/fetch_job.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/fetch_person.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/fetch_post.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/manage_conversation.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/nv_fetch_company.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/nv_fetch_person.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/nv_manage_conversation.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/nv_search_companies.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/nv_search_people.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/nv_send_message.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/nv_sync_conversation.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/nv_sync_inbox.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/react_to_post.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/remove_connection.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/retrieve_connections.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/retrieve_pending_requests.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/retrieve_performance.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/retrieve_ssi.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/search_companies.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/search_jobs.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/search_people.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/send_connection_request.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/send_message.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/sync_conversation.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/sync_inbox.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/sync_network.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/operations/withdraw_connection_request.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/py.typed +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/types/account.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/types/admin/__init__.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/types/admin/accounts.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/types/admin/config.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/types/admin/limits.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/types/admin/subscription.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/types/base.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/types/company.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/types/jobs.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/types/message.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/types/network.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/types/params.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/types/person.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/types/post.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/types/responses.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/types/search_companies.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/types/search_people.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/types/statistics.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/types/webhooks.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/types/workflow.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/webhooks/__init__.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/linkedapi/webhooks/parse.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/tests/conftest.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/tests/test_admin.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/tests/test_direct_methods.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/tests/test_errors.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/tests/test_http_client.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/tests/test_mappers.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/tests/test_models.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/tests/test_polling.py +0 -0
- {linkedapi-1.3.1 → linkedapi-1.3.2}/tests/test_webhooks.py +0 -0
|
@@ -29,7 +29,7 @@ from linkedapi.mappers import (
|
|
|
29
29
|
VoidWorkflowMapper,
|
|
30
30
|
)
|
|
31
31
|
from linkedapi.operations import (
|
|
32
|
-
|
|
32
|
+
AcceptInvitation,
|
|
33
33
|
CheckConnectionStatus,
|
|
34
34
|
CommentOnPost,
|
|
35
35
|
CreatePost,
|
|
@@ -42,7 +42,7 @@ from linkedapi.operations import (
|
|
|
42
42
|
FetchPersonMapper,
|
|
43
43
|
FetchPost,
|
|
44
44
|
FetchPostMapper,
|
|
45
|
-
|
|
45
|
+
IgnoreInvitation,
|
|
46
46
|
ManageConversation,
|
|
47
47
|
NvFetchCompany,
|
|
48
48
|
NvFetchCompanyMapper,
|
|
@@ -56,8 +56,8 @@ from linkedapi.operations import (
|
|
|
56
56
|
NvSyncInbox,
|
|
57
57
|
ReactToPost,
|
|
58
58
|
RemoveConnection,
|
|
59
|
-
RetrieveConnectionRequests,
|
|
60
59
|
RetrieveConnections,
|
|
60
|
+
RetrieveInvitations,
|
|
61
61
|
RetrievePendingRequests,
|
|
62
62
|
RetrievePerformance,
|
|
63
63
|
RetrieveSSI,
|
|
@@ -75,12 +75,12 @@ from linkedapi.types import * # noqa: F403
|
|
|
75
75
|
from linkedapi.types import __all__ as _types_all
|
|
76
76
|
from linkedapi.webhooks import parse_webhook_event
|
|
77
77
|
|
|
78
|
-
__version__ = "1.2
|
|
78
|
+
__version__ = "1.3.2"
|
|
79
79
|
PredefinedOperation = Operation
|
|
80
80
|
|
|
81
81
|
__all__ = [
|
|
82
82
|
*_types_all,
|
|
83
|
-
"
|
|
83
|
+
"AcceptInvitation",
|
|
84
84
|
"AdminAccounts",
|
|
85
85
|
"AdminHttpClient",
|
|
86
86
|
"AdminLimits",
|
|
@@ -102,7 +102,7 @@ __all__ = [
|
|
|
102
102
|
"FetchPost",
|
|
103
103
|
"FetchPostMapper",
|
|
104
104
|
"HttpClient",
|
|
105
|
-
"
|
|
105
|
+
"IgnoreInvitation",
|
|
106
106
|
"LINKED_API_ACTION_ERROR_TYPES",
|
|
107
107
|
"LINKED_API_ERROR_TYPES",
|
|
108
108
|
"LinkedApi",
|
|
@@ -130,7 +130,7 @@ __all__ = [
|
|
|
130
130
|
"ReactToPost",
|
|
131
131
|
"RemoveConnection",
|
|
132
132
|
"ResponseMapping",
|
|
133
|
-
"
|
|
133
|
+
"RetrieveInvitations",
|
|
134
134
|
"RetrieveConnections",
|
|
135
135
|
"RetrievePendingRequests",
|
|
136
136
|
"RetrievePerformance",
|
|
@@ -8,7 +8,7 @@ from linkedapi.errors import LinkedApiError
|
|
|
8
8
|
from linkedapi.http import HttpClient, LinkedApiHttpClient
|
|
9
9
|
from linkedapi.mappers import MappedResponse
|
|
10
10
|
from linkedapi.operations import (
|
|
11
|
-
|
|
11
|
+
AcceptInvitation,
|
|
12
12
|
CheckConnectionStatus,
|
|
13
13
|
CommentOnPost,
|
|
14
14
|
CreatePost,
|
|
@@ -17,7 +17,7 @@ from linkedapi.operations import (
|
|
|
17
17
|
FetchJob,
|
|
18
18
|
FetchPerson,
|
|
19
19
|
FetchPost,
|
|
20
|
-
|
|
20
|
+
IgnoreInvitation,
|
|
21
21
|
ManageConversation,
|
|
22
22
|
NvFetchCompany,
|
|
23
23
|
NvFetchPerson,
|
|
@@ -29,8 +29,8 @@ from linkedapi.operations import (
|
|
|
29
29
|
NvSyncInbox,
|
|
30
30
|
ReactToPost,
|
|
31
31
|
RemoveConnection,
|
|
32
|
-
RetrieveConnectionRequests,
|
|
33
32
|
RetrieveConnections,
|
|
33
|
+
RetrieveInvitations,
|
|
34
34
|
RetrievePendingRequests,
|
|
35
35
|
RetrievePerformance,
|
|
36
36
|
RetrieveSSI,
|
|
@@ -74,10 +74,10 @@ class LinkedApi:
|
|
|
74
74
|
self.check_connection_status = CheckConnectionStatus(self.http_client)
|
|
75
75
|
self.send_connection_request = SendConnectionRequest(self.http_client)
|
|
76
76
|
self.withdraw_connection_request = WithdrawConnectionRequest(self.http_client)
|
|
77
|
-
self.
|
|
78
|
-
self.
|
|
77
|
+
self.accept_invitation = AcceptInvitation(self.http_client)
|
|
78
|
+
self.ignore_invitation = IgnoreInvitation(self.http_client)
|
|
79
79
|
self.retrieve_pending_requests = RetrievePendingRequests(self.http_client)
|
|
80
|
-
self.
|
|
80
|
+
self.retrieve_invitations = RetrieveInvitations(self.http_client)
|
|
81
81
|
self.retrieve_connections = RetrieveConnections(self.http_client)
|
|
82
82
|
self.remove_connection = RemoveConnection(self.http_client)
|
|
83
83
|
self.search_companies = SearchCompanies(self.http_client)
|
|
@@ -111,10 +111,10 @@ class LinkedApi:
|
|
|
111
111
|
self.check_connection_status,
|
|
112
112
|
self.send_connection_request,
|
|
113
113
|
self.withdraw_connection_request,
|
|
114
|
-
self.
|
|
115
|
-
self.
|
|
114
|
+
self.accept_invitation,
|
|
115
|
+
self.ignore_invitation,
|
|
116
116
|
self.retrieve_pending_requests,
|
|
117
|
-
self.
|
|
117
|
+
self.retrieve_invitations,
|
|
118
118
|
self.retrieve_connections,
|
|
119
119
|
self.remove_connection,
|
|
120
120
|
self.search_companies,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from linkedapi.operations.
|
|
1
|
+
from linkedapi.operations.accept_invitation import AcceptInvitation
|
|
2
2
|
from linkedapi.operations.check_connection_status import CheckConnectionStatus
|
|
3
3
|
from linkedapi.operations.comment_on_post import CommentOnPost
|
|
4
4
|
from linkedapi.operations.create_post import CreatePost
|
|
@@ -7,7 +7,7 @@ from linkedapi.operations.fetch_company import FetchCompany, FetchCompanyMapper
|
|
|
7
7
|
from linkedapi.operations.fetch_job import FetchJob, FetchJobMapper
|
|
8
8
|
from linkedapi.operations.fetch_person import FetchPerson, FetchPersonMapper
|
|
9
9
|
from linkedapi.operations.fetch_post import FetchPost, FetchPostMapper
|
|
10
|
-
from linkedapi.operations.
|
|
10
|
+
from linkedapi.operations.ignore_invitation import IgnoreInvitation
|
|
11
11
|
from linkedapi.operations.manage_conversation import ManageConversation
|
|
12
12
|
from linkedapi.operations.nv_fetch_company import NvFetchCompany, NvFetchCompanyMapper
|
|
13
13
|
from linkedapi.operations.nv_fetch_person import NvFetchPerson, NvFetchPersonMapper
|
|
@@ -19,8 +19,8 @@ from linkedapi.operations.nv_sync_conversation import NvSyncConversation
|
|
|
19
19
|
from linkedapi.operations.nv_sync_inbox import NvSyncInbox
|
|
20
20
|
from linkedapi.operations.react_to_post import ReactToPost
|
|
21
21
|
from linkedapi.operations.remove_connection import RemoveConnection
|
|
22
|
-
from linkedapi.operations.retrieve_connection_requests import RetrieveConnectionRequests
|
|
23
22
|
from linkedapi.operations.retrieve_connections import RetrieveConnections
|
|
23
|
+
from linkedapi.operations.retrieve_invitations import RetrieveInvitations
|
|
24
24
|
from linkedapi.operations.retrieve_pending_requests import RetrievePendingRequests
|
|
25
25
|
from linkedapi.operations.retrieve_performance import RetrievePerformance
|
|
26
26
|
from linkedapi.operations.retrieve_ssi import RetrieveSSI
|
|
@@ -35,7 +35,7 @@ from linkedapi.operations.sync_network import SyncNetwork
|
|
|
35
35
|
from linkedapi.operations.withdraw_connection_request import WithdrawConnectionRequest
|
|
36
36
|
|
|
37
37
|
__all__ = [
|
|
38
|
-
"
|
|
38
|
+
"AcceptInvitation",
|
|
39
39
|
"CheckConnectionStatus",
|
|
40
40
|
"CommentOnPost",
|
|
41
41
|
"CreatePost",
|
|
@@ -48,7 +48,7 @@ __all__ = [
|
|
|
48
48
|
"FetchPersonMapper",
|
|
49
49
|
"FetchPost",
|
|
50
50
|
"FetchPostMapper",
|
|
51
|
-
"
|
|
51
|
+
"IgnoreInvitation",
|
|
52
52
|
"ManageConversation",
|
|
53
53
|
"NvFetchCompany",
|
|
54
54
|
"NvFetchCompanyMapper",
|
|
@@ -62,8 +62,8 @@ __all__ = [
|
|
|
62
62
|
"NvSyncInbox",
|
|
63
63
|
"ReactToPost",
|
|
64
64
|
"RemoveConnection",
|
|
65
|
-
"RetrieveConnectionRequests",
|
|
66
65
|
"RetrieveConnections",
|
|
66
|
+
"RetrieveInvitations",
|
|
67
67
|
"RetrievePendingRequests",
|
|
68
68
|
"RetrievePerformance",
|
|
69
69
|
"RetrieveSSI",
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from linkedapi.core import Operation
|
|
4
|
+
from linkedapi.mappers import VoidWorkflowMapper
|
|
5
|
+
from linkedapi.types import AcceptInvitationParams
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class AcceptInvitation(Operation[AcceptInvitationParams, None]):
|
|
9
|
+
"""Accept an incoming standard LinkedIn invitation."""
|
|
10
|
+
|
|
11
|
+
operation_name = "acceptInvitation"
|
|
12
|
+
mapper = VoidWorkflowMapper[AcceptInvitationParams]("st.acceptInvitation")
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from linkedapi.core import Operation
|
|
4
|
+
from linkedapi.mappers import VoidWorkflowMapper
|
|
5
|
+
from linkedapi.types import IgnoreInvitationParams
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class IgnoreInvitation(Operation[IgnoreInvitationParams, None]):
|
|
9
|
+
"""Ignore an incoming standard LinkedIn invitation."""
|
|
10
|
+
|
|
11
|
+
operation_name = "ignoreInvitation"
|
|
12
|
+
mapper = VoidWorkflowMapper[IgnoreInvitationParams]("st.ignoreInvitation")
|
|
@@ -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 Invitation
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class RetrieveInvitations(Operation[None, list[Invitation]]):
|
|
9
|
+
"""Retrieve incoming LinkedIn invitations."""
|
|
10
|
+
|
|
11
|
+
operation_name = "retrieveInvitations"
|
|
12
|
+
mapper = ArrayWorkflowMapper[None, Invitation](
|
|
13
|
+
"st.retrieveInvitations",
|
|
14
|
+
Invitation,
|
|
15
|
+
)
|
|
@@ -68,16 +68,18 @@ from linkedapi.types.company import (
|
|
|
68
68
|
StCompanyEmployeesRetrievalConfig,
|
|
69
69
|
)
|
|
70
70
|
from linkedapi.types.connection import (
|
|
71
|
-
|
|
71
|
+
AcceptInvitationParams,
|
|
72
72
|
CheckConnectionStatusParams,
|
|
73
73
|
CheckConnectionStatusResult,
|
|
74
74
|
ConnectionPerson,
|
|
75
75
|
ConnectionStatus,
|
|
76
|
-
|
|
76
|
+
IgnoreInvitationParams,
|
|
77
|
+
Invitation,
|
|
78
|
+
InvitationTargetParams,
|
|
79
|
+
InvitationType,
|
|
77
80
|
NvOpenPersonPageParams,
|
|
78
81
|
NvOpenPersonPageResult,
|
|
79
82
|
RemoveConnectionParams,
|
|
80
|
-
RetrieveConnectionRequestsResult,
|
|
81
83
|
RetrieveConnectionsFilter,
|
|
82
84
|
RetrieveConnectionsParams,
|
|
83
85
|
RetrieveConnectionsResult,
|
|
@@ -233,7 +235,7 @@ from linkedapi.types.workflow import (
|
|
|
233
235
|
)
|
|
234
236
|
|
|
235
237
|
__all__ = [
|
|
236
|
-
"
|
|
238
|
+
"AcceptInvitationParams",
|
|
237
239
|
"AccountInfo",
|
|
238
240
|
"AccountWebhookEvent",
|
|
239
241
|
"AccountWebhookEventData",
|
|
@@ -290,9 +292,12 @@ __all__ = [
|
|
|
290
292
|
"GetConnectionSessionParams",
|
|
291
293
|
"GetLimitsParams",
|
|
292
294
|
"GetLimitsUsageParams",
|
|
293
|
-
"
|
|
295
|
+
"IgnoreInvitationParams",
|
|
294
296
|
"InboxMessage",
|
|
295
297
|
"InboxPollRequest",
|
|
298
|
+
"Invitation",
|
|
299
|
+
"InvitationTargetParams",
|
|
300
|
+
"InvitationType",
|
|
296
301
|
"Job",
|
|
297
302
|
"JobCurrency",
|
|
298
303
|
"JobDatePosted",
|
|
@@ -375,7 +380,6 @@ __all__ = [
|
|
|
375
380
|
"ReparseAccountInfoResult",
|
|
376
381
|
"ReplayWebhookDeliveryParams",
|
|
377
382
|
"ResetLimitsParams",
|
|
378
|
-
"RetrieveConnectionRequestsResult",
|
|
379
383
|
"RetrieveConnectionsFilter",
|
|
380
384
|
"RetrieveConnectionsParams",
|
|
381
385
|
"RetrieveConnectionsResult",
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Literal
|
|
4
|
+
|
|
5
|
+
from pydantic import model_validator
|
|
6
|
+
|
|
7
|
+
from linkedapi.types.base import LinkedApiModel
|
|
8
|
+
from linkedapi.types.params import BaseActionParams, LimitParams
|
|
9
|
+
|
|
10
|
+
ConnectionStatus = Literal["connected", "pending", "incoming", "notConnected"]
|
|
11
|
+
InvitationType = Literal["connect", "companyFollow", "newsletterSubscribe"]
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class ConnectionPerson(LinkedApiModel):
|
|
15
|
+
name: str | None = None
|
|
16
|
+
public_url: str | None = None
|
|
17
|
+
headline: str | None = None
|
|
18
|
+
location: str | None = None
|
|
19
|
+
profile_image_url: str | None = None
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class SendConnectionRequestParams(BaseActionParams):
|
|
23
|
+
person_url: str
|
|
24
|
+
note: str | None = None
|
|
25
|
+
email: str | None = None
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class CheckConnectionStatusParams(BaseActionParams):
|
|
29
|
+
person_url: str
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class CheckConnectionStatusResult(LinkedApiModel):
|
|
33
|
+
connection_status: ConnectionStatus | None = None
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class WithdrawConnectionRequestParams(BaseActionParams):
|
|
37
|
+
person_url: str
|
|
38
|
+
unfollow: bool | None = None
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class RetrievePendingRequestsResult(LinkedApiModel):
|
|
42
|
+
name: str | None = None
|
|
43
|
+
public_url: str | None = None
|
|
44
|
+
headline: str | None = None
|
|
45
|
+
sent_time: str | None = None
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class InvitationTargetParams(BaseActionParams):
|
|
49
|
+
invitation_type: InvitationType
|
|
50
|
+
person_url: str | None = None
|
|
51
|
+
company_url: str | None = None
|
|
52
|
+
newsletter_url: str | None = None
|
|
53
|
+
|
|
54
|
+
@model_validator(mode="after")
|
|
55
|
+
def validate_target_url(self) -> InvitationTargetParams:
|
|
56
|
+
target_urls = {
|
|
57
|
+
"connect": self.person_url,
|
|
58
|
+
"companyFollow": self.company_url,
|
|
59
|
+
"newsletterSubscribe": self.newsletter_url,
|
|
60
|
+
}
|
|
61
|
+
if target_urls[self.invitation_type] is None:
|
|
62
|
+
msg = f"{self.invitation_type} invitation requires its matching target URL"
|
|
63
|
+
raise ValueError(msg)
|
|
64
|
+
if sum(url is not None for url in target_urls.values()) != 1:
|
|
65
|
+
msg = "Provide only the target URL that matches invitation_type"
|
|
66
|
+
raise ValueError(msg)
|
|
67
|
+
return self
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
class AcceptInvitationParams(InvitationTargetParams):
|
|
71
|
+
pass
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class IgnoreInvitationParams(InvitationTargetParams):
|
|
75
|
+
pass
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class Invitation(LinkedApiModel):
|
|
79
|
+
invitation_type: InvitationType
|
|
80
|
+
name: str
|
|
81
|
+
public_url: str
|
|
82
|
+
headline: str | None = None
|
|
83
|
+
note: str | None = None
|
|
84
|
+
company_url: str | None = None
|
|
85
|
+
company_name: str | None = None
|
|
86
|
+
newsletter_url: str | None = None
|
|
87
|
+
newsletter_name: str | None = None
|
|
88
|
+
|
|
89
|
+
@model_validator(mode="after")
|
|
90
|
+
def validate_type_fields(self) -> Invitation:
|
|
91
|
+
type_fields = {
|
|
92
|
+
"headline",
|
|
93
|
+
"note",
|
|
94
|
+
"company_url",
|
|
95
|
+
"company_name",
|
|
96
|
+
"newsletter_url",
|
|
97
|
+
"newsletter_name",
|
|
98
|
+
}
|
|
99
|
+
required_fields = {
|
|
100
|
+
"connect": {"headline", "note"},
|
|
101
|
+
"companyFollow": {"company_url", "company_name"},
|
|
102
|
+
"newsletterSubscribe": {"newsletter_url", "newsletter_name"},
|
|
103
|
+
}[self.invitation_type]
|
|
104
|
+
missing_fields = required_fields - self.model_fields_set
|
|
105
|
+
if missing_fields:
|
|
106
|
+
msg = (
|
|
107
|
+
f"{self.invitation_type} invitation is missing required fields: "
|
|
108
|
+
f"{', '.join(sorted(missing_fields))}"
|
|
109
|
+
)
|
|
110
|
+
raise ValueError(msg)
|
|
111
|
+
|
|
112
|
+
unexpected_fields = (self.model_fields_set & type_fields) - required_fields
|
|
113
|
+
if unexpected_fields:
|
|
114
|
+
msg = (
|
|
115
|
+
f"{self.invitation_type} invitation contains fields for another type: "
|
|
116
|
+
f"{', '.join(sorted(unexpected_fields))}"
|
|
117
|
+
)
|
|
118
|
+
raise ValueError(msg)
|
|
119
|
+
|
|
120
|
+
target_url = {
|
|
121
|
+
"connect": self.public_url,
|
|
122
|
+
"companyFollow": self.company_url,
|
|
123
|
+
"newsletterSubscribe": self.newsletter_url,
|
|
124
|
+
}[self.invitation_type]
|
|
125
|
+
if target_url is None:
|
|
126
|
+
msg = f"{self.invitation_type} invitation requires a non-null target URL"
|
|
127
|
+
raise ValueError(msg)
|
|
128
|
+
return self
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
class RetrieveConnectionsFilter(LinkedApiModel):
|
|
132
|
+
first_name: str | None = None
|
|
133
|
+
last_name: str | None = None
|
|
134
|
+
position: str | None = None
|
|
135
|
+
locations: list[str] | None = None
|
|
136
|
+
industries: list[str] | None = None
|
|
137
|
+
current_companies: list[str] | None = None
|
|
138
|
+
previous_companies: list[str] | None = None
|
|
139
|
+
schools: list[str] | None = None
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
class RetrieveConnectionsParams(LimitParams):
|
|
143
|
+
since: str | None = None
|
|
144
|
+
filter: RetrieveConnectionsFilter | None = None
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
class RetrieveConnectionsResult(LinkedApiModel):
|
|
148
|
+
name: str | None = None
|
|
149
|
+
public_url: str | None = None
|
|
150
|
+
headline: str | None = None
|
|
151
|
+
location: str | None = None
|
|
152
|
+
connected_at: str | None = None
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
class RemoveConnectionParams(BaseActionParams):
|
|
156
|
+
person_url: str
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
class NvOpenPersonPageParams(BaseActionParams):
|
|
160
|
+
person_hashed_url: str
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
class NvOpenPersonPageResult(LinkedApiModel):
|
|
164
|
+
name: str | None = None
|
|
165
|
+
public_url: str | None = None
|
|
166
|
+
hashed_url: str | None = None
|
|
167
|
+
headline: str | None = None
|
|
168
|
+
location: str | None = None
|
|
169
|
+
country_code: str | None = None
|
|
170
|
+
position: str | None = None
|
|
171
|
+
company_name: str | None = None
|
|
172
|
+
company_hashed_url: str | None = None
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import pytest
|
|
3
4
|
from conftest import FakeHttpClient
|
|
5
|
+
from pydantic import ValidationError
|
|
4
6
|
|
|
5
7
|
from linkedapi import (
|
|
8
|
+
AcceptInvitationParams,
|
|
6
9
|
ArrayWorkflowMapper,
|
|
7
10
|
FetchPersonParams,
|
|
11
|
+
Invitation,
|
|
8
12
|
LinkedApi,
|
|
9
13
|
LinkedApiConfig,
|
|
10
14
|
VoidWorkflowMapper,
|
|
@@ -29,10 +33,10 @@ def test_linked_api_exposes_all_predefined_operations() -> None:
|
|
|
29
33
|
"send_connection_request",
|
|
30
34
|
"check_connection_status",
|
|
31
35
|
"withdraw_connection_request",
|
|
32
|
-
"
|
|
33
|
-
"
|
|
36
|
+
"accept_invitation",
|
|
37
|
+
"ignore_invitation",
|
|
34
38
|
"retrieve_pending_requests",
|
|
35
|
-
"
|
|
39
|
+
"retrieve_invitations",
|
|
36
40
|
"retrieve_connections",
|
|
37
41
|
"remove_connection",
|
|
38
42
|
"send_message",
|
|
@@ -72,15 +76,12 @@ def test_operation_mappers_match_node_contract() -> None:
|
|
|
72
76
|
assert linkedapi.fetch_job.mapper.default_params == {"basicInfo": True}
|
|
73
77
|
assert isinstance(linkedapi.send_connection_request.mapper, VoidWorkflowMapper)
|
|
74
78
|
assert linkedapi.send_connection_request.mapper.action_type == "st.sendConnectionRequest"
|
|
75
|
-
assert isinstance(linkedapi.
|
|
76
|
-
assert linkedapi.
|
|
77
|
-
assert isinstance(linkedapi.
|
|
78
|
-
assert linkedapi.
|
|
79
|
-
assert isinstance(linkedapi.
|
|
80
|
-
assert
|
|
81
|
-
linkedapi.retrieve_connection_requests.mapper.base_action_type
|
|
82
|
-
== "st.retrieveConnectionRequests"
|
|
83
|
-
)
|
|
79
|
+
assert isinstance(linkedapi.accept_invitation.mapper, VoidWorkflowMapper)
|
|
80
|
+
assert linkedapi.accept_invitation.mapper.action_type == "st.acceptInvitation"
|
|
81
|
+
assert isinstance(linkedapi.ignore_invitation.mapper, VoidWorkflowMapper)
|
|
82
|
+
assert linkedapi.ignore_invitation.mapper.action_type == "st.ignoreInvitation"
|
|
83
|
+
assert isinstance(linkedapi.retrieve_invitations.mapper, ArrayWorkflowMapper)
|
|
84
|
+
assert linkedapi.retrieve_invitations.mapper.base_action_type == "st.retrieveInvitations"
|
|
84
85
|
assert isinstance(linkedapi.sync_inbox.mapper, VoidWorkflowMapper)
|
|
85
86
|
assert linkedapi.sync_inbox.mapper.action_type == "st.syncInbox"
|
|
86
87
|
assert isinstance(linkedapi.nv_sync_inbox.mapper, VoidWorkflowMapper)
|
|
@@ -91,6 +92,77 @@ def test_operation_mappers_match_node_contract() -> None:
|
|
|
91
92
|
assert linkedapi.nv_manage_conversation.mapper.action_type == "nv.manageConversation"
|
|
92
93
|
|
|
93
94
|
|
|
95
|
+
def test_invitation_params_require_the_matching_target_url() -> None:
|
|
96
|
+
params = AcceptInvitationParams(
|
|
97
|
+
invitation_type="companyFollow",
|
|
98
|
+
company_url="https://www.linkedin.com/company/example/",
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
assert params.model_dump(by_alias=True, exclude_none=True) == {
|
|
102
|
+
"invitationType": "companyFollow",
|
|
103
|
+
"companyUrl": "https://www.linkedin.com/company/example/",
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
with pytest.raises(ValidationError):
|
|
107
|
+
AcceptInvitationParams(
|
|
108
|
+
invitation_type="newsletterSubscribe",
|
|
109
|
+
person_url="https://www.linkedin.com/in/example/",
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
with pytest.raises(ValidationError):
|
|
113
|
+
AcceptInvitationParams(
|
|
114
|
+
invitation_type="connect",
|
|
115
|
+
person_url="https://www.linkedin.com/in/example/",
|
|
116
|
+
company_url="https://www.linkedin.com/company/example/",
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def test_invitation_result_fields_depend_on_type() -> None:
|
|
121
|
+
connect = Invitation.model_validate(
|
|
122
|
+
{
|
|
123
|
+
"invitationType": "connect",
|
|
124
|
+
"name": "Example Person",
|
|
125
|
+
"publicUrl": "https://www.linkedin.com/in/example/",
|
|
126
|
+
"headline": None,
|
|
127
|
+
"note": None,
|
|
128
|
+
}
|
|
129
|
+
)
|
|
130
|
+
assert connect.invitation_type == "connect"
|
|
131
|
+
|
|
132
|
+
company_follow = Invitation.model_validate(
|
|
133
|
+
{
|
|
134
|
+
"invitationType": "companyFollow",
|
|
135
|
+
"name": "Example Person",
|
|
136
|
+
"publicUrl": "https://www.linkedin.com/in/example/",
|
|
137
|
+
"companyUrl": "https://www.linkedin.com/company/example/",
|
|
138
|
+
"companyName": None,
|
|
139
|
+
}
|
|
140
|
+
)
|
|
141
|
+
assert company_follow.company_url == "https://www.linkedin.com/company/example/"
|
|
142
|
+
|
|
143
|
+
with pytest.raises(ValidationError):
|
|
144
|
+
Invitation.model_validate(
|
|
145
|
+
{
|
|
146
|
+
"invitationType": "connect",
|
|
147
|
+
"name": "Example Person",
|
|
148
|
+
"publicUrl": "https://www.linkedin.com/in/example/",
|
|
149
|
+
"headline": None,
|
|
150
|
+
}
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
with pytest.raises(ValidationError):
|
|
154
|
+
Invitation.model_validate(
|
|
155
|
+
{
|
|
156
|
+
"invitationType": "companyFollow",
|
|
157
|
+
"name": "Example Person",
|
|
158
|
+
"publicUrl": "https://www.linkedin.com/in/example/",
|
|
159
|
+
"companyUrl": "https://www.linkedin.com/company/example/",
|
|
160
|
+
"companyName": None,
|
|
161
|
+
"note": None,
|
|
162
|
+
}
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
|
|
94
166
|
def test_execute_and_result_flow_returns_pydantic_data(
|
|
95
167
|
fake_http_client: FakeHttpClient,
|
|
96
168
|
person_data: dict[str, object],
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from linkedapi.core import Operation
|
|
4
|
-
from linkedapi.mappers import VoidWorkflowMapper
|
|
5
|
-
from linkedapi.types import AcceptConnectionRequestParams
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class AcceptConnectionRequest(Operation[AcceptConnectionRequestParams, None]):
|
|
9
|
-
"""Accept an incoming standard LinkedIn connection request."""
|
|
10
|
-
|
|
11
|
-
operation_name = "acceptConnectionRequest"
|
|
12
|
-
mapper = VoidWorkflowMapper[AcceptConnectionRequestParams]("st.acceptConnectionRequest")
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from linkedapi.core import Operation
|
|
4
|
-
from linkedapi.mappers import VoidWorkflowMapper
|
|
5
|
-
from linkedapi.types import IgnoreConnectionRequestParams
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class IgnoreConnectionRequest(Operation[IgnoreConnectionRequestParams, None]):
|
|
9
|
-
"""Ignore an incoming standard LinkedIn connection request."""
|
|
10
|
-
|
|
11
|
-
operation_name = "ignoreConnectionRequest"
|
|
12
|
-
mapper = VoidWorkflowMapper[IgnoreConnectionRequestParams]("st.ignoreConnectionRequest")
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from linkedapi.core import Operation
|
|
4
|
-
from linkedapi.mappers import ArrayWorkflowMapper
|
|
5
|
-
from linkedapi.types import RetrieveConnectionRequestsResult
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class RetrieveConnectionRequests(Operation[None, list[RetrieveConnectionRequestsResult]]):
|
|
9
|
-
"""Retrieve incoming standard LinkedIn connection requests."""
|
|
10
|
-
|
|
11
|
-
operation_name = "retrieveConnectionRequests"
|
|
12
|
-
mapper = ArrayWorkflowMapper[None, RetrieveConnectionRequestsResult](
|
|
13
|
-
"st.retrieveConnectionRequests",
|
|
14
|
-
RetrieveConnectionRequestsResult,
|
|
15
|
-
)
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from typing import Literal
|
|
4
|
-
|
|
5
|
-
from linkedapi.types.base import LinkedApiModel
|
|
6
|
-
from linkedapi.types.params import BaseActionParams, LimitParams
|
|
7
|
-
|
|
8
|
-
ConnectionStatus = Literal["connected", "pending", "incoming", "notConnected"]
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class ConnectionPerson(LinkedApiModel):
|
|
12
|
-
name: str | None = None
|
|
13
|
-
public_url: str | None = None
|
|
14
|
-
headline: str | None = None
|
|
15
|
-
location: str | None = None
|
|
16
|
-
profile_image_url: str | None = None
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class SendConnectionRequestParams(BaseActionParams):
|
|
20
|
-
person_url: str
|
|
21
|
-
note: str | None = None
|
|
22
|
-
email: str | None = None
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
class CheckConnectionStatusParams(BaseActionParams):
|
|
26
|
-
person_url: str
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
class CheckConnectionStatusResult(LinkedApiModel):
|
|
30
|
-
connection_status: ConnectionStatus | None = None
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
class WithdrawConnectionRequestParams(BaseActionParams):
|
|
34
|
-
person_url: str
|
|
35
|
-
unfollow: bool | None = None
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
class RetrievePendingRequestsResult(LinkedApiModel):
|
|
39
|
-
name: str | None = None
|
|
40
|
-
public_url: str | None = None
|
|
41
|
-
headline: str | None = None
|
|
42
|
-
sent_time: str | None = None
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
class AcceptConnectionRequestParams(BaseActionParams):
|
|
46
|
-
person_url: str
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
class IgnoreConnectionRequestParams(BaseActionParams):
|
|
50
|
-
person_url: str
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
class RetrieveConnectionRequestsResult(LinkedApiModel):
|
|
54
|
-
name: str | None = None
|
|
55
|
-
public_url: str | None = None
|
|
56
|
-
headline: str | None = None
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
class RetrieveConnectionsFilter(LinkedApiModel):
|
|
60
|
-
first_name: str | None = None
|
|
61
|
-
last_name: str | None = None
|
|
62
|
-
position: str | None = None
|
|
63
|
-
locations: list[str] | None = None
|
|
64
|
-
industries: list[str] | None = None
|
|
65
|
-
current_companies: list[str] | None = None
|
|
66
|
-
previous_companies: list[str] | None = None
|
|
67
|
-
schools: list[str] | None = None
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
class RetrieveConnectionsParams(LimitParams):
|
|
71
|
-
since: str | None = None
|
|
72
|
-
filter: RetrieveConnectionsFilter | None = None
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
class RetrieveConnectionsResult(LinkedApiModel):
|
|
76
|
-
name: str | None = None
|
|
77
|
-
public_url: str | None = None
|
|
78
|
-
headline: str | None = None
|
|
79
|
-
location: str | None = None
|
|
80
|
-
connected_at: str | None = None
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
class RemoveConnectionParams(BaseActionParams):
|
|
84
|
-
person_url: str
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
class NvOpenPersonPageParams(BaseActionParams):
|
|
88
|
-
person_hashed_url: str
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
class NvOpenPersonPageResult(LinkedApiModel):
|
|
92
|
-
name: str | None = None
|
|
93
|
-
public_url: str | None = None
|
|
94
|
-
hashed_url: str | None = None
|
|
95
|
-
headline: str | None = None
|
|
96
|
-
location: str | None = None
|
|
97
|
-
country_code: str | None = None
|
|
98
|
-
position: str | None = None
|
|
99
|
-
company_name: str | None = None
|
|
100
|
-
company_hashed_url: str | None = None
|
|
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
|
|
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
|