vendor-fabric 2.1.3__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.
- vendor_fabric-2.1.3/.gitignore +15 -0
- vendor_fabric-2.1.3/CHANGELOG.md +33 -0
- vendor_fabric-2.1.3/PKG-INFO +189 -0
- vendor_fabric-2.1.3/README.md +75 -0
- vendor_fabric-2.1.3/examples/README.md +69 -0
- vendor_fabric-2.1.3/examples/basic_aws.py +71 -0
- vendor_fabric-2.1.3/examples/basic_google.py +72 -0
- vendor_fabric-2.1.3/examples/basic_meshy.py +73 -0
- vendor_fabric-2.1.3/pyproject.toml +231 -0
- vendor_fabric-2.1.3/src/vendor_fabric/__init__.py +147 -0
- vendor_fabric-2.1.3/src/vendor_fabric/_optional.py +257 -0
- vendor_fabric-2.1.3/src/vendor_fabric/anthropic/__init__.py +543 -0
- vendor_fabric-2.1.3/src/vendor_fabric/anthropic/tools.py +111 -0
- vendor_fabric-2.1.3/src/vendor_fabric/aws/__init__.py +641 -0
- vendor_fabric-2.1.3/src/vendor_fabric/aws/_diagnostics.py +44 -0
- vendor_fabric-2.1.3/src/vendor_fabric/aws/codedeploy.py +394 -0
- vendor_fabric-2.1.3/src/vendor_fabric/aws/organizations.py +796 -0
- vendor_fabric-2.1.3/src/vendor_fabric/aws/s3.py +785 -0
- vendor_fabric-2.1.3/src/vendor_fabric/aws/sso.py +857 -0
- vendor_fabric-2.1.3/src/vendor_fabric/aws/tools.py +342 -0
- vendor_fabric-2.1.3/src/vendor_fabric/base.py +620 -0
- vendor_fabric-2.1.3/src/vendor_fabric/capabilities.py +115 -0
- vendor_fabric-2.1.3/src/vendor_fabric/cli.py +338 -0
- vendor_fabric-2.1.3/src/vendor_fabric/cloud_params.py +129 -0
- vendor_fabric-2.1.3/src/vendor_fabric/connectors.py +489 -0
- vendor_fabric-2.1.3/src/vendor_fabric/cursor/__init__.py +721 -0
- vendor_fabric-2.1.3/src/vendor_fabric/cursor/tools.py +124 -0
- vendor_fabric-2.1.3/src/vendor_fabric/github/__init__.py +1066 -0
- vendor_fabric-2.1.3/src/vendor_fabric/github/_diagnostics.py +33 -0
- vendor_fabric-2.1.3/src/vendor_fabric/github/tools.py +314 -0
- vendor_fabric-2.1.3/src/vendor_fabric/google/__init__.py +609 -0
- vendor_fabric-2.1.3/src/vendor_fabric/google/_diagnostics.py +33 -0
- vendor_fabric-2.1.3/src/vendor_fabric/google/billing.py +400 -0
- vendor_fabric-2.1.3/src/vendor_fabric/google/cloud.py +544 -0
- vendor_fabric-2.1.3/src/vendor_fabric/google/constants.py +111 -0
- vendor_fabric-2.1.3/src/vendor_fabric/google/jules.py +439 -0
- vendor_fabric-2.1.3/src/vendor_fabric/google/services.py +891 -0
- vendor_fabric-2.1.3/src/vendor_fabric/google/tools.py +348 -0
- vendor_fabric-2.1.3/src/vendor_fabric/google/workspace.py +664 -0
- vendor_fabric-2.1.3/src/vendor_fabric/meshy/README.md +109 -0
- vendor_fabric-2.1.3/src/vendor_fabric/meshy/__init__.py +49 -0
- vendor_fabric-2.1.3/src/vendor_fabric/meshy/animate.py +93 -0
- vendor_fabric-2.1.3/src/vendor_fabric/meshy/animations.py +4895 -0
- vendor_fabric-2.1.3/src/vendor_fabric/meshy/base.py +238 -0
- vendor_fabric-2.1.3/src/vendor_fabric/meshy/connector.py +92 -0
- vendor_fabric-2.1.3/src/vendor_fabric/meshy/image3d.py +114 -0
- vendor_fabric-2.1.3/src/vendor_fabric/meshy/jobs.py +193 -0
- vendor_fabric-2.1.3/src/vendor_fabric/meshy/logging.py +47 -0
- vendor_fabric-2.1.3/src/vendor_fabric/meshy/models.py +304 -0
- vendor_fabric-2.1.3/src/vendor_fabric/meshy/persistence/__init__.py +51 -0
- vendor_fabric-2.1.3/src/vendor_fabric/meshy/persistence/repository.py +361 -0
- vendor_fabric-2.1.3/src/vendor_fabric/meshy/persistence/schemas.py +97 -0
- vendor_fabric-2.1.3/src/vendor_fabric/meshy/persistence/utils.py +35 -0
- vendor_fabric-2.1.3/src/vendor_fabric/meshy/persistence/vector_store.py +593 -0
- vendor_fabric-2.1.3/src/vendor_fabric/meshy/retexture.py +123 -0
- vendor_fabric-2.1.3/src/vendor_fabric/meshy/rigging.py +114 -0
- vendor_fabric-2.1.3/src/vendor_fabric/meshy/text3d.py +107 -0
- vendor_fabric-2.1.3/src/vendor_fabric/meshy/tools.py +578 -0
- vendor_fabric-2.1.3/src/vendor_fabric/meshy/webhooks/__init__.py +9 -0
- vendor_fabric-2.1.3/src/vendor_fabric/meshy/webhooks/handler.py +219 -0
- vendor_fabric-2.1.3/src/vendor_fabric/meshy/webhooks/schemas.py +147 -0
- vendor_fabric-2.1.3/src/vendor_fabric/py.typed +0 -0
- vendor_fabric-2.1.3/src/vendor_fabric/registry.py +699 -0
- vendor_fabric-2.1.3/src/vendor_fabric/secrets_sync/__init__.py +79 -0
- vendor_fabric-2.1.3/src/vendor_fabric/secrets_sync/__main__.py +7 -0
- vendor_fabric-2.1.3/src/vendor_fabric/secrets_sync/_binding.py +350 -0
- vendor_fabric-2.1.3/src/vendor_fabric/secrets_sync/bundles.py +21 -0
- vendor_fabric-2.1.3/src/vendor_fabric/secrets_sync/cli.py +93 -0
- vendor_fabric-2.1.3/src/vendor_fabric/secrets_sync/deepmerge.py +47 -0
- vendor_fabric-2.1.3/src/vendor_fabric/secrets_sync/files.py +120 -0
- vendor_fabric-2.1.3/src/vendor_fabric/secrets_sync/graph.py +129 -0
- vendor_fabric-2.1.3/src/vendor_fabric/secrets_sync/models.py +703 -0
- vendor_fabric-2.1.3/src/vendor_fabric/secrets_sync/pipeline.py +429 -0
- vendor_fabric-2.1.3/src/vendor_fabric/secrets_sync/stores.py +293 -0
- vendor_fabric-2.1.3/src/vendor_fabric/secrets_sync/tools.py +280 -0
- vendor_fabric-2.1.3/src/vendor_fabric/slack/__init__.py +584 -0
- vendor_fabric-2.1.3/src/vendor_fabric/slack/tools.py +296 -0
- vendor_fabric-2.1.3/src/vendor_fabric/surface.py +70 -0
- vendor_fabric-2.1.3/src/vendor_fabric/vault/__init__.py +579 -0
- vendor_fabric-2.1.3/src/vendor_fabric/vault/tools.py +128 -0
- vendor_fabric-2.1.3/src/vendor_fabric/vendor_data.py +405 -0
- vendor_fabric-2.1.3/src/vendor_fabric/zoom/__init__.py +287 -0
- vendor_fabric-2.1.3/src/vendor_fabric/zoom/tools.py +162 -0
- vendor_fabric-2.1.3/tests/conftest.py +6 -0
- vendor_fabric-2.1.3/tests/e2e/conftest.py +21 -0
- vendor_fabric-2.1.3/tests/e2e/meshy/test_meshy_provider.py +28 -0
- vendor_fabric-2.1.3/tests/meshy/conftest.py +175 -0
- vendor_fabric-2.1.3/tests/meshy/test_animations.py +61 -0
- vendor_fabric-2.1.3/tests/meshy/test_connector.py +105 -0
- vendor_fabric-2.1.3/tests/meshy/test_jobs.py +341 -0
- vendor_fabric-2.1.3/tests/meshy/test_meshy_base.py +241 -0
- vendor_fabric-2.1.3/tests/meshy/test_meshy_logging.py +46 -0
- vendor_fabric-2.1.3/tests/meshy/test_models.py +308 -0
- vendor_fabric-2.1.3/tests/meshy/test_persistence_utils.py +80 -0
- vendor_fabric-2.1.3/tests/meshy/test_repository.py +477 -0
- vendor_fabric-2.1.3/tests/meshy/test_task_ids.py +506 -0
- vendor_fabric-2.1.3/tests/meshy/test_tools.py +420 -0
- vendor_fabric-2.1.3/tests/meshy/test_vector_store.py +170 -0
- vendor_fabric-2.1.3/tests/meshy/test_webhooks.py +460 -0
- vendor_fabric-2.1.3/tests/secrets_sync/test_binding.py +437 -0
- vendor_fabric-2.1.3/tests/secrets_sync/test_bundles.py +16 -0
- vendor_fabric-2.1.3/tests/secrets_sync/test_config_models.py +180 -0
- vendor_fabric-2.1.3/tests/secrets_sync/test_file_and_merge_helpers.py +113 -0
- vendor_fabric-2.1.3/tests/secrets_sync/test_pipeline.py +294 -0
- vendor_fabric-2.1.3/tests/secrets_sync/test_secrets_sync_cli.py +110 -0
- vendor_fabric-2.1.3/tests/secrets_sync/test_secrets_sync_tools.py +213 -0
- vendor_fabric-2.1.3/tests/secrets_sync/test_stores_and_graph.py +197 -0
- vendor_fabric-2.1.3/tests/test_agentic_boundary.py +74 -0
- vendor_fabric-2.1.3/tests/test_anthropic.py +400 -0
- vendor_fabric-2.1.3/tests/test_anthropic_tools.py +50 -0
- vendor_fabric-2.1.3/tests/test_aws_codedeploy.py +430 -0
- vendor_fabric-2.1.3/tests/test_aws_connector.py +573 -0
- vendor_fabric-2.1.3/tests/test_aws_organizations.py +703 -0
- vendor_fabric-2.1.3/tests/test_aws_s3.py +686 -0
- vendor_fabric-2.1.3/tests/test_aws_sso.py +726 -0
- vendor_fabric-2.1.3/tests/test_aws_tools.py +292 -0
- vendor_fabric-2.1.3/tests/test_base.py +580 -0
- vendor_fabric-2.1.3/tests/test_capabilities.py +26 -0
- vendor_fabric-2.1.3/tests/test_cli.py +377 -0
- vendor_fabric-2.1.3/tests/test_cloud_params.py +121 -0
- vendor_fabric-2.1.3/tests/test_connector_payload_contracts.py +399 -0
- vendor_fabric-2.1.3/tests/test_connectors.py +594 -0
- vendor_fabric-2.1.3/tests/test_cursor.py +583 -0
- vendor_fabric-2.1.3/tests/test_cursor_tools.py +83 -0
- vendor_fabric-2.1.3/tests/test_diagnostics.py +89 -0
- vendor_fabric-2.1.3/tests/test_github_connector.py +186 -0
- vendor_fabric-2.1.3/tests/test_github_payload_contract.py +792 -0
- vendor_fabric-2.1.3/tests/test_github_tools.py +413 -0
- vendor_fabric-2.1.3/tests/test_github_workflow_builder.py +47 -0
- vendor_fabric-2.1.3/tests/test_google_activity.py +77 -0
- vendor_fabric-2.1.3/tests/test_google_billing.py +460 -0
- vendor_fabric-2.1.3/tests/test_google_cloud.py +374 -0
- vendor_fabric-2.1.3/tests/test_google_connector.py +306 -0
- vendor_fabric-2.1.3/tests/test_google_jules.py +401 -0
- vendor_fabric-2.1.3/tests/test_google_services.py +546 -0
- vendor_fabric-2.1.3/tests/test_google_tools.py +441 -0
- vendor_fabric-2.1.3/tests/test_google_workspace.py +718 -0
- vendor_fabric-2.1.3/tests/test_optional_dependencies.py +281 -0
- vendor_fabric-2.1.3/tests/test_public_api.py +23 -0
- vendor_fabric-2.1.3/tests/test_registry.py +612 -0
- vendor_fabric-2.1.3/tests/test_slack_connector.py +667 -0
- vendor_fabric-2.1.3/tests/test_slack_tools.py +255 -0
- vendor_fabric-2.1.3/tests/test_surface.py +173 -0
- vendor_fabric-2.1.3/tests/test_tool_payload_contracts.py +40 -0
- vendor_fabric-2.1.3/tests/test_vault_connector.py +436 -0
- vendor_fabric-2.1.3/tests/test_vault_tools.py +199 -0
- vendor_fabric-2.1.3/tests/test_vendor_data.py +243 -0
- vendor_fabric-2.1.3/tests/test_zoom_connector.py +528 -0
- vendor_fabric-2.1.3/tests/test_zoom_tools.py +289 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [2.1.3](https://github.com/jbcom/vendor-fabric/compare/vendor-fabric-v2.1.2...vendor-fabric-v2.1.3) (2026-07-01)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* align SecretSync binding session facade ([089ce7c](https://github.com/jbcom/vendor-fabric/commit/089ce7c3874a50f16ee7d84c75f8a84bda121f12))
|
|
9
|
+
|
|
10
|
+
## [2.1.2](https://github.com/jbcom/vendor-fabric/compare/vendor-fabric-v2.1.1...vendor-fabric-v2.1.2) (2026-06-27)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* align PyPI trusted publishing claim ([5c56532](https://github.com/jbcom/vendor-fabric/commit/5c56532169179e1899143389a7658e89e3772d6d))
|
|
16
|
+
|
|
17
|
+
## [2.1.1](https://github.com/jbcom/vendor-fabric/compare/vendor-fabric-v2.1.0...vendor-fabric-v2.1.1) (2026-06-27)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* keep release lock version in sync ([5f437a5](https://github.com/jbcom/vendor-fabric/commit/5f437a5384b7b66968e6adac9c1b36274c8ebaf6))
|
|
23
|
+
|
|
24
|
+
## [2.1.0](https://github.com/jbcom/vendor-fabric/compare/vendor-fabric-v2.0.0...vendor-fabric-v2.1.0) (2026-06-27)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
### Features
|
|
28
|
+
|
|
29
|
+
* consolidate vendor fabric sync and agentic surfaces ([ef1a4dd](https://github.com/jbcom/vendor-fabric/commit/ef1a4dd66c269b259ee5c98dfd096909cca61eb7))
|
|
30
|
+
|
|
31
|
+
## Changelog
|
|
32
|
+
|
|
33
|
+
This repository uses release-please for versioning and changelog generation.
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: vendor-fabric
|
|
3
|
+
Version: 2.1.3
|
|
4
|
+
Summary: Extended Data-native vendor connectors and sync capabilities
|
|
5
|
+
Project-URL: Documentation, https://jonbogaty.com/vendor-fabric/
|
|
6
|
+
Project-URL: Issues, https://github.com/jbcom/vendor-fabric/issues
|
|
7
|
+
Project-URL: Source, https://github.com/jbcom/vendor-fabric
|
|
8
|
+
Project-URL: Changelog, https://github.com/jbcom/vendor-fabric/blob/main/packages/vendor-fabric/CHANGELOG.md
|
|
9
|
+
Author-email: Jon Bogaty <jon@jonbogaty.com>
|
|
10
|
+
Maintainer-email: Jon Bogaty <jon@jonbogaty.com>
|
|
11
|
+
License: MIT
|
|
12
|
+
Keywords: aws,connectors,gcp,github,meshy,secrets,slack,vault,zoom
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
21
|
+
Classifier: Typing :: Typed
|
|
22
|
+
Requires-Python: >=3.11
|
|
23
|
+
Requires-Dist: extended-data<9.0.0,>=8.4.0
|
|
24
|
+
Requires-Dist: httpx>=0.28.1
|
|
25
|
+
Requires-Dist: more-itertools>=11.0.2
|
|
26
|
+
Requires-Dist: pydantic<3.0.0,>=2.13.4
|
|
27
|
+
Requires-Dist: pyyaml>=6.0.3
|
|
28
|
+
Requires-Dist: requests>=2.33.1
|
|
29
|
+
Requires-Dist: tenacity<10.0.0,>=8.4.1
|
|
30
|
+
Provides-Extra: all
|
|
31
|
+
Requires-Dist: anthropic>=0.96.0; extra == 'all'
|
|
32
|
+
Requires-Dist: boto3>=1.42.92; extra == 'all'
|
|
33
|
+
Requires-Dist: fastapi>=0.136.0; extra == 'all'
|
|
34
|
+
Requires-Dist: filelock>=3.29.0; extra == 'all'
|
|
35
|
+
Requires-Dist: google-api-python-client>=2.194.0; extra == 'all'
|
|
36
|
+
Requires-Dist: google-cloud-billing>=1.19.0; extra == 'all'
|
|
37
|
+
Requires-Dist: google-cloud-resource-manager>=1.17.0; extra == 'all'
|
|
38
|
+
Requires-Dist: hvac>=2.4.0; extra == 'all'
|
|
39
|
+
Requires-Dist: numpy>=2.2.6; extra == 'all'
|
|
40
|
+
Requires-Dist: pygithub>=2.9.1; extra == 'all'
|
|
41
|
+
Requires-Dist: pyngrok>=8.0.0; extra == 'all'
|
|
42
|
+
Requires-Dist: python-graphql-client>=0.4.3; extra == 'all'
|
|
43
|
+
Requires-Dist: rich<16.0.0,>=13.7.0; extra == 'all'
|
|
44
|
+
Requires-Dist: slack-sdk>=3.41.0; extra == 'all'
|
|
45
|
+
Requires-Dist: sqlite-vec>=0.1.9; extra == 'all'
|
|
46
|
+
Requires-Dist: starlette>=1.3.1; extra == 'all'
|
|
47
|
+
Requires-Dist: uvicorn>=0.45.0; extra == 'all'
|
|
48
|
+
Requires-Dist: validators>=0.35.0; extra == 'all'
|
|
49
|
+
Provides-Extra: anthropic
|
|
50
|
+
Requires-Dist: anthropic>=0.96.0; extra == 'anthropic'
|
|
51
|
+
Provides-Extra: aws
|
|
52
|
+
Requires-Dist: boto3>=1.42.92; extra == 'aws'
|
|
53
|
+
Provides-Extra: cursor
|
|
54
|
+
Provides-Extra: dev
|
|
55
|
+
Requires-Dist: coverage[toml]>=7.6.0; extra == 'dev'
|
|
56
|
+
Requires-Dist: hypothesis>=6.100.2; extra == 'dev'
|
|
57
|
+
Requires-Dist: mypy>=1.20.1; extra == 'dev'
|
|
58
|
+
Requires-Dist: pytest-asyncio>=1.3.0; extra == 'dev'
|
|
59
|
+
Requires-Dist: pytest-cov>=7.1.0; extra == 'dev'
|
|
60
|
+
Requires-Dist: pytest-mock>=3.15.1; extra == 'dev'
|
|
61
|
+
Requires-Dist: pytest-timeout>=2.4.0; extra == 'dev'
|
|
62
|
+
Requires-Dist: pytest-xdist>=3.6.1; extra == 'dev'
|
|
63
|
+
Requires-Dist: pytest>=9.0.3; extra == 'dev'
|
|
64
|
+
Requires-Dist: ruff>=0.8.0; extra == 'dev'
|
|
65
|
+
Requires-Dist: types-pyyaml>=6.0.12.20240724; extra == 'dev'
|
|
66
|
+
Requires-Dist: types-requests>=2.33.0.20260408; extra == 'dev'
|
|
67
|
+
Provides-Extra: docs
|
|
68
|
+
Requires-Dist: furo>=2025.12.19; extra == 'docs'
|
|
69
|
+
Requires-Dist: myst-parser<6.0.0,>=4.0.1; extra == 'docs'
|
|
70
|
+
Requires-Dist: sphinx-autodoc2>=0.5.0; extra == 'docs'
|
|
71
|
+
Requires-Dist: sphinx-copybutton>=0.5.2; extra == 'docs'
|
|
72
|
+
Requires-Dist: sphinx<10.0.0,>=8.2.3; extra == 'docs'
|
|
73
|
+
Provides-Extra: github
|
|
74
|
+
Requires-Dist: pygithub>=2.9.1; extra == 'github'
|
|
75
|
+
Requires-Dist: python-graphql-client>=0.4.3; extra == 'github'
|
|
76
|
+
Provides-Extra: google
|
|
77
|
+
Requires-Dist: google-api-python-client>=2.194.0; extra == 'google'
|
|
78
|
+
Requires-Dist: google-cloud-billing>=1.19.0; extra == 'google'
|
|
79
|
+
Requires-Dist: google-cloud-resource-manager>=1.17.0; extra == 'google'
|
|
80
|
+
Provides-Extra: meshy
|
|
81
|
+
Requires-Dist: filelock>=3.29.0; extra == 'meshy'
|
|
82
|
+
Requires-Dist: numpy>=2.2.6; extra == 'meshy'
|
|
83
|
+
Requires-Dist: rich<16.0.0,>=13.7.0; extra == 'meshy'
|
|
84
|
+
Requires-Dist: validators>=0.35.0; extra == 'meshy'
|
|
85
|
+
Provides-Extra: secrets-sync
|
|
86
|
+
Requires-Dist: boto3>=1.42.92; extra == 'secrets-sync'
|
|
87
|
+
Requires-Dist: hvac>=2.4.0; extra == 'secrets-sync'
|
|
88
|
+
Provides-Extra: slack
|
|
89
|
+
Requires-Dist: slack-sdk>=3.41.0; extra == 'slack'
|
|
90
|
+
Provides-Extra: tests
|
|
91
|
+
Requires-Dist: coverage[toml]>=7.6.0; extra == 'tests'
|
|
92
|
+
Requires-Dist: hypothesis>=6.100.2; extra == 'tests'
|
|
93
|
+
Requires-Dist: pytest-asyncio>=1.3.0; extra == 'tests'
|
|
94
|
+
Requires-Dist: pytest-cov>=7.1.0; extra == 'tests'
|
|
95
|
+
Requires-Dist: pytest-mock>=3.15.1; extra == 'tests'
|
|
96
|
+
Requires-Dist: pytest-timeout>=2.4.0; extra == 'tests'
|
|
97
|
+
Requires-Dist: pytest-xdist>=3.6.1; extra == 'tests'
|
|
98
|
+
Requires-Dist: pytest>=9.0.3; extra == 'tests'
|
|
99
|
+
Provides-Extra: typing
|
|
100
|
+
Requires-Dist: mypy>=1.20.1; extra == 'typing'
|
|
101
|
+
Requires-Dist: types-pyyaml>=6.0.12.20240724; extra == 'typing'
|
|
102
|
+
Requires-Dist: types-requests>=2.33.0.20260408; extra == 'typing'
|
|
103
|
+
Provides-Extra: vault
|
|
104
|
+
Requires-Dist: hvac>=2.4.0; extra == 'vault'
|
|
105
|
+
Provides-Extra: vector
|
|
106
|
+
Requires-Dist: sqlite-vec>=0.1.9; extra == 'vector'
|
|
107
|
+
Provides-Extra: webhooks
|
|
108
|
+
Requires-Dist: fastapi>=0.136.0; extra == 'webhooks'
|
|
109
|
+
Requires-Dist: pyngrok>=8.0.0; extra == 'webhooks'
|
|
110
|
+
Requires-Dist: starlette>=1.3.1; extra == 'webhooks'
|
|
111
|
+
Requires-Dist: uvicorn>=0.45.0; extra == 'webhooks'
|
|
112
|
+
Provides-Extra: zoom
|
|
113
|
+
Description-Content-Type: text/markdown
|
|
114
|
+
|
|
115
|
+
# Vendor Fabric
|
|
116
|
+
|
|
117
|
+
`vendor-fabric` is the optional vendor integration layer for the
|
|
118
|
+
Extended Data Python stack. It depends on `extended-data>=8.4.0` for the
|
|
119
|
+
polymorphic `ExtendedData` root, concrete containers, local file sync, inputs,
|
|
120
|
+
logging, and workflow utilities, then adds
|
|
121
|
+
adapter-registered API clients and vendor-backed sync capabilities.
|
|
122
|
+
|
|
123
|
+
Documentation: [jonbogaty.com/vendor-fabric](https://jonbogaty.com/vendor-fabric/)
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
pip install vendor-fabric
|
|
127
|
+
pip install "vendor-fabric[github,slack]"
|
|
128
|
+
pip install "vendor-fabric[aws,google,vault,secrets-sync]"
|
|
129
|
+
pip install secrets-sync-python-binding
|
|
130
|
+
pip install pytest-vendor-fabric
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
The base install keeps vendor SDKs out of the environment. Connector metadata
|
|
134
|
+
is available even when an optional SDK is absent:
|
|
135
|
+
|
|
136
|
+
```python
|
|
137
|
+
from vendor_fabric import get_connector_info, list_connector_info
|
|
138
|
+
|
|
139
|
+
print(get_connector_info("github")["available"])
|
|
140
|
+
print(list_connector_info(include_unavailable=True))
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Construct connectors through the registry or `ConnectorFabric`:
|
|
144
|
+
|
|
145
|
+
```python
|
|
146
|
+
from vendor_fabric import ConnectorFabric
|
|
147
|
+
|
|
148
|
+
fabric = ConnectorFabric(inputs={"GITHUB_TOKEN": "..."})
|
|
149
|
+
github = fabric.get_connector("github")
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Unavailable features report install guidance instead of requiring callers to
|
|
153
|
+
wrap their own imports.
|
|
154
|
+
|
|
155
|
+
SecretSync access is exposed through a binding-backed facade:
|
|
156
|
+
|
|
157
|
+
```python
|
|
158
|
+
from vendor_fabric.secrets_sync import ProviderSession, SyncOptions, get_targets, run_pipeline
|
|
159
|
+
|
|
160
|
+
result = run_pipeline("pipeline.yaml", SyncOptions(dry_run=True))
|
|
161
|
+
targets = get_targets("pipeline.yaml")
|
|
162
|
+
|
|
163
|
+
print(result["success"])
|
|
164
|
+
print(targets["targets"])
|
|
165
|
+
|
|
166
|
+
session = ProviderSession(
|
|
167
|
+
vault_address="https://vault.example.com",
|
|
168
|
+
vault_token=vault_token,
|
|
169
|
+
aws_region="us-east-1",
|
|
170
|
+
aws_access_key_id=aws_credentials.access_key,
|
|
171
|
+
aws_secret_access_key=aws_credentials.secret_key,
|
|
172
|
+
aws_session_token=aws_credentials.token,
|
|
173
|
+
)
|
|
174
|
+
run_pipeline("pipeline.yaml", SyncOptions(dry_run=True), provider_session=session)
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
`vendor-fabric` consumes the `secrets_sync` import from
|
|
178
|
+
`secrets-sync-python-binding` and shapes those payloads into Extended Data
|
|
179
|
+
values. The canonical SecretSync runtime, CLI, pipeline semantics, and gopy
|
|
180
|
+
binding source live in `jbcom/secrets-sync`.
|
|
181
|
+
|
|
182
|
+
Connector and sync payloads are `ExtendedData` values at the boundary. Dict,
|
|
183
|
+
list, string, tuple, and set payloads are concrete extended subclasses, so code
|
|
184
|
+
can use normal container operations and extended-data methods without import
|
|
185
|
+
juggling.
|
|
186
|
+
|
|
187
|
+
Testing support lives in the separately published `pytest-vendor-fabric`
|
|
188
|
+
package. It provides connector fixtures, E2E controls, and credential guards
|
|
189
|
+
without forcing test-only dependencies into the runtime package.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Vendor Fabric
|
|
2
|
+
|
|
3
|
+
`vendor-fabric` is the optional vendor integration layer for the
|
|
4
|
+
Extended Data Python stack. It depends on `extended-data>=8.4.0` for the
|
|
5
|
+
polymorphic `ExtendedData` root, concrete containers, local file sync, inputs,
|
|
6
|
+
logging, and workflow utilities, then adds
|
|
7
|
+
adapter-registered API clients and vendor-backed sync capabilities.
|
|
8
|
+
|
|
9
|
+
Documentation: [jonbogaty.com/vendor-fabric](https://jonbogaty.com/vendor-fabric/)
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
pip install vendor-fabric
|
|
13
|
+
pip install "vendor-fabric[github,slack]"
|
|
14
|
+
pip install "vendor-fabric[aws,google,vault,secrets-sync]"
|
|
15
|
+
pip install secrets-sync-python-binding
|
|
16
|
+
pip install pytest-vendor-fabric
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The base install keeps vendor SDKs out of the environment. Connector metadata
|
|
20
|
+
is available even when an optional SDK is absent:
|
|
21
|
+
|
|
22
|
+
```python
|
|
23
|
+
from vendor_fabric import get_connector_info, list_connector_info
|
|
24
|
+
|
|
25
|
+
print(get_connector_info("github")["available"])
|
|
26
|
+
print(list_connector_info(include_unavailable=True))
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Construct connectors through the registry or `ConnectorFabric`:
|
|
30
|
+
|
|
31
|
+
```python
|
|
32
|
+
from vendor_fabric import ConnectorFabric
|
|
33
|
+
|
|
34
|
+
fabric = ConnectorFabric(inputs={"GITHUB_TOKEN": "..."})
|
|
35
|
+
github = fabric.get_connector("github")
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Unavailable features report install guidance instead of requiring callers to
|
|
39
|
+
wrap their own imports.
|
|
40
|
+
|
|
41
|
+
SecretSync access is exposed through a binding-backed facade:
|
|
42
|
+
|
|
43
|
+
```python
|
|
44
|
+
from vendor_fabric.secrets_sync import ProviderSession, SyncOptions, get_targets, run_pipeline
|
|
45
|
+
|
|
46
|
+
result = run_pipeline("pipeline.yaml", SyncOptions(dry_run=True))
|
|
47
|
+
targets = get_targets("pipeline.yaml")
|
|
48
|
+
|
|
49
|
+
print(result["success"])
|
|
50
|
+
print(targets["targets"])
|
|
51
|
+
|
|
52
|
+
session = ProviderSession(
|
|
53
|
+
vault_address="https://vault.example.com",
|
|
54
|
+
vault_token=vault_token,
|
|
55
|
+
aws_region="us-east-1",
|
|
56
|
+
aws_access_key_id=aws_credentials.access_key,
|
|
57
|
+
aws_secret_access_key=aws_credentials.secret_key,
|
|
58
|
+
aws_session_token=aws_credentials.token,
|
|
59
|
+
)
|
|
60
|
+
run_pipeline("pipeline.yaml", SyncOptions(dry_run=True), provider_session=session)
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
`vendor-fabric` consumes the `secrets_sync` import from
|
|
64
|
+
`secrets-sync-python-binding` and shapes those payloads into Extended Data
|
|
65
|
+
values. The canonical SecretSync runtime, CLI, pipeline semantics, and gopy
|
|
66
|
+
binding source live in `jbcom/secrets-sync`.
|
|
67
|
+
|
|
68
|
+
Connector and sync payloads are `ExtendedData` values at the boundary. Dict,
|
|
69
|
+
list, string, tuple, and set payloads are concrete extended subclasses, so code
|
|
70
|
+
can use normal container operations and extended-data methods without import
|
|
71
|
+
juggling.
|
|
72
|
+
|
|
73
|
+
Testing support lives in the separately published `pytest-vendor-fabric`
|
|
74
|
+
package. It provides connector fixtures, E2E controls, and credential guards
|
|
75
|
+
without forcing test-only dependencies into the runtime package.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Connector Examples
|
|
2
|
+
|
|
3
|
+
This directory contains working examples for `vendor_fabric` and the
|
|
4
|
+
registered integrations that hang off `ConnectorFabric`.
|
|
5
|
+
|
|
6
|
+
Connector examples assume the `extended-data>=8.4.0` contract: external data
|
|
7
|
+
payloads are promoted through the `ExtendedData` root at connector boundaries.
|
|
8
|
+
Callers can use `ExtendedDict`, `ExtendedList`, and `ExtendedString` methods on
|
|
9
|
+
decoded API, file, and SDK-shaped results, then call `to_builtin()` only when a
|
|
10
|
+
plain Python payload is needed for serialization or SDK handoff.
|
|
11
|
+
Provider capability functions follow that same payload contract. Agent runtime
|
|
12
|
+
wrappers and framework-specific tool objects belong in `agentic-fabric`.
|
|
13
|
+
|
|
14
|
+
## Quick Start
|
|
15
|
+
|
|
16
|
+
Install vendor-fabric with the extras you need:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Install with all connectors
|
|
20
|
+
pip install "vendor-fabric[all]"
|
|
21
|
+
|
|
22
|
+
# Or install specific connectors
|
|
23
|
+
pip install "vendor-fabric[aws,google,meshy]"
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Examples
|
|
28
|
+
|
|
29
|
+
### Basic Connectors
|
|
30
|
+
|
|
31
|
+
- [`basic_aws.py`](basic_aws.py) - AWS connector with Organizations and S3
|
|
32
|
+
- [`basic_google.py`](basic_google.py) - Google Vendor fabric with Workspace and Billing
|
|
33
|
+
- [`basic_meshy.py`](basic_meshy.py) - Meshy AI 3D generation
|
|
34
|
+
|
|
35
|
+
### Provider Capability Integration
|
|
36
|
+
|
|
37
|
+
Provider capability metadata lives in the provider modules. Agent-facing
|
|
38
|
+
runtime transports over those capabilities belong in `agentic-fabric`.
|
|
39
|
+
|
|
40
|
+
## Environment Variables
|
|
41
|
+
|
|
42
|
+
Most examples require API keys set as environment variables:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# AWS
|
|
46
|
+
export AWS_ACCESS_KEY_ID="your-key"
|
|
47
|
+
export AWS_SECRET_ACCESS_KEY="your-secret"
|
|
48
|
+
|
|
49
|
+
# Google Cloud
|
|
50
|
+
export GOOGLE_SERVICE_ACCOUNT='{"type": "service_account", ...}'
|
|
51
|
+
|
|
52
|
+
# Meshy AI
|
|
53
|
+
export MESHY_API_KEY="msy_your_key"
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Running Examples
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# Run any example
|
|
61
|
+
uv run --package vendor-fabric python packages/vendor-fabric/examples/basic_meshy.py
|
|
62
|
+
|
|
63
|
+
# Run with debug logging
|
|
64
|
+
LOGLEVEL=DEBUG uv run --package vendor-fabric python packages/vendor-fabric/examples/basic_meshy.py
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
SecretSync examples live in this repository because that surface composes
|
|
68
|
+
vendor capabilities. Install `vendor-fabric[secrets-sync]` for vendor secret
|
|
69
|
+
sync. Agent runtime examples belong in `agentic-fabric`.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Example: Basic AWS Connector usage.
|
|
3
|
+
|
|
4
|
+
This example demonstrates how to use the AWS connector to interact with
|
|
5
|
+
AWS Organizations and S3.
|
|
6
|
+
|
|
7
|
+
Requirements:
|
|
8
|
+
pip install vendor-fabric[aws]
|
|
9
|
+
|
|
10
|
+
Environment Variables:
|
|
11
|
+
AWS_ACCESS_KEY_ID: AWS access key
|
|
12
|
+
AWS_SECRET_ACCESS_KEY: AWS secret key
|
|
13
|
+
AWS_DEFAULT_REGION: AWS region (optional, defaults to us-east-1)
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
import os
|
|
19
|
+
import sys
|
|
20
|
+
|
|
21
|
+
from vendor_fabric import ConnectorFabric
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def main() -> int:
|
|
25
|
+
"""Demonstrate AWS connector usage."""
|
|
26
|
+
# Check for required environment variables
|
|
27
|
+
if not os.getenv("AWS_ACCESS_KEY_ID"):
|
|
28
|
+
print("Error: AWS_ACCESS_KEY_ID environment variable is required.")
|
|
29
|
+
return 1
|
|
30
|
+
|
|
31
|
+
fabric = ConnectorFabric()
|
|
32
|
+
info = fabric.get_connector_info("aws")
|
|
33
|
+
if not info["available"]:
|
|
34
|
+
print(f"Error: AWS connector is unavailable. Install with: {info['install']}")
|
|
35
|
+
if info["missing"]:
|
|
36
|
+
print(f"Missing packages: {', '.join(info['missing'])}")
|
|
37
|
+
return 1
|
|
38
|
+
|
|
39
|
+
print("Creating AWS connector...")
|
|
40
|
+
connector = fabric.get_connector("aws")
|
|
41
|
+
print("AWS connector created successfully.")
|
|
42
|
+
|
|
43
|
+
# List S3 buckets
|
|
44
|
+
print("\n--- S3 Buckets ---")
|
|
45
|
+
try:
|
|
46
|
+
buckets = connector.list_s3_buckets()
|
|
47
|
+
for bucket_name, bucket in list(buckets.items())[:5]: # Show first 5
|
|
48
|
+
created = bucket.get("creation_date") or bucket.get("CreationDate")
|
|
49
|
+
print(f" Bucket: {bucket_name} ({created})")
|
|
50
|
+
if len(buckets) > 5:
|
|
51
|
+
print(f" ... and {len(buckets) - 5} more buckets")
|
|
52
|
+
except Exception as e:
|
|
53
|
+
print(f" Could not list buckets: {e}")
|
|
54
|
+
|
|
55
|
+
# List organization accounts (if using Organizations)
|
|
56
|
+
print("\n--- Organization Accounts ---")
|
|
57
|
+
try:
|
|
58
|
+
accounts = connector.get_accounts()
|
|
59
|
+
for account_id, account in list(accounts.items())[:5]:
|
|
60
|
+
name = account.get("name") or account.get("Name") or account_id
|
|
61
|
+
print(f" Account: {account_id} ({name})")
|
|
62
|
+
if len(accounts) > 5:
|
|
63
|
+
print(f" ... and {len(accounts) - 5} more accounts")
|
|
64
|
+
except Exception as e:
|
|
65
|
+
print(f" Could not list accounts: {e}")
|
|
66
|
+
|
|
67
|
+
return 0
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
if __name__ == "__main__":
|
|
71
|
+
sys.exit(main())
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Example: Basic Google Cloud Connector usage.
|
|
3
|
+
|
|
4
|
+
This example demonstrates how to use the Google Vendor fabric to interact
|
|
5
|
+
with Google Workspace and Cloud Platform.
|
|
6
|
+
|
|
7
|
+
Requirements:
|
|
8
|
+
pip install vendor-fabric[google]
|
|
9
|
+
|
|
10
|
+
Environment Variables:
|
|
11
|
+
GOOGLE_SERVICE_ACCOUNT: JSON service account credentials
|
|
12
|
+
GOOGLE_DOMAIN: Google Workspace domain (for Workspace operations)
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
import os
|
|
18
|
+
import sys
|
|
19
|
+
|
|
20
|
+
from vendor_fabric import ConnectorFabric
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def main() -> int:
|
|
24
|
+
"""Demonstrate Google connector usage."""
|
|
25
|
+
# Check for required environment variables
|
|
26
|
+
if not os.getenv("GOOGLE_SERVICE_ACCOUNT"):
|
|
27
|
+
print("Error: GOOGLE_SERVICE_ACCOUNT environment variable is required.")
|
|
28
|
+
return 1
|
|
29
|
+
|
|
30
|
+
fabric = ConnectorFabric()
|
|
31
|
+
info = fabric.get_connector_info("google")
|
|
32
|
+
if not info["available"]:
|
|
33
|
+
print(f"Error: Google connector is unavailable. Install with: {info['install']}")
|
|
34
|
+
if info["missing"]:
|
|
35
|
+
print(f"Missing packages: {', '.join(info['missing'])}")
|
|
36
|
+
return 1
|
|
37
|
+
|
|
38
|
+
print("Creating Google connector...")
|
|
39
|
+
connector = fabric.get_connector("google")
|
|
40
|
+
print("Google connector created successfully.")
|
|
41
|
+
|
|
42
|
+
# List projects
|
|
43
|
+
print("\n--- Google Cloud Projects ---")
|
|
44
|
+
try:
|
|
45
|
+
projects = connector.list_projects()
|
|
46
|
+
for project in projects[:5]:
|
|
47
|
+
print(f" Project: {project}")
|
|
48
|
+
if len(projects) > 5:
|
|
49
|
+
print(f" ... and {len(projects) - 5} more projects")
|
|
50
|
+
except Exception as e:
|
|
51
|
+
print(f" Could not list projects: {e}")
|
|
52
|
+
|
|
53
|
+
# List workspace users (if domain configured)
|
|
54
|
+
if os.getenv("GOOGLE_DOMAIN"):
|
|
55
|
+
print("\n--- Workspace Users ---")
|
|
56
|
+
try:
|
|
57
|
+
users = connector.list_users()
|
|
58
|
+
for user in users[:5]:
|
|
59
|
+
email = user.get("primaryEmail", "Unknown")
|
|
60
|
+
print(f" User: {email}")
|
|
61
|
+
if len(users) > 5:
|
|
62
|
+
print(f" ... and {len(users) - 5} more users")
|
|
63
|
+
except Exception as e:
|
|
64
|
+
print(f" Could not list users: {e}")
|
|
65
|
+
else:
|
|
66
|
+
print("\nSkipping Workspace users (GOOGLE_DOMAIN not set).")
|
|
67
|
+
|
|
68
|
+
return 0
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
if __name__ == "__main__":
|
|
72
|
+
sys.exit(main())
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Example: Meshy AI 3D Generation.
|
|
3
|
+
|
|
4
|
+
This example demonstrates how to use the Meshy connector for AI-powered
|
|
5
|
+
3D asset generation.
|
|
6
|
+
|
|
7
|
+
Requirements:
|
|
8
|
+
pip install vendor-fabric[meshy]
|
|
9
|
+
|
|
10
|
+
Environment Variables:
|
|
11
|
+
MESHY_API_KEY: Your Meshy API key (get one at https://meshy.ai)
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import os
|
|
17
|
+
import sys
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def main() -> int:
|
|
21
|
+
"""Demonstrate Meshy AI 3D generation."""
|
|
22
|
+
if not os.getenv("MESHY_API_KEY"):
|
|
23
|
+
print("Error: MESHY_API_KEY environment variable is required.")
|
|
24
|
+
print("Get an API key at https://meshy.ai")
|
|
25
|
+
return 1
|
|
26
|
+
|
|
27
|
+
from vendor_fabric.meshy import text3d
|
|
28
|
+
|
|
29
|
+
prompt = "a medieval sword with ornate handle"
|
|
30
|
+
print(f"Generating 3D model for prompt: '{prompt}'")
|
|
31
|
+
|
|
32
|
+
try:
|
|
33
|
+
# `generate` submits a preview task and polls until it completes.
|
|
34
|
+
# Pass `wait=False` to get the task id back immediately and poll
|
|
35
|
+
# yourself with `text3d.poll(task_id)`.
|
|
36
|
+
result = text3d.generate(
|
|
37
|
+
prompt=prompt,
|
|
38
|
+
art_style="realistic",
|
|
39
|
+
negative_prompt="blurry, low detail",
|
|
40
|
+
target_polycount=15000,
|
|
41
|
+
enable_pbr=True,
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
# text3d.generate returns an ExtendedDict when wait=True.
|
|
45
|
+
status = result["status"]
|
|
46
|
+
print(f"Final status: {status}")
|
|
47
|
+
|
|
48
|
+
if status != "SUCCEEDED":
|
|
49
|
+
error = result.get("error")
|
|
50
|
+
print(f"Generation failed: {error}")
|
|
51
|
+
return 1
|
|
52
|
+
|
|
53
|
+
model_urls = result.get("model_urls") or {}
|
|
54
|
+
print(f"GLB url: {model_urls.get('glb')}")
|
|
55
|
+
print(f"OBJ url: {model_urls.get('obj')}")
|
|
56
|
+
|
|
57
|
+
# Refine the preview to full quality using the task id.
|
|
58
|
+
task_id = str(result["id"])
|
|
59
|
+
print(f"Refining task {task_id} to full quality...")
|
|
60
|
+
refined_id = text3d.refine(task_id)
|
|
61
|
+
refined = text3d.poll(str(refined_id))
|
|
62
|
+
refined_urls = refined.get("model_urls") or {}
|
|
63
|
+
print(f"Refined GLB url: {refined_urls.get('glb')}")
|
|
64
|
+
|
|
65
|
+
except Exception as e:
|
|
66
|
+
print(f"Error during generation: {e}")
|
|
67
|
+
return 1
|
|
68
|
+
|
|
69
|
+
return 0
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
if __name__ == "__main__":
|
|
73
|
+
sys.exit(main())
|