verbiflow 0.1.1__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.
- verbiflow-0.1.1/PKG-INFO +43 -0
- verbiflow-0.1.1/README.md +24 -0
- verbiflow-0.1.1/pyproject.toml +74 -0
- verbiflow-0.1.1/setup.cfg +4 -0
- verbiflow-0.1.1/src/verbiflow/__init__.py +299 -0
- verbiflow-0.1.1/src/verbiflow/_types.py +34 -0
- verbiflow-0.1.1/src/verbiflow/artifacts.py +599 -0
- verbiflow-0.1.1/src/verbiflow/assets/contract_matrix.json +26293 -0
- verbiflow-0.1.1/src/verbiflow/assets/function_index.json +25982 -0
- verbiflow-0.1.1/src/verbiflow/auth.py +1093 -0
- verbiflow-0.1.1/src/verbiflow/auth_store.py +65 -0
- verbiflow-0.1.1/src/verbiflow/billing.py +388 -0
- verbiflow-0.1.1/src/verbiflow/capabilities.py +252 -0
- verbiflow-0.1.1/src/verbiflow/clay.py +294 -0
- verbiflow-0.1.1/src/verbiflow/cli.py +2102 -0
- verbiflow-0.1.1/src/verbiflow/client.py +1465 -0
- verbiflow-0.1.1/src/verbiflow/copy.py +374 -0
- verbiflow-0.1.1/src/verbiflow/crm.py +561 -0
- verbiflow-0.1.1/src/verbiflow/crunchbase.py +127 -0
- verbiflow-0.1.1/src/verbiflow/daemon.py +735 -0
- verbiflow-0.1.1/src/verbiflow/domains.py +94 -0
- verbiflow-0.1.1/src/verbiflow/email.py +150 -0
- verbiflow-0.1.1/src/verbiflow/enrichment.py +1326 -0
- verbiflow-0.1.1/src/verbiflow/errors.py +41 -0
- verbiflow-0.1.1/src/verbiflow/files.py +59 -0
- verbiflow-0.1.1/src/verbiflow/host.py +6835 -0
- verbiflow-0.1.1/src/verbiflow/host_secrets.py +427 -0
- verbiflow-0.1.1/src/verbiflow/hosted_host.py +810 -0
- verbiflow-0.1.1/src/verbiflow/hosted_runtime.py +82 -0
- verbiflow-0.1.1/src/verbiflow/inbox.py +620 -0
- verbiflow-0.1.1/src/verbiflow/install_state.py +366 -0
- verbiflow-0.1.1/src/verbiflow/integrations.py +109 -0
- verbiflow-0.1.1/src/verbiflow/jobs.py +1331 -0
- verbiflow-0.1.1/src/verbiflow/linkedin.py +928 -0
- verbiflow-0.1.1/src/verbiflow/local_store.py +2653 -0
- verbiflow-0.1.1/src/verbiflow/log.py +484 -0
- verbiflow-0.1.1/src/verbiflow/metadata.py +447 -0
- verbiflow-0.1.1/src/verbiflow/models.py +246 -0
- verbiflow-0.1.1/src/verbiflow/personalization.py +87 -0
- verbiflow-0.1.1/src/verbiflow/play_app/README.md +49 -0
- verbiflow-0.1.1/src/verbiflow/play_app/copy-sidecars.mjs +29 -0
- verbiflow-0.1.1/src/verbiflow/play_app/index.html +12 -0
- verbiflow-0.1.1/src/verbiflow/play_app/package.json +20 -0
- verbiflow-0.1.1/src/verbiflow/play_app/src/App.svelte +200 -0
- verbiflow-0.1.1/src/verbiflow/play_app/src/CardsView.svelte +57 -0
- verbiflow-0.1.1/src/verbiflow/play_app/src/ChartView.svelte +45 -0
- verbiflow-0.1.1/src/verbiflow/play_app/src/CustomView.svelte +19 -0
- verbiflow-0.1.1/src/verbiflow/play_app/src/DetailDrawer.svelte +26 -0
- verbiflow-0.1.1/src/verbiflow/play_app/src/EvidenceView.svelte +40 -0
- verbiflow-0.1.1/src/verbiflow/play_app/src/GraphView.svelte +129 -0
- verbiflow-0.1.1/src/verbiflow/play_app/src/MapView.svelte +91 -0
- verbiflow-0.1.1/src/verbiflow/play_app/src/MetricsView.svelte +34 -0
- verbiflow-0.1.1/src/verbiflow/play_app/src/TableView.svelte +76 -0
- verbiflow-0.1.1/src/verbiflow/play_app/src/TimelineView.svelte +46 -0
- verbiflow-0.1.1/src/verbiflow/play_app/src/main.js +9 -0
- verbiflow-0.1.1/src/verbiflow/play_app/src/play-data.js +70 -0
- verbiflow-0.1.1/src/verbiflow/play_app/src/styles.css +903 -0
- verbiflow-0.1.1/src/verbiflow/play_app/vite.config.js +11 -0
- verbiflow-0.1.1/src/verbiflow/play_context.py +199 -0
- verbiflow-0.1.1/src/verbiflow/play_scaffold.py +365 -0
- verbiflow-0.1.1/src/verbiflow/plays.py +809 -0
- verbiflow-0.1.1/src/verbiflow/py.typed +1 -0
- verbiflow-0.1.1/src/verbiflow/registry.py +286 -0
- verbiflow-0.1.1/src/verbiflow/reports.py +1528 -0
- verbiflow-0.1.1/src/verbiflow/rows.py +1833 -0
- verbiflow-0.1.1/src/verbiflow/rowset.py +395 -0
- verbiflow-0.1.1/src/verbiflow/scaffold.py +2972 -0
- verbiflow-0.1.1/src/verbiflow/sdk_context.py +181 -0
- verbiflow-0.1.1/src/verbiflow/senders.py +334 -0
- verbiflow-0.1.1/src/verbiflow/sequences.py +6047 -0
- verbiflow-0.1.1/src/verbiflow/sequences_common.py +18 -0
- verbiflow-0.1.1/src/verbiflow/sequences_destination_sync.py +419 -0
- verbiflow-0.1.1/src/verbiflow/session.py +206 -0
- verbiflow-0.1.1/src/verbiflow/skill/SKILL.md +898 -0
- verbiflow-0.1.1/src/verbiflow/skill/agents/openai.yaml +7 -0
- verbiflow-0.1.1/src/verbiflow/skill/assets/function_index.json +25982 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/agent_harnesses.md +14 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/artifacts_jobs.md +248 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/audience_discovery.md +488 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/auth.md +325 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/billing_domains.md +329 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/clay.md +208 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/copy.md +893 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/crm.md +226 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/crunchbase.md +369 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/csv_output.md +193 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/dashboard.md +202 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/discovery.md +221 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/enrichment.md +303 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/geo.md +276 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/host_browser.md +291 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/hosts_claude_code.md +14 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/hosts_codex.md +17 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/hosts_cursor.md +12 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/hosts_mochi.md +24 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/inbox.md +118 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/linkedin.md +381 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/logging.md +328 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/parallelism.md +324 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/places.md +219 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/row_operations.md +311 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/safety.md +295 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/senders.md +234 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/sequence_authoring.md +688 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/sequences.md +376 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/sources.md +104 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/testing.md +354 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/web.md +228 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/workflow_composition.md +341 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/workflow_operations.md +340 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/workflow_queues.md +234 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/workflow_reports.md +139 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/workflow_scaffold.md +250 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/workflow_schedules.md +410 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/workflow_sources.md +266 -0
- verbiflow-0.1.1/src/verbiflow/skill/references/workflows.md +155 -0
- verbiflow-0.1.1/src/verbiflow/skill/scripts/resolve_sdk_source.py +24 -0
- verbiflow-0.1.1/src/verbiflow/skill/scripts/search_functions.py +32 -0
- verbiflow-0.1.1/src/verbiflow/skill/scripts/validate_environment.py +32 -0
- verbiflow-0.1.1/src/verbiflow/skill/tests/test_skill_scripts.py +39 -0
- verbiflow-0.1.1/src/verbiflow/skill_runtime.py +169 -0
- verbiflow-0.1.1/src/verbiflow/source_adapters.py +135 -0
- verbiflow-0.1.1/src/verbiflow/sources.py +1490 -0
- verbiflow-0.1.1/src/verbiflow/state.py +820 -0
- verbiflow-0.1.1/src/verbiflow/viz.py +1248 -0
- verbiflow-0.1.1/src/verbiflow/web.py +346 -0
- verbiflow-0.1.1/src/verbiflow/workflows.py +10291 -0
- verbiflow-0.1.1/src/verbiflow/workspaces.py +274 -0
- verbiflow-0.1.1/src/verbiflow.egg-info/PKG-INFO +43 -0
- verbiflow-0.1.1/src/verbiflow.egg-info/SOURCES.txt +156 -0
- verbiflow-0.1.1/src/verbiflow.egg-info/dependency_links.txt +1 -0
- verbiflow-0.1.1/src/verbiflow.egg-info/entry_points.txt +2 -0
- verbiflow-0.1.1/src/verbiflow.egg-info/requires.txt +12 -0
- verbiflow-0.1.1/src/verbiflow.egg-info/top_level.txt +1 -0
- verbiflow-0.1.1/tests/test_agent_harnesses.py +214 -0
- verbiflow-0.1.1/tests/test_auth_and_host_sessions.py +775 -0
- verbiflow-0.1.1/tests/test_capture_cascade.py +221 -0
- verbiflow-0.1.1/tests/test_clay_filters_and_jobs.py +182 -0
- verbiflow-0.1.1/tests/test_cli.py +714 -0
- verbiflow-0.1.1/tests/test_client.py +843 -0
- verbiflow-0.1.1/tests/test_copy_regex_parity.py +133 -0
- verbiflow-0.1.1/tests/test_functional_coverage.py +103 -0
- verbiflow-0.1.1/tests/test_host_parity.py +330 -0
- verbiflow-0.1.1/tests/test_hosted_browser_profiles.py +81 -0
- verbiflow-0.1.1/tests/test_hosted_mochi_runtime.py +898 -0
- verbiflow-0.1.1/tests/test_job_artifact_handles.py +1143 -0
- verbiflow-0.1.1/tests/test_linkedin_url_standardize.py +324 -0
- verbiflow-0.1.1/tests/test_log.py +426 -0
- verbiflow-0.1.1/tests/test_metadata.py +3673 -0
- verbiflow-0.1.1/tests/test_models.py +32 -0
- verbiflow-0.1.1/tests/test_play_context.py +59 -0
- verbiflow-0.1.1/tests/test_rows.py +648 -0
- verbiflow-0.1.1/tests/test_sequences_audience_paging.py +122 -0
- verbiflow-0.1.1/tests/test_sources_batch.py +172 -0
- verbiflow-0.1.1/tests/test_strip_unverified_founders.py +94 -0
- verbiflow-0.1.1/tests/test_typed_api.py +4905 -0
- verbiflow-0.1.1/tests/test_workflow_schedules.py +250 -0
- verbiflow-0.1.1/tests/test_workflows.py +8221 -0
verbiflow-0.1.1/PKG-INFO
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: verbiflow
|
|
3
|
+
Version: 0.1.1
|
|
4
|
+
Summary: Python SDK for Verbiflow Growth workflows
|
|
5
|
+
Author: Verbiflow
|
|
6
|
+
License: MIT
|
|
7
|
+
Requires-Python: >=3.11
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
Requires-Dist: httpx<1,>=0.27
|
|
10
|
+
Requires-Dist: playwright<2,>=1.48
|
|
11
|
+
Provides-Extra: agents
|
|
12
|
+
Requires-Dist: claude-agent-sdk<0.3,>=0.2.87; extra == "agents"
|
|
13
|
+
Requires-Dist: openai-agents<1,>=0.17; extra == "agents"
|
|
14
|
+
Provides-Extra: dev
|
|
15
|
+
Requires-Dist: pytest<10,>=8; extra == "dev"
|
|
16
|
+
Requires-Dist: pytest-asyncio<2,>=0.24; extra == "dev"
|
|
17
|
+
Requires-Dist: ruff<1,>=0.8; extra == "dev"
|
|
18
|
+
Requires-Dist: basedpyright<2,>=1.24; extra == "dev"
|
|
19
|
+
|
|
20
|
+
# Verbiflow Python SDK
|
|
21
|
+
|
|
22
|
+
Agent-native Python client for Verbiflow Growth workflows.
|
|
23
|
+
|
|
24
|
+
```python
|
|
25
|
+
import verbiflow as vf
|
|
26
|
+
|
|
27
|
+
job = vf.rows.qualify(
|
|
28
|
+
[{"email": "a@example.com", "title": "VP Engineering"}],
|
|
29
|
+
rubric="Pass senior engineering and product leaders.",
|
|
30
|
+
)
|
|
31
|
+
print(job.job_id, job.artifact_id)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
The SDK runs local row transforms in Python and sends provider/platform side
|
|
35
|
+
effects through the Verbiflow Bridge API.
|
|
36
|
+
|
|
37
|
+
First-class direct Bridge namespaces include `vf.session`, `vf.billing`,
|
|
38
|
+
`vf.senders`, `vf.sequences`, and `vf.linkedin` for the server-backed operator
|
|
39
|
+
paths.
|
|
40
|
+
|
|
41
|
+
The public SDK is typed-only. Use namespaces such as `vf.sources.people`,
|
|
42
|
+
`vf.enrichment`, `vf.sequences`, `vf.linkedin`, `vf.files`, and `vf.host`;
|
|
43
|
+
there is no public `vf.tools` or MCP-shaped `growth_*` alias layer.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Verbiflow Python SDK
|
|
2
|
+
|
|
3
|
+
Agent-native Python client for Verbiflow Growth workflows.
|
|
4
|
+
|
|
5
|
+
```python
|
|
6
|
+
import verbiflow as vf
|
|
7
|
+
|
|
8
|
+
job = vf.rows.qualify(
|
|
9
|
+
[{"email": "a@example.com", "title": "VP Engineering"}],
|
|
10
|
+
rubric="Pass senior engineering and product leaders.",
|
|
11
|
+
)
|
|
12
|
+
print(job.job_id, job.artifact_id)
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
The SDK runs local row transforms in Python and sends provider/platform side
|
|
16
|
+
effects through the Verbiflow Bridge API.
|
|
17
|
+
|
|
18
|
+
First-class direct Bridge namespaces include `vf.session`, `vf.billing`,
|
|
19
|
+
`vf.senders`, `vf.sequences`, and `vf.linkedin` for the server-backed operator
|
|
20
|
+
paths.
|
|
21
|
+
|
|
22
|
+
The public SDK is typed-only. Use namespaces such as `vf.sources.people`,
|
|
23
|
+
`vf.enrichment`, `vf.sequences`, `vf.linkedin`, `vf.files`, and `vf.host`;
|
|
24
|
+
there is no public `vf.tools` or MCP-shaped `growth_*` alias layer.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=69.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "verbiflow"
|
|
7
|
+
version = "0.1.1"
|
|
8
|
+
description = "Python SDK for Verbiflow Growth workflows"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.11"
|
|
11
|
+
authors = [{ name = "Verbiflow" }]
|
|
12
|
+
license = { text = "MIT" }
|
|
13
|
+
dependencies = [
|
|
14
|
+
"httpx>=0.27,<1",
|
|
15
|
+
"playwright>=1.48,<2",
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
[project.scripts]
|
|
19
|
+
verbiflow = "verbiflow.cli:main"
|
|
20
|
+
|
|
21
|
+
[project.optional-dependencies]
|
|
22
|
+
agents = [
|
|
23
|
+
"claude-agent-sdk>=0.2.87,<0.3",
|
|
24
|
+
"openai-agents>=0.17,<1",
|
|
25
|
+
]
|
|
26
|
+
dev = [
|
|
27
|
+
"pytest>=8,<10",
|
|
28
|
+
"pytest-asyncio>=0.24,<2",
|
|
29
|
+
"ruff>=0.8,<1",
|
|
30
|
+
"basedpyright>=1.24,<2",
|
|
31
|
+
]
|
|
32
|
+
|
|
33
|
+
[tool.setuptools.packages.find]
|
|
34
|
+
where = ["src"]
|
|
35
|
+
|
|
36
|
+
[tool.setuptools.package-data]
|
|
37
|
+
verbiflow = [
|
|
38
|
+
"py.typed",
|
|
39
|
+
"assets/function_index.json",
|
|
40
|
+
"assets/contract_matrix.json",
|
|
41
|
+
"skill/SKILL.md",
|
|
42
|
+
"skill/agents/*.yaml",
|
|
43
|
+
"skill/assets/*.json",
|
|
44
|
+
"skill/references/*.md",
|
|
45
|
+
"skill/scripts/*.py",
|
|
46
|
+
"skill/tests/*.py",
|
|
47
|
+
"play_app/*.html",
|
|
48
|
+
"play_app/*.json",
|
|
49
|
+
"play_app/*.js",
|
|
50
|
+
"play_app/*.mjs",
|
|
51
|
+
"play_app/*.md",
|
|
52
|
+
"play_app/src/*.js",
|
|
53
|
+
"play_app/src/*.svelte",
|
|
54
|
+
"play_app/src/*.css",
|
|
55
|
+
]
|
|
56
|
+
|
|
57
|
+
[tool.pytest.ini_options]
|
|
58
|
+
testpaths = ["tests"]
|
|
59
|
+
asyncio_mode = "auto"
|
|
60
|
+
|
|
61
|
+
[tool.ruff]
|
|
62
|
+
line-length = 100
|
|
63
|
+
target-version = "py311"
|
|
64
|
+
|
|
65
|
+
[tool.ruff.lint]
|
|
66
|
+
select = ["E", "F", "I", "UP", "B"]
|
|
67
|
+
|
|
68
|
+
[tool.basedpyright]
|
|
69
|
+
typeCheckingMode = "strict"
|
|
70
|
+
pythonVersion = "3.11"
|
|
71
|
+
reportMissingTypeStubs = false
|
|
72
|
+
reportAny = false
|
|
73
|
+
include = ["src/verbiflow"]
|
|
74
|
+
exclude = ["src/verbiflow/skill"]
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from importlib import metadata as importlib_metadata
|
|
4
|
+
from typing import TYPE_CHECKING
|
|
5
|
+
|
|
6
|
+
from . import copy as copy # preload before namespace proxies install
|
|
7
|
+
from . import local_store, log, play_scaffold, reports, scaffold, source_adapters, viz, workflows
|
|
8
|
+
from .client import AsyncClient, Client
|
|
9
|
+
from .errors import (
|
|
10
|
+
ApiError,
|
|
11
|
+
MissingConfigurationError,
|
|
12
|
+
PartialCreateError,
|
|
13
|
+
ValidationError,
|
|
14
|
+
VerbiflowError,
|
|
15
|
+
)
|
|
16
|
+
from .jobs import AsyncJobResult, JobResult
|
|
17
|
+
from .metadata import function_index, help
|
|
18
|
+
from .models import Artifact, ArtifactPage, ArtifactRow, FunctionMetadata, PendingJob
|
|
19
|
+
from .rowset import (
|
|
20
|
+
PERSONAL_DOMAINS,
|
|
21
|
+
RowSet,
|
|
22
|
+
artifact_id,
|
|
23
|
+
col,
|
|
24
|
+
count,
|
|
25
|
+
email_domain,
|
|
26
|
+
from_records,
|
|
27
|
+
is_personal_domain,
|
|
28
|
+
is_personal_domain_value,
|
|
29
|
+
rows_to_csv,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
if TYPE_CHECKING:
|
|
33
|
+
import httpx
|
|
34
|
+
|
|
35
|
+
try:
|
|
36
|
+
__version__ = importlib_metadata.version("verbiflow")
|
|
37
|
+
except importlib_metadata.PackageNotFoundError:
|
|
38
|
+
__version__ = "0.0.0+unknown"
|
|
39
|
+
|
|
40
|
+
_default_client: Client | None = None
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class _DefaultNamespaceProxy:
|
|
44
|
+
def __init__(self, namespace: str) -> None:
|
|
45
|
+
self._namespace = namespace
|
|
46
|
+
|
|
47
|
+
def __getattr__(self, name: str) -> object:
|
|
48
|
+
return getattr(getattr(_get_default_client(), self._namespace), name)
|
|
49
|
+
|
|
50
|
+
def __repr__(self) -> str:
|
|
51
|
+
return f"<verbiflow.{self._namespace} lazy namespace>"
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _get_default_client() -> Client:
|
|
55
|
+
global _default_client
|
|
56
|
+
if _default_client is None:
|
|
57
|
+
_default_client = Client()
|
|
58
|
+
return _default_client
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def _install_default_namespace_proxies() -> None:
|
|
62
|
+
global rows, artifacts, auth, capabilities, clay, copy, crunchbase, crm, domains, email
|
|
63
|
+
global files, host, inbox, integrations, jobs, sources, enrichment, sequences, senders, linkedin
|
|
64
|
+
global personalization, plays, session, billing, workspaces, web
|
|
65
|
+
rows = _DefaultNamespaceProxy("rows")
|
|
66
|
+
artifacts = _DefaultNamespaceProxy("artifacts")
|
|
67
|
+
auth = _DefaultNamespaceProxy("auth")
|
|
68
|
+
capabilities = _DefaultNamespaceProxy("capabilities")
|
|
69
|
+
clay = _DefaultNamespaceProxy("clay")
|
|
70
|
+
copy = _DefaultNamespaceProxy("copy")
|
|
71
|
+
crunchbase = _DefaultNamespaceProxy("crunchbase")
|
|
72
|
+
crm = _DefaultNamespaceProxy("crm")
|
|
73
|
+
domains = _DefaultNamespaceProxy("domains")
|
|
74
|
+
email = _DefaultNamespaceProxy("email")
|
|
75
|
+
files = _DefaultNamespaceProxy("files")
|
|
76
|
+
host = _DefaultNamespaceProxy("host")
|
|
77
|
+
inbox = _DefaultNamespaceProxy("inbox")
|
|
78
|
+
integrations = _DefaultNamespaceProxy("integrations")
|
|
79
|
+
jobs = _DefaultNamespaceProxy("jobs")
|
|
80
|
+
sources = _DefaultNamespaceProxy("sources")
|
|
81
|
+
enrichment = _DefaultNamespaceProxy("enrichment")
|
|
82
|
+
sequences = _DefaultNamespaceProxy("sequences")
|
|
83
|
+
senders = _DefaultNamespaceProxy("senders")
|
|
84
|
+
linkedin = _DefaultNamespaceProxy("linkedin")
|
|
85
|
+
personalization = _DefaultNamespaceProxy("personalization")
|
|
86
|
+
plays = _DefaultNamespaceProxy("plays")
|
|
87
|
+
session = _DefaultNamespaceProxy("session")
|
|
88
|
+
billing = _DefaultNamespaceProxy("billing")
|
|
89
|
+
workspaces = _DefaultNamespaceProxy("workspaces")
|
|
90
|
+
web = _DefaultNamespaceProxy("web")
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
_install_default_namespace_proxies()
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def configure(
|
|
97
|
+
*,
|
|
98
|
+
base_url: str | None = None,
|
|
99
|
+
api_key: str | None = None,
|
|
100
|
+
org_id: str | None = None,
|
|
101
|
+
org_slug: str | None = None,
|
|
102
|
+
profile: str | None = None,
|
|
103
|
+
timeout: float = 60.0,
|
|
104
|
+
max_retries: int = 2,
|
|
105
|
+
transport: httpx.AsyncBaseTransport | None = None,
|
|
106
|
+
) -> Client:
|
|
107
|
+
global \
|
|
108
|
+
_default_client, \
|
|
109
|
+
rows, \
|
|
110
|
+
artifacts, \
|
|
111
|
+
auth, \
|
|
112
|
+
capabilities, \
|
|
113
|
+
clay, \
|
|
114
|
+
copy, \
|
|
115
|
+
crunchbase, \
|
|
116
|
+
crm, \
|
|
117
|
+
domains, \
|
|
118
|
+
email
|
|
119
|
+
global files, host, inbox, integrations, jobs, sources, enrichment, sequences, senders, linkedin
|
|
120
|
+
global personalization, plays, session, billing, workspaces, web
|
|
121
|
+
_default_client = Client(
|
|
122
|
+
base_url=base_url,
|
|
123
|
+
api_key=api_key,
|
|
124
|
+
org_id=org_id,
|
|
125
|
+
org_slug=org_slug,
|
|
126
|
+
profile=profile,
|
|
127
|
+
timeout=timeout,
|
|
128
|
+
max_retries=max_retries,
|
|
129
|
+
transport=transport,
|
|
130
|
+
)
|
|
131
|
+
rows = _default_client.rows
|
|
132
|
+
artifacts = _default_client.artifacts
|
|
133
|
+
auth = _default_client.auth
|
|
134
|
+
capabilities = _default_client.capabilities
|
|
135
|
+
clay = _default_client.clay
|
|
136
|
+
copy = _default_client.copy
|
|
137
|
+
crunchbase = _default_client.crunchbase
|
|
138
|
+
crm = _default_client.crm
|
|
139
|
+
domains = _default_client.domains
|
|
140
|
+
email = _default_client.email
|
|
141
|
+
files = _default_client.files
|
|
142
|
+
host = _default_client.host
|
|
143
|
+
inbox = _default_client.inbox
|
|
144
|
+
integrations = _default_client.integrations
|
|
145
|
+
jobs = _default_client.jobs
|
|
146
|
+
sources = _default_client.sources
|
|
147
|
+
enrichment = _default_client.enrichment
|
|
148
|
+
sequences = _default_client.sequences
|
|
149
|
+
senders = _default_client.senders
|
|
150
|
+
linkedin = _default_client.linkedin
|
|
151
|
+
personalization = _default_client.personalization
|
|
152
|
+
plays = _default_client.plays
|
|
153
|
+
session = _default_client.session
|
|
154
|
+
billing = _default_client.billing
|
|
155
|
+
workspaces = _default_client.workspaces
|
|
156
|
+
web = _default_client.web
|
|
157
|
+
return _default_client
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
__all__ = [
|
|
161
|
+
"ApiError",
|
|
162
|
+
"Artifact",
|
|
163
|
+
"ArtifactPage",
|
|
164
|
+
"ArtifactRow",
|
|
165
|
+
"AsyncClient",
|
|
166
|
+
"Client",
|
|
167
|
+
"FunctionMetadata",
|
|
168
|
+
"AsyncJobResult",
|
|
169
|
+
"JobResult",
|
|
170
|
+
"MissingConfigurationError",
|
|
171
|
+
"PartialCreateError",
|
|
172
|
+
"PendingJob",
|
|
173
|
+
"PERSONAL_DOMAINS",
|
|
174
|
+
"RowSet",
|
|
175
|
+
"ValidationError",
|
|
176
|
+
"VerbiflowError",
|
|
177
|
+
"artifacts",
|
|
178
|
+
"artifact_id",
|
|
179
|
+
"auth",
|
|
180
|
+
"billing",
|
|
181
|
+
"capabilities",
|
|
182
|
+
"clay",
|
|
183
|
+
"col",
|
|
184
|
+
"configure",
|
|
185
|
+
"copy",
|
|
186
|
+
"count",
|
|
187
|
+
"crunchbase",
|
|
188
|
+
"crm",
|
|
189
|
+
"domains",
|
|
190
|
+
"email",
|
|
191
|
+
"email_domain",
|
|
192
|
+
"enrichment",
|
|
193
|
+
"files",
|
|
194
|
+
"from_records",
|
|
195
|
+
"function_index",
|
|
196
|
+
"help",
|
|
197
|
+
"host",
|
|
198
|
+
"inbox",
|
|
199
|
+
"integrations",
|
|
200
|
+
"is_personal_domain",
|
|
201
|
+
"is_personal_domain_value",
|
|
202
|
+
"jobs",
|
|
203
|
+
"linkedin",
|
|
204
|
+
"log",
|
|
205
|
+
"local_store",
|
|
206
|
+
"personalization",
|
|
207
|
+
"play_scaffold",
|
|
208
|
+
"plays",
|
|
209
|
+
"rows",
|
|
210
|
+
"rows_to_csv",
|
|
211
|
+
"reports",
|
|
212
|
+
"scaffold",
|
|
213
|
+
"senders",
|
|
214
|
+
"sequences",
|
|
215
|
+
"session",
|
|
216
|
+
"sources",
|
|
217
|
+
"source_adapters",
|
|
218
|
+
"viz",
|
|
219
|
+
"workspaces",
|
|
220
|
+
"web",
|
|
221
|
+
"workflows",
|
|
222
|
+
"__version__",
|
|
223
|
+
]
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
# Mirror @sdk_function-synthesized docstrings from each AsyncXNamespace to its
|
|
227
|
+
# matching sync wrapper so vf.<namespace>.<fn>.__doc__ surfaces the arguments,
|
|
228
|
+
# intent, and category metadata that `verbiflow functions describe` returns.
|
|
229
|
+
# Done here (instead of inside each namespace file) to avoid re-entrant imports
|
|
230
|
+
# that crash when verbiflow.email is re-evaluated alongside Python's stdlib
|
|
231
|
+
# email module.
|
|
232
|
+
def _mirror_namespace_docstrings() -> None:
|
|
233
|
+
from .artifacts import ArtifactsNamespace, AsyncArtifactsNamespace
|
|
234
|
+
from .auth import AsyncAuthNamespace, AuthNamespace
|
|
235
|
+
from .billing import AsyncBillingNamespace, BillingNamespace
|
|
236
|
+
from .capabilities import AsyncCapabilitiesNamespace, CapabilitiesNamespace
|
|
237
|
+
from .clay import AsyncClayNamespace, ClayNamespace
|
|
238
|
+
from .crm import AsyncCrmNamespace, CrmNamespace
|
|
239
|
+
from .crunchbase import AsyncCrunchbaseNamespace, CrunchbaseNamespace
|
|
240
|
+
from .domains import AsyncDomainsNamespace, DomainsNamespace
|
|
241
|
+
from .email import AsyncEmailNamespace, EmailNamespace
|
|
242
|
+
from .enrichment import AsyncEnrichmentNamespace, EnrichmentNamespace
|
|
243
|
+
from .files import AsyncFilesNamespace, FilesNamespace
|
|
244
|
+
from .host import AsyncChromeHostNamespace, ChromeHostNamespace
|
|
245
|
+
from .inbox import AsyncInboxNamespace, InboxNamespace
|
|
246
|
+
from .integrations import AsyncIntegrationsNamespace, IntegrationsNamespace
|
|
247
|
+
from .jobs import AsyncJobsNamespace, JobsNamespace
|
|
248
|
+
from .linkedin import AsyncLinkedInNamespace, LinkedInNamespace
|
|
249
|
+
from .personalization import AsyncPersonalizationNamespace, PersonalizationNamespace
|
|
250
|
+
from .plays import (
|
|
251
|
+
AsyncPlaySchedulesNamespace,
|
|
252
|
+
AsyncPlaysNamespace,
|
|
253
|
+
PlaySchedulesNamespace,
|
|
254
|
+
PlaysNamespace,
|
|
255
|
+
)
|
|
256
|
+
from .registry import mirror_async_docstrings as _mirror
|
|
257
|
+
from .rows import AsyncRowsNamespace, RowsNamespace
|
|
258
|
+
from .senders import AsyncSendersNamespace, SendersNamespace
|
|
259
|
+
from .sequences import AsyncSequencesNamespace, SequencesNamespace
|
|
260
|
+
from .session import AsyncSessionNamespace, SessionNamespace
|
|
261
|
+
from .sources import AsyncPeopleSourcesNamespace, PeopleSourcesNamespace
|
|
262
|
+
from .web import AsyncWebNamespace, WebNamespace
|
|
263
|
+
from .workspaces import AsyncWorkspacesNamespace, WorkspacesNamespace
|
|
264
|
+
|
|
265
|
+
for sync_cls, async_cls in (
|
|
266
|
+
(ArtifactsNamespace, AsyncArtifactsNamespace),
|
|
267
|
+
(AuthNamespace, AsyncAuthNamespace),
|
|
268
|
+
(BillingNamespace, AsyncBillingNamespace),
|
|
269
|
+
(CapabilitiesNamespace, AsyncCapabilitiesNamespace),
|
|
270
|
+
(ClayNamespace, AsyncClayNamespace),
|
|
271
|
+
(CrunchbaseNamespace, AsyncCrunchbaseNamespace),
|
|
272
|
+
(CrmNamespace, AsyncCrmNamespace),
|
|
273
|
+
(DomainsNamespace, AsyncDomainsNamespace),
|
|
274
|
+
(EmailNamespace, AsyncEmailNamespace),
|
|
275
|
+
(EnrichmentNamespace, AsyncEnrichmentNamespace),
|
|
276
|
+
(FilesNamespace, AsyncFilesNamespace),
|
|
277
|
+
(ChromeHostNamespace, AsyncChromeHostNamespace),
|
|
278
|
+
(InboxNamespace, AsyncInboxNamespace),
|
|
279
|
+
(IntegrationsNamespace, AsyncIntegrationsNamespace),
|
|
280
|
+
(JobsNamespace, AsyncJobsNamespace),
|
|
281
|
+
(LinkedInNamespace, AsyncLinkedInNamespace),
|
|
282
|
+
(PersonalizationNamespace, AsyncPersonalizationNamespace),
|
|
283
|
+
(PlaysNamespace, AsyncPlaysNamespace),
|
|
284
|
+
(PlaySchedulesNamespace, AsyncPlaySchedulesNamespace),
|
|
285
|
+
(RowsNamespace, AsyncRowsNamespace),
|
|
286
|
+
(SendersNamespace, AsyncSendersNamespace),
|
|
287
|
+
(SequencesNamespace, AsyncSequencesNamespace),
|
|
288
|
+
(SessionNamespace, AsyncSessionNamespace),
|
|
289
|
+
(PeopleSourcesNamespace, AsyncPeopleSourcesNamespace),
|
|
290
|
+
(WebNamespace, AsyncWebNamespace),
|
|
291
|
+
(WorkspacesNamespace, AsyncWorkspacesNamespace),
|
|
292
|
+
):
|
|
293
|
+
_mirror(sync_cls, async_cls)
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
_mirror_namespace_docstrings()
|
|
297
|
+
del _mirror_namespace_docstrings
|
|
298
|
+
_install_default_namespace_proxies()
|
|
299
|
+
del _install_default_namespace_proxies
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping, Sequence
|
|
4
|
+
from typing import Any, TypeAlias, cast
|
|
5
|
+
|
|
6
|
+
JsonScalar: TypeAlias = None | bool | int | float | str
|
|
7
|
+
JsonValue: TypeAlias = JsonScalar | list["JsonValue"] | dict[str, "JsonValue"]
|
|
8
|
+
JsonObject: TypeAlias = dict[str, JsonValue]
|
|
9
|
+
JsonMapping: TypeAlias = Mapping[str, JsonValue]
|
|
10
|
+
JsonSequence: TypeAlias = Sequence[JsonValue]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def as_json_object(value: object, *, context: str) -> JsonObject:
|
|
14
|
+
if isinstance(value, dict):
|
|
15
|
+
mapping = cast(Mapping[Any, Any], value)
|
|
16
|
+
result: JsonObject = {}
|
|
17
|
+
for key, item in mapping.items():
|
|
18
|
+
if not isinstance(key, str):
|
|
19
|
+
raise TypeError(f"{context} contains a non-string key: {key!r}")
|
|
20
|
+
result[key] = as_json_value(item, context=context)
|
|
21
|
+
return result
|
|
22
|
+
raise TypeError(f"{context} must be a JSON object.")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def as_json_value(value: object, *, context: str) -> JsonValue:
|
|
26
|
+
if value is None or isinstance(value, bool | int | float | str):
|
|
27
|
+
return value
|
|
28
|
+
if isinstance(value, list):
|
|
29
|
+
return [as_json_value(item, context=context) for item in cast(list[Any], value)]
|
|
30
|
+
if isinstance(value, tuple):
|
|
31
|
+
return [as_json_value(item, context=context) for item in cast(tuple[Any, ...], value)]
|
|
32
|
+
if isinstance(value, dict):
|
|
33
|
+
return as_json_object(cast(object, value), context=context)
|
|
34
|
+
raise TypeError(f"{context} contains non-JSON value {value!r}.")
|