All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- PyPy support by omerbenamram in #393
- Have
PyModulegenerate an index of its members (__all__list).
- Methods decorated with
#[getter]and#[setter]can now omit wrapping the result type inPyResultif they don't raise exceptions.
type_object::PyTypeObjecthas been marked unsafe because breaking the contracttype_object::PyTypeObject::init_typecan lead to UB.- Fixed automatic derive of
PySequenceProtocolimplementation in #423. - Capitalization & better wording to README.md.
- Docstrings of properties is now properly set using the doc of the
#[getter]method. - Fixed issues with
pymethodscrashing on doc comments containing double quotes. PySet::newandPyFrozenSet::newnow returnPyResult<&Py[Frozen]Set>; exceptions are raised if the items are not hashable.
0.6.0 - 2018-03-28
- Currently, #341 causes
cargo testto fail with weird linking errors when theextension-modulefeature is activated. For now you can work around this by making theextension-modulefeature optional and running the tests withcargo test --no-default-features:
[dependencies.pyo3]
version = "0.6.0"
[features]
extension-module = ["pyo3/extension-module"]
default = ["extension-module"]- Added a
wrap_pymodule!macro similar to the existingwrap_pyfunction!macro. Only available on python 3 - Added support for cross compiling (e.g. to arm v7) by mtp401 in #327. See the "Cross Compiling" section in the "Building and Distribution" chapter of the guide for more details.
- The
PyRefandPyRefMuttypes, 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 - Added
FromPy<T>andIntoPy<T>which are equivalent toFrom<T>andInto<T>except that they require a gil token. - Added
ManagedPyRef, which should eventually replaceToBorrowedObject.
- Renamed
PyObjectReftoPyAnyin #388 - Renamed
add_functiontoadd_wrappedas it now also supports modules. - Renamed
#[pymodinit]to#[pymodule] py.init(|| value)becomesPy::new(value)py.init_ref(|| value)becomesPyRef::new(value)py.init_mut(|| value)becomesPyRefMut::new(value).PyRawObject::initis now infallible, e.g. it returns()instead ofPyResult<()>.- Renamed
py_exception!tocreate_exception!and refactored the error macros. - Renamed
wrap_function!towrap_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::exceptionsmoved tocrate::exceptions- Replace
IntoPyTuplewithIntoPy<Py<PyTuple>>. IntoPyPointerandToPyPointermoved into the crate root.class::CompareOpmoved intoclass::basic::CompareOp- PyTypeObject is now a direct subtrait PyTypeCreate, removing the old cyclical implementation in #350
- Add
PyList::{sort, reverse}by chr1sj0nes in #357 and #358 - Renamed the
typeobmodule totype_object
PyTokenwas removed due to unsoundness (See #94).- Removed the unnecessary type parameter from
PyObjectAlloc NoArgs. Just use an empty tuplePyObjectWithGIL.PyNativeTypeis sufficient now that PyToken is removed.
- 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 throughPyRefandPyRefMut. - Fix kwargs support in #328.
- Add full support for
__dict__in #403.
0.5.3 - 2019-01-04
- Fix memory leak in ArrayList by kngwyu #316
0.5.2 - 2018-11-26
- Fix undeterministic segfaults when creating many objects by kngwyu in #281
Yanked
0.5.0 - 2018-11-11
#[pyclass]objects can now be returned from rust functionsPyComplexby kngwyu in #226PyDict::from_sequence(), equivalent todict([(key, val), ...])- Bindings for the
datetimestandard library types:PyDate,PyTime,PyDateTime,PyTzInfo,PyDeltawith associatedffitypes, by pganssle #200. PyString,PyUnicode, andPyBytesnow have anas_bytes()method that returns&[u8].PyObjectProtocol::get_type_ptr()by ijl in #242
- Removed most entries from the prelude. The new prelude is small and clear.
- Slowly removing specialization uses
PyString,PyUnicode, andPyBytesno longer have adata()method (replaced byas_bytes()) andPyStringDatahas been removed.- The pyobject_extract macro
- Removes the types from the root module and the prelude. They now live in
pyo3::typesinstead. - All exceptions are consturcted with
py_errinstead ofnew, as they returnPyErrand notSelf. as_mutand friends take and&mut selfinstead of&selfObjectProtocol::callnow takes anOption<&PyDict>for the kwargs instead of anIntoPyDictPointer.IntoPyDictPointerwas replace byIntoPyDictwhich doesn't convertPyDictitself anymore and returns aPyDictinstead of*mut PyObject.PyTuple::newnow takes anIntoIteratorinstead of a slice- Updated to syn 0.15
- Splitted
PyTypeObjectintoPyTypeObjectwithout the create method andPyTypeCreatewith requiresPyObjectAlloc<Self> + PyTypeInfo + Sized. - Ran
cargo edition --fixwhich prefixed path withcrate::for rust 2018 - Renamed
asynctopyasyncas async will be a keyword in the 2018 edition. - Starting to use
NonNull<*mut PyObject>for Py and PyObject by ijl #260
- 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 in the rust compiler by kngwyu #252
- Fixed a segfault with subclassing pyo3 create classes and using
__class__by kngwyu #263
0.4.1 - 2018-08-20
- Fixed compilation on nightly since
use_extern_macroswas stabilized
- PyTryFrom's error is always to
PyDowncastError
- The pyobject_downcast macro
0.4.0 - 2018-07-30
- Conversions from tuples to PyDict due to rust-lang/rust#52050
- Merged both examples into one
- Rustfmt all the things ✔️
- Switched to Keep a Changelog
0.3.2 - 2018-07-22
- Replaced
concat_identswith mashup
0.3.1 - 2018-07-18
- Fixed scoping bug in pyobject_native_type that would break rust-numpy
0.3.0 - 2018-07-18
- Upgraded to syn 0.14 which means much better error messages 🎉
- 128 bit integer support by kngwyu (#137)
proc_macrohas been stabilized on nightly (rust-lang/rust#52081). This means that we can remove theproc_macrofeature, but now we need theuse_extern_macrosfrom the 2018 edition instead.- All proc macro are now prefixed with
pyand live in the prelude. This means you can use#[pyclass],#[pymethods],#[pyproto],#[pyfunction]and#[pymodinit]directly, at least after ause pyo3::prelude::*. They were also moved into a module calledproc_macro. You shouldn't use#[pyo3::proc_macro::pyclass]or other longer paths in attributes becauseproc_macro_path_invocisn't going to be stabilized soon. - Renamed the
baseoption in thepyclassmacro toextends. #[pymodinit]uses the function name as module name, unless the name is overrriden with#[pymodinit(name)]- The guide is now properly versioned.
- A few internal macros became part of the public api (#155, #186)
- Always clone in getters. This allows using the get-annotation on all Clone-Types
0.2.7 - 2018-05-18
- Fix nightly breakage with proc_macro_path
0.2.6 - 2018-04-03
- Fix compatibility with TryFrom trait #137
0.2.5 - 2018-02-21
- CPython 3.7 support
- 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
0.2.4 - 2018-01-19
- Allow to get mutable ref from PyObject #106
- Drop
RefFromPyObjecttrait - Add Python::register_any() method
- Fix impl
FromPyObjectforPy<T> - Mark method that work with raw pointers as unsafe #95
0.2.3 - 11-27-2017
- Proper
c_charusage #93
- Rustup to 1.23.0-nightly 2017-11-07
- Remove use of now unneeded 'AsciiExt' trait
0.2.2 - 09-26-2017
- Rustup to 1.22.0-nightly 2017-09-30
0.2.1 - 09-26-2017
- Fix rustc const_fn nightly breakage
0.2.0 - 08-12-2017
- Allow to add gc support without implementing PyGCProtocol #57
- Refactor
PyErrimplementation. Droppyparameter from constructor.
- Added inheritance support #15
- Added weakref support #56
- Added subclass support #64
- Added
self.__dict__supoort #68 - Added
pyo3::preludemodule #70 - Better
Iteratorsupport for PyTuple, PyList, PyDict #75 - Introduce IntoPyDictPointer similar to IntoPyTuple #69
- Initial release