Skip to content

Commit d83b251

Browse files
Manage invitations
1 parent 7c8cb3d commit d83b251

10 files changed

Lines changed: 96 additions & 4 deletions

linkedapi/__init__.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
VoidWorkflowMapper,
3030
)
3131
from linkedapi.operations import (
32+
AcceptConnectionRequest,
3233
CheckConnectionStatus,
3334
CommentOnPost,
3435
CreatePost,
@@ -41,6 +42,7 @@
4142
FetchPersonMapper,
4243
FetchPost,
4344
FetchPostMapper,
45+
IgnoreConnectionRequest,
4446
ManageConversation,
4547
NvFetchCompany,
4648
NvFetchCompanyMapper,
@@ -54,6 +56,7 @@
5456
NvSyncInbox,
5557
ReactToPost,
5658
RemoveConnection,
59+
RetrieveConnectionRequests,
5760
RetrieveConnections,
5861
RetrievePendingRequests,
5962
RetrievePerformance,
@@ -71,11 +74,12 @@
7174
from linkedapi.types import __all__ as _types_all
7275
from linkedapi.webhooks import parse_webhook_event
7376

74-
__version__ = "1.1.2"
77+
__version__ = "1.2.0"
7578
PredefinedOperation = Operation
7679

7780
__all__ = [
7881
*_types_all,
82+
"AcceptConnectionRequest",
7983
"AdminAccounts",
8084
"AdminHttpClient",
8185
"AdminLimits",
@@ -97,6 +101,7 @@
97101
"FetchPost",
98102
"FetchPostMapper",
99103
"HttpClient",
104+
"IgnoreConnectionRequest",
100105
"LINKED_API_ACTION_ERROR_TYPES",
101106
"LINKED_API_ERROR_TYPES",
102107
"LinkedApi",
@@ -124,6 +129,7 @@
124129
"ReactToPost",
125130
"RemoveConnection",
126131
"ResponseMapping",
132+
"RetrieveConnectionRequests",
127133
"RetrieveConnections",
128134
"RetrievePendingRequests",
129135
"RetrievePerformance",

linkedapi/client.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from linkedapi.http import HttpClient, LinkedApiHttpClient
99
from linkedapi.mappers import MappedResponse
1010
from linkedapi.operations import (
11+
AcceptConnectionRequest,
1112
CheckConnectionStatus,
1213
CommentOnPost,
1314
CreatePost,
@@ -16,6 +17,7 @@
1617
FetchJob,
1718
FetchPerson,
1819
FetchPost,
20+
IgnoreConnectionRequest,
1921
ManageConversation,
2022
NvFetchCompany,
2123
NvFetchPerson,
@@ -27,6 +29,7 @@
2729
NvSyncInbox,
2830
ReactToPost,
2931
RemoveConnection,
32+
RetrieveConnectionRequests,
3033
RetrieveConnections,
3134
RetrievePendingRequests,
3235
RetrievePerformance,
@@ -68,7 +71,10 @@ def __init__(self, config: LinkedApiConfig | HttpClient[Any]) -> None:
6871
self.check_connection_status = CheckConnectionStatus(self.http_client)
6972
self.send_connection_request = SendConnectionRequest(self.http_client)
7073
self.withdraw_connection_request = WithdrawConnectionRequest(self.http_client)
74+
self.accept_connection_request = AcceptConnectionRequest(self.http_client)
75+
self.ignore_connection_request = IgnoreConnectionRequest(self.http_client)
7176
self.retrieve_pending_requests = RetrievePendingRequests(self.http_client)
77+
self.retrieve_connection_requests = RetrieveConnectionRequests(self.http_client)
7278
self.retrieve_connections = RetrieveConnections(self.http_client)
7379
self.remove_connection = RemoveConnection(self.http_client)
7480
self.search_companies = SearchCompanies(self.http_client)
@@ -101,7 +107,10 @@ def __init__(self, config: LinkedApiConfig | HttpClient[Any]) -> None:
101107
self.check_connection_status,
102108
self.send_connection_request,
103109
self.withdraw_connection_request,
110+
self.accept_connection_request,
111+
self.ignore_connection_request,
104112
self.retrieve_pending_requests,
113+
self.retrieve_connection_requests,
105114
self.retrieve_connections,
106115
self.remove_connection,
107116
self.search_companies,

linkedapi/operations/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from linkedapi.operations.accept_connection_request import AcceptConnectionRequest
12
from linkedapi.operations.check_connection_status import CheckConnectionStatus
23
from linkedapi.operations.comment_on_post import CommentOnPost
34
from linkedapi.operations.create_post import CreatePost
@@ -6,6 +7,7 @@
67
from linkedapi.operations.fetch_job import FetchJob, FetchJobMapper
78
from linkedapi.operations.fetch_person import FetchPerson, FetchPersonMapper
89
from linkedapi.operations.fetch_post import FetchPost, FetchPostMapper
10+
from linkedapi.operations.ignore_connection_request import IgnoreConnectionRequest
911
from linkedapi.operations.manage_conversation import ManageConversation
1012
from linkedapi.operations.nv_fetch_company import NvFetchCompany, NvFetchCompanyMapper
1113
from linkedapi.operations.nv_fetch_person import NvFetchPerson, NvFetchPersonMapper
@@ -17,6 +19,7 @@
1719
from linkedapi.operations.nv_sync_inbox import NvSyncInbox
1820
from linkedapi.operations.react_to_post import ReactToPost
1921
from linkedapi.operations.remove_connection import RemoveConnection
22+
from linkedapi.operations.retrieve_connection_requests import RetrieveConnectionRequests
2023
from linkedapi.operations.retrieve_connections import RetrieveConnections
2124
from linkedapi.operations.retrieve_pending_requests import RetrievePendingRequests
2225
from linkedapi.operations.retrieve_performance import RetrievePerformance
@@ -31,6 +34,7 @@
3134
from linkedapi.operations.withdraw_connection_request import WithdrawConnectionRequest
3235

3336
__all__ = [
37+
"AcceptConnectionRequest",
3438
"CheckConnectionStatus",
3539
"CommentOnPost",
3640
"CreatePost",
@@ -43,6 +47,7 @@
4347
"FetchPersonMapper",
4448
"FetchPost",
4549
"FetchPostMapper",
50+
"IgnoreConnectionRequest",
4651
"ManageConversation",
4752
"NvFetchCompany",
4853
"NvFetchCompanyMapper",
@@ -56,6 +61,7 @@
5661
"NvSyncInbox",
5762
"ReactToPost",
5863
"RemoveConnection",
64+
"RetrieveConnectionRequests",
5965
"RetrieveConnections",
6066
"RetrievePendingRequests",
6167
"RetrievePerformance",
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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 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")
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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 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")
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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 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+
)

linkedapi/types/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,16 @@
6868
StCompanyEmployeesRetrievalConfig,
6969
)
7070
from linkedapi.types.connection import (
71+
AcceptConnectionRequestParams,
7172
CheckConnectionStatusParams,
7273
CheckConnectionStatusResult,
7374
ConnectionPerson,
7475
ConnectionStatus,
76+
IgnoreConnectionRequestParams,
7577
NvOpenPersonPageParams,
7678
NvOpenPersonPageResult,
7779
RemoveConnectionParams,
80+
RetrieveConnectionRequestsResult,
7881
RetrieveConnectionsFilter,
7982
RetrieveConnectionsParams,
8083
RetrieveConnectionsResult,
@@ -221,6 +224,7 @@
221224
)
222225

223226
__all__ = [
227+
"AcceptConnectionRequestParams",
224228
"AccountInfo",
225229
"AccountWebhookEvent",
226230
"AccountWebhookEventData",
@@ -277,6 +281,7 @@
277281
"GetConnectionSessionParams",
278282
"GetLimitsParams",
279283
"GetLimitsUsageParams",
284+
"IgnoreConnectionRequestParams",
280285
"InboxMessage",
281286
"InboxPollRequest",
282287
"Job",
@@ -356,6 +361,7 @@
356361
"ReparseAccountInfoResult",
357362
"ReplayWebhookDeliveryParams",
358363
"ResetLimitsParams",
364+
"RetrieveConnectionRequestsResult",
359365
"RetrieveConnectionsFilter",
360366
"RetrieveConnectionsParams",
361367
"RetrieveConnectionsResult",

linkedapi/types/connection.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from linkedapi.types.base import LinkedApiModel
66
from linkedapi.types.params import BaseActionParams, LimitParams
77

8-
ConnectionStatus = Literal["connected", "pending", "notConnected"]
8+
ConnectionStatus = Literal["connected", "pending", "incoming", "notConnected"]
99

1010

1111
class ConnectionPerson(LinkedApiModel):
@@ -42,6 +42,20 @@ class RetrievePendingRequestsResult(LinkedApiModel):
4242
sent_time: str | None = None
4343

4444

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+
4559
class RetrieveConnectionsFilter(LinkedApiModel):
4660
first_name: str | None = None
4761
last_name: str | None = None

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
44

55
[project]
66
name = "linkedapi"
7-
version = "1.1.2"
7+
version = "1.2.0"
88
description = "Official synchronous Python SDK for Linked API."
99
readme = "README.md"
1010
requires-python = ">=3.10"

tests/test_operations.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,10 @@ def test_linked_api_exposes_all_predefined_operations() -> None:
2929
"send_connection_request",
3030
"check_connection_status",
3131
"withdraw_connection_request",
32+
"accept_connection_request",
33+
"ignore_connection_request",
3234
"retrieve_pending_requests",
35+
"retrieve_connection_requests",
3336
"retrieve_connections",
3437
"remove_connection",
3538
"send_message",
@@ -52,7 +55,7 @@ def test_linked_api_exposes_all_predefined_operations() -> None:
5255
assert hasattr(operation, "execute")
5356
assert hasattr(operation, "result")
5457
assert hasattr(operation, "cancel")
55-
assert len(linkedapi.operations) == 31
58+
assert len(linkedapi.operations) == 34
5659

5760

5861
def test_operation_mappers_match_node_contract() -> None:
@@ -68,6 +71,15 @@ def test_operation_mappers_match_node_contract() -> None:
6871
assert linkedapi.fetch_job.mapper.default_params == {"basicInfo": True}
6972
assert isinstance(linkedapi.send_connection_request.mapper, VoidWorkflowMapper)
7073
assert linkedapi.send_connection_request.mapper.action_type == "st.sendConnectionRequest"
74+
assert isinstance(linkedapi.accept_connection_request.mapper, VoidWorkflowMapper)
75+
assert linkedapi.accept_connection_request.mapper.action_type == "st.acceptConnectionRequest"
76+
assert isinstance(linkedapi.ignore_connection_request.mapper, VoidWorkflowMapper)
77+
assert linkedapi.ignore_connection_request.mapper.action_type == "st.ignoreConnectionRequest"
78+
assert isinstance(linkedapi.retrieve_connection_requests.mapper, ArrayWorkflowMapper)
79+
assert (
80+
linkedapi.retrieve_connection_requests.mapper.base_action_type
81+
== "st.retrieveConnectionRequests"
82+
)
7183
assert isinstance(linkedapi.sync_inbox.mapper, VoidWorkflowMapper)
7284
assert linkedapi.sync_inbox.mapper.action_type == "st.syncInbox"
7385
assert isinstance(linkedapi.nv_sync_inbox.mapper, VoidWorkflowMapper)

0 commit comments

Comments
 (0)