Metadata-Version: 2.4
Name: lfx-google
Version: 0.2.3
Summary: Google and Gemini components as a standalone Langflow Extension Bundle.
Project-URL: Homepage, https://github.com/langflow-ai/langflow
Project-URL: Documentation, https://docs.langflow.org/extensions
Project-URL: Repository, https://github.com/langflow-ai/langflow
Author-email: Langflow <contact@langflow.org>
License: MIT
Keywords: bundle,extension,gemini,google,langflow,lfx
Requires-Python: <3.15,>=3.10
Requires-Dist: google-api-python-client~=2.161
Requires-Dist: google-auth-oauthlib<2.0.0,>=1.2.0
Requires-Dist: google-auth<3.0.0,>=2.38.0
Requires-Dist: google-cloud-bigquery<4.0.0,>=3.35
Requires-Dist: google-genai<2.0.0,>=1.75.0
Requires-Dist: langchain-community<1.0.0,>=0.4.1
Requires-Dist: langchain-core<2.0.0,>=1.2.28
Requires-Dist: langchain-google-community~=5.0.0
Requires-Dist: langchain-google-genai~=4.1.2
Requires-Dist: lfx<2.0.0,>=1.13.0.dev0
Requires-Dist: requests>=2.32.0
Description-Content-Type: text/markdown

# lfx-google

Google and Gemini components as a standalone Langflow Extension Bundle.

## Install

```bash
pip install lfx-google
```

`pip install langflow` includes this bundle because Google Generative AI is a
supported model provider. The bundle is registered automatically through the
`langflow.extensions` entry point and appears under the `google` group with
canonical component IDs such as
`ext:google:GoogleGenerativeAIComponent@official`.

## Develop

```bash
uv sync
uv run pytest src/bundles/google/tests -q
uv run lfx extension validate src/bundles/google/src/lfx_google
```

The bundle graduated from the manifest-less `lfx-bundles[google]` provider in
Langflow 1.12. Its bundle and class names are unchanged, so existing saved
flows retain their canonical IDs.

## Google Workspace actions

The bundle ships five connection-backed Workspace actions — `GmailSendComponent`,
`GoogleDriveListComponent`, `GoogleDriveFetchComponent`, `GoogleCalendarListComponent`,
and `GoogleCalendarCreateComponent`. They resolve credentials through a managed
connection (`ConnectionRefInput`) rather than a pasted token, and each requests exactly
one scope.

`src/lfx_google/components/google/capabilities.v1.json` is the bundle's capability
manifest, referenced from `extension.json` under `integrations`. It is contract data the
extension loader reads from the *installed* package, so the hatch wheel `include` list
carries `src/lfx_google/components/**/*.json`; a test asserts it is present in a built
wheel.

Scopes are declared as full `https://www.googleapis.com/auth/...` URLs because that is
the form the OAuth broker stores and the resolver compares against.

Live suite (opt-in, needs a real Google account):

```bash
export LF_CONNECTION__GOOGLE__LIVE='{"access_token":"ya29...."}'
export LANGFLOW_GOOGLE_LIVE_CALENDAR_ID=primary
uv run pytest src/bundles/google/tests/test_workspace_actions_live.py -m api_key_required
```

CI deselects `-m api_key_required`, so the live suite never runs without credentials.
