LightRate Client Python
A Python client for the Lightrate token management API, providing easy-to-use methods for consuming tokens with local bucket management.
Installation
pip install lightrate-client
Usage
Configuration
Configure the client with your API credentials:
from lightrate_client import configure, get_client
configure(
api_key='your_api_key',
application_id='your_application_id', # required
timeout=30, # optional, defaults to 30 seconds
retry_attempts=3, # optional, defaults to 3
default_local_bucket_size=5 # optional, defaults to 5
)
Basic Usage
from lightrate_client import LightRateClient, create_client
# Simple usage - pass your API key and application ID
client = LightRateClient('your_api_key', 'your_application_id')
# Or use the convenience method
client = create_client('your_api_key', 'your_application_id')
# With additional options
client = LightRateClient('your_api_key', 'your_application_id', ClientOptions(
timeout=60,
default_local_bucket_size=10
))
# Or configure globally and use the default client
configure(api_key='your_api_key', application_id='your_application_id')
client = get_client()
Consuming Tokens
# Consume tokens by operation
response = client.consume_tokens(
user_identifier='user123',
tokens_requested=1,
operation='send_email'
)
# Or consume tokens by path
response = client.consume_tokens(
user_identifier='user123',
tokens_requested=1,
path='/api/v1/emails/send',
http_method='POST'
)
if response.tokens_consumed > 0:
print(f"Tokens consumed successfully. Remaining: {response.tokens_remaining}")
else:
print(f"Failed to consume tokens")
Using Local Token Buckets
The client supports local token buckets for improved performance. Buckets are automatically created based on the rules returned by the API, and are matched against incoming requests using the matcher field from the rule.
# Configure client with default bucket size
client = LightRateClient('your_api_key', 'your_application_id', ClientOptions(
default_local_bucket_size=20 # All operations use this bucket size
))
# Consume tokens using local bucket (more efficient)
result = client.consume_local_bucket_token(
user_identifier='user123',
operation='send_email'
)
print(f"Success: {result.success}")
print(f"Used local token: {result.used_local_token}")
print(f"Bucket status: {result.bucket_status}")
Bucket Matching:
- Buckets are matched using the
matcherfield from the rule, which supports regex patterns - Each user has separate buckets per rule, ensuring proper isolation
- Buckets expire after 60 seconds of inactivity
- Default rules (isDefault: true) do not create local buckets
Complete Example
from lightrate_client import LightRateClient
# Create a client with your API key and application ID
client = LightRateClient('your_api_key', 'your_application_id')
try:
# Consume tokens
consume_response = client.consume_tokens(
user_identifier='user123',
tokens_requested=1,
operation='send_email'
)
if consume_response.tokens_consumed > 0:
print(f"Successfully consumed tokens. Remaining: {consume_response.tokens_remaining}")
# Proceed with your operation
else:
print("Failed to consume tokens")
# Handle rate limiting
except UnauthorizedError as e:
print(f"Authentication failed: {e}")
except TooManyRequestsError as e:
print(f"Rate limited: {e}")
except APIError as e:
print(f"API Error ({e.status_code}): {e}")
except NetworkError as e:
print(f"Network error: {e}")
Error Handling
The client provides comprehensive error handling with specific exception types:
from lightrate_client import (
UnauthorizedError,
NotFoundError,
APIError,
NetworkError,
TimeoutError
)
try:
response = client.consume_tokens(...)
except UnauthorizedError as e:
print(f"Authentication failed: {e}")
except NotFoundError as e:
print(f"Resource not found: {e}")
except APIError as e:
print(f"API Error ({e.status_code}): {e}")
except NetworkError as e:
print(f"Network error: {e}")
except TimeoutError as e:
print(f"Request timed out: {e}")
Available error types:
LightRateError- Base error classConfigurationError- Configuration-related errorsAuthenticationError- Authentication-related errorsAPIError- Base API error classBadRequestError- 400 errorsUnauthorizedError- 401 errorsForbiddenError- 403 errorsNotFoundError- 404 errorsUnprocessableEntityError- 422 errorsTooManyRequestsError- 429 errorsInternalServerError- 500 errorsServiceUnavailableError- 503 errorsNetworkError- Network-related errorsTimeoutError- Request timeout errors
API Reference
Classes
LightRateClient
Main client class for interacting with the LightRate API.
Constructor:
LightRateClient(api_key: str, application_id: str, options: Optional[ClientOptions] = None)
Methods:
consume_tokens(user_identifier, tokens_requested, operation=None, path=None, http_method=None) -> ConsumeTokensResponseconsume_local_bucket_token(user_identifier, operation=None, path=None, http_method=None) -> ConsumeLocalBucketTokenResponseconsume_tokens_with_request(request) -> ConsumeTokensResponseget_all_bucket_statuses() -> Dict[str, Any]reset_all_buckets() -> Noneget_configuration() -> Configuration
Configuration
Configuration class for client settings.
Methods:
is_valid() -> boolto_dict() -> Dict[str, Any]update(**options) -> None
Global Functions
configure(**options) -> None- Configure global clientget_client() -> LightRateClient- Get global client instancecreate_client(api_key, application_id, **options) -> LightRateClient- Create new clientreset() -> None- Reset global configuration
Development
After checking out the repo, run pip install -e .[dev] to install dependencies. Then, run pytest to run the tests.
To build the project, run python setup.py sdist bdist_wheel.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/lightbourne-technologies/lightrate-client-python. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.
License
The package is available as open source under the terms of the MIT License.
Metadata
Release files for lightrate-client 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| lightrate_client-1.0.0.tar.gz | 12.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| lightrate_client-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 24.0 kB
Release files / lightrate_client-1.0.0.tar.gz
| Download URL | lightrate_client-1.0.0.tar.gz |
|---|---|
| Size | 12.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
770d0b30caaf3dc7508db6df4465c1128c54e86760d05252c2706a0d0066acb0
|
|
BLAKE2b-256 checksum How to use checksums |
5f23b3d45cdcb7cdaa23174bc797966c1bfd7df29cfe89e83da7361008759025
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|
Release files / lightrate_client-1.0.0-py3-none-any.whl
| Download URL | lightrate_client-1.0.0-py3-none-any.whl |
|---|---|
| Size | 11.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
22bff6675e04346a93695d12c3a8ac0d015121ff49be84e71430430743e89d55
|
|
BLAKE2b-256 checksum How to use checksums |
7de64599b568db6b814c1f1093b5c075d6cf59a1a89541d03a947dd8b1f26420
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|