Python client SDK for Orb's API
Project description
SDK Installation
pip install orb-billing
SDK Example Usage
import orb
from orb.models import shared
s = orb.Orb(
api_key="",
)
res = s.availability.ping()
if res.ping_response is not None:
# handle response
pass
Types
The SDK uses data classes for all generated models which provides in line hinting and documentation within your IDE. If you would like to see type errors in VS Code to help catch bugs earlier, set python.analysis.typeCheckingMode
to basic.
Error Handling
There are several reasons SDK operations can fail in practice:
- A particular resource cannot be found
- You are not authorised to access certain resources
- The request cannot be sent due to a network error
You can build robust code using the SDK with error handling. The example below
demonstrates how to handle a subset of errors while falling back to re-raising
others. Note that, in production environments, it may be beneficial to use a
logging library instead of calling print()
.
import orb
import orb.models.errors
# Initialize the SDK.
s = orb.Orb(api_key_auth="my-orb-key")
customer_id = "sample_customer_id"
try:
response = s.customer.fetch_by_external_id(external_customer_id=customer_id)
customer = response.customer
if customer is None:
raise Exception("No customer data available")
# Use the customer data we just received.
id = customer
provider = customer.payment_provider
print(f"Customer '{id}' uses '{provider}' as payment provider.")
except orb.models.errors.FourHundredAndFourError as e:
# Handle a 404 response for when a customer is not found
print(f"Customer '{customer_id}' was not found.")
except orb.models.errors.FourHundredAndOneError as e:
# Handle a 401 response when trying to access resources we are not authorized
# to access.
message = e.title or "Unauthorized request"
message += f": {e.detail}" if e.detail else ""
print(message)
except orb.models.errors.FiveHundredError as e:
# Handle 5xx responses that occur when the server is experiencing issues.
message = e.title or f"A server-side error ({e.status}) occured."
message += f": {e.detail}" if e.detail else ""
print(message)
except orb.models.errors.SDKError as e:
# Handle any issues where we were unable to read the response from the server.
print("Unexpected API error occurred.")
print(f"Status code: {e.status_code}")
print(f"Message: {e.message}")
except Exception as e:
# We don't necessarily want to handle all possible errors so this final
# catch-all block may be omitted entirely and the exception will be thrown
# upwards in this program.
print("Unexpected error occurred.")
raise e
Pagination
Some of the endpoints in this SDK support pagination. To use pagination, you make your SDK calls as usual, but the
returned response object will have a Next
method that can be called to pull down the next group of results. If the
return value of Next
is None
, then there are no more pages to be fetched.
Here's an example of one such pagination call:
import orb
# Initialize the SDK.
s = orb.Orb(api_key="my-orb-key")
cursor = None
keep_fetching = True
# We start by attempting to fetch at least one page of results.
while keep_fetching:
# The SDK call takes the cursor and any additional arguments to filter the
# coupon data.
response = s.coupon.list(cursor=cursor, show_archived=False)
if response.status_code != 200:
raise Exception(f"Unexpected status code received from server: {response.status_code}")
# Ensure the response from the server contains coupon data.
if response.coupons is None:
break
# Check if we received an empty page of results. This is a signal that we
# should stop requesting more data from the server.
page = response.coupons.data
if not page:
break
# Capture the cursor for the next loop. If there is no cursor then use that
# as a signal to stop iteration.
cursor = response.coupons.pagination_metadata.next_cursor
keep_fetching = cursor is not None
# At this point we have a page of coupon entries that we can collect or
# iterate through as shown below.
for coupon in page:
code = coupon.redemption_code
redeem_count = coupon.times_redeemed
print(f"Coupon ${code} was redeemed ${redeem_count} times.")
Overriding the Default Client
By default, this SDK uses the Python requests
library as the default HTTP client. However, you can use a custom HTTP client to enable using a proxy, enable custom telemetry, or use preconfigured global headers or additional configuration.
Here's an example of how to override with a custom client.
s = orb.Orb()
# Your custom HTTP client
client = requests.Session()
s.config_client(client)
Versions
This package follows SemVer conventions. Backwards-incompatible changes may be released as minor versions. Previous versions of the SDK can be found under the Releases tab of the repository.
Available Resources and Operations
availability
- ping - Check availability
coupon
- archive - Archive coupon
- create - Create coupon
- fetch - Fetch coupon
- list - List coupons
- list_subscriptions - List coupon subscriptions
credit
- add_by_external_id - Create ledger entry by external ID
- create - Create ledger entry
- fetch_balance - Fetch customer credit balance
- fetch_balance_by_external_id - Fetch customer credit balance by external customer id
- fetch_ledger - Fetch customer credits ledger
- fetch_ledger_by_external_id - Fetch customer credits ledger by external ID
credit_note
customer
- amend - Amend usage
- amend_by_external_id - Amend usage by external ID
- create - Create customer
- create_balance_transaction - Create customer balance transaction
- delete - Delete customer
- fetch - Fetch customer
- fetch_by_external_id - Fetch customer by external ID
- fetch_costs - Fetch customer costs
- fetch_costs_by_external_id - Fetch customer costs by external ID
- list - List customers
- list_balance_transactions - List balance transactions
- update_by_external_id - Update customer by external ID
- update_customer - Update customer
event
- amend - Amend event
- close_backfill - Close backfill
- create - Create backfill
- deprecate_event - Deprecate event
- fetch - Fetch backfill
- ingest - Ingest events
- list_backfills - List backfills
- revert_backfill - Revert backfill
- search - Search events
invoice
- create - Create a one-off invoice
- create_line_item - Create invoice line item
- fetch - Fetch invoice
- fetch_upcoming - Fetch upcoming invoice
- issue - Issue invoice
- list - List invoices
- mark_invoice_as_paid - Mark invoice as paid
- void - Void invoice
item
metric
plan
- create - Create plan
- fetch - Fetch plan
- fetch_by_external_id - Fetch plan by external ID
- list - List plans
- update_plan - Update plan by id
- update_plan_external - Update plan by external ID
price
- create - Create price
- fetch - Fetch price
- fetch_by_external_id - Fetch price by external price id
- list - List prices
price_interval
- add_edit_price_intervals - Add or edit price intervals
subscription
- cancel - Cancel subscription
- create - Create subscription
- fetch - Fetch subscription
- fetch_costs - Fetch subscription costs
- fetch_schedule - Fetch subscription schedule
- fetch_usage - Fetch subscription usage
- list - List subscriptions
- schedule_plan_change - Schedule plan change
- trigger_phase - Trigger phase
- unschedule_cancellation - Unschedule subscription cancellation
- unschedule_fixed_fee_quantity - Unschedule fixed fee quantity updates
- unschedule_plan_change - Unschedule plan change
- update_fixed_fee_quantity - Update price quantity
Dev Containers
Experience our SDK in an enhanced sandbox environment. Try it now in GitHub Codespaces!
Maturity
This SDK is in beta, and there may be breaking changes between versions without a major version update. Therefore, we recommend pinning usage to a specific package version. This way, you can install the same version each time without breaking changes unless you are intentionally looking for the latest version.
Contributions
While we value open-source contributions to this SDK, this library is generated programmatically. Feel free to open a PR or a Github issue as a proof of concept and we'll do our best to include it in a future release !
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 orb_billing-1.26.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fe63ccf63263b0bac57552675908efc6ebf3c77790b132de8fb014bdbc9c20c6 |
|
MD5 | 10d5d344ff026d2a9f7261a068e93891 |
|
BLAKE2b-256 | f10be86f3187faed9fc373f8c1257b8dfd691641caf7fe2237491f5bed31538e |