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
- Secure Authentication: Check credentials (username/email and password) without listing or exposing other user records.
- Least Privilege Access: Operates entirely over read-only Google Sheets scopes (
spreadsheets.readonly), guaranteeing that the client cannot write to, modify, or corrupt the user spreadsheet. - 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()
is_authenticated = bank.authenticate("jdoe", "securepass123", "MyApp")
Manual Setup
1. Google Service Account
- Go to Google Cloud Console.
- Create a project (or select an existing one).
- Create a Service Account → Keys → Add Key → Create New Key (JSON).
- Save the downloaded file as
keys.jsonin your project root.
2. Enable Google Sheets API
Visit the URL below and click Enable:
https://console.cloud.google.com/apis/api/sheets.googleapis.com/
(The API must be enabled for the project your service account belongs to.)
3. 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. With the configured environment/config file, the class can be instantiated with no arguments:
from userbank import UserBank
bank = UserBank() # Implicitly resolves spreadsheet ID and credentials
Usage
from userbank import UserBank
bank = UserBank()
# Authenticate a user by username or email
is_authenticated = bank.authenticate(
username_or_email="jdoe", # or "john.doe@example.com"
password="securepassword123",
application="MyApp"
)
if is_authenticated:
print("User authenticated successfully!")
else:
print("Invalid credentials or inactive user.")
Spreadsheet Fields
The first row of the Google Sheet must contain these headers:
| 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-2.0.1.tar.gz.
File metadata
- Download URL: userbank-2.0.1.tar.gz
- Upload date:
- Size: 8.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9c79a625342776e713685ac8364a1c3f57cacc6a3824357ba378757ab2422c72
|
|
| MD5 |
4e97c331d30190ec2191081898b1d02e
|
|
| BLAKE2b-256 |
6a5a9289850d4d5da30049b50a987b975dc1e475125c9bcdedc029150c410cbf
|
File details
Details for the file userbank-2.0.1-py3-none-any.whl.
File metadata
- Download URL: userbank-2.0.1-py3-none-any.whl
- Upload date:
- Size: 8.4 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 |
6ba497567409421c4d07e92a17c143a23c4a244c4b4b2353127f04b253e06d1d
|
|
| MD5 |
56d252e4ef5946bca4950187a079c932
|
|
| BLAKE2b-256 |
a716e1410298895e3c6c37cd1b526d6ee16f064c8f65259270488320c0254c5c
|