datalegion-cli 1.3.1__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.
Files changed (28) hide show
  1. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/PKG-INFO +3 -2
  2. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/README.md +1 -1
  3. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/pyproject.toml +2 -1
  4. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/src/datalegion_cli/commands/company.py +1 -10
  5. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/src/datalegion_cli/commands/person.py +1 -10
  6. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/tests/test_commands.py +28 -0
  7. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/.gitignore +0 -0
  8. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/src/datalegion_cli/__init__.py +0 -0
  9. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/src/datalegion_cli/async_typer.py +0 -0
  10. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/src/datalegion_cli/client.py +0 -0
  11. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/src/datalegion_cli/commands/__init__.py +0 -0
  12. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/src/datalegion_cli/commands/credits.py +0 -0
  13. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/src/datalegion_cli/commands/utility.py +0 -0
  14. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/src/datalegion_cli/config.py +0 -0
  15. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/src/datalegion_cli/logging.py +0 -0
  16. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/src/datalegion_cli/login.py +0 -0
  17. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/src/datalegion_cli/main.py +0 -0
  18. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/src/datalegion_cli/output.py +0 -0
  19. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/src/datalegion_cli/update.py +0 -0
  20. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/tests/__init__.py +0 -0
  21. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/tests/conftest.py +0 -0
  22. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/tests/test_client.py +0 -0
  23. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/tests/test_config.py +0 -0
  24. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/tests/test_logging.py +0 -0
  25. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/tests/test_login.py +0 -0
  26. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/tests/test_output.py +0 -0
  27. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/tests/test_package_contents.py +0 -0
  28. {datalegion_cli-1.3.1 → datalegion_cli-1.4.0}/tests/test_update.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: datalegion-cli
3
- Version: 1.3.1
3
+ Version: 1.4.0
4
4
  Summary: CLI for the Data Legion API — agent-friendly, fully async
5
5
  Project-URL: Homepage, https://www.datalegion.ai
6
6
  Project-URL: Documentation, https://www.datalegion.ai/docs
@@ -18,6 +18,7 @@ Classifier: Programming Language :: Python :: 3.11
18
18
  Classifier: Programming Language :: Python :: 3.12
19
19
  Classifier: Programming Language :: Python :: 3.13
20
20
  Classifier: Programming Language :: Python :: 3.14
21
+ Classifier: Programming Language :: Python :: 3.15
21
22
  Classifier: Typing :: Typed
22
23
  Requires-Python: >=3.11
23
24
  Requires-Dist: cryptography>=44.0.0
@@ -164,7 +165,7 @@ datalegion-cli person enrich --name "Jane Smith" --company "Acme Corp" --city "N
164
165
  datalegion-cli person enrich --social-url "https://linkedin.com/in/johndoe"
165
166
 
166
167
  # Multiple results with minimum confidence
167
- datalegion-cli person enrich --email john@example.com --multiple --min-confidence high
168
+ datalegion-cli person enrich --email john@example.com --min-confidence high
168
169
 
169
170
  # Select specific fields
170
171
  datalegion-cli person enrich --email john@example.com --fields "full_name,emails,phones"
@@ -130,7 +130,7 @@ datalegion-cli person enrich --name "Jane Smith" --company "Acme Corp" --city "N
130
130
  datalegion-cli person enrich --social-url "https://linkedin.com/in/johndoe"
131
131
 
132
132
  # Multiple results with minimum confidence
133
- datalegion-cli person enrich --email john@example.com --multiple --min-confidence high
133
+ datalegion-cli person enrich --email john@example.com --min-confidence high
134
134
 
135
135
  # Select specific fields
136
136
  datalegion-cli person enrich --email john@example.com --fields "full_name,emails,phones"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "datalegion-cli"
3
- version = "1.3.1"
3
+ version = "1.4.0"
4
4
  description = "CLI for the Data Legion API — agent-friendly, fully async"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -25,6 +25,7 @@ classifiers = [
25
25
  "Programming Language :: Python :: 3.12",
26
26
  "Programming Language :: Python :: 3.13",
27
27
  "Programming Language :: Python :: 3.14",
28
+ "Programming Language :: Python :: 3.15",
28
29
  "Environment :: Console",
29
30
  "Typing :: Typed",
30
31
  ]
