autotouch-cli 0.2.81__tar.gz → 0.2.83__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.
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/PKG-INFO +8 -7
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/README.md +7 -6
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/cli.py +6 -2
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/cli_contracts.py +0 -1
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/commands/linkedin.py +1 -62
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/commands/list_build.py +36 -1
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/commands/search.py +1 -1
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/data/CLI_REFERENCE.md +59 -263
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/data/cli-manifest.json +297 -1694
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/parser.py +2 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli.egg-info/PKG-INFO +8 -7
- autotouch_cli-0.2.83/autotouch_shared/linkedin_contract.py +101 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_shared/list_build_contract.py +8 -4
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_shared/search_contract.py +4 -3
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/pyproject.toml +1 -1
- autotouch_cli-0.2.81/autotouch_shared/linkedin_contract.py +0 -235
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/MANIFEST.in +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/__init__.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/commands/__init__.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/commands/agents.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/commands/auth.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/commands/cells.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/commands/columns.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/commands/jobs.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/commands/leads.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/commands/prompts.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/commands/rows.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/commands/sequences.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/commands/tables.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/commands/tasks.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/commands/webhooks.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/commands/workspace_secrets.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/core/__init__.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/core/auth.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/core/config.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/core/csv_import.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/core/http.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/core/io.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/core/output.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/core/polling.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/core/run.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/core/validation.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/exceptions.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/mongo_status.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/parser_groups.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/sequence_support.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli/templates.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli.egg-info/SOURCES.txt +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli.egg-info/dependency_links.txt +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli.egg-info/entry_points.txt +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli.egg-info/requires.txt +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_cli.egg-info/top_level.txt +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_shared/__init__.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_shared/linkedin_filters.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/autotouch_shared/provider_registry.py +0 -0
- {autotouch_cli-0.2.81 → autotouch_cli-0.2.83}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: autotouch-cli
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.83
|
|
4
4
|
Summary: Autotouch Smart Table CLI
|
|
5
5
|
Project-URL: Homepage, https://app.autotouch.ai
|
|
6
6
|
Project-URL: Documentation, https://github.com/nicolonic/autotouch_main/tree/main/docs/research-table/reference
|
|
@@ -133,9 +133,9 @@ autotouch rows get --table-id "$TABLE_ID" --row-id "$ROW_ID" --output json
|
|
|
133
133
|
- Inspect one cell: `autotouch cells get`
|
|
134
134
|
- Create a workflow column: `autotouch columns recipe`, `autotouch columns create`
|
|
135
135
|
- Run neural search for niche/specific company or people discovery: `autotouch search companies`, `autotouch search people`
|
|
136
|
-
- Inspect
|
|
136
|
+
- Inspect list-build inputs: `autotouch list-build inputs`
|
|
137
137
|
- Build durable company and lead lists on Smart Table workers: `autotouch list-build companies`, `autotouch list-build leads`
|
|
138
|
-
-
|
|
138
|
+
- Check connected LinkedIn account status/limits: `autotouch linkedin status`, `autotouch linkedin limits`
|
|
139
139
|
- Run controlled slices: `autotouch columns run-next`
|
|
140
140
|
- Poll authoritative state: `autotouch jobs get`
|
|
141
141
|
- Create/activate sequences: `autotouch sequences recipe`, `autotouch sequences create`, `autotouch sequences activate`
|
|
@@ -148,7 +148,7 @@ Autotouch has two different company/people discovery paths.
|
|
|
148
148
|
|
|
149
149
|
Use `autotouch search companies` and `autotouch search people` for neural search when the target is niche, semantic, or hard to express with structured filters. Examples: "AI workflow platforms for healthcare", "AI workflow startups selling to law firms", or "RevOps operators at PLG SaaS companies". Neural company/people search returns at most 10 results per API call and costs 1 credit per API call.
|
|
150
150
|
|
|
151
|
-
Use `autotouch list-build companies` and `autotouch list-build leads` for structured, repeatable list construction. Treat list builds as the sourcing step for the Smart Table research workspace: build company/account records first by default, add the records to a research table, then enrich, score, segment, find related leads, attach signals/notes, and continue downstream workflows from that table. Use lead builds directly when the request is explicitly person/contact focused. This
|
|
151
|
+
Use `autotouch list-build companies` and `autotouch list-build leads` for structured, repeatable list construction. This is the only CLI path for building LinkedIn-sourced company and lead lists. Treat list builds as the sourcing step for the Smart Table research workspace: build company/account records first by default, add the records to a research table, then enrich, score, segment, find related leads, attach signals/notes, and continue downstream workflows from that table. Use lead builds directly when the request is explicitly person/contact focused. This path uses Autotouch-managed provider access, so users do not need to connect their own LinkedIn account. Use filters like geography IDs, company size, industry IDs, title/persona, and current company IDs; call `autotouch list-build inputs` for supported values. Durable list builds run as background jobs with status/results endpoints and cost 1 credit per successful non-empty result page.
|
|
152
152
|
|
|
153
153
|
For structured company builds, start with industry IDs plus geo/company-size filters. Company builds still need a broad `keywords` anchor (for example, `software`), but keywords are less reliable because they depend on company/profile text; use them to refine, disambiguate, or recover hard-to-classify targets instead of carrying the whole target definition.
|
|
154
154
|
|
|
@@ -160,10 +160,11 @@ For automation or agent-driven setup, use:
|
|
|
160
160
|
- `autotouch cli-manifest --output json` for the local machine-readable command contract
|
|
161
161
|
- `autotouch cli-reference` for the shipped parser-generated reference
|
|
162
162
|
- `autotouch capabilities --output json` for provider/workflow contracts
|
|
163
|
-
- `autotouch --version` should be `0.2.
|
|
163
|
+
- `autotouch --version` should be `0.2.83` or newer for the cleaned single LinkedIn-sourced list-build path, `list-build inputs/pricing`, research-workspace list-build guidance, and 10-result neural search cap
|
|
164
164
|
- `autotouch capabilities --output json --select list_builds` for documented list-build inputs such as geography IDs, company size buckets, profile language, and company IDs
|
|
165
|
-
- `autotouch list-build
|
|
166
|
-
- `autotouch
|
|
165
|
+
- `autotouch list-build inputs` and `autotouch list-build pricing` before creating durable list-build jobs
|
|
166
|
+
- `autotouch list-build companies` and `autotouch list-build leads` for durable LinkedIn-sourced company and lead list builds with Smart Table-owned background workers, visible progress, and no user-owned LinkedIn connection requirement
|
|
167
|
+
- `autotouch linkedin status` and `autotouch linkedin limits` for connected-account diagnostics
|
|
167
168
|
- `autotouch rows list` / `autotouch rows get` / `autotouch cells get` for read-back and audit
|
|
168
169
|
- `autotouch sequences ...` and `autotouch tasks ...` for sequence/task workflows
|
|
169
170
|
- `pip install 'autotouch-cli[mongo]'` if you need the Mongo-backed `status` / `watch` commands
|
|
@@ -108,9 +108,9 @@ autotouch rows get --table-id "$TABLE_ID" --row-id "$ROW_ID" --output json
|
|
|
108
108
|
- Inspect one cell: `autotouch cells get`
|
|
109
109
|
- Create a workflow column: `autotouch columns recipe`, `autotouch columns create`
|
|
110
110
|
- Run neural search for niche/specific company or people discovery: `autotouch search companies`, `autotouch search people`
|
|
111
|
-
- Inspect
|
|
111
|
+
- Inspect list-build inputs: `autotouch list-build inputs`
|
|
112
112
|
- Build durable company and lead lists on Smart Table workers: `autotouch list-build companies`, `autotouch list-build leads`
|
|
113
|
-
-
|
|
113
|
+
- Check connected LinkedIn account status/limits: `autotouch linkedin status`, `autotouch linkedin limits`
|
|
114
114
|
- Run controlled slices: `autotouch columns run-next`
|
|
115
115
|
- Poll authoritative state: `autotouch jobs get`
|
|
116
116
|
- Create/activate sequences: `autotouch sequences recipe`, `autotouch sequences create`, `autotouch sequences activate`
|
|
@@ -123,7 +123,7 @@ Autotouch has two different company/people discovery paths.
|
|
|
123
123
|
|
|
124
124
|
Use `autotouch search companies` and `autotouch search people` for neural search when the target is niche, semantic, or hard to express with structured filters. Examples: "AI workflow platforms for healthcare", "AI workflow startups selling to law firms", or "RevOps operators at PLG SaaS companies". Neural company/people search returns at most 10 results per API call and costs 1 credit per API call.
|
|
125
125
|
|
|
126
|
-
Use `autotouch list-build companies` and `autotouch list-build leads` for structured, repeatable list construction. Treat list builds as the sourcing step for the Smart Table research workspace: build company/account records first by default, add the records to a research table, then enrich, score, segment, find related leads, attach signals/notes, and continue downstream workflows from that table. Use lead builds directly when the request is explicitly person/contact focused. This
|
|
126
|
+
Use `autotouch list-build companies` and `autotouch list-build leads` for structured, repeatable list construction. This is the only CLI path for building LinkedIn-sourced company and lead lists. Treat list builds as the sourcing step for the Smart Table research workspace: build company/account records first by default, add the records to a research table, then enrich, score, segment, find related leads, attach signals/notes, and continue downstream workflows from that table. Use lead builds directly when the request is explicitly person/contact focused. This path uses Autotouch-managed provider access, so users do not need to connect their own LinkedIn account. Use filters like geography IDs, company size, industry IDs, title/persona, and current company IDs; call `autotouch list-build inputs` for supported values. Durable list builds run as background jobs with status/results endpoints and cost 1 credit per successful non-empty result page.
|
|
127
127
|
|
|
128
128
|
For structured company builds, start with industry IDs plus geo/company-size filters. Company builds still need a broad `keywords` anchor (for example, `software`), but keywords are less reliable because they depend on company/profile text; use them to refine, disambiguate, or recover hard-to-classify targets instead of carrying the whole target definition.
|
|
129
129
|
|
|
@@ -135,10 +135,11 @@ For automation or agent-driven setup, use:
|
|
|
135
135
|
- `autotouch cli-manifest --output json` for the local machine-readable command contract
|
|
136
136
|
- `autotouch cli-reference` for the shipped parser-generated reference
|
|
137
137
|
- `autotouch capabilities --output json` for provider/workflow contracts
|
|
138
|
-
- `autotouch --version` should be `0.2.
|
|
138
|
+
- `autotouch --version` should be `0.2.83` or newer for the cleaned single LinkedIn-sourced list-build path, `list-build inputs/pricing`, research-workspace list-build guidance, and 10-result neural search cap
|
|
139
139
|
- `autotouch capabilities --output json --select list_builds` for documented list-build inputs such as geography IDs, company size buckets, profile language, and company IDs
|
|
140
|
-
- `autotouch list-build
|
|
141
|
-
- `autotouch
|
|
140
|
+
- `autotouch list-build inputs` and `autotouch list-build pricing` before creating durable list-build jobs
|
|
141
|
+
- `autotouch list-build companies` and `autotouch list-build leads` for durable LinkedIn-sourced company and lead list builds with Smart Table-owned background workers, visible progress, and no user-owned LinkedIn connection requirement
|
|
142
|
+
- `autotouch linkedin status` and `autotouch linkedin limits` for connected-account diagnostics
|
|
142
143
|
- `autotouch rows list` / `autotouch rows get` / `autotouch cells get` for read-back and audit
|
|
143
144
|
- `autotouch sequences ...` and `autotouch tasks ...` for sequence/task workflows
|
|
144
145
|
- `pip install 'autotouch-cli[mongo]'` if you need the Mongo-backed `status` / `watch` commands
|
|
@@ -106,7 +106,9 @@ from autotouch_cli.commands.linkedin import (
|
|
|
106
106
|
from autotouch_cli.commands.list_build import (
|
|
107
107
|
ListBuildCommandRuntime as ListBuildCommandHandlerRuntime,
|
|
108
108
|
cmd_list_build_companies as cmd_list_build_companies_impl,
|
|
109
|
+
cmd_list_build_inputs as cmd_list_build_inputs_impl,
|
|
109
110
|
cmd_list_build_leads as cmd_list_build_leads_impl,
|
|
111
|
+
cmd_list_build_pricing as cmd_list_build_pricing_impl,
|
|
110
112
|
cmd_list_build_results as cmd_list_build_results_impl,
|
|
111
113
|
cmd_list_build_status as cmd_list_build_status_impl,
|
|
112
114
|
)
|
|
@@ -1580,6 +1582,8 @@ _register("list_build_companies", cmd_list_build_companies_impl, _list_build_com
|
|
|
1580
1582
|
_register("list_build_leads", cmd_list_build_leads_impl, _list_build_command_runtime)
|
|
1581
1583
|
_register("list_build_status", cmd_list_build_status_impl, _list_build_command_runtime)
|
|
1582
1584
|
_register("list_build_results", cmd_list_build_results_impl, _list_build_command_runtime)
|
|
1585
|
+
_register("list_build_inputs", cmd_list_build_inputs_impl, _list_build_command_runtime)
|
|
1586
|
+
_register("list_build_pricing", cmd_list_build_pricing_impl, _list_build_command_runtime)
|
|
1583
1587
|
|
|
1584
1588
|
# -- Template emitter commands (use _template_runtime) --
|
|
1585
1589
|
_register("schema", emit_schema, _template_runtime)
|
|
@@ -2016,8 +2020,8 @@ def cmd_capabilities(args: argparse.Namespace) -> None:
|
|
|
2016
2020
|
print(f" - {item}")
|
|
2017
2021
|
filter_count = len((linkedin.get("filter_catalog") or {}).get("filters") or [])
|
|
2018
2022
|
if filter_count:
|
|
2019
|
-
print(f"Structured filters: {filter_count} exposed via `autotouch
|
|
2020
|
-
print("Tip: run `autotouch
|
|
2023
|
+
print(f"Structured filters: {filter_count} exposed via `autotouch list-build inputs`")
|
|
2024
|
+
print("Tip: run `autotouch list-build inputs` for list-building IDs and values.")
|
|
2021
2025
|
if isinstance(search, dict):
|
|
2022
2026
|
print("")
|
|
2023
2027
|
print("Provider-hidden search")
|
|
@@ -305,15 +305,9 @@ def register_linkedin_subcommands(
|
|
|
305
305
|
handlers: Dict[str, Callable[[argparse.Namespace], None]],
|
|
306
306
|
recipe_types: Sequence[str],
|
|
307
307
|
) -> None:
|
|
308
|
-
parser = subparsers.add_parser("linkedin", help="Connected LinkedIn
|
|
308
|
+
parser = subparsers.add_parser("linkedin", help="Connected LinkedIn account operations")
|
|
309
309
|
linkedin_sub = parser.add_subparsers(dest="linkedin_cmd", required=True)
|
|
310
310
|
|
|
311
|
-
recipe_parser = linkedin_sub.add_parser("recipe", help="Print LinkedIn payload recipes for search and list-building")
|
|
312
|
-
recipe_parser.add_argument("--type", choices=["all", *recipe_types], default="all")
|
|
313
|
-
recipe_parser.add_argument("--out-file", help="Optional path to save the selected payload JSON")
|
|
314
|
-
add_api_common_arguments(recipe_parser)
|
|
315
|
-
recipe_parser.set_defaults(func=handlers["recipe"])
|
|
316
|
-
|
|
317
311
|
status_parser = linkedin_sub.add_parser("status", help="Check LinkedIn connection status")
|
|
318
312
|
add_api_common_arguments(status_parser)
|
|
319
313
|
status_parser.set_defaults(func=handlers["status"])
|
|
@@ -321,58 +315,3 @@ def register_linkedin_subcommands(
|
|
|
321
315
|
limits_parser = linkedin_sub.add_parser("limits", help="View LinkedIn send limits and usage")
|
|
322
316
|
add_api_common_arguments(limits_parser)
|
|
323
317
|
limits_parser.set_defaults(func=handlers["limits"])
|
|
324
|
-
|
|
325
|
-
search_parser = linkedin_sub.add_parser("search", help="Search LinkedIn for people, companies, jobs, or posts")
|
|
326
|
-
search_parser.add_argument("--data-json", help="Explicit search payload JSON (overrides individual flags)")
|
|
327
|
-
search_parser.add_argument("--data-file", help="Path to search payload JSON file")
|
|
328
|
-
search_parser.add_argument("--url", help="Full LinkedIn/Sales Navigator search URL (overrides keyword filters)")
|
|
329
|
-
search_parser.add_argument("--category", choices=["people", "companies", "jobs", "posts"], default="people", help="Search category (default: people)")
|
|
330
|
-
search_parser.add_argument("--keywords", help="Free-text keyword search")
|
|
331
|
-
search_parser.add_argument("--linkedin-api", choices=["auto", "classic", "sales_navigator"], default="auto", help=argparse.SUPPRESS)
|
|
332
|
-
search_parser.add_argument("--cursor", help="Pagination cursor from previous response")
|
|
333
|
-
search_parser.add_argument("--limit", type=int, default=25, help="Results per page, 1-100 (default: 25)")
|
|
334
|
-
search_parser.add_argument("--extra-params-json", help="JSON object with additional search filters (location IDs, industry, etc.)")
|
|
335
|
-
add_api_common_arguments(search_parser)
|
|
336
|
-
search_parser.set_defaults(func=handlers["search"])
|
|
337
|
-
|
|
338
|
-
params_parser = linkedin_sub.add_parser("search-params", help="Resolve names to LinkedIn parameter IDs for search filters")
|
|
339
|
-
params_parser.add_argument("--type", required=True, help="Parameter type: location, industry, company, school, title, language, etc.")
|
|
340
|
-
params_parser.add_argument("--keywords", default="", help="Search text to match")
|
|
341
|
-
params_parser.add_argument("--linkedin-api", choices=["auto", "classic", "sales_navigator"], default="auto", help=argparse.SUPPRESS)
|
|
342
|
-
params_parser.add_argument("--limit", type=int, default=25, help="Max results, 1-250 (default: 25)")
|
|
343
|
-
add_api_common_arguments(params_parser)
|
|
344
|
-
params_parser.set_defaults(func=handlers["search_params"])
|
|
345
|
-
|
|
346
|
-
filters_parser = linkedin_sub.add_parser("filters", help="Print the LinkedIn/Sales Navigator structured filter catalog")
|
|
347
|
-
filters_parser.add_argument("--api", choices=["all", "classic", "sales_navigator"], default="all", help="Filter by API mode")
|
|
348
|
-
filters_parser.add_argument("--category", choices=["all", "people", "companies", "jobs", "posts"], default="all", help="Filter by search category")
|
|
349
|
-
filters_parser.add_argument("--field", help="Show one filter field or alias, e.g. headcount, company_headcount, role")
|
|
350
|
-
filters_parser.add_argument("--out-file", help="Optional path to save the selected catalog JSON")
|
|
351
|
-
add_api_common_arguments(filters_parser)
|
|
352
|
-
filters_parser.set_defaults(func=handlers["filters"])
|
|
353
|
-
|
|
354
|
-
posts_parser = linkedin_sub.add_parser("posts", help="List LinkedIn posts for a user")
|
|
355
|
-
posts_parser.add_argument("--identifier", required=True, help="LinkedIn profile URL, public ID, or URN")
|
|
356
|
-
posts_parser.add_argument("--cursor", help="Pagination cursor from previous response")
|
|
357
|
-
posts_parser.add_argument("--limit", type=int, default=25, help="Results per page, 1-100 (default: 25)")
|
|
358
|
-
add_api_common_arguments(posts_parser)
|
|
359
|
-
posts_parser.set_defaults(func=handlers["posts"])
|
|
360
|
-
|
|
361
|
-
post_parser = linkedin_sub.add_parser("post", help="Get full details for a single LinkedIn post")
|
|
362
|
-
post_parser.add_argument("--post-id", required=True, help="LinkedIn post ID")
|
|
363
|
-
add_api_common_arguments(post_parser)
|
|
364
|
-
post_parser.set_defaults(func=handlers["post"])
|
|
365
|
-
|
|
366
|
-
comments_parser = linkedin_sub.add_parser("comments", help="List comments on a LinkedIn post")
|
|
367
|
-
comments_parser.add_argument("--post-id", required=True, help="LinkedIn post ID")
|
|
368
|
-
comments_parser.add_argument("--cursor", help="Pagination cursor from previous response")
|
|
369
|
-
comments_parser.add_argument("--limit", type=int, default=100, help="Results per page, 1-100 (default: 100)")
|
|
370
|
-
add_api_common_arguments(comments_parser)
|
|
371
|
-
comments_parser.set_defaults(func=handlers["comments"])
|
|
372
|
-
|
|
373
|
-
reactions_parser = linkedin_sub.add_parser("reactions", help="List reactions on a LinkedIn post")
|
|
374
|
-
reactions_parser.add_argument("--post-id", required=True, help="LinkedIn post ID")
|
|
375
|
-
reactions_parser.add_argument("--cursor", help="Pagination cursor from previous response")
|
|
376
|
-
reactions_parser.add_argument("--limit", type=int, default=100, help="Results per page, 1-100 (default: 100)")
|
|
377
|
-
add_api_common_arguments(reactions_parser)
|
|
378
|
-
reactions_parser.set_defaults(func=handlers["reactions"])
|
|
@@ -132,13 +132,41 @@ def cmd_list_build_results(args: argparse.Namespace, *, runtime: ListBuildComman
|
|
|
132
132
|
runtime.print_json(data, args.compact)
|
|
133
133
|
|
|
134
134
|
|
|
135
|
+
def cmd_list_build_inputs(args: argparse.Namespace, *, runtime: ListBuildCommandRuntime) -> None:
|
|
136
|
+
token = runtime.resolve_token(args.token, required=True)
|
|
137
|
+
data = runtime.request_api(
|
|
138
|
+
"GET",
|
|
139
|
+
"/api/list-builds/inputs",
|
|
140
|
+
base_url=args.base_url,
|
|
141
|
+
token=token,
|
|
142
|
+
use_x_api_key=args.use_x_api_key,
|
|
143
|
+
timeout=args.timeout,
|
|
144
|
+
verbose=args.verbose,
|
|
145
|
+
)
|
|
146
|
+
runtime.print_json(data, args.compact)
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def cmd_list_build_pricing(args: argparse.Namespace, *, runtime: ListBuildCommandRuntime) -> None:
|
|
150
|
+
token = runtime.resolve_token(args.token, required=True)
|
|
151
|
+
data = runtime.request_api(
|
|
152
|
+
"GET",
|
|
153
|
+
"/api/list-builds/pricing",
|
|
154
|
+
base_url=args.base_url,
|
|
155
|
+
token=token,
|
|
156
|
+
use_x_api_key=args.use_x_api_key,
|
|
157
|
+
timeout=args.timeout,
|
|
158
|
+
verbose=args.verbose,
|
|
159
|
+
)
|
|
160
|
+
runtime.print_json(data, args.compact)
|
|
161
|
+
|
|
162
|
+
|
|
135
163
|
def register_list_build_subcommands(
|
|
136
164
|
subparsers: argparse._SubParsersAction[argparse.ArgumentParser],
|
|
137
165
|
*,
|
|
138
166
|
add_api_common_arguments: Callable[[argparse.ArgumentParser], None],
|
|
139
167
|
handlers: Dict[str, Callable[[argparse.Namespace], None]],
|
|
140
168
|
) -> None:
|
|
141
|
-
parser = subparsers.add_parser("list-build", help="Build durable company and lead lists")
|
|
169
|
+
parser = subparsers.add_parser("list-build", help="Build durable LinkedIn-sourced company and lead lists")
|
|
142
170
|
sub = parser.add_subparsers(dest="list_build_cmd", required=True)
|
|
143
171
|
|
|
144
172
|
def add_create_args(p: argparse.ArgumentParser) -> None:
|
|
@@ -183,3 +211,10 @@ def register_list_build_subcommands(
|
|
|
183
211
|
add_api_common_arguments(results)
|
|
184
212
|
results.set_defaults(func=handlers["results"])
|
|
185
213
|
|
|
214
|
+
inputs = sub.add_parser("inputs", help="Show valid list-build filter IDs and values")
|
|
215
|
+
add_api_common_arguments(inputs)
|
|
216
|
+
inputs.set_defaults(func=handlers["inputs"])
|
|
217
|
+
|
|
218
|
+
pricing = sub.add_parser("pricing", help="Show list-build pricing rules")
|
|
219
|
+
add_api_common_arguments(pricing)
|
|
220
|
+
pricing.set_defaults(func=handlers["pricing"])
|
|
@@ -255,7 +255,7 @@ def register_search_subcommands(
|
|
|
255
255
|
handlers: Dict[str, Callable[[argparse.Namespace], None]],
|
|
256
256
|
recipe_types: Sequence[str],
|
|
257
257
|
) -> None:
|
|
258
|
-
parser = subparsers.add_parser("search", help="Provider-hidden search
|
|
258
|
+
parser = subparsers.add_parser("search", help="Provider-hidden search operations")
|
|
259
259
|
search_sub = parser.add_subparsers(dest="search_cmd", required=True)
|
|
260
260
|
|
|
261
261
|
recipe_parser = search_sub.add_parser("recipe", help="Print search payload recipes")
|