No project description provided
Project description
Spackle Python Library
The Spackle Python library provides optimized access to billing aware flags created on the Spackle platform.
Documentation
See the Python API docs.
Setup
Install the Spackle library
pip install -U spackle-python
Configure your environment
In order to use Spackle, you need to configure your API key on the spackle
module. You can find your API key in Spackle app settings page.
import spackle
spackle.api_key = "<api key>"
Bootstrap the client (optional)
The Spackle client requires a single initialization step that includes a network request. To front load this process, you can call the bootstrap
method in your codebase.
spackle.bootstrap()
Usage
Fetch a customer
Spackle uses stripe ids as references to customer features.
customer = spackle.Customer.retrieve("cus_00000000")
Verify feature access
customer.enabled("feature_key")
Fetch a feature limit
customer.limit("feature_key")
Examine a customer's subscriptions
A customer's current subscriptions are available on the subscriptions
property. These are valid stripe.Subscription
objects as defined in the Stripe Python library.
customer.subscriptions
Waiters
There is a brief delay between when an action takes place in Stripe and when it is reflected in Spackle. To account for this, Spackle provides a waiters
module that can be used to wait for a Stripe object to be updated and replicated.
- Wait for a customer to be created
spackle.wait_for_customer("cus_00000000")
- Wait for a subscription to be created
spackle.wait_for_subscription("cus_000000000", "sub_00000000")
- Wait for a subscription to be updated
spackle.wait_for_subscription("cus_000000000", "sub_00000000", status="active")
These will block until Spackle is updated with the latest information from Stripe or until a timeout occurs.
Logging
The Spackle Python library emits logs as it performs various internal tasks. You can control the verbosity of Spackle's logging a few different ways:
-
Set the environment variable SPACKLE_LOG to the value
debug
,info
, orwarn
$ export SPACKLE_LOG=debug
-
Set spackle.log:
import spackle spackle.log = 'debug'
-
Enable it through Python's logging module:
import logging logging.basicConfig() logging.getLogger('spackle').setLevel(logging.DEBUG)
Usage in development environments
In production, Spackle requires a valid Stripe customer. However, that is not development environments where state needs to be controlled. As an alternative, you can use a file store to test your application with seed data.
/app/spackle.json
{
"cus_000000000": {
"features": [
{
"type": 0,
"key": "flag_feature",
"value_flag": true
},
{
"type": 1,
"key": "limit_feature",
"value_limit": 100
}
],
"subscriptions": [
{
"id": "sub_000000000",
"status": "trialing",
"quantity": 1
}
]
}
}
Then configure the file store in your application:
spackle.set_store(spackle.FileStore("/app/spackle.json"))
Usage in testing environments
In production, Spackle requires a valid Stripe customer. However, that is not ideal in testing or some development environments. As an alternative, you can use an in-memory store to test your application with seed data.
spackle.set_store(spackle.MemoryStore())
spackle.get_store().set_customer_data("cus_000000000", {
"features": [
{
"type": 0,
"key": "flag_feature",
"value_flag": True,
},
{
"type": 1,
"key": "limit_feature",
"value_limit": 100,
},
],
"subscriptions": [
{
"id": "sub_000000000",
"status": "trialing",
"quantity": 1,
}
]
})
Note: The in-memory store is not thread-safe and state will reset on each application restart.
Project details
Release history Release notifications | RSS feed
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
Hashes for spackle_python-0.0.38-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b3e549b6a62ef511cd250626681de86225160ca5858a5df521ef6340d681f51f |
|
MD5 | 2b27b4101334f103ae0845ba9e1491d0 |
|
BLAKE2b-256 | 19ce512d12a4afe3d1551ad904c57794ecd764bd6085016c1eb84fc57881dcd5 |