@@ -31,7 +31,6 @@ MinConfidence = Annotated[
31
31
  RequiredFields = Annotated[
32
32
  str | None, typer.Option("--required", help="Comma-separated required fields.")
33
33
  ]
34
- MultiOpt = Annotated[bool, typer.Option("--multiple", "-m", help="Return multiple matches.")]
35
34
 
36
35
 
37
36
  @app.command()
@@ -52,8 +51,6 @@ async def enrich(
52
51
  industry: Annotated[
53
52
  str | None, typer.Option("--industry", help="Industry (narrows name matching).")
54
53
  ] = None,
55
- multiple: MultiOpt = False,
56
- limit: LimitOpt = 2,
57
54
  min_confidence: MinConfidence = None,
58
55
  titlecase: TitleOpt = False,
59
56
  required_fields: RequiredFields = None,
@@ -67,7 +64,6 @@ async def enrich(
67
64
  datalegion-cli company enrich --domain google.com
68
65
  datalegion-cli company enrich --name "Acme Corp" --industry "Software"
69
66
  datalegion-cli company enrich --ticker AAPL --fields "name,industry,revenue"
70
- datalegion-cli company enrich --linkedin-id 1441 --multiple --limit 5
71
67
  echo '{"domain":"stripe.com"}' | datalegion-cli company enrich --stdin
72
68
  """
73
69
  if stdin:
@@ -81,8 +77,6 @@ async def enrich(
81
77
  social_url=social_url,
82
78
  ticker_symbol=ticker_symbol,
83
79
  industry=industry,
84
- multiple_results=multiple,
85
- limit=limit,
86
80
  min_confidence=min_confidence,
87
81
  titlecase=titlecase,
88
82
  required_fields=required_fields,
@@ -168,8 +162,6 @@ async def discover(
168
162
  # @async_command
169
163
  # async def bulk(
170
164
  # file: Annotated[str, typer.Argument(help="Path to JSON file with items array, or '-' for stdin.")],
171
- # multiple: MultiOpt = False,
172
- # limit: LimitOpt = 2,
173
165
  # titlecase: TitleOpt = False,
174
166
  # ) -> None:
175
167
  # """Bulk enrich up to 100 companies from a JSON file."""
@@ -184,8 +176,7 @@ async def discover(
184
176
  # client = LegionClient()
185
177
  # try:
186
178
  # result = await client.company_bulk(
187
- # items=items, multiple_results=multiple,
188
- # limit=limit, titlecase=titlecase,
179
+ # items=items, titlecase=titlecase,
189
180
  # )
190
181
  # emit_json(result)
191
182
  # emit_credits(client.last_credits_used, client.last_credits_remaining)
@@ -31,7 +31,6 @@ MinConfidence = Annotated[
31
31
  RequiredFields = Annotated[
32
32
  str | None, typer.Option("--required", help="Comma-separated required fields.")
33
33
  ]
34
- MultiOpt = Annotated[bool, typer.Option("--multiple", "-m", help="Return multiple matches.")]
35
34
 
36
35
 
37
36
  @app.command()
@@ -67,8 +66,6 @@ async def enrich(
67
66
  postal_code: Annotated[
68
67
  str | None, typer.Option("--postal-code", help="Postal/ZIP code.")
69
68
  ] = None,
70
- multiple: MultiOpt = False,
71
- limit: LimitOpt = 2,
72
69
  min_confidence: MinConfidence = None,
73
70
  titlecase: TitleOpt = False,
74
71
  required_fields: RequiredFields = None,
@@ -82,7 +79,6 @@ async def enrich(
82
79
  datalegion-cli person enrich --email john@example.com
83
80
  datalegion-cli person enrich --name "Jane Doe" --company "Acme Corp"
84
81
  datalegion-cli person enrich --phone "+14155551234" --fields "name,email,title"
85
- datalegion-cli person enrich --linkedin-id 12345 --multiple --limit 3
86
82
  echo '{"email":"jane@example.com"}' | datalegion-cli person enrich --stdin
87
83
  """
88
84
  if stdin:
@@ -107,8 +103,6 @@ async def enrich(
107
103
  birth_date=birth_date,
108
104
  address=address,
109
105
  postal_code=postal_code,
110
- multiple_results=multiple,
111
- limit=limit,
112
106
  min_confidence=min_confidence,
113
107
  titlecase=titlecase,
114
108
  required_fields=required_fields,
@@ -194,8 +188,6 @@ async def discover(
194
188
  # @async_command
195
189
  # async def bulk(
196
190
  # file: Annotated[str, typer.Argument(help="Path to JSON file with items array, or '-' for stdin.")],
197
- # multiple: MultiOpt = False,
198
- # limit: LimitOpt = 2,
199
191
  # titlecase: TitleOpt = False,
200
192
  # ) -> None:
201
193
  # """Bulk enrich up to 100 people from a JSON file."""
@@ -211,8 +203,7 @@ async def discover(
211
203
  # client = LegionClient()
212
204
  # try:
213
205
  # result = await client.person_bulk(
214
- # items=items, multiple_results=multiple,
215
- # limit=limit, titlecase=titlecase,
206
+ # items=items, titlecase=titlecase,
216
207
  # )
217
208
  # emit_json(result)
218
209
  # emit_credits(client.last_credits_used, client.last_credits_remaining)
@@ -438,3 +438,31 @@ class TestCreditsUsage:
438
438
  with _mock_client_request(response):
439
439
  result = runner.invoke(app, ["credits", "usage"])
440
440
  assert result.exit_code == 0
441
+
442
+
443
+ # ── Several matches per lookup is an enterprise feature: no CLI option ──
444
+
445
+
446
+ class TestEnrichOffersNoMultipleResults:
447
+ def test_enrich_rejects_multiple_and_limit(self, monkeypatch):
448
+ _mock_config(monkeypatch)
449
+ for entity, ident in (("person", ["--email", "a@b.co"]), ("company", ["--domain", "b.co"])):
450
+ for option in (["--multiple"], ["--limit", "3"]):
451
+ result = runner.invoke(app, [entity, "enrich", *ident, *option])
452
+ assert result.exit_code != 0, (entity, option)
453
+
454
+ def test_enrich_payload_carries_neither_field(self, monkeypatch):
455
+ _mock_config(monkeypatch)
456
+ sent: list[dict] = []
457
+
458
+ async def capture(self, method, endpoint, *, payload=None, params=None):
459
+ sent.append(payload or {})
460
+ return {"matches": [], "total": 0}
461
+
462
+ with patch("datalegion_cli.client.LegionClient.request", capture):
463
+ runner.invoke(app, ["person", "enrich", "--email", "a@b.co"])
464
+ runner.invoke(app, ["company", "enrich", "--domain", "b.co"])
465
+ assert len(sent) == 2
466
+ for payload in sent:
467
+ assert "multiple_results" not in payload
468
+ assert "limit" not in payload