Python SDK for Optimizely X Full Stack.
Project description
Optimizely X Full Stack is A/B testing and feature management for product development teams. Experiment in any application. Make every feature on your roadmap an opportunity to learn. Learn more at https://www.optimizely.com/products/full-stack/ or see our documentation at https://developers.optimizely.com/x/solutions/sdks/reference/index.html?language=python.
# Readme:
# Optimizely Python SDK
[![PyPI version](https://badge.fury.io/py/optimizely-sdk.svg)](https://pypi.org/project/optimizely-sdk)
[![Build Status](https://travis-ci.org/optimizely/python-sdk.svg?branch=master)](https://travis-ci.org/optimizely/python-sdk)
[![Coverage Status](https://coveralls.io/repos/github/optimizely/python-sdk/badge.svg)](https://coveralls.io/github/optimizely/python-sdk)
[![Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](http://www.apache.org/licenses/LICENSE-2.0)
This repository houses the Python SDK for Optimizely Full Stack.
## Getting Started
### Installing the SDK
The SDK is available through [PyPi](https://pypi.python.org/pypi?name=optimizely-sdk&:action=display). To install:
```
pip install optimizely-sdk
```
### Feature Management Access
To access the Feature Management configuration in the Optimizely dashboard, please contact your Optimizely account executive.
### Using the SDK
See the Optimizely Full Stack [developer documentation](http://developers.optimizely.com/server/reference/index.html) to learn how to set up your first Python project and use the SDK.
## Development
### Building the SDK
Build and install the SDK with pip, using the following command:
```
pip install -e .
```
### Unit tests
##### Running all tests
To get test dependencies installed, use a modified version of the install command:
```
pip install -e .[test]
```
You can run all unit tests with:
```
nosetests
```
##### Running all tests in a file
To run all tests under a particular test file you can use the following command:
```
nosetests tests.<file_name_without_extension>
```
For example, to run all tests under `test_event`, the command would be:
```
nosetests tests.test_event
```
##### Running all tests under a class
To run all tests under a particular class of tests you can use the following command:
```
nosetests tests.<file_name_without_extension>:ClassName
```
For example, to run all tests under `test_event.EventTest`, the command would be:
```
nosetests tests.test_event:EventTest
```
##### Running a single test
To run a single test you can use the following command:
```
nosetests tests.<file_name_without_extension>:ClassName.test_name
```
For example, to run `test_event.EventTest.test_dispatch`, the command would be:
```
nosetests tests.test_event:EventTest.test_dispatch
```
### Contributing
Please see [CONTRIBUTING](CONTRIBUTING.md).
# Change Log:
## 2.1.1
August 21st, 2018
- Fix: record conversions for all experiments using an event when using track([#136](https://github.com/optimizely/python-sdk/pull/136)).
## 2.1.0
July 2nd, 2018
- Introduced support for bot filtering ([#121](https://github.com/optimizely/python-sdk/pull/121)).
- Overhauled logging to use standard Python logging ([#123](https://github.com/optimizely/python-sdk/pull/123)).
## 2.0.1
June 19th, 2018
- Fix: send impression event for Feature Test when Feature is disabled ([#128](https://github.com/optimizely/python-sdk/pull/128)).
## 2.0.0
April 12th, 2018
This major release introduces APIs for Feature Management. It also introduces some breaking changes listed below.
### New Features
- Introduced the `is_feature_enabled` API to determine whether to show a feature to a user or not.
```
is_enabled = optimizel_client.is_feature_enabled('my_feature_key', 'my_user', user_attributes)
```
- All enabled features for the user can be retrieved by calling:
```
enabled_features = optimizely_client.get_enabled_features('my_user', user_attributes)
```
- Introduced Feature Variables to configure or parameterize a feature. There are four variable types: `String`, `Integer`, `Double`, `Boolean`.
```
string_variable = optimizely_client.get_feature_variable_string('my_feature_key', 'string_variable_key', 'my_user')
integer_variable = optimizely_client.get_feature_variable_integer('my_feature_key', 'integer_variable_key', 'my_user')
double_variable = optimizely_client.get_feature_variable_double('my_feature_key', 'double_variable_key', 'my_user')
boolean_variable = optimizely_client.get_feature_variable_boolean('my_feature_key', 'boolean_variable_key', 'my_user')
```
### Breaking changes
- The `track` API with revenue value as a stand-alone parameter has been removed. The revenue value should be passed in as an entry in the event tags dict. The key for the revenue tag is `revenue` and the passed in value will be treated by Optimizely as the value for computing results.
```
event_tags = {
'revenue': 1200
}
optimizely_client.track('event_key', 'my_user', user_attributes, event_tags)
```
## 2.0.0b1
March 29th, 2018
This beta release introduces APIs for Feature Management. It also introduces some breaking changes listed below.
### New Features
- Introduced the `is_feature_enabled` API to determine whether to show a feature to a user or not.
```
is_enabled = optimizel_client.is_feature_enabled('my_feature_key', 'my_user', user_attributes)
```
- All enabled features for the user can be retrieved by calling:
```
enabled_features = optimizely_client.get_enabled_features('my_user', user_attributes)
```
- Introduced Feature Variables to configure or parameterize a feature. There are four variable types: `String`, `Integer`, `Double`, `Boolean`.
```
string_variable = optimizely_client.get_feature_variable_string('my_feature_key', 'string_variable_key', 'my_user')
integer_variable = optimizely_client.get_feature_variable_integer('my_feature_key', 'integer_variable_key', 'my_user')
double_variable = optimizely_client.get_feature_variable_double('my_feature_key', 'double_variable_key', 'my_user')
boolean_variable = optimizely_client.get_feature_variable_boolean('my_feature_key', 'boolean_variable_key', 'my_user')
```
### Breaking changes
- The `track` API with revenue value as a stand-alone parameter has been removed. The revenue value should be passed in as an entry in the event tags dict. The key for the revenue tag is `revenue` and the passed in value will be treated by Optimizely as the value for computing results.
```
event_tags = {
'revenue': 1200
}
optimizely_client.track('event_key', 'my_user', user_attributes, event_tags)
```
## 1.4.0
- Added support for IP anonymization.
- Added support for notification listeners.
- Added support for bucketing ID.
- Updated mmh3 to handle installation failures on Windows 10.
## 1.3.0
- Introduced support for forced bucketing.
- Introduced support for numeric metrics.
- Updated event builder to support new endpoint.
## 1.2.1
- Removed older feature flag parsing.
## 1.2.0
- Added user profile service.
## 1.1.1
- Updated datafile parsing to be able to handle additional fields.
- Deprecated Classic project support.
## 1.1.0
- Included datafile revision information in log events.
- Added event tags to track API to allow users to pass in event metadata.
- Deprecated the `event_value` parameter from the track method. Should use `event_tags` to pass in event value instead.
- Updated event logging endpoint to logx.optimizely.com.
## 1.0.0
- Introduced support for Full Stack projects in Optimizely X. No breaking changes from previous version.
- Introduced more graceful exception handling in instantiation and core methods.
- Updated whitelisting to precede audience matching.
## 0.1.3
- Added support for v2 endpoint and datafile.
- Updated dispatch_event to consume an Event object instead of url and params. The Event object comprises of four properties: url (string representing URL to dispatch event to), params (dict representing the params to be set for the event), http_verb (one of 'GET' or 'POST') and headers (header values to be sent along).
- Fixed issue with tracking events for experiments in groups.
## 0.1.2
- Updated requirements file.
## 0.1.1
- Introduced option to skip JSON schema validation.
## 0.1.0
- Beta release of the Python SDK for server-side testing.
# Readme:
# Optimizely Python SDK
[![PyPI version](https://badge.fury.io/py/optimizely-sdk.svg)](https://pypi.org/project/optimizely-sdk)
[![Build Status](https://travis-ci.org/optimizely/python-sdk.svg?branch=master)](https://travis-ci.org/optimizely/python-sdk)
[![Coverage Status](https://coveralls.io/repos/github/optimizely/python-sdk/badge.svg)](https://coveralls.io/github/optimizely/python-sdk)
[![Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](http://www.apache.org/licenses/LICENSE-2.0)
This repository houses the Python SDK for Optimizely Full Stack.
## Getting Started
### Installing the SDK
The SDK is available through [PyPi](https://pypi.python.org/pypi?name=optimizely-sdk&:action=display). To install:
```
pip install optimizely-sdk
```
### Feature Management Access
To access the Feature Management configuration in the Optimizely dashboard, please contact your Optimizely account executive.
### Using the SDK
See the Optimizely Full Stack [developer documentation](http://developers.optimizely.com/server/reference/index.html) to learn how to set up your first Python project and use the SDK.
## Development
### Building the SDK
Build and install the SDK with pip, using the following command:
```
pip install -e .
```
### Unit tests
##### Running all tests
To get test dependencies installed, use a modified version of the install command:
```
pip install -e .[test]
```
You can run all unit tests with:
```
nosetests
```
##### Running all tests in a file
To run all tests under a particular test file you can use the following command:
```
nosetests tests.<file_name_without_extension>
```
For example, to run all tests under `test_event`, the command would be:
```
nosetests tests.test_event
```
##### Running all tests under a class
To run all tests under a particular class of tests you can use the following command:
```
nosetests tests.<file_name_without_extension>:ClassName
```
For example, to run all tests under `test_event.EventTest`, the command would be:
```
nosetests tests.test_event:EventTest
```
##### Running a single test
To run a single test you can use the following command:
```
nosetests tests.<file_name_without_extension>:ClassName.test_name
```
For example, to run `test_event.EventTest.test_dispatch`, the command would be:
```
nosetests tests.test_event:EventTest.test_dispatch
```
### Contributing
Please see [CONTRIBUTING](CONTRIBUTING.md).
# Change Log:
## 2.1.1
August 21st, 2018
- Fix: record conversions for all experiments using an event when using track([#136](https://github.com/optimizely/python-sdk/pull/136)).
## 2.1.0
July 2nd, 2018
- Introduced support for bot filtering ([#121](https://github.com/optimizely/python-sdk/pull/121)).
- Overhauled logging to use standard Python logging ([#123](https://github.com/optimizely/python-sdk/pull/123)).
## 2.0.1
June 19th, 2018
- Fix: send impression event for Feature Test when Feature is disabled ([#128](https://github.com/optimizely/python-sdk/pull/128)).
## 2.0.0
April 12th, 2018
This major release introduces APIs for Feature Management. It also introduces some breaking changes listed below.
### New Features
- Introduced the `is_feature_enabled` API to determine whether to show a feature to a user or not.
```
is_enabled = optimizel_client.is_feature_enabled('my_feature_key', 'my_user', user_attributes)
```
- All enabled features for the user can be retrieved by calling:
```
enabled_features = optimizely_client.get_enabled_features('my_user', user_attributes)
```
- Introduced Feature Variables to configure or parameterize a feature. There are four variable types: `String`, `Integer`, `Double`, `Boolean`.
```
string_variable = optimizely_client.get_feature_variable_string('my_feature_key', 'string_variable_key', 'my_user')
integer_variable = optimizely_client.get_feature_variable_integer('my_feature_key', 'integer_variable_key', 'my_user')
double_variable = optimizely_client.get_feature_variable_double('my_feature_key', 'double_variable_key', 'my_user')
boolean_variable = optimizely_client.get_feature_variable_boolean('my_feature_key', 'boolean_variable_key', 'my_user')
```
### Breaking changes
- The `track` API with revenue value as a stand-alone parameter has been removed. The revenue value should be passed in as an entry in the event tags dict. The key for the revenue tag is `revenue` and the passed in value will be treated by Optimizely as the value for computing results.
```
event_tags = {
'revenue': 1200
}
optimizely_client.track('event_key', 'my_user', user_attributes, event_tags)
```
## 2.0.0b1
March 29th, 2018
This beta release introduces APIs for Feature Management. It also introduces some breaking changes listed below.
### New Features
- Introduced the `is_feature_enabled` API to determine whether to show a feature to a user or not.
```
is_enabled = optimizel_client.is_feature_enabled('my_feature_key', 'my_user', user_attributes)
```
- All enabled features for the user can be retrieved by calling:
```
enabled_features = optimizely_client.get_enabled_features('my_user', user_attributes)
```
- Introduced Feature Variables to configure or parameterize a feature. There are four variable types: `String`, `Integer`, `Double`, `Boolean`.
```
string_variable = optimizely_client.get_feature_variable_string('my_feature_key', 'string_variable_key', 'my_user')
integer_variable = optimizely_client.get_feature_variable_integer('my_feature_key', 'integer_variable_key', 'my_user')
double_variable = optimizely_client.get_feature_variable_double('my_feature_key', 'double_variable_key', 'my_user')
boolean_variable = optimizely_client.get_feature_variable_boolean('my_feature_key', 'boolean_variable_key', 'my_user')
```
### Breaking changes
- The `track` API with revenue value as a stand-alone parameter has been removed. The revenue value should be passed in as an entry in the event tags dict. The key for the revenue tag is `revenue` and the passed in value will be treated by Optimizely as the value for computing results.
```
event_tags = {
'revenue': 1200
}
optimizely_client.track('event_key', 'my_user', user_attributes, event_tags)
```
## 1.4.0
- Added support for IP anonymization.
- Added support for notification listeners.
- Added support for bucketing ID.
- Updated mmh3 to handle installation failures on Windows 10.
## 1.3.0
- Introduced support for forced bucketing.
- Introduced support for numeric metrics.
- Updated event builder to support new endpoint.
## 1.2.1
- Removed older feature flag parsing.
## 1.2.0
- Added user profile service.
## 1.1.1
- Updated datafile parsing to be able to handle additional fields.
- Deprecated Classic project support.
## 1.1.0
- Included datafile revision information in log events.
- Added event tags to track API to allow users to pass in event metadata.
- Deprecated the `event_value` parameter from the track method. Should use `event_tags` to pass in event value instead.
- Updated event logging endpoint to logx.optimizely.com.
## 1.0.0
- Introduced support for Full Stack projects in Optimizely X. No breaking changes from previous version.
- Introduced more graceful exception handling in instantiation and core methods.
- Updated whitelisting to precede audience matching.
## 0.1.3
- Added support for v2 endpoint and datafile.
- Updated dispatch_event to consume an Event object instead of url and params. The Event object comprises of four properties: url (string representing URL to dispatch event to), params (dict representing the params to be set for the event), http_verb (one of 'GET' or 'POST') and headers (header values to be sent along).
- Fixed issue with tracking events for experiments in groups.
## 0.1.2
- Updated requirements file.
## 0.1.1
- Introduced option to skip JSON schema validation.
## 0.1.0
- Beta release of the Python SDK for server-side testing.
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
optimizely-sdk-2.1.1.tar.gz
(39.1 kB
view hashes)