A Pythonic wrapper for Google Sheets based user management.
Project description
User Bank
A Pythonic wrapper for Google Sheets based user management using the official Google API client.
Features
- Programmatic User Addition: Add users with automatic timestamping.
- Flexible Search: Search by exact match or regex across any field.
- Zero OAuth Popups: Uses a Google Service Account — fully automated, ideal for headless/CI/CD usage.
- CLI Setup Wizard: One command (
userbank) to configure credentials and connect. - Environment-First Auth: Pulls credentials from
GOOGLE_APPLICATION_CREDENTIALSorUSER_BANK_CREDENTIALS_JSONenvironment variables (or.envfile).
Quick Start
pip install .
# Run the setup wizard
userbank
The wizard will:
- Ask for your Google Service Account JSON key (path or paste)
- Ask for your Google Sheet URL (it saves it to
config.yml) - Write
GOOGLE_APPLICATION_CREDENTIALS=keys.jsonto.env - Test the connection
Then use it:
from userbank import UserBank
bank = UserBank.from_config()
bank.initialize_sheet()
bank.add_user("MyApp", "john@example.com", "jdoe", "securepass123")
Manual Setup
1. Google Service Account
- Go to Google Cloud Console.
- Create a project, enable Google Sheets API.
- Create a Service Account → Keys → Add Key → Create New Key (JSON).
- Save the downloaded file as
keys.jsonin your project root.
2. Spreadsheet
- Create a new Google Sheet.
- Share it with the service account email (found in
keys.json). - Copy the sheet URL into
config.yml:USER_BANK_URL: https://docs.google.com/spreadsheets/d/YOUR_ID/edit
3. Authentication
Credentials are resolved in this order:
| # | Source | Example |
|---|---|---|
| 1 | credentials_path argument |
UserBank(..., credentials_path="keys.json") |
| 2 | credentials_info argument |
UserBank(..., credentials_info={...}) |
| 3 | GOOGLE_APPLICATION_CREDENTIALS env var |
path to JSON key file |
| 4 | USER_BANK_CREDENTIALS_JSON env var |
inline JSON string |
| 5 | .env file |
loaded automatically, then checks #3–#4 |
The simplest approach: put GOOGLE_APPLICATION_CREDENTIALS=keys.json in your .env and it just works:
from userbank import UserBank
bank = UserBank(spreadsheet_id="YOUR_ID") # credentials from .env
Usage
from userbank import UserBank
bank = UserBank.from_config()
# Initialize sheet headers (run once)
bank.initialize_sheet()
# Add a user
bank.add_user(
application="MyApp",
email="john.doe@example.com",
username="jdoe",
password="securepassword123"
)
# Search users
users = bank.search(application="MyApp", is_active=True)
# Search with regex
johns = bank.search(email_re="john.*")
# Search and iterate
for u in bank.search(is_active=True):
print(f"{u['UserName']} ({u['Email']})")
Spreadsheet Fields
The first row must contain these headers (call bank.initialize_sheet() to create them automatically):
| Field | Description |
|---|---|
Application |
App name |
Email |
User's email |
UserName |
Login name |
UserPassword |
Password |
DateCreated |
Auto-filled on add |
DateLastAccess |
Auto-filled on add |
DateDeleted |
Soft-delete timestamp |
IsActive |
TRUE or FALSE |
CLI Reference
Run userbank with no arguments for the interactive setup wizard.
Installation
pip install .
Publishing
make publish
or
$ python -m build
$ python -m twine upload --repository pypi dist/*
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file userbank-0.0.1.tar.gz.
File metadata
- Download URL: userbank-0.0.1.tar.gz
- Upload date:
- Size: 8.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec21a33abb5d4c855a2a1430ed2d8caf589e68c87fdc2f1a4438a3e2e2eabb62
|
|
| MD5 |
99a51383c35a53bc72eeef50e33dd4a6
|
|
| BLAKE2b-256 |
c17ad1f89775b8d6d5d267d99a7703c583dd64f6bcf971a80b5a599c8021106b
|
File details
Details for the file userbank-0.0.1-py3-none-any.whl.
File metadata
- Download URL: userbank-0.0.1-py3-none-any.whl
- Upload date:
- Size: 8.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c903a8de78797e483d4c0a8803116e5db36aee2c5197273271c64e1f39b82ff5
|
|
| MD5 |
70966e589f36e92f56468400f52f9350
|
|
| BLAKE2b-256 |
3396672d51867d6d024564a2ab2cf41d3fceb7677aa453dea2f5d0f67b9db3de
|