Release 0.7.0
This commit is contained in:
parent
4d7ca3a450
commit
0279b3d69f
|
@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [0.7.0] - 2018-05-26
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
* PyPy support by omerbenamram in [#393](https://github.com/PyO3/pyo3/pull/393)
|
* PyPy support by omerbenamram in [#393](https://github.com/PyO3/pyo3/pull/393)
|
||||||
|
@ -289,7 +291,8 @@ Yanked
|
||||||
|
|
||||||
* Initial release
|
* Initial release
|
||||||
|
|
||||||
[Unreleased]: https://github.com/pyo3/pyo3/compare/v0.6.0...HEAD
|
[Unreleased]: https://github.com/pyo3/pyo3/compare/v0.7.0...HEAD
|
||||||
|
[0.7.0]: https://github.com/pyo3/pyo3/compare/v0.6.0...v0.7.0
|
||||||
[0.6.0]: https://github.com/pyo3/pyo3/compare/v0.5.3...v0.6.0
|
[0.6.0]: https://github.com/pyo3/pyo3/compare/v0.5.3...v0.6.0
|
||||||
[0.5.3]: https://github.com/pyo3/pyo3/compare/v0.5.2...v0.5.3
|
[0.5.3]: https://github.com/pyo3/pyo3/compare/v0.5.2...v0.5.3
|
||||||
[0.5.2]: https://github.com/pyo3/pyo3/compare/v0.5.0...v0.5.2
|
[0.5.2]: https://github.com/pyo3/pyo3/compare/v0.5.0...v0.5.2
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "pyo3"
|
name = "pyo3"
|
||||||
version = "0.7.0-alpha.1"
|
version = "0.7.0"
|
||||||
description = "Bindings to Python interpreter"
|
description = "Bindings to Python interpreter"
|
||||||
authors = ["PyO3 Project and Contributors <https://github.com/PyO3>"]
|
authors = ["PyO3 Project and Contributors <https://github.com/PyO3>"]
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
|
@ -22,7 +22,7 @@ appveyor = { repository = "fafhrd91/pyo3" }
|
||||||
libc = "0.2.53"
|
libc = "0.2.53"
|
||||||
spin = "0.5.0"
|
spin = "0.5.0"
|
||||||
num-traits = "0.2.6"
|
num-traits = "0.2.6"
|
||||||
pyo3cls = { path = "pyo3cls", version = "=0.7.0-alpha.1" }
|
pyo3cls = { path = "pyo3cls", version = "=0.7.0" }
|
||||||
mashup = "0.1.9"
|
mashup = "0.1.9"
|
||||||
num-complex = { version = "0.2.1", optional = true }
|
num-complex = { version = "0.2.1", optional = true }
|
||||||
inventory = "0.1.3"
|
inventory = "0.1.3"
|
||||||
|
|
|
@ -46,7 +46,7 @@ name = "string_sum"
|
||||||
crate-type = ["cdylib"]
|
crate-type = ["cdylib"]
|
||||||
|
|
||||||
[dependencies.pyo3]
|
[dependencies.pyo3]
|
||||||
version = "0.7.0-alpha.1"
|
version = "0.7.0"
|
||||||
features = ["extension-module"]
|
features = ["extension-module"]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ Add `pyo3` to your `Cargo.toml` like this:
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
[dependencies]
|
[dependencies]
|
||||||
pyo3 = "0.7.0-alpha.1"
|
pyo3 = "0.7.0"
|
||||||
```
|
```
|
||||||
|
|
||||||
Example program displaying the value of `sys.version` and the current user name:
|
Example program displaying the value of `sys.version` and the current user name:
|
||||||
|
|
|
@ -12,7 +12,7 @@ Currently, [#341](https://github.com/PyO3/pyo3/issues/341) causes `cargo test` t
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
[dependencies.pyo3]
|
[dependencies.pyo3]
|
||||||
version = "0.7.0-alpha.1"
|
version = "0.7.0"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
extension-module = ["pyo3/extension-module"]
|
extension-module = ["pyo3/extension-module"]
|
||||||
|
|
|
@ -475,7 +475,7 @@ each protocol implementation block has to be annotated with the `#[pyproto]` att
|
||||||
|
|
||||||
### Basic object customization
|
### Basic object customization
|
||||||
|
|
||||||
The [`PyObjectProtocol`](https://docs.rs/pyo3/0.7.0-alpha.1/pyo3/class/basic/trait.PyObjectProtocol.html) trait provides several basic customizations.
|
The [`PyObjectProtocol`](https://docs.rs/pyo3/0.7.0/pyo3/class/basic/trait.PyObjectProtocol.html) trait provides several basic customizations.
|
||||||
|
|
||||||
#### Attribute access
|
#### Attribute access
|
||||||
|
|
||||||
|
@ -529,7 +529,7 @@ Each method corresponds to Python's `self.attr`, `self.attr = value` and `del se
|
||||||
If your type owns references to other Python objects, you will need to
|
If your type owns references to other Python objects, you will need to
|
||||||
integrate with Python's garbage collector so that the GC is aware of
|
integrate with Python's garbage collector so that the GC is aware of
|
||||||
those references.
|
those references.
|
||||||
To do this, implement the [`PyGCProtocol`](https://docs.rs/pyo3/0.7.0-alpha.1/pyo3/class/gc/trait.PyGCProtocol.html) trait for your struct.
|
To do this, implement the [`PyGCProtocol`](https://docs.rs/pyo3/0.7.0/pyo3/class/gc/trait.PyGCProtocol.html) trait for your struct.
|
||||||
It includes two methods `__traverse__` and `__clear__`.
|
It includes two methods `__traverse__` and `__clear__`.
|
||||||
These correspond to the slots `tp_traverse` and `tp_clear` in the Python C API.
|
These correspond to the slots `tp_traverse` and `tp_clear` in the Python C API.
|
||||||
`__traverse__` must call `visit.call()` for each reference to another Python object.
|
`__traverse__` must call `visit.call()` for each reference to another Python object.
|
||||||
|
@ -578,7 +578,7 @@ collection, and it is possible to track them with `gc` module methods.
|
||||||
### Iterator Types
|
### Iterator Types
|
||||||
|
|
||||||
Iterators can be defined using the
|
Iterators can be defined using the
|
||||||
[`PyIterProtocol`](https://docs.rs/pyo3/0.7.0-alpha.1/pyo3/class/iter/trait.PyIterProtocol.html) trait.
|
[`PyIterProtocol`](https://docs.rs/pyo3/0.7.0/pyo3/class/iter/trait.PyIterProtocol.html) trait.
|
||||||
It includes two methods `__iter__` and `__next__`:
|
It includes two methods `__iter__` and `__next__`:
|
||||||
* `fn __iter__(slf: PyRefMut<Self>) -> PyResult<impl IntoPyObject>`
|
* `fn __iter__(slf: PyRefMut<Self>) -> PyResult<impl IntoPyObject>`
|
||||||
* `fn __next__(slf: PyRefMut<Self>) -> PyResult<Option<impl IntoPyObject>>`
|
* `fn __next__(slf: PyRefMut<Self>) -> PyResult<Option<impl IntoPyObject>>`
|
||||||
|
|
|
@ -106,9 +106,9 @@ Many conversions in PyO3 can't use `std::convert::Into` because they need a GIL
|
||||||
|
|
||||||
Eventually, traits such as `IntoPyObject` will be replaced by this trait and a `FromPy` trait will be added that will implement `IntoPy`, just like with `From` and `Into`.
|
Eventually, traits such as `IntoPyObject` will be replaced by this trait and a `FromPy` trait will be added that will implement `IntoPy`, just like with `From` and `Into`.
|
||||||
|
|
||||||
[`ToPyObject`]: https://docs.rs/pyo3/0.7.0-alpha.1/pyo3/trait.ToPyObject.html
|
[`ToPyObject`]: https://docs.rs/pyo3/0.7.0/pyo3/trait.ToPyObject.html
|
||||||
[IntoPyObject]: https://docs.rs/pyo3/0.7.0-alpha.1/pyo3/trait.IntoPyObject.html
|
[IntoPyObject]: https://docs.rs/pyo3/0.7.0/pyo3/trait.IntoPyObject.html
|
||||||
[PyObject]: https://docs.rs/pyo3/0.7.0-alpha.1/pyo3/struct.PyObject.html
|
[PyObject]: https://docs.rs/pyo3/0.7.0/pyo3/struct.PyObject.html
|
||||||
[PyTuple]: https://docs.rs/pyo3/0.7.0-alpha.1/pyo3/types/struct.PyTuple.html
|
[PyTuple]: https://docs.rs/pyo3/0.7.0/pyo3/types/struct.PyTuple.html
|
||||||
[ObjectProtocol]: https://docs.rs/pyo3/0.7.0-alpha.1/pyo3/trait.ObjectProtocol.html
|
[ObjectProtocol]: https://docs.rs/pyo3/0.7.0/pyo3/trait.ObjectProtocol.html
|
||||||
[IntoPyDict]: https://docs.rs/pyo3/0.7.0-alpha.1/pyo3/types/trait.IntoPyDict.html
|
[IntoPyDict]: https://docs.rs/pyo3/0.7.0/pyo3/types/trait.IntoPyDict.html
|
||||||
|
|
|
@ -35,7 +35,7 @@ fn main() {
|
||||||
|
|
||||||
## Raise an exception
|
## Raise an exception
|
||||||
|
|
||||||
To raise an exception, first you need to obtain an exception type and construct a new [`PyErr`](https://docs.rs/pyo3/0.7.0-alpha.1/pyo3/struct.PyErr.html), then call the [`PyErr::restore()`](https://docs.rs/pyo3/0.7.0-alpha.1/pyo3/struct.PyErr.html#method.restore) method to write the exception back to the Python interpreter's global state.
|
To raise an exception, first you need to obtain an exception type and construct a new [`PyErr`](https://docs.rs/pyo3/0.7.0/pyo3/struct.PyErr.html), then call the [`PyErr::restore()`](https://docs.rs/pyo3/0.7.0/pyo3/struct.PyErr.html#method.restore) method to write the exception back to the Python interpreter's global state.
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
use pyo3::{Python, PyErr};
|
use pyo3::{Python, PyErr};
|
||||||
|
@ -50,7 +50,7 @@ fn main() {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
If you already have a Python exception instance, you can simply call [`PyErr::from_instance()`](https://docs.rs/pyo3/0.7.0-alpha.1/pyo3/struct.PyErr.html#method.from_instance).
|
If you already have a Python exception instance, you can simply call [`PyErr::from_instance()`](https://docs.rs/pyo3/0.7.0/pyo3/struct.PyErr.html#method.from_instance).
|
||||||
|
|
||||||
```rust,ignore
|
```rust,ignore
|
||||||
PyErr::from_instance(py, err).restore(py);
|
PyErr::from_instance(py, err).restore(py);
|
||||||
|
@ -77,7 +77,7 @@ fn my_func(arg: PyObject) -> PyResult<()> {
|
||||||
## Check exception type
|
## Check exception type
|
||||||
|
|
||||||
Python has an [`isinstance`](https://docs.python.org/3/library/functions.html#isinstance) method to check an object's type,
|
Python has an [`isinstance`](https://docs.python.org/3/library/functions.html#isinstance) method to check an object's type,
|
||||||
in PyO3 there is a [`Python::is_instance()`](https://docs.rs/pyo3/0.7.0-alpha.1/pyo3/struct.Python.html#method.is_instance) method which does the same thing.
|
in PyO3 there is a [`Python::is_instance()`](https://docs.rs/pyo3/0.7.0/pyo3/struct.Python.html#method.is_instance) method which does the same thing.
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
use pyo3::Python;
|
use pyo3::Python;
|
||||||
|
@ -93,7 +93,7 @@ fn main() {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
[`Python::is_instance()`](https://docs.rs/pyo3/0.7.0-alpha.1/pyo3/struct.Python.html#method.is_instance) calls the underlying [`PyType::is_instance`](https://docs.rs/pyo3/0.7.0-alpha.1/pyo3/types/struct.PyType.html#method.is_instance) method to do the actual work.
|
[`Python::is_instance()`](https://docs.rs/pyo3/0.7.0/pyo3/struct.Python.html#method.is_instance) calls the underlying [`PyType::is_instance`](https://docs.rs/pyo3/0.7.0/pyo3/types/struct.PyType.html#method.is_instance) method to do the actual work.
|
||||||
|
|
||||||
To check the type of an exception, you can simply do:
|
To check the type of an exception, you can simply do:
|
||||||
|
|
||||||
|
@ -110,10 +110,10 @@ err.is_instance::<exceptions::TypeError>(py);
|
||||||
|
|
||||||
## Handle Rust Errors
|
## Handle Rust Errors
|
||||||
|
|
||||||
The vast majority of operations in this library will return [`PyResult<T>`](https://docs.rs/pyo3/0.7.0-alpha.1/pyo3/prelude/type.PyResult.html).
|
The vast majority of operations in this library will return [`PyResult<T>`](https://docs.rs/pyo3/0.7.0/pyo3/prelude/type.PyResult.html).
|
||||||
This is an alias for the type `Result<T, PyErr>`.
|
This is an alias for the type `Result<T, PyErr>`.
|
||||||
|
|
||||||
A [`PyErr`](https://docs.rs/pyo3/0.7.0-alpha.1/pyo3/struct.PyErr.html) represents a Python exception.
|
A [`PyErr`](https://docs.rs/pyo3/0.7.0/pyo3/struct.PyErr.html) represents a Python exception.
|
||||||
Errors within the PyO3 library are also exposed as Python exceptions.
|
Errors within the PyO3 library are also exposed as Python exceptions.
|
||||||
|
|
||||||
The PyO3 library handles Python exceptions in two stages. During the first stage, a `PyErr` instance is
|
The PyO3 library handles Python exceptions in two stages. During the first stage, a `PyErr` instance is
|
||||||
|
@ -124,7 +124,7 @@ In simple cases, for custom errors adding an implementation of `std::convert::Fr
|
||||||
for this custom error is enough. `PyErr::new` accepts an argument in the form
|
for this custom error is enough. `PyErr::new` accepts an argument in the form
|
||||||
of `ToPyObject + 'static`. If the `'static` constraint can not be satisfied or
|
of `ToPyObject + 'static`. If the `'static` constraint can not be satisfied or
|
||||||
more complex arguments are required, the
|
more complex arguments are required, the
|
||||||
[`PyErrArguments`](https://docs.rs/pyo3/0.7.0-alpha.1/pyo3/trait.PyErrArguments.html)
|
[`PyErrArguments`](https://docs.rs/pyo3/0.7.0/pyo3/trait.PyErrArguments.html)
|
||||||
trait can be implemented. In that case, actual exception argument creation is delayed
|
trait can be implemented. In that case, actual exception argument creation is delayed
|
||||||
until a `Python` object is available.
|
until a `Python` object is available.
|
||||||
|
|
||||||
|
@ -186,5 +186,5 @@ fn tell(file: PyObject) -> PyResult<u64> {
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
[`pyo3::exceptions`](https://docs.rs/pyo3/0.7.0-alpha.1/pyo3/exceptions/index.html)
|
[`pyo3::exceptions`](https://docs.rs/pyo3/0.7.0/pyo3/exceptions/index.html)
|
||||||
defines exceptions for several standard library modules.
|
defines exceptions for several standard library modules.
|
||||||
|
|
|
@ -40,7 +40,7 @@ name = "string_sum"
|
||||||
crate-type = ["cdylib"]
|
crate-type = ["cdylib"]
|
||||||
|
|
||||||
[dependencies.pyo3]
|
[dependencies.pyo3]
|
||||||
version = "0.7.0-alpha.1"
|
version = "0.7.0"
|
||||||
features = ["extension-module"]
|
features = ["extension-module"]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ Add `pyo3` to your `Cargo.toml` like this:
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
[dependencies]
|
[dependencies]
|
||||||
pyo3 = "0.7.0-alpha.1"
|
pyo3 = "0.7.0"
|
||||||
```
|
```
|
||||||
|
|
||||||
Example program displaying the value of `sys.version` and the current user name:
|
Example program displaying the value of `sys.version` and the current user name:
|
||||||
|
|
|
@ -4,7 +4,7 @@ CPython has the infamous GIL (Global Interpreter Lock), which prevents developer
|
||||||
from getting true parallelism when running pure Python code. With PyO3, you can
|
from getting true parallelism when running pure Python code. With PyO3, you can
|
||||||
release the GIL when executing Rust code to achieve true parallelism.
|
release the GIL when executing Rust code to achieve true parallelism.
|
||||||
|
|
||||||
The [`Python::allow_threads`](https://docs.rs/pyo3/0.7.0-alpha.1/pyo3/struct.Python.html#method.allow_threads)
|
The [`Python::allow_threads`](https://docs.rs/pyo3/0.7.0/pyo3/struct.Python.html#method.allow_threads)
|
||||||
method temporarily releases the GIL, thus allowing other Python threads to run.
|
method temporarily releases the GIL, thus allowing other Python threads to run.
|
||||||
|
|
||||||
```rust,ignore
|
```rust,ignore
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "pyo3-derive-backend"
|
name = "pyo3-derive-backend"
|
||||||
version = "0.7.0-alpha.1"
|
version = "0.7.0"
|
||||||
description = "Code generation for PyO3 package"
|
description = "Code generation for PyO3 package"
|
||||||
authors = ["PyO3 Project and Contributors <https://github.com/PyO3>"]
|
authors = ["PyO3 Project and Contributors <https://github.com/PyO3>"]
|
||||||
keywords = ["pyo3", "python", "cpython", "ffi"]
|
keywords = ["pyo3", "python", "cpython", "ffi"]
|
||||||
|
@ -12,5 +12,5 @@ edition = "2018"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
quote = "0.6.12"
|
quote = "0.6.12"
|
||||||
proc-macro2 = "0.4.28"
|
proc-macro2 = "0.4.30"
|
||||||
syn = { version = "0.15.33", features = ["full", "extra-traits"] }
|
syn = { version = "0.15.34", features = ["full", "extra-traits"] }
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "pyo3cls"
|
name = "pyo3cls"
|
||||||
version = "0.7.0-alpha.1"
|
version = "0.7.0"
|
||||||
description = "Proc macros for PyO3 package"
|
description = "Proc macros for PyO3 package"
|
||||||
authors = ["PyO3 Project and Contributors <https://github.com/PyO3>"]
|
authors = ["PyO3 Project and Contributors <https://github.com/PyO3>"]
|
||||||
keywords = ["pyo3", "python", "cpython", "ffi"]
|
keywords = ["pyo3", "python", "cpython", "ffi"]
|
||||||
|
@ -14,7 +14,7 @@ edition = "2018"
|
||||||
proc-macro = true
|
proc-macro = true
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
quote= "0.6.9"
|
quote= "0.6.12"
|
||||||
proc-macro2 = "0.4.20"
|
proc-macro2 = "0.4.30"
|
||||||
syn = { version = "0.15.15", features = ["full", "extra-traits"] }
|
syn = { version = "0.15.34", features = ["full", "extra-traits"] }
|
||||||
pyo3-derive-backend = { path = "../pyo3-derive-backend", version = "=0.7.0-alpha.1" }
|
pyo3-derive-backend = { path = "../pyo3-derive-backend", version = "=0.7.0" }
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
//! crate-type = ["cdylib"]
|
//! crate-type = ["cdylib"]
|
||||||
//!
|
//!
|
||||||
//! [dependencies.pyo3]
|
//! [dependencies.pyo3]
|
||||||
//! version = "0.7.0-alpha.1"
|
//! version = "0.7.0"
|
||||||
//! features = ["extension-module"]
|
//! features = ["extension-module"]
|
||||||
//! ```
|
//! ```
|
||||||
//!
|
//!
|
||||||
|
@ -93,7 +93,7 @@
|
||||||
//!
|
//!
|
||||||
//! ```toml
|
//! ```toml
|
||||||
//! [dependencies]
|
//! [dependencies]
|
||||||
//! pyo3 = "0.7.0-alpha.1"
|
//! pyo3 = "0.7.0"
|
||||||
//! ```
|
//! ```
|
||||||
//!
|
//!
|
||||||
//! Example program displaying the value of `sys.version`:
|
//! Example program displaying the value of `sys.version`:
|
||||||
|
|
Loading…
Reference in New Issue