Changelog
All notable changes to this project will be documented in this file. For help with updating to new PyO3 versions, please see the migration guide.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
0.12.3 - 2020-10-12
Fixed
- Fix support for Rust versions 1.39 to 1.44, broken by an incorrect internal update to paste 1.0 which was done in PyO3 0.12.2. #1234
0.12.2 - 2020-10-12
Added
- Add support for keyword-only arguments without default values in
#[pyfunction]. #1209 - Add
Python::check_signals()as a safe a wrapper forPyErr_CheckSignals(). #1214
Fixed
- Fix invalid document for protocol methods. #1169
- Hide docs of PyO3 private implementation details in
pyo3::class::methods. #1169 - Fix unnecessary rebuild on PATH changes when the python interpreter is provided by PYO3_PYTHON. #1231
0.12.1 - 2020-09-16
Fixed
- Fix building for a 32-bit Python on 64-bit Windows with a 64-bit Rust toolchain. #1179
- Fix building on platforms where
c_charisu8. #1182
0.12.0 - 2020-09-12
Added
- Add FFI definitions
Py_FinalizeEx,PyOS_getsig, andPyOS_setsig. #1021 - Add
PyString::to_strfor accessingPyStringas&str. #1023 - Add
Python::with_gilfor executing a closure with the Python GIL. #1037 - Add type information to failures in
PyAny::downcast(). #1050 - Implement
DebugforPyIterator. #1051 - Add
PyBytes::new_withandPyByteArray::new_withfor initialisingbytesandbytearrayobjects using a closure. #1074 - Add
#[derive(FromPyObject)]macro for enums and structs. #1065 - Add
Py::as_refandPy::into_reffor convertingPy<T>to&T. #1098 - Add ability to return
Resulttypes other thanPyResultfrom#[pyfunction],#[pymethod]and#[pyproto]functions. #1106. - Implement
ToPyObject,IntoPy, andFromPyObjectfor hashbrown'sHashMapandHashSettypes (requires thehashbrownfeature). #1114 - Add
#[pyfunction(pass_module)]and#[pyfn(pass_module)]to pass the module object as the first function argument. #1143 - Add
PyModule::add_functionandPyModule::add_submoduleas typed alternatives toPyModule::add_wrapped. #1143 - Add native
PyCFunctionandPyFunctiontypes. #1163
Changed
- Rework exception types: #1024 #1115
- Rename exception types from e.g.
RuntimeErrortoPyRuntimeError. The old names continue to exist but are deprecated. - Exception objects are now accessible as
&TorPy<T>, just like other Python-native types. - Rename
PyException::py_err()toPyException::new_err(). - Rename
PyUnicodeDecodeErr::new_err()toPyUnicodeDecodeErr::new(). - Remove
PyStopIteration::stop_iteration().
- Rename exception types from e.g.
- Require
T: Sendfor the return valueTofPython::allow_threads. #1036 - Rename
PYTHON_SYS_EXECUTABLEtoPYO3_PYTHON. The old name will continue to work (undocumented) but will be removed in a future release. #1039 - Remove
unsafefrom signature ofPyType::as_type_ptr. #1047 - Change return type of
PyIterator::from_objecttoPyResult<PyIterator>(wasResult<PyIterator, PyDowncastError>). #1051 IntoPyis no longer implied byFromPy. #1063- Change
PyObjectto be a type alias forPy<PyAny>. #1063 - Rework
PyErrto be compatible with thestd::error::Errortrait: #1067 #1115- Implement
Display,Error,SendandSyncforPyErrandPyErrArguments. - Add
PyErr::instance()for accessingPyErras&PyBaseException. PyErr's fields are now an implementation detail. The equivalent values can be accessed withPyErr::ptype(),PyErr::pvalue()andPyErr::ptraceback().- Change receiver of
PyErr::print()andPyErr::print_and_set_sys_last_vars()to&self(wasself). - Remove
PyErrValue,PyErr::from_value,PyErr::into_normalized(), andPyErr::normalize(). - Remove
PyException::into(). - Remove
Into<PyResult<T>>forPyErrandPyException.
- Implement
- Change methods generated by
#[pyproto]to returnNotImplementedif Python should try a reversed operation. #1072 - Change argument to
PyModule::addtoimpl IntoPy<PyObject>(wasimpl ToPyObject). #1124
Removed
- Remove many exception and
PyErrAPIs; see the "changed" section above. #1024 #1067 #1115 - Remove
PyString::to_string(use newPyString::to_str). #1023 - Remove
PyString::as_bytes. #1023 - Remove
Python::register_any. #1023 - Remove
GILGuard::acquirefrom the public API. UsePython::acquire_gilorPython::with_gil. #1036 - Remove the
FromPytrait. #1063 - Remove the
AsPyReftrait. #1098
Fixed
- Correct FFI definitions
Py_SetProgramNameandPy_SetPythonHometo take*constarguments (was*mut). #1021 - Fix
FromPyObjectfornum_bigint::BigIntfor Python objects with an__index__method. #1027 - Correct FFI definition
_PyLong_AsByteArrayto take*mut c_ucharargument (was*const c_uchar). #1029 - Fix segfault with
#[pyclass(dict, unsendable)]. #1058 #1059 - Fix using
&Selfas an argument type for functions in a#[pymethods]block. #1071 - Fix best-effort build against PyPy 3.6. #1092
- Fix many cases of lifetime elision in
#[pyproto]implementations. #1093 - Fix detection of Python build configuration when cross-compiling. #1095
- Always link against libpython on android with the
extension-modulefeature. #1095 - Fix the
+operator not trying__radd__when both__add__and__radd__are defined inPyNumberProtocol(and similar for all other reversible operators). #1107 - Fix building with Anaconda python. #1175
0.11.1 - 2020-06-30
Added
#[pyclass(unsendable)]. #1009
Changed
- Update
parking_lotdependency to0.11. #1010
0.11.0 - 2020-06-28
Added
- Support stable versions of Rust (>=1.39). #969
- Add FFI definition
PyObject_AsFileDescriptor. #938 - Add
PyByteArray::data,PyByteArray::as_bytes, andPyByteArray::as_bytes_mut. #967 - Add
GILOnceCellto use in situations wherelazy_staticoronce_cellcan deadlock. #975 - Add
Py::borrow,Py::borrow_mut,Py::try_borrow, andPy::try_borrow_mutfor accessing#[pyclass]values. #976 - Add
IterNextOutputandIterANextOutputfor returning from__next__/__anext__. #997
Changed
- Simplify internals of
#[pyo3(get)]attribute. (Remove the hidden APIGetPropertyValue.) #934 - Call
Py_Finalizeat exit to flush buffers, etc. #943 - Add type parameter to PyBuffer. #951
- Require
Sendbound for#[pyclass]. #966 - Add
Pythonargument to most methods onPyObjectandPy<T>to ensure GIL safety. #970 - Change signature of
PyTypeObject::type_object()- now takesPythonargument and returns&PyType. #970 - Change return type of
PyTuple::slice()andPyTuple::split_from()fromPy<PyTuple>to&PyTuple. #970 - Change return type of
PyTuple::as_sliceto&[&PyAny]. #971 - Rename
PyTypeInfo::type_objecttotype_object_raw, and addPythonargument. #975 - Update
num-complexoptional dependendency from0.2to0.3. #977 - Update
num-bigintoptional dependendency from0.2to0.3. #978 #[pyproto]is re-implemented without specialization. #961PyClassAlloc::allocis renamed toPyClassAlloc::new. #990#[pyproto]methods can now have return valueTorPyResult<T>(previously onlyPyResult<T>was supported). #996#[pyproto]methods can now skip annotating the return type if it is(). #998
Removed
- Remove
ManagedPyRef(unused, and needs specialization) #930
Fixed
- Fix passing explicit
NonetoOption<T>argument#[pyfunction]with a default value. #936 - Fix
PyClass.__new__'s not respecting subclasses when inherited by a Python class. #990 - Fix returning
Option<T>from#[pyproto]methods. #996 - Fix accepting
PyRef<Self>andPyRefMut<Self>to#[getter]and#[setter]methods. #999
0.10.1 - 2020-05-14
Fixed
- Fix deadlock in
Python::acquire_gil()after dropping aPyObjectorPy<T>. #924
0.10.0 - 2020-05-13
Added
- Add FFI definition
_PyDict_NewPresized. #849 - Implement
IntoPy<PyObject>forHashSetandBTreeSet. #864 - Add
PyAny::dirmethod. #886 - Gate macros behind a
macrosfeature (enabled by default). #897 - Add ability to define class attributes using
#[classattr]on functions in#[pymethods]. #905 - Implement
CloneforPyObjectandPy<T>. #908 - Implement
Deref<Target = PyAny>for all builtin types. (PyList,PyTuple,PyDictetc.) #911 - Implement
Deref<Target = PyAny>forPyCell<T>. #911 - Add
#[classattr]support for associated constants in#[pymethods]. #914
Changed
- Panics will now be raised as a Python
PanicException. #797 - Change
PyObjectandPy<T>reference counts to decrement immediately upon drop when the GIL is held. #851 - Allow
PyIterProtocolmethods to use eitherPyReforPyRefMutas the receiver type. #856 - Change the implementation of
FromPyObjectforPy<T>to apply to a wider range ofT, including allT: PyClass. #880 - Move all methods from the
ObjectProtocoltrait to thePyAnystruct. #911 - Remove need for
#![feature(specialization)]in crates depending on PyO3. #917
Removed
- Remove
PyMethodsProtocoltrait. #889 - Remove
num-traitsdependency. #895 - Remove
ObjectProtocoltrait. #911 - Remove
PyAny::None. Users should usePython::Noneinstead. #911 - Remove all
*ProtocolImpltraits. #917
Fixed
- Fix support for
__radd__and other__r*__methods as implementations for Python mathematical operators. #839 - Fix panics during garbage collection when traversing objects that were already mutably borrowed. #855
- Prevent
&'staticreferences to Python objects as arguments to#[pyfunction]and#[pymethods]. #869 - Fix lifetime safety bug with
AsPyRef::as_ref. #876 - Fix
#[pyo3(get)]attribute onPy<T>fields. #880 - Fix segmentation faults caused by functions such as
PyList::get_itemreturning borrowed objects when it was not safe to do so. #890 - Fix segmentation faults caused by nested
Python::acquire_gilcalls creating dangling references. #893 - Fix segmentatation faults when a panic occurs during a call to
Python::allow_threads. #912
0.9.2 - 2020-04-09
Added
FromPyObjectimplementations forHashSetandBTreeSet. #842
Fixed
- Correctly detect 32bit architecture. #830
0.9.1 - 2020-03-23
Fixed
0.9.0 - 2020-03-19
Added
PyCell, which has RefCell-like features. #770PyClass,PyLayout,PyClassInitializer. #683- Implemented
IntoIteratorforPySetandPyFrozenSet. #716 FromPyObjectis now automatically implemented forT: Clonepyclasses. #730#[pyo3(get)]and#[pyo3(set)]will now use the Rust doc-comment from the field for the Python property. #755#[setter]functions may now take an argument ofPyo3::Python. #760PyTypeInfo::BaseLayoutandPyClass::BaseNativeType. #770PyDowncastImpl. #770- Implement
FromPyObjectandIntoPy<PyObject>traits for arrays (up to 32). #778 migration.mdandtypes.mdin the guide. #795, #802ffi::{_PyBytes_Resize, _PyDict_Next, _PyDict_Contains, _PyDict_GetDictPtr}. #820
Changed
#[new]does not takePyRawObjectand can returnSelf. #683- The blanket implementations for
FromPyObjectfor&Tand&mut Tare no longer specializable. ImplementPyTryFromfor your type to control the behavior ofFromPyObject::extract()for your types. #713 - The implementation for
IntoPy<U> for TwhereU: FromPy<T>is no longer specializable. Control the behavior of this via the implementation ofFromPy. #713 - Use
parking_lot::Mutexinstead ofspin::Mutex. #734 - Bumped minimum Rust version to
1.42.0-nightly 2020-01-21. #761 PyRefandPyRefMutare renewed forPyCell. #770- Some new FFI functions for Python 3.8. #784
PyAnyis now on the top level module and prelude. #816
Removed
PyRawObject. #683PyNoArgsFunction. #741initialize_type(). To set the module name for a#[pyclass], use themoduleargument to the macro. #751AsPyRef::as_mut/with/with_mut/into_py/into_mut_py. #770PyTryFrom::try_from_mut/try_from_mut_exact/try_from_mut_unchecked. #770Python::mut_from_owned_ptr/mut_from_borrowed_ptr. #770ObjectProtocol::get_base/get_mut_base. #770
Fixed
- Fixed unsoundness of subclassing. #683.
- Clear error indicator when the exception is handled on the Rust side. #719
- Usage of raw identifiers with
#[pyo3(set)]. #745 - Usage of
PyObjectwith#[pyo3(get)]. #760 #[pymethods]used in conjunction with#[cfg]. #769"*"in a#[pyfunction()]argument list incorrectly accepting any number of positional arguments (useargs = "*"when this behaviour is desired). #792PyModule::dict. #809- Fix the case where
DESCRIPTIONis not null-terminated. #822
[0.8.5] - 2020-01-05
Added
- Implemented
FromPyObjectforHashMapandBTreeMap - Support for
#[name = "foo"]attribute for#[pyfunction]and in#[pymethods]. #692
0.8.4 - 2019-12-14
Added
- Support for
#[text_signature]attribute. #675
0.8.3 - 2019-11-23
Removed
#[init]is removed. #658
Fixed
- Now all
&Py~types have!Sendbound. #655 - Fix a compile error raised by the stabilization of
!type. #672.
0.8.2 - 2019-10-27
Added
- FFI compatibility for PEP 590 Vectorcall. #641
Fixed
- Fix PySequenceProtocol::set_item. #624
- Fix a corner case of BigInt::FromPyObject. #630
- Fix index errors in parameter conversion. #631
- Fix handling of invalid utf-8 sequences in
PyString::as_bytes. #639 andPyString::to_string_lossy#642. - Remove
__contains__and__iter__from PyMappingProtocol. #644 - Fix proc-macro definition of PySetAttrProtocol. #645
0.8.1 - 2019-10-08
Added
- Conversion between num-bigint and Python int. #608
Fixed
- Make sure the right Python interpreter is used in OSX builds. #604
- Patch specialization being broken by Rust 1.40. #614
- Fix a segfault around PyErr. #597
0.8.0 - 2019-09-16
Added
moduleargument topyclassmacro. #499py_run!macro #512- Use existing fields and methods before calling custom getattr. #505
PyBytescan now be indexed just likeVec<u8>- Implement
IntoPy<PyObject>forPyRefandPyRefMut.
Changed
- Implementing the Using the
gcparameter forpyclass(e.g.#[pyclass(gc)]) without implementing theclass::PyGCProtocoltrait is now a compile-time error. Failing to implement this trait could lead to segfaults. #532 PyByteArray::datahas been replaced withPyDataArray::to_vecbecause returning a&[u8]is unsound. (See this comment for a great write-up for why that was unsound)- Replace
mashupwithpaste. GILPoolgained aPythonmarker to prevent it from being misused to release Python objects without the GIL held.
Removed
IntoPyObjectwas replaced withIntoPy<PyObject>#[pyclass(subclass)]is hidden aunsound-subclassfeature because it's causing segmentation faults.
Fixed
- More readable error message for generics in pyclass #503
0.7.0 - 2019-05-26
Added
- PyPy support by omerbenamram in #393
- Have
PyModulegenerate an index of its members (__all__list). - Allow
slf: PyRef<T>for pyclass(#419) - Allow to use lifetime specifiers in
pymethods - Add
marshalmodule. #460
Changed
Python::runreturnsPyResult<()>instead ofPyResult<&PyAny>.- Methods decorated with
#[getter]and#[setter]can now omit wrapping the result type inPyResultif they don't raise exceptions.
Fixed
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.- Fixed building using
venvon Windows. PyTuple::newnow returns&PyTupleinstead ofPy<PyTuple>.- Fixed several issues with argument parsing; notable, the
*argsand**kwargstuple/dict now doesn't contain arguments that are otherwise assigned to parameters.
0.6.0 - 2019-03-28
Regressions
- 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
- 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.
Changed
- 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
Removed
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.
Fixed
- 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
Fixed
- Fix memory leak in ArrayList by kngwyu #316
0.5.2 - 2018-11-25
Fixed
- Fix undeterministic segfaults when creating many objects by kngwyu in #281
[0.5.1] - 2018-11-24
Yanked
0.5.0 - 2018-11-11
Added
#[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
Changed
- 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
Removed
- 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
Fixed
- 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
Changed
- PyTryFrom's error is always to
PyDowncastError
Fixed
- Fixed compilation on nightly since
use_extern_macroswas stabilized
Removed
- The pyobject_downcast macro
0.4.0 - 2018-07-30
Changed
- Merged both examples into one
- Rustfmt all the things :heavy_check_mark:
- Switched to Keep a Changelog
Removed
- Conversions from tuples to PyDict due to rust-lang/rust#52050
0.3.2 - 2018-07-22
Changed
- Replaced
concat_identswith mashup
0.3.1 - 2018-07-18
Fixed
- Fixed scoping bug in pyobject_native_type that would break rust-numpy
0.3.0 - 2018-07-18
Added
- 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
Changed
- Upgraded to syn 0.14 which means much better error messages :tada:
- 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.
0.2.7 - 2018-05-18
Fixed
- Fix nightly breakage with proc_macro_path
0.2.6 - 2018-04-03
Fixed
- Fix compatibility with TryFrom trait #137
0.2.5 - 2018-02-21
Added
- CPython 3.7 support
Fixed
- 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
Added
- Allow to get mutable ref from PyObject #106
- Drop
RefFromPyObjecttrait - Add Python::register_any() method
Fixed
- Fix impl
FromPyObjectforPy<T> - Mark method that work with raw pointers as unsafe #95
0.2.3 - 11-27-2017
Changed
- Rustup to 1.23.0-nightly 2017-11-07
Fixed
- Proper
c_charusage #93
Removed
- Remove use of now unneeded 'AsciiExt' trait
0.2.2 - 09-26-2017
Changed
- Rustup to 1.22.0-nightly 2017-09-30
0.2.1 - 09-26-2017
Fixed
- Fix rustc const_fn nightly breakage
0.2.0 - 08-12-2017
Added
- 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
Changed
- Allow to add gc support without implementing PyGCProtocol #57
- Refactor
PyErrimplementation. Droppyparameter from constructor.
0.1.0 - 07-23-2017
Added
- Initial release