-
Notifications
You must be signed in to change notification settings - Fork 32
Migration guide for v3
cb-nithins edited this page Oct 17, 2024
·
2 revisions
This guide outlines the necessary changes for migrating from chargebee-python v2.x
to chargebee-python v3.x
- Type Hinting: Introduced to enhance IDE autocompletion and provide more accurate suggestions during development.
- Chargebee Client: Support for multiple clients has been introduced.
-
Data Type Support: Added support for
int
,float
,bool
, andenum
data types. - Enums: Global and resource-specific enums have been introduced.
- Filter Params: Filter parameters for list type of requests have been introduced.
- Response Classes: Each API endpoint now has a dedicated response class that defines the return type, replacing the previous approach of accessing a generic response object.
- Python 3.11+ is required
- A Chargebee client instance must now be created to access API operations. Direct configuration of Chargebee is no longer supported.
- List-type responses are now accessible via the
list
entry to align with the API contract. - Response from previous API calls must be passed as arguments for
wait_for_export_completion()
andwait_for_time_travel_completion()
.
A Chargebee client instance must now be created to access API operations. Direct configuration of Chargebee is no longer supported.
Before:
import chargebee
chargebee.configure("api_key", "site")
After:
from chargebee import Chargebee
cb_client = Chargebee(api_key="api_key", site="site")
Parameters can now be passed as keyword arguments rather than as an encoded string.
Before:
import chargebee
result = chargebee.Customer.create({
"first_name": "John",
"last_name": "Doe",
"email": "john@test.com",
"locale": "fr-CA",
"billing_address": {
"first_name": "John",
"last_name": "Doe",
"line1": "PO Box 9999",
"city": "Walnut",
"state": "California",
"zip": "91789",
"country": "US"
}
})
After:
response = cb_client.Customer.create(cb_client.Customer.CreateParams(
first_name="John",
last_name="Doe",
email="john@test.com",
locale="fr-CA",
billing_address=cb_client.Customer.BillingAddress(
first_name="John",
last_name=" Doe",
line1="PO Box 9999",
city="Walnut",
state="California",
zip="91789",
country="US"
)
))
List-type responses are now accessible via the list
entry to align with the API contract.
Before:
import chargebee
entries = chargebee.Customer.list({
"limit": "5"
})
for entry in entries:
customer = entry.customer
card = entry.card
After:
response = cb_client.Customer.list(
cb_client.Customer.ListParams(
limit=5
)
)
for entry in response.list:
customer = entry.customer
card = entry.card
Before:
import chargebee
entries = chargebee.Customer.list({
"id[in]": ["BTTwXzUQUst2s1cox", "BTTwXzUQUtkFC1d2Q"],
"first_name[is]": "John",
"last_name[starts_with]": "Doe"
})
After:
from chargebee import Filters
response = cb_client.Customer.list(
cb_client.Customer.ListParams(
id=Filters.StringFilter(
IN=["BTTwXzUQUst2s1cox", "BTTwXzUQUtkFC1d2Q"]
),
first_name=Filters.StringFilter(
IS="John"
),
last_name=Filters.StringFilter(
STARTS_WITH="Doe"
)
)
)
Before:
import chargebee
response = chargebee.Customer.create({
"first_name": "John",
"cf_host_url": "https://john.com" # `cf_host_url` is a custom field in Customer object
})
After:
response = cb_client.Customer.create(
cb_client.Customer.CreateParams(
first_name="John",
cf_host_url="https://john.com", # `cf_host_url` is a custom field in Customer object
)
)
Before:
import chargebee
result = chargebee.Customer.create({
"first_name": "John",
"last_name": "Doe"
})
customer = result.customer
card = result.card
subscription = result.subscription # spurious reference as there won't be any subscriotion object returned from create customers endpoint
After:
result = cb_client.Customer.create(
cb_client.Customer.CreateParams(
first_name="John",
last_name="Doe"
)
)
# result variable won't have any other response object other than responses specified in the API contract
customer = result.customer
card = result.card
Before:
import chargebee
result = chargebee.Customer.list()
response_headers = result.get_response_headers
After:
response = cb_client.Customer.list()
response_headers = response.headers
The response from the previous API call must be passed as an argument for wait_for_export_completion()
or wait_for_time_travel_completion()
Before:
import chargebee
result = chargebee.Export.customers({
"customer": {
"first_name[is]": "John"
}
})
print(chargebee.Export.wait_for_export_completion())
After:
from chargebee import Filters
response = cb_client.Export.customers(
cb_client.Export.CustomersParams(
customer=cb_client.Export.CustomersCustomerParams(
first_name=Filters.StringFilter(IS="John")
)
)
)
print(cb_client.Export.wait_for_export_completion(response.export))
Refer to the README for additional code samples.