2018-05-30 13:03:31 +00:00
# Changelog
2018-07-30 20:52:22 +00:00
All notable changes to this project will be documented in this file.
2017-07-24 19:19:05 +00:00
2018-07-30 20:52:22 +00:00
The format is based on [Keep a Changelog ](http://keepachangelog.com/en/1.0.0/ )
and this project adheres to [Semantic Versioning ](http://semver.org/spec/v2.0.0.html ).
2020-05-08 09:39:40 +00:00
## [Unreleased]
2020-07-04 14:02:36 +00:00
### Added
- Add FFI definitions `Py_FinalizeEx` , `PyOS_getsig` , `PyOS_setsig` . [#1021 ](https://github.com/PyO3/pyo3/pull/1021 )
2020-07-13 21:37:40 +00:00
- Add `Python::with_gil` for executing a closure with the Python GIL. [#1037 ](https://github.com/PyO3/pyo3/pull/1037 )
2020-07-18 08:24:15 +00:00
- Implement `Debug` for `PyIterator` . [#1051 ](https://github.com/PyO3/pyo3/pull/1051 )
2020-07-19 08:44:25 +00:00
- Implement type information for conversion failures. [#1050 ](https://github.com/PyO3/pyo3/pull/1050 )
2020-08-03 08:04:06 +00:00
- Add `PyBytes::new_with` and `PyByteArray::new_with` for initialising Python-allocated bytes and bytearrays using a closure. [#1074 ](https://github.com/PyO3/pyo3/pull/1074 )
2020-07-04 14:02:36 +00:00
### Changed
2020-07-04 15:55:26 +00:00
- Exception types have been renamed from e.g. `RuntimeError` to `PyRuntimeError` , and are now only accessible by `&T` or `Py<T>` similar to other Python-native types. The old names continue to exist but are deprecated. [#1024 ](https://github.com/PyO3/pyo3/pull/1024 )
2020-07-09 08:29:10 +00:00
- Correct FFI definitions `Py_SetProgramName` and `Py_SetPythonHome` to take `*const` argument instead of `*mut` . [#1021 ](https://github.com/PyO3/pyo3/pull/1021 )
2020-07-09 08:32:58 +00:00
- Rename `PyString::to_string` to `to_str` , change return type `Cow<str>` to `&str` . [#1023 ](https://github.com/PyO3/pyo3/pull/1023 )
2020-07-09 08:29:10 +00:00
- Correct FFI definition `_PyLong_AsByteArray` `*mut c_uchar` argument instead of `*const c_uchar` . [#1029 ](https://github.com/PyO3/pyo3/pull/1029 )
2020-07-13 21:38:02 +00:00
- Add `T: Send` bound to the return value of `Python::allow_threads` . [#1036 ](https://github.com/PyO3/pyo3/pull/1036 )
2020-07-13 21:38:45 +00:00
- Rename `PYTHON_SYS_EXECUTABLE` to `PYO3_PYTHON` . The old name will continue to work but will be undocumented, and will be removed in a future release. [#1039 ](https://github.com/PyO3/pyo3/pull/1039 )
2020-07-17 17:08:14 +00:00
- `PyType::as_type_ptr` is no longer `unsafe` . [#1047 ](https://github.com/PyO3/pyo3/pull/1047 )
2020-07-18 08:24:15 +00:00
- Change `PyIterator::from_object` to return `PyResult<PyIterator>` instead of `Result<PyIterator, PyDowncastError>` . [#1051 ](https://github.com/PyO3/pyo3/pull/1051 )
2020-07-24 08:05:16 +00:00
- Implement `Send + Sync` for `PyErr` . `PyErr::new` , `PyErr::from_type` , `PyException::py_err` and `PyException::into` have had these bounds added to their arguments. [#1067 ](https://github.com/PyO3/pyo3/pull/1067 )
2020-08-05 13:53:16 +00:00
- Change `#[pyproto]` to return NotImplemented for operators for which Python can try a reversed operation. [1072 ](https://github.com/PyO3/pyo3/pull/1072 )
2020-07-09 08:32:58 +00:00
### Removed
- Remove `PyString::as_bytes` . [#1023 ](https://github.com/PyO3/pyo3/pull/1023 )
- Remove `Python::register_any` . [#1023 ](https://github.com/PyO3/pyo3/pull/1023 )
2020-07-13 21:38:02 +00:00
- Remove `GILGuard::acquire` from the public API. Use `Python::acquire_gil` or `Python::with_gil` . [#1036 ](https://github.com/PyO3/pyo3/pull/1036 )
2020-06-30 05:53:55 +00:00
2020-07-09 07:43:56 +00:00
### Fixed
- Conversion from types with an `__index__` method to Rust BigInts. [#1027 ](https://github.com/PyO3/pyo3/pull/1027 )
2020-07-20 17:09:43 +00:00
- Fix segfault with #[pyclass(dict, unsendable)] [#1058 ](https://github.com/PyO3/pyo3/pull/1058 )
2020-07-21 07:08:51 +00:00
- Don't rely on the order of structmembers to compute offsets in PyCell. Related to
[#1058 ](https://github.com/PyO3/pyo3/pull/1058 ). [#1059 ](https://github.com/PyO3/pyo3/pull/1059 )
2020-07-28 10:36:21 +00:00
- Allows `&Self` as a `#[pymethods]` argument again. [#1071 ](https://github.com/PyO3/pyo3/pull/1071 )
2020-08-08 07:55:08 +00:00
- Improve lifetime insertion in `#[pyproto]` . [#1093 ](https://github.com/PyO3/pyo3/pull/1093 )
2020-07-09 07:43:56 +00:00
2020-06-30 05:53:55 +00:00
## [0.11.1] - 2020-06-30
2020-06-29 03:05:50 +00:00
### Added
- `#[pyclass(unsendable)]` . [#1009 ](https://github.com/PyO3/pyo3/pull/1009 )
2020-06-21 09:06:27 +00:00
2020-06-29 21:26:21 +00:00
### Changed
- Update `parking_lot` dependency to `0.11` . [#1010 ](https://github.com/PyO3/pyo3/pull/1010 )
2020-06-21 23:01:05 +00:00
## [0.11.0] - 2020-06-28
2020-05-19 21:14:53 +00:00
### Added
2020-06-19 05:55:06 +00:00
- Support stable versions of Rust (>=1.39). [#969 ](https://github.com/PyO3/pyo3/pull/969 )
- Add FFI definition `PyObject_AsFileDescriptor` . [#938 ](https://github.com/PyO3/pyo3/pull/938 )
2020-06-08 02:18:13 +00:00
- Add `PyByteArray::data` , `PyByteArray::as_bytes` , and `PyByteArray::as_bytes_mut` . [#967 ](https://github.com/PyO3/pyo3/pull/967 )
2020-06-14 15:29:40 +00:00
- Add `GILOnceCell` to use in situations where `lazy_static` or `once_cell` can deadlock. [#975 ](https://github.com/PyO3/pyo3/pull/975 )
2020-06-14 21:36:07 +00:00
- Add `Py::borrow` , `Py::borrow_mut` , `Py::try_borrow` , and `Py::try_borrow_mut` for accessing `#[pyclass]` values. [#976 ](https://github.com/PyO3/pyo3/pull/976 )
2020-06-23 10:35:02 +00:00
- Add `IterNextOutput` and `IterANextOutput` for returning from `__next__` / `__anext__` . [#997 ](https://github.com/PyO3/pyo3/pull/997 )
2020-05-19 21:14:53 +00:00
2020-05-17 10:45:42 +00:00
### Changed
- Simplify internals of `#[pyo3(get)]` attribute. (Remove the hidden API `GetPropertyValue` .) [#934 ](https://github.com/PyO3/pyo3/pull/934 )
2020-05-23 19:58:46 +00:00
- Call `Py_Finalize` at exit to flush buffers, etc. [#943 ](https://github.com/PyO3/pyo3/pull/943 )
2020-06-05 08:48:43 +00:00
- Add type parameter to PyBuffer. #[951](https://github.com/PyO3/pyo3/pull/951)
2020-05-31 15:15:33 +00:00
- Require `Send` bound for `#[pyclass]` . [#966 ](https://github.com/PyO3/pyo3/pull/966 )
2020-06-10 07:46:39 +00:00
- Add `Python` argument to most methods on `PyObject` and `Py<T>` to ensure GIL safety. [#970 ](https://github.com/PyO3/pyo3/pull/970 )
- Change signature of `PyTypeObject::type_object()` - now takes `Python` argument and returns `&PyType` . [#970 ](https://github.com/PyO3/pyo3/pull/970 )
- Change return type of `PyTuple::slice()` and `PyTuple::split_from()` from `Py<PyTuple>` to `&PyTuple` . [#970 ](https://github.com/PyO3/pyo3/pull/970 )
2020-06-12 04:21:27 +00:00
- Change return type of `PyTuple::as_slice` to `&[&PyAny]` . [#971 ](https://github.com/PyO3/pyo3/pull/971 )
2020-06-14 15:29:40 +00:00
- Rename `PyTypeInfo::type_object` to `type_object_raw` , and add `Python` argument. [#975 ](https://github.com/PyO3/pyo3/pull/975 )
2020-06-15 19:14:56 +00:00
- Update `num-complex` optional dependendency from `0.2` to `0.3` . [#977 ](https://github.com/PyO3/pyo3/pull/977 )
- Update `num-bigint` optional dependendency from `0.2` to `0.3` . [#978 ](https://github.com/PyO3/pyo3/pull/978 )
2020-06-18 07:39:22 +00:00
- `#[pyproto]` is re-implemented without specialization. [#961 ](https://github.com/PyO3/pyo3/pull/961 )
2020-06-21 14:38:26 +00:00
- `PyClassAlloc::alloc` is renamed to `PyClassAlloc::new` . [#990 ](https://github.com/PyO3/pyo3/pull/990 )
2020-06-23 09:07:16 +00:00
- `#[pyproto]` methods can now have return value `T` or `PyResult<T>` (previously only `PyResult<T>` was supported). [#996 ](https://github.com/PyO3/pyo3/pull/996 )
2020-06-23 10:40:17 +00:00
- `#[pyproto]` methods can now skip annotating the return type if it is `()` . [#998 ](https://github.com/PyO3/pyo3/pull/998 )
2020-05-17 10:45:42 +00:00
2020-05-15 20:05:32 +00:00
### Removed
- Remove `ManagedPyRef` (unused, and needs specialization) [#930 ](https://github.com/PyO3/pyo3/pull/930 )
2020-05-14 11:50:33 +00:00
2020-05-17 18:17:24 +00:00
### Fixed
- Fix passing explicit `None` to `Option<T>` argument `#[pyfunction]` with a default value. [#936 ](https://github.com/PyO3/pyo3/pull/936 )
2020-06-21 17:38:08 +00:00
- Fix `PyClass.__new__` 's not respecting subclasses when inherited by a Python class. [#990 ](https://github.com/PyO3/pyo3/pull/990 )
2020-06-23 09:07:16 +00:00
- Fix returning `Option<T>` from `#[pyproto]` methods. [#996 ](https://github.com/PyO3/pyo3/pull/996 )
2020-06-23 14:19:20 +00:00
- Fix accepting `PyRef<Self>` and `PyRefMut<Self>` to `#[getter]` and `#[setter]` methods. [#999 ](https://github.com/PyO3/pyo3/pull/999 )
2020-05-17 18:17:24 +00:00
2020-05-15 08:01:23 +00:00
## [0.10.1] - 2020-05-14
2020-05-13 17:36:40 +00:00
### Fixed
- Fix deadlock in `Python::acquire_gil()` after dropping a `PyObject` or `Py<T>` . [#924 ](https://github.com/PyO3/pyo3/pull/924 )
2020-05-13 04:24:36 +00:00
2020-05-13 17:36:40 +00:00
## [0.10.0] - 2020-05-13
2020-04-09 04:33:51 +00:00
### Added
2020-05-13 04:24:36 +00:00
- Add FFI definition `_PyDict_NewPresized` . [#849 ](https://github.com/PyO3/pyo3/pull/849 )
- Implement `IntoPy<PyObject>` for `HashSet` and `BTreeSet` . [#864 ](https://github.com/PyO3/pyo3/pull/864 )
- Add `PyAny::dir` method. [#886 ](https://github.com/PyO3/pyo3/pull/886 )
- Gate macros behind a `macros` feature (enabled by default). [#897 ](https://github.com/PyO3/pyo3/pull/897 )
- Add ability to define class attributes using `#[classattr]` on functions in `#[pymethods]` . [#905 ](https://github.com/PyO3/pyo3/pull/905 )
- Implement `Clone` for `PyObject` and `Py<T>` . [#908 ](https://github.com/PyO3/pyo3/pull/908 )
- Implement `Deref<Target = PyAny>` for all builtin types. (`PyList`, `PyTuple` , `PyDict` etc.) [#911 ](https://github.com/PyO3/pyo3/pull/911 )
- Implement `Deref<Target = PyAny>` for `PyCell<T>` . [#911 ](https://github.com/PyO3/pyo3/pull/911 )
- Add `#[classattr]` support for associated constants in `#[pymethods]` . [#914 ](https://github.com/PyO3/pyo3/pull/914 )
2020-04-09 04:33:51 +00:00
2020-05-08 09:39:40 +00:00
### Changed
2020-05-13 04:24:36 +00:00
- Panics will now be raised as a Python `PanicException` . [#797 ](https://github.com/PyO3/pyo3/pull/797 )
- Change `PyObject` and `Py<T>` reference counts to decrement immediately upon drop when the GIL is held. [#851 ](https://github.com/PyO3/pyo3/pull/851 )
- Allow `PyIterProtocol` methods to use either `PyRef` or `PyRefMut` as the receiver type. [#856 ](https://github.com/PyO3/pyo3/pull/856 )
- Change the implementation of `FromPyObject` for `Py<T>` to apply to a wider range of `T` , including all `T: PyClass` . [#880 ](https://github.com/PyO3/pyo3/pull/880 )
- Move all methods from the `ObjectProtocol` trait to the `PyAny` struct. [#911 ](https://github.com/PyO3/pyo3/pull/911 )
- Remove need for `#![feature(specialization)]` in crates depending on PyO3. [#917 ](https://github.com/PyO3/pyo3/pull/917 )
2020-04-22 21:08:06 +00:00
2020-05-02 09:33:38 +00:00
### Removed
2020-05-13 04:24:36 +00:00
- Remove `PyMethodsProtocol` trait. [#889 ](https://github.com/PyO3/pyo3/pull/889 )
- Remove `num-traits` dependency. [#895 ](https://github.com/PyO3/pyo3/pull/895 )
- Remove `ObjectProtocol` trait. [#911 ](https://github.com/PyO3/pyo3/pull/911 )
- Remove `PyAny::None` . Users should use `Python::None` instead. [#911 ](https://github.com/PyO3/pyo3/pull/911 )
- Remove all `*ProtocolImpl` traits. [#917 ](https://github.com/PyO3/pyo3/pull/917 )
2020-05-02 09:33:38 +00:00
2020-05-08 09:39:40 +00:00
### Fixed
2020-05-13 04:24:36 +00:00
- Fix support for `__radd__` and other `__r*__` methods as implementations for Python mathematical operators. [#839 ](https://github.com/PyO3/pyo3/pull/839 )
- Fix panics during garbage collection when traversing objects that were already mutably borrowed. [#855 ](https://github.com/PyO3/pyo3/pull/855 )
- Prevent `&'static` references to Python objects as arguments to `#[pyfunction]` and `#[pymethods]` . [#869 ](https://github.com/PyO3/pyo3/pull/869 )
- Fix lifetime safety bug with `AsPyRef::as_ref` . [#876 ](https://github.com/PyO3/pyo3/pull/876 )
- Fix `#[pyo3(get)]` attribute on `Py<T>` fields. [#880 ](https://github.com/PyO3/pyo3/pull/880 )
- Fix segmentation faults caused by functions such as `PyList::get_item` returning borrowed objects when it was not safe to do so. [#890 ](https://github.com/PyO3/pyo3/pull/890 )
- Fix segmentation faults caused by nested `Python::acquire_gil` calls creating dangling references. [#893 ](https://github.com/PyO3/pyo3/pull/893 )
- Fix segmentatation faults when a panic occurs during a call to `Python::allow_threads` . [#912 ](https://github.com/PyO3/pyo3/pull/912 )
2020-04-09 04:33:51 +00:00
2020-05-08 09:39:40 +00:00
## [0.9.2] - 2020-04-09
2020-03-30 00:52:37 +00:00
### Added
2020-05-08 09:39:40 +00:00
- `FromPyObject` implementations for `HashSet` and `BTreeSet` . [#842 ](https://github.com/PyO3/pyo3/pull/842 )
2020-03-30 00:52:37 +00:00
2020-04-09 04:00:13 +00:00
### Fixed
2020-05-08 09:39:40 +00:00
- Correctly detect 32bit architecture. [#830 ](https://github.com/PyO3/pyo3/pull/830 )
2020-03-23 09:55:24 +00:00
2020-05-08 09:39:40 +00:00
## [0.9.1] - 2020-03-23
2020-03-22 10:58:17 +00:00
### Fixed
2020-05-08 09:39:40 +00:00
- Error messages for `#[pyclass]` . [#826 ](https://github.com/PyO3/pyo3/pull/826 )
- `FromPyObject` implementation for `PySequence` . [#827 ](https://github.com/PyO3/pyo3/pull/827 )
2020-03-22 10:58:17 +00:00
2020-05-08 09:39:40 +00:00
## [0.9.0] - 2020-03-19
2020-01-08 00:05:03 +00:00
### Added
2020-05-08 09:39:40 +00:00
- `PyCell` , which has RefCell-like features. [#770 ](https://github.com/PyO3/pyo3/pull/770 )
- `PyClass` , `PyLayout` , `PyClassInitializer` . [#683 ](https://github.com/PyO3/pyo3/pull/683 )
- Implemented `IntoIterator` for `PySet` and `PyFrozenSet` . [#716 ](https://github.com/PyO3/pyo3/pull/716 )
- `FromPyObject` is now automatically implemented for `T: Clone` pyclasses. [#730 ](https://github.com/PyO3/pyo3/pull/730 )
- `#[pyo3(get)]` and `#[pyo3(set)]` will now use the Rust doc-comment from the field for the Python property. [#755 ](https://github.com/PyO3/pyo3/pull/755 )
- `#[setter]` functions may now take an argument of `Pyo3::Python` . [#760 ](https://github.com/PyO3/pyo3/pull/760 )
- `PyTypeInfo::BaseLayout` and `PyClass::BaseNativeType` . [#770 ](https://github.com/PyO3/pyo3/pull/770 )
- `PyDowncastImpl` . [#770 ](https://github.com/PyO3/pyo3/pull/770 )
- Implement `FromPyObject` and `IntoPy<PyObject>` traits for arrays (up to 32). [#778 ](https://github.com/PyO3/pyo3/pull/778 )
- `migration.md` and `types.md` in the guide. [#795 ](https://github.com/PyO3/pyo3/pull/795 ), #[802](https://github.com/PyO3/pyo3/pull/802)
- `ffi::{_PyBytes_Resize, _PyDict_Next, _PyDict_Contains, _PyDict_GetDictPtr}` . #[820](https://github.com/PyO3/pyo3/pull/820)
2020-04-07 19:27:11 +00:00
2020-05-08 09:39:40 +00:00
### Changed
- `#[new]` does not take `PyRawObject` and can return `Self` . [#683 ](https://github.com/PyO3/pyo3/pull/683 )
- The blanket implementations for `FromPyObject` for `&T` and `&mut T` are no longer specializable. Implement `PyTryFrom` for your type to control the behavior of `FromPyObject::extract()` for your types. [#713 ](https://github.com/PyO3/pyo3/pull/713 )
- The implementation for `IntoPy<U> for T` where `U: FromPy<T>` is no longer specializable. Control the behavior of this via the implementation of `FromPy` . [#713 ](https://github.com/PyO3/pyo3/pull/713 )
- Use `parking_lot::Mutex` instead of `spin::Mutex` . [#734 ](https://github.com/PyO3/pyo3/pull/734 )
- Bumped minimum Rust version to `1.42.0-nightly 2020-01-21` . [#761 ](https://github.com/PyO3/pyo3/pull/761 )
- `PyRef` and `PyRefMut` are renewed for `PyCell` . [#770 ](https://github.com/PyO3/pyo3/pull/770 )
- Some new FFI functions for Python 3.8. [#784 ](https://github.com/PyO3/pyo3/pull/784 )
- `PyAny` is now on the top level module and prelude. [#816 ](https://github.com/PyO3/pyo3/pull/816 )
2020-01-10 22:27:10 +00:00
2020-01-11 06:06:54 +00:00
### Removed
2020-05-08 09:39:40 +00:00
- `PyRawObject` . [#683 ](https://github.com/PyO3/pyo3/pull/683 )
- `PyNoArgsFunction` . [#741 ](https://github.com/PyO3/pyo3/pull/741 )
- `initialize_type()` . To set the module name for a `#[pyclass]` , use the `module` argument to the macro. #[751](https://github.com/PyO3/pyo3/pull/751)
- `AsPyRef::as_mut/with/with_mut/into_py/into_mut_py` . [#770 ](https://github.com/PyO3/pyo3/pull/770 )
- `PyTryFrom::try_from_mut/try_from_mut_exact/try_from_mut_unchecked` . [#770 ](https://github.com/PyO3/pyo3/pull/770 )
- `Python::mut_from_owned_ptr/mut_from_borrowed_ptr` . [#770 ](https://github.com/PyO3/pyo3/pull/770 )
- `ObjectProtocol::get_base/get_mut_base` . [#770 ](https://github.com/PyO3/pyo3/pull/770 )
2019-11-23 08:09:10 +00:00
### Fixed
2020-05-08 09:39:40 +00:00
- Fixed unsoundness of subclassing. [#683 ](https://github.com/PyO3/pyo3/pull/683 ).
- Clear error indicator when the exception is handled on the Rust side. [#719 ](https://github.com/PyO3/pyo3/pull/719 )
- Usage of raw identifiers with `#[pyo3(set)]` . [#745 ](https://github.com/PyO3/pyo3/pull/745 )
- Usage of `PyObject` with `#[pyo3(get)]` . [#760 ](https://github.com/PyO3/pyo3/pull/760 )
- `#[pymethods]` used in conjunction with `#[cfg]` . #[769](https://github.com/PyO3/pyo3/pull/769)
- `"*"` in a `#[pyfunction()]` argument list incorrectly accepting any number of positional arguments (use `args = "*"` when this behaviour is desired). #[792](https://github.com/PyO3/pyo3/pull/792)
- `PyModule::dict` . #[809](https://github.com/PyO3/pyo3/pull/809)
- Fix the case where `DESCRIPTION` is not null-terminated. #[822](https://github.com/PyO3/pyo3/pull/822)
## [0.8.5] - 2020-01-05
### Added
- Implemented `FromPyObject` for `HashMap` and `BTreeMap`
- Support for `#[name = "foo"]` attribute for `#[pyfunction]` and in `#[pymethods]` . [#692 ](https://github.com/PyO3/pyo3/pull/692 )
2019-11-23 08:09:10 +00:00
2020-05-08 09:39:40 +00:00
## [0.8.4] - 2019-12-14
### Added
- Support for `#[text_signature]` attribute. [#675 ](https://github.com/PyO3/pyo3/pull/675 )
2019-11-23 08:09:10 +00:00
2020-05-08 09:39:40 +00:00
## [0.8.3] - 2019-11-23
2019-11-23 08:09:10 +00:00
### Removed
2020-05-08 09:39:40 +00:00
- `#[init]` is removed. [#658 ](https://github.com/PyO3/pyo3/pull/658 )
2019-11-23 08:09:10 +00:00
2020-05-08 09:39:40 +00:00
### Fixed
- Now all `&Py~` types have `!Send` bound. [#655 ](https://github.com/PyO3/pyo3/pull/655 )
- Fix a compile error raised by the stabilization of `!` type. [#672 ](https://github.com/PyO3/pyo3/issues/672 ).
2019-10-23 21:40:38 +00:00
2020-05-08 09:39:40 +00:00
## [0.8.2] - 2019-10-27
2019-10-23 21:40:38 +00:00
### Added
2020-05-08 09:39:40 +00:00
- FFI compatibility for PEP 590 Vectorcall. [#641 ](https://github.com/PyO3/pyo3/pull/641 )
2019-10-23 21:40:38 +00:00
2019-10-21 13:48:01 +00:00
### Fixed
2020-05-08 09:39:40 +00:00
- Fix PySequenceProtocol::set_item. [#624 ](https://github.com/PyO3/pyo3/pull/624 )
- Fix a corner case of BigInt::FromPyObject. [#630 ](https://github.com/PyO3/pyo3/pull/630 )
- Fix index errors in parameter conversion. [#631 ](https://github.com/PyO3/pyo3/pull/631 )
- Fix handling of invalid utf-8 sequences in `PyString::as_bytes` . [#639 ](https://github.com/PyO3/pyo3/pull/639 )
2019-10-21 13:48:01 +00:00
and `PyString::to_string_lossy` [#642 ](https://github.com/PyO3/pyo3/pull/642 ).
2020-05-08 09:39:40 +00:00
- Remove `__contains__` and `__iter__` from PyMappingProtocol. [#644 ](https://github.com/PyO3/pyo3/pull/644 )
- Fix proc-macro definition of PySetAttrProtocol. [#645 ](https://github.com/PyO3/pyo3/pull/645 )
2019-10-07 16:52:06 +00:00
2020-05-08 09:39:40 +00:00
## [0.8.1] - 2019-10-08
2019-10-07 16:52:06 +00:00
### Added
2020-05-08 09:39:40 +00:00
- Conversion between [num-bigint ](https://github.com/rust-num/num-bigint ) and Python int. [#608 ](https://github.com/PyO3/pyo3/pull/608 )
2019-10-07 16:52:06 +00:00
2019-09-15 12:46:06 +00:00
### Fixed
2020-05-08 09:39:40 +00:00
- Make sure the right Python interpreter is used in OSX builds. [#604 ](https://github.com/PyO3/pyo3/pull/604 )
- Patch specialization being broken by Rust 1.40. [#614 ](https://github.com/PyO3/pyo3/issues/614 )
- Fix a segfault around PyErr. [#597 ](https://github.com/PyO3/pyo3/pull/597 )
2019-09-15 12:46:06 +00:00
2020-05-08 09:39:40 +00:00
## [0.8.0] - 2019-09-16
2019-06-03 03:18:44 +00:00
### Added
2020-05-08 09:39:40 +00:00
- `module` argument to `pyclass` macro. [#499 ](https://github.com/PyO3/pyo3/pull/499 )
- `py_run!` macro [#512 ](https://github.com/PyO3/pyo3/pull/512 )
2020-07-06 18:55:00 +00:00
- Use existing fields and methods before calling custom __getattr__ . [#505 ](https://github.com/PyO3/pyo3/pull/505 )
2020-05-08 09:39:40 +00:00
- `PyBytes` can now be indexed just like `Vec<u8>`
- Implement `IntoPy<PyObject>` for `PyRef` and `PyRefMut` .
2019-06-15 14:12:22 +00:00
### Changed
2020-05-08 09:39:40 +00:00
- Implementing the Using the `gc` parameter for `pyclass` (e.g. `#[pyclass(gc)]` ) without implementing the `class::PyGCProtocol` trait is now a compile-time error. Failing to implement this trait could lead to segfaults. [#532 ](https://github.com/PyO3/pyo3/pull/532 )
- `PyByteArray::data` has been replaced with `PyDataArray::to_vec` because returning a `&[u8]` is unsound. (See [this comment ](https://github.com/PyO3/pyo3/issues/373#issuecomment-512332696 ) for a great write-up for why that was unsound)
- Replace `mashup` with `paste` .
- `GILPool` gained a `Python` marker to prevent it from being misused to release Python objects without the GIL held.
2019-06-03 03:18:44 +00:00
2020-05-08 09:39:40 +00:00
### Removed
- `IntoPyObject` was replaced with `IntoPy<PyObject>`
- `#[pyclass(subclass)]` is hidden a `unsound-subclass` feature because it's causing segmentation faults.
2019-07-14 16:00:16 +00:00
2020-05-08 09:39:40 +00:00
### Fixed
- More readable error message for generics in pyclass [#503 ](https://github.com/PyO3/pyo3/pull/503 )
2019-05-12 12:46:40 +00:00
2020-05-08 09:39:40 +00:00
## [0.7.0] - 2019-05-26
2019-04-04 07:47:21 +00:00
### Added
2020-05-08 09:39:40 +00:00
- PyPy support by omerbenamram in [#393 ](https://github.com/PyO3/pyo3/pull/393 )
- Have `PyModule` generate an index of its members (`__all__` list).
- Allow `slf: PyRef<T>` for pyclass(#419)
- Allow to use lifetime specifiers in `pymethods`
- Add `marshal` module. [#460 ](https://github.com/PyO3/pyo3/pull/460 )
2019-04-04 07:47:21 +00:00
2019-04-17 18:55:57 +00:00
### Changed
2020-05-08 09:39:40 +00:00
- `Python::run` returns `PyResult<()>` instead of `PyResult<&PyAny>` .
- Methods decorated with `#[getter]` and `#[setter]` can now omit wrapping the
2019-04-17 18:55:57 +00:00
result type in `PyResult` if they don't raise exceptions.
2019-04-04 07:47:21 +00:00
### Fixed
2020-05-08 09:39:40 +00:00
- `type_object::PyTypeObject` has been marked unsafe because breaking the contract `type_object::PyTypeObject::init_type` can lead to UB.
- Fixed automatic derive of `PySequenceProtocol` implementation in [#423 ](https://github.com/PyO3/pyo3/pull/423 ).
- Capitalization & better wording to README.md.
- Docstrings of properties is now properly set using the doc of the `#[getter]` method.
- Fixed issues with `pymethods` crashing on doc comments containing double quotes.
- `PySet::new` and `PyFrozenSet::new` now return `PyResult<&Py[Frozen]Set>` ; exceptions are raised if
2019-04-17 10:09:44 +00:00
the items are not hashable.
2020-05-08 09:39:40 +00:00
- Fixed building using `venv` on Windows.
- `PyTuple::new` now returns `&PyTuple` instead of `Py<PyTuple>` .
- Fixed several issues with argument parsing; notable, the `*args` and `**kwargs`
2019-04-17 20:12:07 +00:00
tuple/dict now doesn't contain arguments that are otherwise assigned to parameters.
2019-03-30 19:23:31 +00:00
2020-05-08 09:39:40 +00:00
## [0.6.0] - 2019-03-28
2019-03-28 11:49:59 +00:00
### Regressions
2020-05-08 09:39:40 +00:00
- Currently, [#341 ](https://github.com/PyO3/pyo3/issues/341 ) causes `cargo test` to fail with weird linking errors when the `extension-module` feature is activated. For now you can work around this by making the `extension-module` feature optional and running the tests with `cargo test --no-default-features` :
2019-03-28 11:49:59 +00:00
```toml
[dependencies.pyo3]
version = "0.6.0"
[features]
extension-module = ["pyo3/extension-module"]
default = ["extension-module"]
```
2018-11-12 21:25:45 +00:00
### Added
2020-05-08 09:39:40 +00:00
- Added a `wrap_pymodule!` macro similar to the existing `wrap_pyfunction!` macro. Only available on python 3
- Added support for cross compiling (e.g. to arm v7) by mtp401 in [#327 ](https://github.com/PyO3/pyo3/pull/327 ). See the "Cross Compiling" section in the "Building and Distribution" chapter of the guide for more details.
- The `PyRef` and `PyRefMut` types, which allow to differentiate between an instance of a rust struct on the rust heap and an instance that is embedded inside a python object. By kngwyu in [#335 ](https://github.com/PyO3/pyo3/pull/335 )
- Added `FromPy<T>` and `IntoPy<T>` which are equivalent to `From<T>` and `Into<T>` except that they require a gil token.
- Added `ManagedPyRef` , which should eventually replace `ToBorrowedObject` .
2018-11-12 21:25:45 +00:00
### Changed
2020-05-08 09:39:40 +00:00
- Renamed `PyObjectRef` to `PyAny` in #388
- Renamed `add_function` to `add_wrapped` as it now also supports modules.
- Renamed `#[pymodinit]` to `#[pymodule]`
- `py.init(|| value)` becomes `Py::new(value)`
- `py.init_ref(|| value)` becomes `PyRef::new(value)`
- `py.init_mut(|| value)` becomes `PyRefMut::new(value)` .
- `PyRawObject::init` is now infallible, e.g. it returns `()` instead of `PyResult<()>` .
- Renamed `py_exception!` to `create_exception!` and refactored the error macros.
- Renamed `wrap_function!` to `wrap_pyfunction!`
- Renamed `#[prop(get, set)]` to `#[pyo3(get, set)]`
- `#[pyfunction]` now supports the same arguments as `#[pyfn()]`
- Some macros now emit proper spanned errors instead of panics.
- Migrated to the 2018 edition
- `crate::types::exceptions` moved to `crate::exceptions`
- Replace `IntoPyTuple` with `IntoPy<Py<PyTuple>>` .
- `IntoPyPointer` and `ToPyPointer` moved into the crate root.
- `class::CompareOp` moved into `class::basic::CompareOp`
- PyTypeObject is now a direct subtrait PyTypeCreate, removing the old cyclical implementation in [#350 ](https://github.com/PyO3/pyo3/pull/350 )
- Add `PyList::{sort, reverse}` by chr1sj0nes in [#357 ](https://github.com/PyO3/pyo3/pull/357 ) and [#358 ](https://github.com/PyO3/pyo3/pull/358 )
- Renamed the `typeob` module to `type_object`
2018-11-12 21:25:45 +00:00
2018-11-12 13:37:06 +00:00
### Removed
2020-05-08 09:39:40 +00:00
- `PyToken` was removed due to unsoundness (See [#94 ](https://github.com/PyO3/pyo3/issues/94 )).
- Removed the unnecessary type parameter from `PyObjectAlloc`
- `NoArgs` . Just use an empty tuple
- `PyObjectWithGIL` . `PyNativeType` is sufficient now that PyToken is removed.
2018-11-12 13:37:06 +00:00
2019-02-13 20:35:26 +00:00
### Fixed
2020-05-08 09:39:40 +00:00
- A soudness hole where every instances of a `#[pyclass]` struct was considered to be part of a python object, even though you can create instances that are not part of the python heap. This was fixed through `PyRef` and `PyRefMut` .
- Fix kwargs support in [#328 ](https://github.com/PyO3/pyo3/pull/328 ).
- Add full support for `__dict__` in [#403 ](https://github.com/PyO3/pyo3/pull/403 ).
2019-02-13 20:35:26 +00:00
2019-01-04 10:53:46 +00:00
## [0.5.3] - 2019-01-04
### Fixed
2020-05-08 09:39:40 +00:00
- Fix memory leak in ArrayList by kngwyu [#316 ](https://github.com/PyO3/pyo3/pull/316 )
2019-01-04 10:53:46 +00:00
2020-05-08 09:39:40 +00:00
## [0.5.2] - 2018-11-25
2018-11-24 12:16:36 +00:00
### Fixed
2020-05-08 09:39:40 +00:00
- Fix undeterministic segfaults when creating many objects by kngwyu in [#281 ](https://github.com/PyO3/pyo3/pull/281 )
2018-11-24 12:16:36 +00:00
2018-11-25 23:16:47 +00:00
## [0.5.1] - 2018-11-24
Yanked
2018-11-24 12:16:36 +00:00
2018-11-04 23:32:46 +00:00
## [0.5.0] - 2018-11-11
2018-09-06 16:04:13 +00:00
### Added
2020-05-08 09:39:40 +00:00
- `#[pyclass]` objects can now be returned from rust functions
- `PyComplex` by kngwyu in [#226 ](https://github.com/PyO3/pyo3/pull/226 )
- `PyDict::from_sequence()` , equivalent to `dict([(key, val), ...])`
- Bindings for the `datetime` standard library types: `PyDate` , `PyTime` , `PyDateTime` , `PyTzInfo` , `PyDelta` with associated `ffi` types, by pganssle [#200 ](https://github.com/PyO3/pyo3/pull/200 ).
- `PyString` , `PyUnicode` , and `PyBytes` now have an `as_bytes()` method that returns `&[u8]` .
- `PyObjectProtocol::get_type_ptr()` by ijl in [#242 ](https://github.com/PyO3/pyo3/pull/242 )
2018-09-24 02:49:52 +00:00
2020-05-08 09:39:40 +00:00
### Changed
- Removes the types from the root module and the prelude. They now live in `pyo3::types` instead.
- All exceptions are consturcted with `py_err` instead of `new` , as they return `PyErr` and not `Self` .
- `as_mut` and friends take and `&mut self` instead of `&self`
- `ObjectProtocol::call` now takes an `Option<&PyDict>` for the kwargs instead of an `IntoPyDictPointer` .
- `IntoPyDictPointer` was replace by `IntoPyDict` which doesn't convert `PyDict` itself anymore and returns a `PyDict` instead of `*mut PyObject` .
- `PyTuple::new` now takes an `IntoIterator` instead of a slice
- Updated to syn 0.15
- Splitted `PyTypeObject` into `PyTypeObject` without the create method and `PyTypeCreate` with requires `PyObjectAlloc<Self> + PyTypeInfo + Sized` .
- Ran `cargo edition --fix` which prefixed path with `crate::` for rust 2018
- Renamed `async` to `pyasync` as async will be a keyword in the 2018 edition.
- Starting to use `NonNull<*mut PyObject>` for Py and PyObject by ijl [#260 ](https://github.com/PyO3/pyo3/pull/260 )
2018-09-06 16:04:13 +00:00
2018-09-21 21:32:48 +00:00
### Removed
2020-05-08 09:39:40 +00:00
- Removed most entries from the prelude. The new prelude is small and clear.
- Slowly removing specialization uses
- `PyString` , `PyUnicode` , and `PyBytes` no longer have a `data()` method
2018-09-28 14:27:49 +00:00
(replaced by `as_bytes()` ) and `PyStringData` has been removed.
2020-05-08 09:39:40 +00:00
- The pyobject_extract macro
2018-08-21 21:51:13 +00:00
2018-08-20 20:56:24 +00:00
### Fixed
2020-05-08 09:39:40 +00:00
- Added an explanation that the GIL can temporarily be released even while holding a GILGuard.
- Lots of clippy errors
- Fix segfault on calling an unknown method on a PyObject
- Work around a [bug ](https://github.com/rust-lang/rust/issues/55380 ) in the rust compiler by kngwyu [#252 ](https://github.com/PyO3/pyo3/pull/252 )
- Fixed a segfault with subclassing pyo3 create classes and using `__class__` by kngwyu [#263 ](https://github.com/PyO3/pyo3/pull/263 )
2018-08-20 20:56:24 +00:00
2018-08-20 12:30:52 +00:00
## [0.4.1] - 2018-08-20
2018-08-11 15:35:03 +00:00
### Changed
2020-05-08 09:39:40 +00:00
- PyTryFrom's error is always to `PyDowncastError`
2018-08-11 15:35:03 +00:00
2020-05-08 09:39:40 +00:00
### Fixed
- Fixed compilation on nightly since `use_extern_macros` was stabilized
2018-08-11 15:35:03 +00:00
### Removed
2020-05-08 09:39:40 +00:00
- The pyobject_downcast macro
2018-08-11 15:35:03 +00:00
2018-07-30 21:10:50 +00:00
## [0.4.0] - 2018-07-30
2018-07-30 20:52:22 +00:00
### Changed
2020-05-08 09:39:40 +00:00
- Merged both examples into one
- Rustfmt all the things :heavy_check_mark:
- Switched to [Keep a Changelog ](http://keepachangelog.com/en/1.0.0/ )
2018-07-30 20:52:22 +00:00
2020-05-08 09:39:40 +00:00
### Removed
- Conversions from tuples to PyDict due to [rust-lang/rust#52050 ](https://github.com/rust-lang/rust/issues/52050 )
2018-07-30 20:52:22 +00:00
## [0.3.2] - 2018-07-22
### Changed
2020-05-08 09:39:40 +00:00
- Replaced `concat_idents` with mashup
2018-07-22 19:35:54 +00:00
2018-07-30 20:52:22 +00:00
## [0.3.1] - 2018-07-18
### Fixed
2020-05-08 09:39:40 +00:00
- Fixed scoping bug in pyobject_native_type that would break rust-numpy
2018-07-18 12:06:17 +00:00
2018-07-30 20:52:22 +00:00
## [0.3.0] - 2018-07-18
### Added
2020-05-08 09:39:40 +00:00
- A few internal macros became part of the public api ([#155](https://github.com/PyO3/pyo3/pull/155), [#186 ](https://github.com/PyO3/pyo3/pull/186 ))
- Always clone in getters. This allows using the get-annotation on all Clone-Types
2018-07-30 20:52:22 +00:00
2020-05-08 09:39:40 +00:00
### Changed
- Upgraded to syn 0.14 which means much better error messages :tada:
- 128 bit integer support by [kngwyu ](https://github.com/kngwyu ) ([#137](https://github.com/PyO3/pyo3/pull/173))
- `proc_macro` has been stabilized on nightly ([rust-lang/rust#52081](https://github.com/rust-lang/rust/pull/52081)). This means that we can remove the `proc_macro` feature, but now we need the `use_extern_macros` from the 2018 edition instead.
- All proc macro are now prefixed with `py` and live in the prelude. This means you can use `#[pyclass]` , `#[pymethods]` , `#[pyproto]` , `#[pyfunction]` and `#[pymodinit]` directly, at least after a `use pyo3::prelude::*` . They were also moved into a module called `proc_macro` . You shouldn't use `#[pyo3::proc_macro::pyclass]` or other longer paths in attributes because `proc_macro_path_invoc` isn't going to be stabilized soon.
- Renamed the `base` option in the `pyclass` macro to `extends` .
- `#[pymodinit]` uses the function name as module name, unless the name is overrriden with `#[pymodinit(name)]`
- The guide is now properly versioned.
2018-06-12 15:47:24 +00:00
2018-07-30 20:52:22 +00:00
## [0.2.7] - 2018-05-18
### Fixed
2020-05-08 09:39:40 +00:00
- Fix nightly breakage with proc_macro_path
2018-02-21 18:29:14 +00:00
2018-07-30 20:52:22 +00:00
## [0.2.6] - 2018-04-03
### Fixed
2020-05-08 09:39:40 +00:00
- Fix compatibility with TryFrom trait #137
2018-02-11 17:38:50 +00:00
2018-07-30 20:52:22 +00:00
## [0.2.5] - 2018-02-21
2018-09-24 02:49:52 +00:00
### Added
2020-05-08 09:39:40 +00:00
- CPython 3.7 support
2018-07-30 20:52:22 +00:00
### Fixed
2020-05-08 09:39:40 +00:00
- Embedded CPython 3.7b1 crashes on initialization #110
- Generated extension functions are weakly typed #108
- call_method*() crashes when the method does not exist #113
- Allow importing exceptions from nested modules #116
2018-02-21 18:35:49 +00:00
2018-07-30 20:52:22 +00:00
## [0.2.4] - 2018-01-19
### Added
2020-05-08 09:39:40 +00:00
- Allow to get mutable ref from PyObject #106
- Drop `RefFromPyObject` trait
- Add Python::register_any() method
2018-07-30 20:52:22 +00:00
2018-09-24 02:49:52 +00:00
### Fixed
2020-05-08 09:39:40 +00:00
- Fix impl `FromPyObject` for `Py<T>`
- Mark method that work with raw pointers as unsafe #95
2017-12-26 21:42:32 +00:00
2018-07-30 20:52:22 +00:00
## [0.2.3] - 11-27-2017
### Changed
2020-05-08 09:39:40 +00:00
- Rustup to 1.23.0-nightly 2017-11-07
2018-07-30 20:52:22 +00:00
2020-05-08 09:39:40 +00:00
### Fixed
- Proper `c_char` usage #93
2017-11-23 04:08:05 +00:00
2018-07-30 20:52:22 +00:00
### Removed
2020-05-08 09:39:40 +00:00
- Remove use of now unneeded 'AsciiExt' trait
2018-07-30 20:52:22 +00:00
## [0.2.2] - 09-26-2017
### Changed
2020-05-08 09:39:40 +00:00
- Rustup to 1.22.0-nightly 2017-09-30
2017-11-18 17:20:03 +00:00
2018-07-30 20:52:22 +00:00
## [0.2.1] - 09-26-2017
### Fixed
2020-05-08 09:39:40 +00:00
- Fix rustc const_fn nightly breakage
2017-11-18 17:20:03 +00:00
2018-07-30 20:52:22 +00:00
## [0.2.0] - 08-12-2017
2018-09-24 02:49:52 +00:00
### Added
2020-05-08 09:39:40 +00:00
- Added inheritance support #15
- Added weakref support #56
- Added subclass support #64
- Added `self.__dict__` supoort #68
- Added `pyo3::prelude` module #70
- Better `Iterator` support for PyTuple, PyList, PyDict #75
- Introduce IntoPyDictPointer similar to IntoPyTuple #69
2018-07-30 20:52:22 +00:00
2020-05-08 09:39:40 +00:00
### Changed
- Allow to add gc support without implementing PyGCProtocol #57
- Refactor `PyErr` implementation. Drop `py` parameter from constructor.
2017-08-03 22:01:52 +00:00
2018-07-30 21:10:50 +00:00
## 0.1.0 - 07-23-2017
2018-07-30 20:52:22 +00:00
### Added
2020-05-08 09:39:40 +00:00
- Initial release
2020-06-30 05:53:55 +00:00
[Unreleased]: https://github.com/pyo3/pyo3/compare/v0.11.1...HEAD
[0.11.0] https://github.com/pyo3/pyo3/compare/v0.11.0...v0.11.1
2020-06-21 09:06:27 +00:00
[0.11.0] https://github.com/pyo3/pyo3/compare/v0.10.1...v0.11.0
2020-05-14 11:50:33 +00:00
[0.10.1]: https://github.com/pyo3/pyo3/compare/v0.10.0...v0.10.1
2020-05-13 04:24:36 +00:00
[0.10.0]: https://github.com/pyo3/pyo3/compare/v0.9.2...v0.10.0
2020-05-08 09:39:40 +00:00
[0.9.2]: https://github.com/pyo3/pyo3/compare/v0.9.1...v0.9.2
[0.9.1]: https://github.com/pyo3/pyo3/compare/v0.9.0...v0.9.1
[0.9.0]: https://github.com/pyo3/pyo3/compare/v0.8.5...v0.9.0
[0.8.4]: https://github.com/pyo3/pyo3/compare/v0.8.4...v0.8.5
[0.8.4]: https://github.com/pyo3/pyo3/compare/v0.8.3...v0.8.4
[0.8.3]: https://github.com/pyo3/pyo3/compare/v0.8.2...v0.8.3
2019-10-26 13:47:19 +00:00
[0.8.2]: https://github.com/pyo3/pyo3/compare/v0.8.1...v0.8.2
2019-10-07 16:52:06 +00:00
[0.8.1]: https://github.com/pyo3/pyo3/compare/v0.8.0...v0.8.1
2019-08-30 13:02:00 +00:00
[0.8.0]: https://github.com/pyo3/pyo3/compare/v0.7.0...v0.8.0
2019-05-12 12:46:40 +00:00
[0.7.0]: https://github.com/pyo3/pyo3/compare/v0.6.0...v0.7.0
2019-03-28 11:49:59 +00:00
[0.6.0]: https://github.com/pyo3/pyo3/compare/v0.5.3...v0.6.0
2019-01-04 10:53:46 +00:00
[0.5.3]: https://github.com/pyo3/pyo3/compare/v0.5.2...v0.5.3
2018-11-25 23:16:47 +00:00
[0.5.2]: https://github.com/pyo3/pyo3/compare/v0.5.0...v0.5.2
2018-11-04 23:32:46 +00:00
[0.5.0]: https://github.com/pyo3/pyo3/compare/v0.4.1...v0.5.0
2018-08-20 12:30:52 +00:00
[0.4.1]: https://github.com/pyo3/pyo3/compare/v0.4.0...v0.4.1
[0.4.0]: https://github.com/pyo3/pyo3/compare/v0.3.2...v0.4.0
2018-07-30 20:52:22 +00:00
[0.3.2]: https://github.com/pyo3/pyo3/compare/v0.3.1...v0.3.2
[0.3.1]: https://github.com/pyo3/pyo3/compare/v0.3.0...v0.3.1
[0.3.0]: https://github.com/pyo3/pyo3/compare/v0.2.7...v0.3.0
[0.2.7]: https://github.com/pyo3/pyo3/compare/v0.2.6...v0.2.7
[0.2.6]: https://github.com/pyo3/pyo3/compare/v0.2.5...v0.2.6
[0.2.5]: https://github.com/pyo3/pyo3/compare/v0.2.4...v0.2.5
[0.2.4]: https://github.com/pyo3/pyo3/compare/v0.2.3...v0.2.4
[0.2.3]: https://github.com/pyo3/pyo3/compare/v0.2.2...v0.2.3
[0.2.2]: https://github.com/pyo3/pyo3/compare/v0.2.1...v0.2.2
[0.2.1]: https://github.com/pyo3/pyo3/compare/v0.2.0...v0.2.1
[0.2.0]: https://github.com/pyo3/pyo3/compare/v0.1.0...v0.2.0