linkedapi 1.3.3__tar.gz → 1.3.4__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 (103) hide show
  1. {linkedapi-1.3.3 → linkedapi-1.3.4}/PKG-INFO +1 -1
  2. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/__init__.py +3 -1
  3. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/client.py +3 -0
  4. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/__init__.py +2 -0
  5. linkedapi-1.3.4/linkedapi/operations/retrieve_feed.py +15 -0
  6. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/types/__init__.py +3 -0
  7. linkedapi-1.3.4/linkedapi/types/feed.py +14 -0
  8. {linkedapi-1.3.3 → linkedapi-1.3.4}/pyproject.toml +1 -1
  9. {linkedapi-1.3.3 → linkedapi-1.3.4}/tests/test_operations.py +33 -1
  10. {linkedapi-1.3.3 → linkedapi-1.3.4}/.github/workflows/publish.yaml +0 -0
  11. {linkedapi-1.3.3 → linkedapi-1.3.4}/.gitignore +0 -0
  12. {linkedapi-1.3.3 → linkedapi-1.3.4}/LICENSE +0 -0
  13. {linkedapi-1.3.3 → linkedapi-1.3.4}/README.md +0 -0
  14. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/admin/__init__.py +0 -0
  15. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/admin/accounts.py +0 -0
  16. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/admin/admin.py +0 -0
  17. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/admin/http_client.py +0 -0
  18. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/admin/limits.py +0 -0
  19. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/admin/subscription.py +0 -0
  20. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/admin/webhooks.py +0 -0
  21. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/config.py +0 -0
  22. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/core/__init__.py +0 -0
  23. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/core/operation.py +0 -0
  24. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/core/polling.py +0 -0
  25. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/errors.py +0 -0
  26. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/http/__init__.py +0 -0
  27. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/http/base.py +0 -0
  28. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/http/linked_api_http_client.py +0 -0
  29. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/mappers/__init__.py +0 -0
  30. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/mappers/array.py +0 -0
  31. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/mappers/base.py +0 -0
  32. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/mappers/send_message.py +0 -0
  33. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/mappers/simple.py +0 -0
  34. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/mappers/then.py +0 -0
  35. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/mappers/void.py +0 -0
  36. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/accept_invitation.py +0 -0
  37. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/check_connection_status.py +0 -0
  38. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/comment_on_post.py +0 -0
  39. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/create_post.py +0 -0
  40. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/custom_workflow.py +0 -0
  41. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/fetch_company.py +0 -0
  42. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/fetch_job.py +0 -0
  43. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/fetch_person.py +0 -0
  44. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/fetch_post.py +0 -0
  45. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/ignore_invitation.py +0 -0
  46. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/manage_conversation.py +0 -0
  47. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/nv_fetch_company.py +0 -0
  48. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/nv_fetch_person.py +0 -0
  49. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/nv_manage_conversation.py +0 -0
  50. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/nv_search_companies.py +0 -0
  51. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/nv_search_people.py +0 -0
  52. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/nv_send_message.py +0 -0
  53. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/nv_sync_conversation.py +0 -0
  54. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/nv_sync_inbox.py +0 -0
  55. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/react_to_post.py +0 -0
  56. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/remove_connection.py +0 -0
  57. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/retrieve_connections.py +0 -0
  58. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/retrieve_invitations.py +0 -0
  59. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/retrieve_pending_requests.py +0 -0
  60. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/retrieve_performance.py +0 -0
  61. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/retrieve_ssi.py +0 -0
  62. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/search_companies.py +0 -0
  63. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/search_jobs.py +0 -0
  64. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/search_people.py +0 -0
  65. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/send_connection_request.py +0 -0
  66. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/send_message.py +0 -0
  67. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/sync_conversation.py +0 -0
  68. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/sync_inbox.py +0 -0
  69. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/sync_network.py +0 -0
  70. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/operations/withdraw_connection_request.py +0 -0
  71. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/py.typed +0 -0
  72. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/types/account.py +0 -0
  73. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/types/admin/__init__.py +0 -0
  74. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/types/admin/accounts.py +0 -0
  75. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/types/admin/config.py +0 -0
  76. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/types/admin/limits.py +0 -0
  77. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/types/admin/subscription.py +0 -0
  78. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/types/base.py +0 -0
  79. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/types/company.py +0 -0
  80. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/types/connection.py +0 -0
  81. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/types/jobs.py +0 -0
  82. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/types/message.py +0 -0
  83. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/types/network.py +0 -0
  84. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/types/params.py +0 -0
  85. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/types/person.py +0 -0
  86. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/types/post.py +0 -0
  87. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/types/responses.py +0 -0
  88. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/types/search_companies.py +0 -0
  89. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/types/search_people.py +0 -0
  90. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/types/statistics.py +0 -0
  91. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/types/webhooks.py +0 -0
  92. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/types/workflow.py +0 -0
  93. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/webhooks/__init__.py +0 -0
  94. {linkedapi-1.3.3 → linkedapi-1.3.4}/linkedapi/webhooks/parse.py +0 -0
  95. {linkedapi-1.3.3 → linkedapi-1.3.4}/tests/conftest.py +0 -0
  96. {linkedapi-1.3.3 → linkedapi-1.3.4}/tests/test_admin.py +0 -0
  97. {linkedapi-1.3.3 → linkedapi-1.3.4}/tests/test_direct_methods.py +0 -0
  98. {linkedapi-1.3.3 → linkedapi-1.3.4}/tests/test_errors.py +0 -0
  99. {linkedapi-1.3.3 → linkedapi-1.3.4}/tests/test_http_client.py +0 -0
  100. {linkedapi-1.3.3 → linkedapi-1.3.4}/tests/test_mappers.py +0 -0
  101. {linkedapi-1.3.3 → linkedapi-1.3.4}/tests/test_models.py +0 -0
  102. {linkedapi-1.3.3 → linkedapi-1.3.4}/tests/test_polling.py +0 -0
  103. {linkedapi-1.3.3 → linkedapi-1.3.4}/tests/test_webhooks.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: linkedapi
