easydata-api 1.2.0__tar.gz → 1.4.0__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: easydata-api
3
- Version: 1.2.0
3
+ Version: 1.4.0
4
4
  Summary: Official Python client for the EasyData LinkedIn enrichment API
5
5
  Author-email: EasyData Development <dev@easydata.win>
6
6
  License-Expression: MIT
@@ -191,10 +191,22 @@ ed.account() # allowance, ceilings, secre
191
191
  ed.usage(from_="2026-09-01", to="2026-09-30") # spend by day and operation
192
192
  ```
193
193
 
194
- Operations are attributes: `profiles_enrich`, `profiles_activity`,
195
- `profiles_posts`, `profiles_comments`, `profiles_reactions`, `companies_enrich`,
196
- `posts_enrich`, `sales_search_people`, `sales_search_employees`,
197
- `sales_search_companies`.
194
+ Operations are attributes: `profiles_enrich`, `profiles_enrich_detailed`,
195
+ `profiles_activity`, `profiles_posts`, `profiles_comments`,
196
+ `profiles_reactions`, `companies_enrich`, `posts_enrich`,
197
+ `sales_search_people`, `sales_search_employees`, `sales_search_companies`.
198
+
199
+ `profiles_enrich_detailed` is `profiles_enrich` plus the optional sections -
200
+ `include_counts=True` for follower and connection counts,
201
+ `include_experience_detail=True` for what each role actually says,
202
+ `include_skill_details=True` for endorsement counts, `include_interests=True`
203
+ for what the person follows, and `include_recommendations=True` for written
204
+ recommendations in both directions. Each is one more request to LinkedIn and
205
+ costs +0.5 per target, charged only when the section answered, and at least one
206
+ of them is required.
207
+
208
+ The three list sections come back in three states: absent when you did not ask,
209
+ `[]` when you did and the member has none, and populated otherwise.
198
210
 
199
211
  ## Reference
200
212
 
@@ -170,10 +170,22 @@ ed.account() # allowance, ceilings, secre
170
170
  ed.usage(from_="2026-09-01", to="2026-09-30") # spend by day and operation
171
171
  ```
172
172
 
173
- Operations are attributes: `profiles_enrich`, `profiles_activity`,
174
- `profiles_posts`, `profiles_comments`, `profiles_reactions`, `companies_enrich`,
175
- `posts_enrich`, `sales_search_people`, `sales_search_employees`,
176
- `sales_search_companies`.
173
+ Operations are attributes: `profiles_enrich`, `profiles_enrich_detailed`,
174
+ `profiles_activity`, `profiles_posts`, `profiles_comments`,
175
+ `profiles_reactions`, `companies_enrich`, `posts_enrich`,
176
+ `sales_search_people`, `sales_search_employees`, `sales_search_companies`.
177
+
178
+ `profiles_enrich_detailed` is `profiles_enrich` plus the optional sections -
179
+ `include_counts=True` for follower and connection counts,
180
+ `include_experience_detail=True` for what each role actually says,
181
+ `include_skill_details=True` for endorsement counts, `include_interests=True`
182
+ for what the person follows, and `include_recommendations=True` for written
183
+ recommendations in both directions. Each is one more request to LinkedIn and
184
+ costs +0.5 per target, charged only when the section answered, and at least one
185
+ of them is required.
186
+
187
+ The three list sections come back in three states: absent when you did not ask,
188
+ `[]` when you did and the member has none, and populated otherwise.
177
189
 
178
190
  ## Reference
179
191
 
