smartcar / python-sdk

Smartcar Python SDK
MIT License
44 stars 13 forks source link
sdk

Smartcar Python Backend SDK Build Status PyPI version

Python package to quickly integrate Smartcar API

Resources

Installation

# Inside your virtual environment:
pip install smartcar

Usage

Authentication

Before integrating with Python SDK, you'll need to register an application in the Smartcar Developer portal. Once you have registered an application, you will have a Client ID and Client Secret, which will allow you to authorize users.

Now that you have your id, secret and redirect URI, here's a simple overall idea of how to use the SDK to authenticate and make requests with the Smartcar API.

export SMARTCAR_CLIENT_ID='<your client id>'
export SMARTCAR_CLIENT_SECRET='<your client secret>'
export SMARTCAR_REDIRECT_URI='<your redirect uri>'
import smartcar

client = smartcar.AuthClient()

# Alter this list to specify the scope of permissions your application is requesting access to
scopes = ['read_vehicle_info', 'read_odometer', <scope3>...]

# Generate auth url for User OAuth flow
auth_url = client.get_auth_url(scopes)
access_object = client.exchange_code(<authorization_code>)

This access object will look like this:

{
  "access_token": "...",
  "token_type": "Bearer",
  "expiration": "2018-05-02T18:04:25+00:00",
  "refresh_token": "...",
  "refresh_expiration": "2018-06-02T18:03:25+00:00",
  "expires_in": "..."
}
def get_fresh_access():
    access = load_access_from_database()
    new_access = client.exchange_refresh_token(access['refresh_token'])
    put_access_into_database(new_access)

    return new_access

fresh_access_token = get_fresh_access()['access_token']

Vehicle Data and Commands

With your fresh access token in hand, use smartcar.get_vehicles(access_token) to get a list of the user's vehicles.

vehicles = smartcar.get_vehicles(<access_token>)

print(vehicles.vehicles)
# [ uuid-of-first-vehicle, "...", uuid-of-nth-vehicle ]

# Vehicle ID of first vehicle
vehicle_id = vehicle.vehicles[0]
vehicle = smartcar.Vehicle(vehicle_id, access_token)

odometer = vehicle.odometer()
print(odometer.distance)

info = vehicle.info()
print(info.make)
print(info.model)

batch = vehicle.batch(paths=['/location'])
location = batch.location()
print(location)

Handling Exceptions

Any time you make a request to the Smartcar API, something can go wrong. This means that you really should wrap each call to client.exchange_code, client.exchange_refresh_token, client.get_vehicles, and any vehicle method with some exception handling code.

All exceptions will be of type smartcar.SmartcarException with the... exception of missing client credentials. Navigate below to AuthClient for more details.

Upon a vehicle rate limit error, see SmartcarException.retry_after (seconds) for when to retry the request.

Check out our API Reference and v2.0 Error Guides to learn more.

Supported Python Branches

Smartcar aims to support the SDK on all Python branches that have a status of "bugfix" or "security" as defined in the Python Developer's Guide.

In accordance with the Semantic Versioning specification, the addition of support for new Python branches would result in a MINOR version bump and the removal of support for Python branches would result in a MAJOR version bump.