Skip to content

Commit 46907c7

Browse files
committed
Bump version to 0.8.0
1 parent 089a228 commit 46907c7

File tree

4 files changed

+196
-2
lines changed

4 files changed

+196
-2
lines changed

CHANGELOG.md

+8
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
66

77
## Unreleased
88

9+
### Added
10+
11+
### Changed
12+
13+
### Fixed
14+
15+
## 0.8.0 - 2022-04-29
16+
917
### Added
1018
- Reusable testing workflow for integration with tarantool artifacts
1119
(PR #192).

debian/changelog

+186
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,189 @@
1+
tarantool-python (0.8.0-0) unstable; urgency=medium
2+
3+
## Overview
4+
5+
The most interesting feature offered by this release is connection pool with
6+
automatic master discovery support.
7+
8+
Consider a simple example.
9+
10+
In tarantool:
11+
12+
```lua
13+
#!/usr/bin/env tarantool
14+
15+
box.cfg({listen = os.getenv('LISTEN') or 3301})
16+
box.once('init', function()
17+
-- Connection pool calls box.info() to monitor tarantool
18+
-- instances.
19+
box.schema.func.create('box.info')
20+
box.schema.user.grant('guest', 'execute', 'function', 'box.info')
21+
22+
box.schema.space.create('s')
23+
box.space.s:create_index('pk')
24+
box.schema.user.grant('guest', 'read,write', 'space', 's')
25+
26+
box.schema.func.create('foo')
27+
box.schema.user.grant('guest', 'execute', 'function', 'foo')
28+
end)
29+
30+
-- Do a write request.
31+
local function foo(tuple)
32+
box.space.s:replace(tuple)
33+
end
34+
_G.foo = foo
35+
```
36+
37+
In Python:
38+
39+
```python
40+
#!/usr/bin/env python
41+
42+
import tarantool
43+
44+
# Create a connection pool.
45+
pool = tarantool.ConnectionPool(addrs=[
46+
{'host': '127.0.0.1', 'port': 3301},
47+
{'host': '127.0.0.1', 'port': 3302},
48+
])
49+
50+
# Use the space API.
51+
pool.replace('s', [1, 2, 3])
52+
tuple = pool.select('s', [1])
53+
54+
# Call a function.
55+
pool.call('foo', [[1, 2, 3]], mode=tarantool.Mode.RW)
56+
```
57+
58+
This release also provides more natural mapping of msgpack string/binary types
59+
into Python string/binary types. Now `string` in tarantool is marshalled
60+
from/to `str` in Python and `varbinary` in tarantool` is marshalled from/to
61+
`bytes` in Python. See details below.
62+
63+
## Breaking changes
64+
65+
This release keeps existing APIs the same, but there are important
66+
string/binary marshalling changes and Python 2 tear down. We expect that most
67+
of existing code will not require any changes, but, please, take a look on the
68+
information below.
69+
70+
`MeshConnection` is now considered as deprecated in favor of the newly
71+
introduced `ConnectionPool`. We will remove `MeshConnection` in one of future
72+
releases.
73+
74+
Python 2 support was dropped. We test the connector since Python 3.5 to 3.10.
75+
The new connection pool requires Python 3.7 or newer.
76+
77+
Msgpack string/binary types mapping from/to Python types was changed. The
78+
behaviour is the following.
79+
80+
**tarantool-python 0.7.1 and older:**
81+
82+
* `encoding='utf-8'` (default)
83+
84+
| Python 3 | -> | Tarantool | -> | Python 3 |
85+
|----------|----|--------------------|----|----------|
86+
| str | -> | mp_str (string) | -> | str |
87+
| bytes | -> | mp_str (string) | -> | str |
88+
| | | mp_bin (varbinary) | -> | bytes |
89+
90+
* `encoding=None`
91+
92+
| Python 3 | -> | Tarantool | -> | Python 3 |
93+
|----------|----|--------------------|----|----------|
94+
| bytes | -> | mp_str (string) | -> | bytes |
95+
| str | -> | mp_str (string) | -> | bytes |
96+
| | | mp_bin (varbinary) | -> | bytes |
97+
98+
**tarantool-python 0.8.0 and newer:**
99+
100+
* `encoding='utf-8'` (default)
101+
102+
| Python 3 | -> | Tarantool | -> | Python 3 |
103+
|----------|----|--------------------|----|----------|
104+
| str | -> | mp_str (string) | -> | str |
105+
| bytes | -> | mp_bin (varbinary) | -> | bytes |
106+
107+
* `encoding=None`
108+
109+
| Python 3 | -> | Tarantool | -> | Python 3 |
110+
|----------|----|--------------------|----|----------|
111+
| bytes | -> | mp_str (string) | -> | bytes |
112+
| str | -> | mp_str (string) | -> | bytes |
113+
| | | mp_bin (varbinary) | -> | bytes |
114+
115+
If you use `varbinary` for storing binary data (and `string` for ASCII or
116+
UTF-8 texts), default `encoding='utf-8'` mode should work fine.
117+
118+
If binary data is stored in `string` fields, consider `encoding=None`
119+
parameter.
120+
121+
## New features
122+
123+
- Connection pool with master discovery (#196, PR #207).
124+
125+
`ConnectionPool` is supported only for Python 3.7 or newer.
126+
127+
Authenticated user must be able to call `box.info` on instances.
128+
129+
`ConnectionPool` updates information about each server state (RO/RW) on
130+
initial connect and then asynchronously in separate threads. Application
131+
retries must be written considering the asynchronous nature of cluster state
132+
refresh. User does not need to use any synchronization mechanisms in
133+
requests, it's all handled with `ConnectionPool` methods.
134+
135+
`ConnectionPool` API is the same as a plain Connection API. On each request,
136+
a connection is chosen to execute this request. A connection is chosen based
137+
on a request mode:
138+
139+
* `Mode.ANY` chooses any instance.
140+
* `Mode.RW` chooses an RW instance.
141+
* `Mode.RO` chooses an RO instance.
142+
* `Mode.PREFER_RW` chooses an RW instance, if possible, RO instance
143+
otherwise.
144+
* `Mode.PREFER_RO` chooses an RO instance, if possible, RW instance
145+
otherwise.
146+
147+
`insert`, `replace`, `delete`, `upsert`, `update` use RW mode by default.
148+
149+
`select` uses ANY by default.
150+
151+
`call`, `eval`, `execute` and `ping` require to set the mode explicitly.
152+
- **[Breaking]** `varbinary` field type is now fully supported and does not
153+
fail on decoding of non-UTF-8 data (#105, PR #211).
154+
155+
It requires incompatible binary/string marshalling changes. See the
156+
'Breaking changes' section for details.
157+
- Support a value of `bytes` type as a key for `delete`, `update`, `select`
158+
(#105, PR #211).
159+
160+
Now `bytes` can be used as keys in all methods.
161+
162+
## Bugfixes
163+
164+
- Hold string representation of a response object (PR #186).
165+
166+
We want to keep it the same for different Python versions. It sometimes
167+
useful for writing tests using the connector.
168+
- Unix sockets in `MeshConnection` are now supported (#111, PR #189).
169+
170+
It was supported in 0.6.5, but broken then in 0.6.6.
171+
172+
## Testing
173+
174+
- Migrated CI to GitHub Actions (#182, PR #213, PR #216).
175+
- Added a workflow for integration testing of tarantool's changes against this
176+
connector (PR #192).
177+
- Dropped test-run submodule (#111, PR #189).
178+
- Run SQL tests only on tarantool 2.X (#194, PR #195).
179+
180+
## Other
181+
182+
- Fixed formatting and wording in README (PR #215).
183+
- Clarified license of the project (BSD-2-Clause) (#197, PR #210).
184+
185+
-- Alexander Turenko <[email protected]> Fri, 29 Apr 2022 22:30:00 +0300
186+
1187
tarantool-python (0.7.1-0) unstable; urgency=medium
2188

3189
## Overview

rpm/tarantool-python.spec

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Summary: Python client library for Tarantool Database
22
Name: tarantool-python
3-
Version: 0.7.1
3+
Version: 0.8.0
44
Release: 1%{?dist}
55
Source0: tarantool-python-%{version}.tar.gz
66
License: BSD

tarantool/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
ENCODING_DEFAULT
2828
)
2929

30-
__version__ = "0.7.1"
30+
__version__ = "0.8.0"
3131

3232

3333
def connect(host="localhost", port=33013, user=None, password=None,

0 commit comments

Comments
 (0)