3
- Version: 1.3.3
3
+ Version: 1.3.4
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
@@ -57,6 +57,7 @@ from linkedapi.operations import (
57
57
  ReactToPost,
58
58
  RemoveConnection,
59
59
  RetrieveConnections,
60
+ RetrieveFeed,
60
61
  RetrieveInvitations,
61
62
  RetrievePendingRequests,
62
63
  RetrievePerformance,
@@ -75,7 +76,7 @@ from linkedapi.types import * # noqa: F403
75
76
  from linkedapi.types import __all__ as _types_all
76
77
  from linkedapi.webhooks import parse_webhook_event
77
78
 
78
- __version__ = "1.3.2"
79
+ __version__ = "1.3.4"
79
80
  PredefinedOperation = Operation
80
81
 
81
82
  __all__ = [
@@ -132,6 +133,7 @@ __all__ = [
132
133
  "ResponseMapping",
133
134
  "RetrieveInvitations",
134
135
  "RetrieveConnections",
136
+ "RetrieveFeed",
135
137
  "RetrievePendingRequests",
136
138
  "RetrievePerformance",
137
139
  "RetrieveSSI",
@@ -30,6 +30,7 @@ from linkedapi.operations import (
30
30
  ReactToPost,
31
31
  RemoveConnection,
32
32
  RetrieveConnections,
33
+ RetrieveFeed,
33
34
  RetrieveInvitations,
34
35
  RetrievePendingRequests,
35
36
  RetrievePerformance,
@@ -90,6 +91,7 @@ class LinkedApi:
90
91
  self.react_to_post = ReactToPost(self.http_client)
91
92
  self.comment_on_post = CommentOnPost(self.http_client)
92
93
  self.create_post = CreatePost(self.http_client)
94
+ self.retrieve_feed = RetrieveFeed(self.http_client)
93
95
  self.retrieve_ssi = RetrieveSSI(self.http_client)
94
96
  self.retrieve_performance = RetrievePerformance(self.http_client)
95
97
  self.nv_send_message = NvSendMessage(self.http_client)
@@ -127,6 +129,7 @@ class LinkedApi:
127
129
  self.react_to_post,
128
130
  self.comment_on_post,
129
131
  self.create_post,
132
+ self.retrieve_feed,
130
133
  self.retrieve_ssi,
131
134
  self.retrieve_performance,
132
135
  self.nv_send_message,
@@ -20,6 +20,7 @@ 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
22
  from linkedapi.operations.retrieve_connections import RetrieveConnections
23
+ from linkedapi.operations.retrieve_feed import RetrieveFeed
23
24
  from linkedapi.operations.retrieve_invitations import RetrieveInvitations
24
25
  from linkedapi.operations.retrieve_pending_requests import RetrievePendingRequests
25
26
  from linkedapi.operations.retrieve_performance import RetrievePerformance
@@ -63,6 +64,7 @@ __all__ = [
63
64
  "ReactToPost",
64
65
  "RemoveConnection",
65
66
  "RetrieveConnections",
67
+ "RetrieveFeed",
66
68
  "RetrieveInvitations",
67
69
  "RetrievePendingRequests",
68
70
  "RetrievePerformance",
@@ -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 FeedPost, RetrieveFeedParams
6
+
7
+
8
+ class RetrieveFeed(Operation[RetrieveFeedParams, list[FeedPost]]):
9
+ """Retrieve posts from the current account's LinkedIn home feed."""
10
+
11
+ operation_name = "retrieveFeed"
12
+ mapper = ArrayWorkflowMapper[RetrieveFeedParams, FeedPost](
13
+ "st.retrieveFeed",
14
+ FeedPost,
15
+ )
@@ -87,6 +87,7 @@ from linkedapi.types.connection import (
87
87
  SendConnectionRequestParams,
88
88
  WithdrawConnectionRequestParams,
89
89
  )
90
+ from linkedapi.types.feed import FeedPost, RetrieveFeedParams
90
91
  from linkedapi.types.jobs import (
91
92
  FetchJobParams,
92
93
  FetchJobResult,
@@ -281,6 +282,7 @@ __all__ = [
281
282
  "DeleteWebhookParams",
282
283
  "DisconnectParams",
283
284
  "EmploymentType",
285
+ "FeedPost",
284
286
  "FetchCompanyParams",
285
287
  "FetchCompanyResult",
286
288
  "FetchJobParams",
@@ -383,6 +385,7 @@ __all__ = [
383
385
  "RetrieveConnectionsFilter",
384
386
  "RetrieveConnectionsParams",
385
387
  "RetrieveConnectionsResult",
388
+ "RetrieveFeedParams",
386
389
  "RetrievePendingRequestsResult",
387
390
  "RetrievePerformanceResult",
388
391
  "RetrieveSSIResult",
@@ -0,0 +1,14 @@
1
+ from __future__ import annotations
2
+
3
+ from pydantic import Field
4
+
5
+ from linkedapi.types.params import LimitParams
6
+ from linkedapi.types.post import Post
7
+
8
+
9
+ class FeedPost(Post):
10
+ feed_context: str | None = None
11
+
12
+
13
+ class RetrieveFeedParams(LimitParams):
14
+ limit: int | None = Field(default=None, ge=1, le=100)
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "linkedapi"
7
- version = "1.3.3"
7
+ version = "1.3.4"
8
8
  description = "Official synchronous Python SDK for Linked API."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -7,10 +7,12 @@ from pydantic import ValidationError
7
7
  from linkedapi import (
8
8
  AcceptInvitationParams,
9
9
  ArrayWorkflowMapper,
10
+ FeedPost,
10
11
  FetchPersonParams,
11
12
  Invitation,
12
13
  LinkedApi,
13
14
  LinkedApiConfig,
15
+ RetrieveFeedParams,
14
16
  VoidWorkflowMapper,
15
17
  )
16
18
 
@@ -38,6 +40,7 @@ def test_linked_api_exposes_all_predefined_operations() -> None:
38
40
  "retrieve_pending_requests",
39
41
  "retrieve_invitations",
40
42
  "retrieve_connections",
43
+ "retrieve_feed",
41
44
  "remove_connection",
42
45
  "send_message",
43
46
  "sync_conversation",
@@ -60,7 +63,7 @@ def test_linked_api_exposes_all_predefined_operations() -> None:
60
63
  assert hasattr(operation, "execute")
61
64
  assert hasattr(operation, "result")
62
65
  assert hasattr(operation, "cancel")
63
- assert len(linkedapi.operations) == 35
66
+ assert len(linkedapi.operations) == 36
64
67
 
65
68
 
66
69
  def test_operation_mappers_match_node_contract() -> None:
@@ -82,6 +85,8 @@ def test_operation_mappers_match_node_contract() -> None:
82
85
  assert linkedapi.ignore_invitation.mapper.action_type == "st.ignoreInvitation"
83
86
  assert isinstance(linkedapi.retrieve_invitations.mapper, ArrayWorkflowMapper)
84
87
  assert linkedapi.retrieve_invitations.mapper.base_action_type == "st.retrieveInvitations"
88
+ assert isinstance(linkedapi.retrieve_feed.mapper, ArrayWorkflowMapper)
89
+ assert linkedapi.retrieve_feed.mapper.base_action_type == "st.retrieveFeed"
85
90
  assert isinstance(linkedapi.sync_inbox.mapper, VoidWorkflowMapper)
86
91
  assert linkedapi.sync_inbox.mapper.action_type == "st.syncInbox"
87
92
  assert isinstance(linkedapi.nv_sync_inbox.mapper, VoidWorkflowMapper)
@@ -92,6 +97,33 @@ def test_operation_mappers_match_node_contract() -> None:
92
97
  assert linkedapi.nv_manage_conversation.mapper.action_type == "nv.manageConversation"
93
98
 
94
99
 
100
+ def test_retrieve_feed_maps_params_and_feed_context() -> None:
101
+ linkedapi = LinkedApi(LinkedApiConfig(linked_api_token="x", identification_token="y"))
102
+
103
+ request = linkedapi.retrieve_feed.mapper.map_request(RetrieveFeedParams(limit=25))
104
+ response = linkedapi.retrieve_feed.mapper.map_response(
105
+ {
106
+ "actionType": "st.retrieveFeed",
107
+ "success": True,
108
+ "data": [
109
+ {
110
+ "url": "https://www.linkedin.com/feed/update/urn:li:activity:1",
111
+ "feedContext": "Example Person reacted to this",
112
+ }
113
+ ],
114
+ }
115
+ )
116
+
117
+ assert request == {"actionType": "st.retrieveFeed", "limit": 25}
118
+ assert response.data is not None
119
+ assert isinstance(response.data[0], FeedPost)
120
+ assert response.data[0].feed_context == "Example Person reacted to this"
121
+
122
+ for invalid_limit in (0, 101):
123
+ with pytest.raises(ValidationError):
124
+ RetrieveFeedParams(limit=invalid_limit)
125
+
126
+
95
127
  def test_invitation_params_require_the_matching_target_url() -> None:
96
128
  params = AcceptInvitationParams(
97
129
  invitation_type="companyFollow",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes