Skip to main content

Client for interacting with Pinapple

Project description

🍍 PinappleClient 🍍

A Python client for interacting with the Pinapple encryption API.

🚀 Features

  • Authentication 🔐 - Token-based API authentication with automatic refresh
  • Flexible Encryption ⚡ - Support for strict and loose encryption modes
  • Fallback Strategy 🔄 - Automatic fallback from strict to loose encryption
  • Smart Token Management ⏰ - Configurable token refresh with expiration handling
  • Robust Network Handling 🔁 - Automatic retries with configurable backoff for network issues

📦 Installation

pip install PinappleClient

🔧 Quick Start

from pinapple_client import PinappleClient

# Initialize client with automatic token refresh and network resilience
client = PinappleClient(
    user="your_username",
    password="your_password",
    api_url="https://api.pinapple.com",
    refresh_token_after_x_minutes=5,  # Refresh token 5 minutes before expiration
    timeout=30,                       # Request timeout in seconds
    max_retries=3,                    # Number of retry attempts
    backoff_base=2                    # Exponential backoff base (2s, 4s, 8s)
)

# Encrypt a single PIN
encrypted_pin = client.encrypt_pin_strict("123456")
print(f"Encrypted: {encrypted_pin}")

# Decrypt data
decrypted_pin = client.decrypt_pin(encrypted_data)
print(f"Decrypted: {decrypted_pin}")

📊 DataFrame Operations

encrypt_dataframe(df, column, strict=True, strict_then_loose=False) -> DataFrame

Encrypts an entire column in a pandas DataFrame.

import pandas as pd

df = pd.DataFrame({
    'id': [1, 2, 3],
    'pin': ['123456', '789012', '345678']
})

# Encrypt the 'pin' column
encrypted_df = client.encrypt_dataframe(df, 'pin', strict=True)

# Use fallback strategy
encrypted_df = client.encrypt_dataframe(df, 'pin', strict_then_loose=True)

Parameters:

  • df: Input DataFrame
  • column: Column name to encrypt
  • strict: Use strict encryption (default: True)
  • strict_then_loose: Enable fallback strategy (default: False)

🔒 Authentication & Token Management

The client automatically handles token management with intelligent refresh:

Automatic Token Refresh

  • Requests a bearer token on first API call
  • Caches the token for subsequent requests
  • Automatically refreshes tokens before expiration based on configurable buffer time
  • Handles long-running operations without token expiry issues

Token Configuration

# Refresh token 10 minutes before it expires
client = PinappleClient(..., refresh_token_after_x_minutes=10)

# Check token status
expiration = client.get_token_expiration()
should_refresh = client.should_refresh_token()

Token Utilities

  • get_token_expiration() - Returns token expiration as datetime
  • should_refresh_token() - Checks if token needs refresh based on buffer
  • Automatic refresh during long DataFrame operations

Perfect for long-running encryption jobs - no manual token management required!

🔁 Network Resilience

The client includes robust network error handling for unreliable connections:

Automatic Retry Logic

  • Connection errors (DNS resolution, network unreachable)
  • Timeout errors (slow network responses)
  • Request exceptions (various network issues)

Configurable Retry Parameters

client = PinappleClient(
    ...,
    timeout=45,        # Longer timeout for slow networks
    max_retries=5,     # More retry attempts
    backoff_base=3     # Aggressive backoff (3s, 9s, 27s, 81s, 243s)
)

Retry Behavior

  • Exponential backoff: Wait time = backoff_base ^ (attempt + 1)
  • Default settings: 3 retries with 2s, 4s, 8s delays
  • Progress feedback: Logs each retry attempt with wait time
  • Final failure: Clear error message after all retries exhausted

Ideal for corporate networks and VPN connections with intermittent connectivity issues!

📄 License

This project is licensed under the GPL-3.0 License.

🔗 Links

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

pinappleclient-1.4.0.tar.gz (6.9 kB view details)

Uploaded Source

Built Distribution

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

pinappleclient-1.4.0-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

Details for the file pinappleclient-1.4.0.tar.gz.

File metadata

  • Download URL: pinappleclient-1.4.0.tar.gz
  • Upload date:
  • Size: 6.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for pinappleclient-1.4.0.tar.gz
Algorithm Hash digest
SHA256 0a13c0e0190f353ea1ab0f5a82e14990414a44bbe0c9c9bc104e0f13cf0cf58b
MD5 cd7712db595e0b628d28c11929f8d58c
BLAKE2b-256 76e95ab64898251ad93f0027d1650b12181f7afa4abd226e73873cab74959a22

See more details on using hashes here.

File details

Details for the file pinappleclient-1.4.0-py3-none-any.whl.

File metadata

  • Download URL: pinappleclient-1.4.0-py3-none-any.whl
  • Upload date:
  • Size: 7.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for pinappleclient-1.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3cb2a297fa3df63e89ea107b17307fb7f1dad4fca17f193b038e205f33227708
MD5 a8c04a7df31353fe02642a57c3ae1f3f
BLAKE2b-256 aa445bc15c4b4b5e43cc628fbf5f853fa95b6205207868314460f8bb761088e6

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