# Riak Python Client Release Notes

## 2.3.0 Feature Release - 2015-12-14

Release 2.3.0 features support for new
[time series](https://github.com/basho/riak-python-client/pull/416)
functionality.

This is release retires support for Python 2.6.x but adds support for
Python 3.5.x.

There are also many bugfixes and new enhancements:

* [Protocol buffers are now integrated into the Python Client]
  (https://github.com/basho/riak-python-client/pull/418)
* [Support for Preflists and Write-Once bucket types]
  (https://github.com/basho/riak-python-client/pull/414)
* [Support Riak 2.1.1]
  (https://github.com/basho/riak-python-client/pull/407)
* [Native SSL support for Python 2.7.9+]
  (https://github.com/basho/riak-python-client/pull/397)


## 2.2.0 Feature Release - 2014-12-18

Release 2.2.0 features support for
[Python 3](https://github.com/basho/riak-python-client/pull/379),
specifically 3.3 and 3.4.  This version uses the native SSL security instead
of [pyOpenSSL](http://pypi.python.org/pypi/pyOpenSSL) which is required
for the Python 2 series.

This release also includes many bugfixes and enhancements, most
notably:

* [Fixed an issue with the implementation of `Mapping.__iter__`]
  (https://github.com/basho/riak-python-client/pull/367)
* [Test client certificate generation updated]
  (https://github.com/basho/riak-python-client/pull/373)
* [Protocol Buffers had a socket.send issue]
  (https://github.com/basho/riak-python-client/pull/382)
* [Support for bucket types in Map/Reduce jobs added]
  (https://github.com/basho/riak-python-client/pull/385)
* [Race condition in `RiakBucket` creation fixed]
  (https://github.com/basho/riak-python-client/pull/386)
* [Data Types can now be deleted]
  (https://github.com/basho/riak-python-client/pull/387)
* [2i Range Queries with a zero end index now work]
  (https://github.com/basho/riak-python-client/pull/388)


## 2.1.0 Feature Release - 2014-09-03

Release 2.1.0 features support for Riak 2.0 capabilities including:

* Bucket Types
* Riak Data Types (CRDTs)
* Search 2.0 (codename Yokozuna)
* Security: SSL/TLS, Authentication, and Authorization

As a result of the new security features, the package now depends on
[pyOpenSSL](http://pypi.python.org/pypi/pyOpenSSL) and will warn if
your version of OpenSSL is too old.

This release also includes many bugfixes and enhancements, most
notably:

* The default protocol is now 'pbc', not 'http'.
* When used correctly, streaming requests no longer result in leaks
  from the connection pool.
* The size of the multiget worker pool can be set when initializing
  the client.
* Secondary index queries can now iterate over all pages in a query.
* The number of times a request is retried after network failure is
  now configurable.
* The additional request options `basic_quorum` and `notfound_ok` are
  now supported.

## 2.0.3 Patch Release - 2014-03-06

Release 2.0.3 includes support for 1.4.4's 2I regexp feature and fixes
a few bugs:

* Docs generation now uses the version from the top-level package.
* Some internal uses of the deprecated RiakClient.solr were removed.
* More errors will be caught and propagated properly from multiget
  requests, preventing deadlocks on the caller side.

## 2.0.2 Patch release - 2013-11-18

Release 2.0.2 includes support for the 1.4.1+ "timeout" option on
secondary index queries.

## 2.0.1 Patch release - 2013-08-28

Release 2.0.1 includes a minor compatibility fix for Python 2.6 and an
updated README.

## 2.0.0 Feature Release - 2013-07-30

Release 2.0 is the culmination of many months of rearchitecting the
client. Highlights:

* Automatic connection to multiple nodes, with request retries,
  through a thread-safe connection pool.
* All Riak 1.3 and 1.4 features, including bucket properties,
  paginating and streaming secondary indexes, CRDT counters,
  client-specified timeouts, and more.
* Cleaner, more Pythonic access to RiakObject and RiakBucket
  attributes, favoring properties over methods where possible.
* Simpler representations of links (3-tuples) and index entries
  (2-tuples).
* Streaming requests (keys, buckets, MapReduce, 2i) are now exposed as
  iterators.
* Feature detection prevents sending requests to hosts that can't
  handle them.
* Better handling of siblings -- you don't have to request them
  individually anymore -- and registrable resolver functions.
* A new `multiget` operation that fetches a collection of keys using
  a pool background threads.
* A more resilient, repeatable test suite that generates buckets and
  key names that are essentially random.
* Last but not least, a brand new, more detailed documentation site!

Other features:

* Added an encoder/decoder pair to support `text/plain`.
* The Travis CI build will now install the latest Riak to run the
  suite against.

Other bugfixes:

* The `charset` metadata can now be received via the `Content-Type`
  header on HTTP.
* Objects with empty keys and buckets with empty names cannot be
  created or accessed, as they are unaddressable over HTTP.
* Performance and compatibility of `TestServer` was improved.
* Non-ASCII request bodies are better supported on HTTP.
* Enabling and disabling search indexing on a bucket now uses the
  `search` bucket property.

## 1.5.2 Patch Release - 2013-01-31

Release 1.5.2 fixes some bugs and adds HTTPS/SSL support.

* Added support for HTTPS.
* Fixed writing of the `app.config` for the `TestServer`.
* Reorganized the tests into multiple files and cases.
* Some methods on `RiakObject` were made private where appropriate.
* The version comparison used in feature detection was loosened to
  support pre-release versions of Riak.
* Prevent fetching the `protobuf` package from Google Code.
* Prefer `simplejson` over `json` when present.

## 1.5.1 Patch Release - 2012-10-24

Release 1.5.1 fixes one bug and some documentation errors.

* Fix bug where `http_status` is used instead of `http_code`.
* Fix documentation of `RiakMapReduce.index` method.
* Fix documentation of `RiakClient.__init__` method.

## 1.5.0 Feature Release - 2012-08-29

Release 1.5.0 is a feature release that supports Riak 1.2.

Noteworthy features:

* Riak 1.2 features are now supported, including Search and 2I queries
  over Protocol Buffers transport. The Protocol Buffers message
  definitions now exist as a separate package, available on
  [PyPi](http://pypi.python.org/pypi/riak_pb/1.2.0).

  **NOTE:** The return value of search queries over HTTP and MapReduce
  were changed to be compatible with the results returned from the
  Protocol Buffers interface.
* The client will use a version-based feature detection scheme to
  enable or disable various features, including the new Riak 1.2
  features. This enables compatibility with older nodes during a
  rolling upgrade, or usage of the newer client with older clusters.

Noteworthy bugfixes:

* The code formatting and style was adjusted to fit PEP8 standards.
* All classes in the package are now "new-style".
* The PW accessor methods on RiakClient now get and set the right
  instance variable.
* Various fixes were made to the TestServer and it will throw an
  exception when it fails to start.

## 1.4.1 Patch Release - 2012-06-19

Noteworthy features:

* New Riak objects support Riak-created random keys

Noteworthy bugfixes:

* Map Reduce queries now use "application/json" as the Content-Type

## 1.4.0 Feature Release - 2012-03-30

Release 1.4.0 is a feature release comprising over 117 individual
commits.

Noteworthy features:

* Python 2.6 and 2.7 are supported. On 2.6, the unittest2 package is
  required to run the test suite.
* Google's official protobuf package (2.4.1 or later) is now a
  dependency. The package from downloads.basho.com/support is no
  longer necessary.
* Travis-CI is enabled on the client. Go to
  http://travis-ci.org/basho/riak-python-client for build status.
* Riak 1.0+ features, namely secondary indexes and primary quora
  (PR/PW), are supported.
* `if_none_match` is a valid request option when storing objects, and
  will prevent the write when set to `True` if the key already exists.
* Links can be set wholesale using the `set_links()` method.
* Transport-specific options can be passed through when creating a
  `Client` object.
* A connection manager was added that will (when manipulated manually)
  allow connections to multiple Riak nodes. This will be fully
  integrated in a future release.

Noteworthy bugfixes:

* Links now use the proper URL-encoding in HTTP headers, preventing
  problems with explosion from multiple encoding passes.
* Many fixes were applied to make the Protocol Buffers transport more
  stable.
* `RiakObject.get_content_type()` will behave properly when content
  type is not set.
* Deprecated transport classes were removed since their functionality
  had folded into the primary transports.
* A temporary fix was made for unicode bucket/key names which raises
  an error when they are used and cannot be coerced to ASCII.
* The Erlang sources/beams for the TestServer are now included in the
  package.
* MapReduce failures will now produce a more useful error message and
  be handled properly when no results are returned.

There are lots of other great fixes from our wonderful
community. [Check them out!](https://github.com/basho/riak-python-client/compare/1.3.0...1.4.0)

## 1.3.0 Feature Release - 2011-08-04

Release 1.3.0 is a feature release bringing a slew of updates.

Noteworthy features:

* #37: Support for the Riak Search HTTP Interface (Mathias Meyer)
* #36: Support to store large files in Luwak (Mathias Meyer)
* #35: Convenience methods to enable, disable and check search indexing
       on Riak buckets (Mathias Meyer)
* #34: Port of Ripple's test server to Python, allows faster testing
       thanks to an in-memory Riak instance (Mathias Meyer)
* #31: New transports: A Protocol Buffers connection cache
       (riak.transports.pbc.RiakPbcCacheTransport), a transport to reuse the
       underlying TCP connections by setting SO_REUSEADDR on the socket
       (riak.transports.http.RiakHttpReuseTransport), and one that tries to
       reuse connections to the same host (riak.transports.http.RiakHttpPoolTransport)
       (Gilles Devaux)

Fixes:

* #33: Respect maximum link header size when using HTTP. Link header is now
       split up into multiple headers when it exceeds the maximum size of 8192 bytes.
       (Mathias Meyer)
* #41: Connections potentially not returned to the protocol buffers connection
       pool. (Reid Draper)
* #42: Reset protocol buffer connection up on connection error (Brett Hoerner)

## 1.2.2 Patch Release - 2011-06-22

Release 1.2.2 is a minor patch release.

Noteworthy fixes and improvements:

* #29: Add an nicer API for using key filters with MapReduce (Eric Moritz)
* #13 and #24: Let Riak generate a key when none is specified (Mark Erdmann)
* #28: Function aliases for the Riak built-in MapReduce functions (Eric Moritz)
* #20: Add a convenience method to create Riak object directly from file (Ana Nelson)
* #16: Support return\_body parameter when creating a new object (Stefan Praszalowicz, Andy Gross)
* #17: Storing an object fails when it doesn't exist in Riak (Eric Moritz, Andy Gross)
* #18: Ensure that a default content type is set when none specified (Andy Gross)
* #22: Fix user meta data support (Mathias Meyer)
* #23: Fix links to the wiki (Mikhail Sobolev)
* #25: Enable support for code coverage when running tests (Mikhail Sobolev)
* #26: Debian packaging (Dmitry Rozhkov)