@@ -35,11 +35,12 @@ __all__ = [
35
35
  DEFAULT_BASE_URL = "https://api.easydata.win/v1"
36
36
 
37
37
  #: Every operation, as `attribute name -> path`. The client builds one method
38
- #: per entry rather than defining ten near-identical methods, because they ARE
39
- #: identical: one request shape, one response shape, and the operation is the
40
- #: path. A new operation is a row here.
38
+ #: per entry rather than defining one near-identical method per operation,
39
+ #: because they ARE identical: one request shape, one response shape, and the
40
+ #: operation is the path. A new operation is a row here.
41
41
  OPERATIONS: dict[str, str] = {
42
42
  "profiles_enrich": "/profiles/enrich",
43
+ "profiles_enrich_detailed": "/profiles/enrich/detailed",
43
44
  "profiles_activity": "/profiles/activity",
44
45
  "profiles_posts": "/profiles/posts",
45
46
  "profiles_comments": "/profiles/comments",
@@ -315,6 +316,11 @@ class EasyData:
315
316
  max_results: int | None = None,
316
317
  enrich: bool | None = None,
317
318
  find_emails: bool | None = None,
319
+ include_counts: bool | None = None,
320
+ include_experience_detail: bool | None = None,
321
+ include_skill_details: bool | None = None,
322
+ include_interests: bool | None = None,
323
+ include_recommendations: bool | None = None,
318
324
  include_results: bool | None = None,
319
325
  idempotency_key: str | None = None,
320
326
  ) -> Batch:
@@ -322,6 +328,22 @@ class EasyData:
322
328
 
323
329
  A batch of one is a batch. There is no separate single-target path and
324
330
  no ceiling to discover between one target and fifty thousand.
331
+
332
+ With ``find_emails`` the addresses are looked up after the scraping, so
333
+ results carrying one arrive minutes later than results that do not. Each
334
+ entry still appears exactly once, complete, and the batch is not
335
+ ``completed`` until every one has.
336
+
337
+ The five ``include_*`` flags are the optional sections of
338
+ ``profiles_enrich_detailed`` and are refused with a 400 on anything
339
+ else. Each is one more request to LinkedIn and costs +0.5 per target,
340
+ charged only when the section actually answered; at least one of them
341
+ is required on that operation, because with none set it is
342
+ ``profiles_enrich``, which returns the same record for less.
343
+
344
+ ``skill_details``, ``interests`` and ``recommendations`` come back in
345
+ three states: absent when you did not ask, ``[]`` when you asked and
346
+ this member has none, and populated otherwise.
325
347
  """
326
348
  if not targets:
327
349
  raise ValueError("targets is empty: a batch needs at least one target")
@@ -329,7 +351,12 @@ class EasyData:
329
351
  body: dict[str, Any] = {"targets": list(targets)}
330
352
  _put(body, external_id=external_id, callback_url=callback_url,
331
353
  webhook_tag=webhook_tag, max_results=max_results, enrich=enrich,
332
- find_emails=find_emails, include_results=include_results)
354
+ find_emails=find_emails, include_counts=include_counts,
355
+ include_experience_detail=include_experience_detail,
356
+ include_skill_details=include_skill_details,
357
+ include_interests=include_interests,
358
+ include_recommendations=include_recommendations,
359
+ include_results=include_results)
333
360
 
334
361
  data = self._request(
335
362
  "POST", path, body=body,
@@ -347,6 +374,12 @@ class EasyData:
347
374
  *,
348
375
  external_id: str | None = None,
349
376
  max_results: int | None = None,
377
+ find_emails: bool | None = None,
378
+ include_counts: bool | None = None,
379
+ include_experience_detail: bool | None = None,
380
+ include_skill_details: bool | None = None,
381
+ include_interests: bool | None = None,
382
+ include_recommendations: bool | None = None,
350
383
  idempotency_key: str | None = None,
351
384
  ) -> SyncResult:
352
385
  """One entity, answered in this response, at twice the credits.
@@ -354,6 +387,12 @@ class EasyData:
354
387
  `target`, singular - not a list of one. The bounds are refusals rather
355
388
  than downgrades: no `enrich`, no webhooks, and one upstream page for a
356
389
  paged operation.
390
+
391
+ The optional sections are allowed - a section is one bounded extra
392
+ request, which is what this path is for - and priced like everything
393
+ else here, at double: +1 each. So is ``find_emails`` for a profile, at
394
+ +8: one person is one bounded lookup. It is refused on a search, where
395
+ it would be one lookup per row inside a single HTTP request.
357
396
  """
358
397
  if isinstance(target, (list, tuple, set)):
359
398
  raise ValueError(
@@ -361,7 +400,12 @@ class EasyData:
361
400
  )
362
401
 
363
402
  body: dict[str, Any] = {"target": target}
364
- _put(body, external_id=external_id, max_results=max_results)
403
+ _put(body, external_id=external_id, max_results=max_results,
404
+ find_emails=find_emails, include_counts=include_counts,
405
+ include_experience_detail=include_experience_detail,
406
+ include_skill_details=include_skill_details,
407
+ include_interests=include_interests,
408
+ include_recommendations=include_recommendations)
365
409
 
366
410
  data = self._request(
367
411
  "POST", path + "/sync", body=body,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: easydata-api
3
- Version: 1.2.0
3
+ Version: 1.4.0
4
4
  Summary: Official Python client for the EasyData LinkedIn enrichment API
5
5
  Author-email: EasyData Development <dev@easydata.win>
6
6
  License-Expression: MIT
@@ -191,10 +191,22 @@ ed.account() # allowance, ceilings, secre
191
191
  ed.usage(from_="2026-09-01", to="2026-09-30") # spend by day and operation
192
192
  ```
193
193
 
194
- Operations are attributes: `profiles_enrich`, `profiles_activity`,
195
- `profiles_posts`, `profiles_comments`, `profiles_reactions`, `companies_enrich`,
196
- `posts_enrich`, `sales_search_people`, `sales_search_employees`,
197
- `sales_search_companies`.
194
+ Operations are attributes: `profiles_enrich`, `profiles_enrich_detailed`,
195
+ `profiles_activity`, `profiles_posts`, `profiles_comments`,
196
+ `profiles_reactions`, `companies_enrich`, `posts_enrich`,
197
+ `sales_search_people`, `sales_search_employees`, `sales_search_companies`.
198
+
199
+ `profiles_enrich_detailed` is `profiles_enrich` plus the optional sections -
200
+ `include_counts=True` for follower and connection counts,
201
+ `include_experience_detail=True` for what each role actually says,
202
+ `include_skill_details=True` for endorsement counts, `include_interests=True`
203
+ for what the person follows, and `include_recommendations=True` for written
204
+ recommendations in both directions. Each is one more request to LinkedIn and
205
+ costs +0.5 per target, charged only when the section answered, and at least one
206
+ of them is required.
207
+
208
+ The three list sections come back in three states: absent when you did not ask,
209
+ `[]` when you did and the member has none, and populated otherwise.
198
210
 
199
211
  ## Reference
200
212
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "easydata-api"
7
- version = "1.2.0"
7
+ version = "1.4.0"
8
8
  description = "Official Python client for the EasyData LinkedIn enrichment API"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
File without changes
File without changes