Python bindings for Sift Science's API
Project description
Sift Python Bindings
Bindings for Sift's APIs -- including the Events, Labels, and Score APIs.
Installation
Set up a virtual environment with virtualenv (otherwise you will need to make the pip calls as sudo):
virtualenv venv
source venv/bin/activate
Get the latest released package from pip:
Python 2:
pip install Sift
Python 3:
pip3 install Sift
or install newest source directly from GitHub:
Python 2:
pip install git+https://github.com/SiftScience/sift-python
Python 3:
pip3 install git+https://github.com/SiftScience/sift-python
Documentation
Please see here for the most up-to-date documentation.
Changelog
Please see the CHANGELOG for a history of all changes.
Note, that in v2.0.0, the API semantics were changed to raise an
exception in the case of error to be more pythonic. Client code will
need to be updated to catch sift.client.ApiException
exceptions.
Usage
Here's an example:
import json
import sift.client
client = sift.Client(api_key='<your API key here>', account_id='<your account ID here>')
# User ID's may only contain a-z, A-Z, 0-9, =, ., -, _, +, @, :, &, ^, %, !, $
user_id = "23056"
# Track a transaction event -- note this is a blocking call
properties = {
"$user_id": user_id,
"$user_email": "buyer@gmail.com",
"$seller_user_id": "2371",
"seller_user_email": "seller@gmail.com",
"$transaction_id": "573050",
"$payment_method": {
"$payment_type": "$credit_card",
"$payment_gateway": "$braintree",
"$card_bin": "542486",
"$card_last4": "4444"
},
"$currency_code": "USD",
"$amount": 15230000,
}
try:
response = client.track("$transaction", properties)
if response.is_ok():
print "Successfully tracked event"
except sift.client.ApiException:
# request failed
pass
# Request a score for the user with user_id 23056
try:
response = client.score(user_id)
s = json.dumps(response.body)
print s
except sift.client.ApiException:
# request failed
pass
try:
# Label the user with user_id 23056 as Bad with all optional fields
response = client.label(user_id, {
"$is_bad": True,
"$abuse_type": "payment_abuse",
"$description": "Chargeback issued",
"$source": "Manual Review",
"$analyst": "analyst.name@your_domain.com"
})
except sift.client.ApiException:
# request failed
pass
# Remove a label from a user with user_id 23056
try:
response = client.unlabel(user_id, abuse_type='content_abuse')
except sift.client.ApiException:
# request failed
pass
# Get the status of a workflow run
try:
response = client.get_workflow_status('my_run_id')
except sift.client.ApiException:
# request failed
pass
# Get the latest decisions for a user
try:
response = client.get_user_decisions('example_user')
except sift.client.ApiException:
# request failed
pass
# Get the latest decisions for an order
try:
response = client.get_order_decisions('example_order')
except sift.client.ApiException:
# request failed
pass
# Get the latest decisions for a session
try:
response = client.get_session_decisions('example_user', 'example_session')
except sift.client.ApiException:
# request failed
pass
# Get the latest decisions for a piece of content
try:
response = client.get_content_decisions('example_user', 'example_content')
except sift.client.ApiException:
# request failed
pass
Testing
Before submitting a change, make sure the following commands run without errors from the root dir of the repository:
python -m unittest discover
python3 -m unittest discover
5.2.0 2022-11-07
- Update PSP Merchant Management API
5.1.0 2022-06-22
- Added return_route_info query parameter
- Fixed decimal amount json serialization bug
5.0.2 2022-01-24
- Fix usage of urllib for Python 2.7
5.0.1 2019-03-07
- Update metadata in setup.py
5.0.0 2019-01-08
- Add connection pooling
INCOMPATIBLE CHANGES INTRODUCED IN 5.0.0:
-
Removed support for Python 2.6
-
Fix url encoding for all endpoints
Previously, encoding user ids in URLs was inconsistent between endpoints, encoded for some endpoints, unencoded for others. Additionally, when encoded in the URL path, forward slashes weren't encoded. Callers with workarounds for this bug must remove these workarounds when upgrading to 5.0.0.
-
Improved error handling
Previously, illegal arguments passed to methods like
Client.track()
and failed calls resulting from server-side errors both raisedApiExceptions
. Illegal arguments validated in the client now raise eitherTypeErrors
orValueErrors
. Server-side errors still raiseApiExceptions
, andApiException
has been augmented with metadata for handling the error.
4.3.0.0 2018-07-31
- Add support for rescore_user and get_user_score APIs
4.2.0.0 2018-07-05
- Add new query parameter force_workflow_run
4.1.0.0 2018-06-01
- Add get session level decisions in Get Decisions APIs.
4.0.1 2018-04-06
- Updated documentation in CHANGES.md and README.md
4.0.0.0 2018-03-30
- Adds support for Sift Science API Version 205, including new
$create_content
and$update_content
formats - V205 APIs are now called -- this is an incompatible change
- Use
version = '204'
when constructing the Client to call the previous API version
- Use
- Adds support for content decisions to Decisions API
INCOMPATIBLE CHANGES INTRODUCED IN API V205:
$create_content
and$update_content
have significantly changed, and the old format will be rejected$send_message
and$submit_review
events are no longer valid- V205 improves server-side event data validation. In V204 and earlier, server-side validation accepted some events that did not conform to the published APIs in our developer documentation. V205 does not modify existing event APIs other than those mentioned above, but may reject invalid event data that were previously accepted. Please test your integration on V205 in sandbox before using in production.
3.2.0.0 2018-02-12
- Add session level decisions in Apply Decisions APIs.
- Add support for filtering get decisions by entity type session.
3.1.0.0 2017-01-17
- Adds support for Get, Apply Decisions APIs
3.0.0.0 2016-07-19
- Adds support for v204 of Sift Science's APIs
- Adds Workflow Status API, User Decisions API, Order Decisions API
- V204 APIs are now called by default -- this is an incompatible change (use version='203' to call the previous API version)
2.0.1.0 (2016-07-07)
- Fixes bug parsing chunked HTTP responses
2.0.0.0 (2016-06-21)
- Major version bump; client APIs have changed to raise exceptions in the case of API errors to be more Pythonic
1.1.2.1 (2015-05-18)
- Added Python 2.6 compatibility
- Added Travis CI
- Minor bug fixes
1.1.2.0 (2015-02-04)
- Added Unlabel functionaly
- Minor bug fixes.
1.1.1.0 (2014-09-3)
- Added timeout parameter to track, score, and label functions.
1.1.0.0 (2014-08-25)
- Added Module-scoped API key.
- Minor documentation updates.
0.2.0 (2014-08-20)
- Added Label and Score functions.
- Added Python 3 compatibility.
0.1.1 (2014-02-21)
- Bump default API version to v203.
0.1.0 (2013-01-08)
- Just the Python REST client itself.
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
File details
Details for the file Sift-5.2.0.tar.gz
.
File metadata
- Download URL: Sift-5.2.0.tar.gz
- Upload date:
- Size: 11.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0d419e1598af5ba1ee3083d56c303253f82d5c4f40b634fb7d310efeee5f598b |
|
MD5 | c9c1fafd5be48b839d23082dd29b9372 |
|
BLAKE2b-256 | d1f8b75796a5433774f144c07e0df40f7415c9d38452758fba82006a809eecd6 |