Skip to main content

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_CREDENTIALS or USER_BANK_CREDENTIALS_JSON environment variables (or .env file).

Quick Start

pip install .

# Run the setup wizard
userbank

The wizard will:

  1. Ask for your Google Service Account JSON key (path or paste)
  2. Ask for your Google Sheet URL (it saves it to config.yml)
  3. Write GOOGLE_APPLICATION_CREDENTIALS=keys.json to .env
  4. 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

  1. Go to Google Cloud Console.
  2. Create a project (or select an existing one).
  3. Create a Service AccountKeysAdd KeyCreate New Key (JSON).
  4. Save the downloaded file as keys.json in 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

  1. Create a new Google Sheet.
  2. Share it with the service account email (found in keys.json).
  3. 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

userbank-2.0.0.tar.gz (8.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

userbank-2.0.0-py3-none-any.whl (8.4 kB view details)

Uploaded Python 3

File details

Details for the file userbank-2.0.0.tar.gz.

File metadata

  • Download URL: userbank-2.0.0.tar.gz
  • Upload date:
  • Size: 8.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.9

File hashes

Hashes for userbank-2.0.0.tar.gz
Algorithm Hash digest
SHA256 d1c9d560c1e93da198da2d16a197ffdc39dacda95b264604c7e35421fdfcf09d
MD5 5e40ee7f2e1c2b0e6b994e65586e6341
BLAKE2b-256 94e1fe5f70fcdfc130fccb2527e0a128248c570812f16cd6381a9c7852d76f1f

See more details on using hashes here.

File details

Details for the file userbank-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: userbank-2.0.0-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

Hashes for userbank-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1f25260e70c41bdd84819171f1f0b41aac5fe32b5b8bfb777087b3d1a45de869
MD5 7ce00e26659d541d01a9fe18be8b9c01
BLAKE2b-256 e061f8c561c46f4ed28e0f12c16c057828b6cc07045d3e37ad60675dcc3b6f9f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page