Skip to main content

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
optimizely-sdk-2.1.1.tar.gz (39.1 kB) Copy SHA256 hash SHA256 Source None Aug 21, 2018

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page