Metadata-Version: 2.4
Name: dataorigin
Version: 1.7.0
Summary: DataOrigin utilities in a single library.
Author-email: DataOrigin <infodataorigin@gmail.com>
License-Expression: GPL-3.0-or-later
Project-URL: Homepage, https://github.com/DataOrigin/dataorigin
Project-URL: Website, https://dataorigin.es/es/
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests
Requires-Dist: beautifulsoup4
Requires-Dist: scrapy
Requires-Dist: pandas
Requires-Dist: flask
Requires-Dist: flask_cors
Requires-Dist: flask_swagger_ui
Requires-Dist: authlib
Requires-Dist: PyJWT
Requires-Dist: psycopg2-binary
Requires-Dist: google-auth-oauthlib
Requires-Dist: google-api-python-client
Requires-Dist: google-auth-httplib2
Dynamic: license-file

# DataOrigin Package

This package provides core utilities for the DataOrigin project, focusing on leveraging AI-driven data insights for sales prospecting and lead generation in the B2B event space.

## Installation

To install the `dataorigin` package, you can use pip:

```bash
pip install dataorigin
```

## Usage

Example usage for `google_sheets.py` (assuming you have configured credentials using environment variables):

- `GOOGLE_SERVICE_ACCOUNT_JSON`: full Service Account JSON as a string (recommended for containers)
- `GOOGLE_APPLICATION_CREDENTIALS`: absolute path to Service Account JSON
- `GOOGLE_OAUTH_CLIENT_SECRET_FILE`: path to OAuth client secret file (interactive, local dev)
- `GOOGLE_OAUTH_TOKEN_FILE`: where to persist OAuth token (default: `token.json`)
- `GOOGLE_OAUTH_PORT`: OAuth local server port (default: `0`)

```python
import os
import pandas as pd
from dataorigin.google_sheets import upsert_google_sheet, read_google_sheet

# Example: Write data to a spreadsheet
df = pd.DataFrame([{"a": 1, "b": 2}, {"a": 3, "b": 4}])

res = upsert_google_sheet(
    df=df,
    spreadsheet_id="YOUR_SPREADSHEET_ID",           # or use spreadsheet_title="..."
    sheet_name="data",                              # optional: target sheet (created if missing)
    folder_id=os.getenv("GDRIVE_FOLDER_ID"),         # optional
    clear=True,
    value_input_option="USER_ENTERED",              # "RAW" or "USER_ENTERED"
    rename_sheet=False
)

# Example: Read data from a spreadsheet (reads the first sheet by default)
data = read_google_sheet(spreadsheet_id="YOUR_SPREADSHEET_ID")
print(data)
```

### Low-level Google Sheets helpers

`dataorigin.google_sheets` also exposes the lower-level building blocks used
internally by `upsert_google_sheet`/`read_google_sheet`, for callers that need
finer control (large uploads, grid resizing, tab discovery from a URL):

- `normalize_spreadsheet_id(value)` — extract a spreadsheet id from a URL, or pass a bare id through.
- `get_spreadsheet_id_sheet_id_and_title(sheets, spreadsheet_url)` — resolve a URL (with optional `gid`) to `(spreadsheet_id, sheet_id, title, row_count)`.
- `ensure_sheet_has_rows(sheets, spreadsheet_id, sheet_id, min_rows, grow_by_rows=5000)` — grow a sheet's row count when it's below `min_rows`.
- `set_sheet_row_count(sheets, spreadsheet_id, sheet_id, row_count)` — set a sheet's row count to an exact value.
- `trim_sheet_columns(spreadsheet_url, sheet_names=None)` — shrink each tab's grid to its last non-empty header column.
- `write_sheet_values_in_batches(spreadsheet_url, df, batch_size, value_input_option, empty_rows_buffer=25, logger=None)` — upload a large DataFrame in chunks instead of one request.
- `apply_spreadsheet_oauth_env(default_token_file="token.json")` — populate the OAuth2 env vars from app-specific `SPREADSHEET_OAUTH2_*` aliases.

```python
from dataorigin.google_sheets import _build_services, get_spreadsheet_id_sheet_id_and_title, ensure_sheet_has_rows

sheets, _ = _build_services()
spreadsheet_id, sheet_id, title, row_count = get_spreadsheet_id_sheet_id_and_title(
    sheets, "https://docs.google.com/spreadsheets/d/YOUR_SPREADSHEET_ID/edit#gid=0"
)
ensure_sheet_has_rows(sheets, spreadsheet_id, sheet_id, min_rows=10000)
```

## License

This project is licensed under the GNU General Public License v3.0 - see the `LICENSE` file for details.
