Commit Graph

251 Commits

Author SHA1 Message Date
Daniel Grunwald 4b6b82037e Support compare() in Python 3; and add rich_compare(). 2017-04-06 18:59:10 -07:00
Daniel Grunwald 508937bada PyModule::add_class(): set __module__ on the type object 2017-02-19 16:15:33 +01:00
Daniel Grunwald e638b2654a Avoid Rust->Python->Rust roundtrip when using default value in argparse! optional parameter with reference extraction. 2017-01-27 23:21:57 +01:00
Daniel Grunwald 32e0d35603 Update documentation 2017-01-27 21:52:04 +01:00
Luthaf d615c319f6 Implement optional parameters for reference types 2017-01-26 21:35:16 +01:00
Guillaume Fraux 9707c5ab72 Implement optional values in argparse 2017-01-26 21:19:38 +01:00
Daniel Grunwald ca4203e4db Add PyBuffer::to_vec(). Avoids unnecessary zero-initialization when creating a Vec from a buffer. 2017-01-21 00:40:32 +01:00
Daniel Grunwald e3d6ac2ca8 Test extracting Vec<u8> using bytearray instead of bytes: On Python 2.7, the sequence protocol on bytes returns characters, not integers. 2017-01-20 23:22:45 +01:00
Daniel Grunwald 3152ef22f0 Expand on the buffer protocol.
When compiling with --feature nightly, we now use specialization to optimize extract::<Vec<PrimititeType>>() from an object implementing the buffer protocol.
2017-01-20 23:14:29 +01:00
Daniel Grunwald af8131f858 Initial attempt at the buffer protocol.
Does not yet provide a safe way of accessing the buffer contents.
2017-01-20 01:08:51 +01:00
Daniel Grunwald a48d74c62c Fix #19: allow extracting a Vec from anything implementing the sequence protocol, not just from `list`. 2017-01-20 01:08:12 +01:00
Daniel Grunwald fbe1a07d10 Mention `pub class` in the documentation. 2017-01-19 21:56:06 +01:00
Daniel Grunwald 06cab0a925 Fix #77: Add support for `py_class!(pub class ...)` 2017-01-19 21:50:49 +01:00
Matteo Bertini 3af2e3a9fa Fix __traverse__ list formatting (add missing newline) 2016-12-24 08:05:47 +01:00
Daniel Grunwald e2d7781433 Add "extension-module" feature to suppress linking pythonX.Y.so.
The symbols are instead kept unresolved, so that they can be used with
any compatible python interpreter, even if the target system uses a
statically linked python and lacks pythonX.Y.so altogether.
2016-12-17 21:17:11 +01:00
Daniel Grunwald 62a083e38f PyTuple: Add back iter() method (fixes build); require py: Python for as_slice().
This is a compromise solution: we require the GIL to be held when acquiring
the slice, but not later when using the slice.

We could bind the lifetime of the returned slice to the Python-token lifetime
to prevent accessing the slice when the GIL is not held, but that causes
problems with the FromPyObject impl.

Alternatively we could not require the GIL at all when accessing the PyTuple
(and thus keep the ops::Index and IntoIterator implementations), but that
relies on too many CPython implementation details for my taste.
2016-12-17 16:40:17 +01:00
Daniel Grunwald 4cb29c14fa Remove hacks for compatibility with old rust versions. The new minimum required version is Rust 1.13.0.
This significantly reduces our #[cfg(feature="nightly")] usage.
2016-12-17 16:05:21 +01:00
Daniel Grunwald f6ed2bbae9 Fix #10: Windows support.
We keep the #[link] attributes in #[cfg_attr(windows)] so that we don't require a nightly Rust build on non-Windows platforms.
This can be simplified once RFC 1717 is available in a stable rust version.

This commit also increases the minimum Rust version to 1.13.
2016-12-17 15:46:52 +01:00
Daniel Grunwald 278c1aece8 Fix #56: PyModuleDef changed "m_slots" to "m_reload" in Python 3.5. 2016-12-10 13:03:51 +01:00
Daniel Grunwald 2c89f62646 Fix non_upper_case_globals warning in py_class!() macro. 2016-12-10 12:41:08 +01:00
Daniel Grunwald 39e73b80dd Merge pull request #65 from sciyoshi/uppercase-static
Use uppercase names for static variables to fix warnings
2016-11-13 11:15:02 +01:00
Daniel Grunwald b34d815416 Mention to_py_object() and extract() in PyInt method documentation. 2016-11-13 11:14:13 +01:00
Samuel Cormier-Iijima d2b9533406 Use uppercase names for static variables to fix warnings 2016-11-11 21:50:18 -05:00
Colin Rofls be884bfe7f added example of implementing a basic python module 2016-10-26 15:55:50 -04:00
Daniel Grunwald 1129131501 Remove #[feature(unsafe_no_drop_flag)]: it's no longer necessary with the latest nightlies.
Warning: to use rust-cpython with --feature nightly, you now must use 'rustc 1.13.0-nightly (e9bc1bac8 2016-08-24)' or newer; or you'll get segfaults due to the drop flags.
Use of rust-cpython with stable rust is not affected.
2016-08-25 21:22:18 +02:00
Tibor Benke 227c0a6e41 Fix Markdown formatting in py_fn!'s documentation
Signed-off-by: Tibor Benke <tibor.benke@balabit.com>
2016-07-28 23:56:43 +02:00
Tibor Benke ca6bd439ae Correct documentation by replacing ExtractPyObject with FromPyObject
Signed-off-by: Tibor Benke <tibor.benke@balabit.com>
2016-07-28 23:56:35 +02:00
Tibor Benke d054115d85 Fix C FFI bug in PyErr
Use null-terminated strings to call PyErr_NewException()

Signed-off-by: Tibor Benke <ihrwein@gmail.com>
2016-07-28 15:43:06 +02:00
Samuel Cormier-Iijima 2e8d343b0f Add support for in-place numeric operators in py_class! 2016-06-14 16:00:55 -04:00
Samuel Cormier-Iijima 291e08e29a Remove CompareOp::Other, change to __richcmp__, and add tests 2016-06-06 20:43:16 -04:00
Samuel Cormier-Iijima 305bc4324d Add support for overloading comparison operators with __richcompare__ 2016-06-06 16:08:48 -04:00
Samuel Cormier-Iijima d77f93056e Add py_exception! macro for defining custom exception types 2016-06-05 18:12:25 -04:00
Daniel Grunwald d7446cf38f Add back tuple extraction. 2016-05-08 21:54:26 +02:00
Daniel Grunwald 0222176836 #40: split ExtractPyObject into two traits:
* FromPyObject for all conversions that don't need to borrow temporaries
* RefFromPyObject for extracting references out of temporaries
  (currently only used for extracting `&str`)
2016-05-08 21:25:09 +02:00
Daniel Grunwald 1a6e26f3c3 impl ToPyObject+ExtractPyObject for Option<T> 2016-05-08 17:51:16 +02:00
Daniel Grunwald 597893c621 py_class!: add __enter__ and __exit__ 2016-05-08 17:28:26 +02:00
Daniel Grunwald 453c43203f py_class!: __lshift__, __rshift__, __and__, __xor__, __or__ 2016-05-08 01:17:22 +02:00
Daniel Grunwald d26809122e Fix build with python 3. 2016-05-08 01:04:07 +02:00
Daniel Grunwald 4535827f8e py_class!: __add__, __sub__, __mul__, __neg__, __pos__, __abs__, __invert__ 2016-05-08 01:01:18 +02:00
Daniel Grunwald 04081bc8de __contains__: if extraction fails with TypeError, return False instead. 2016-05-07 23:31:46 +02:00
Daniel Grunwald 9eafaebfa2 py_class!: add __contains__ and __reversed__ 2016-05-07 23:19:26 +02:00
Daniel Grunwald 5886720c90 py_class!: add __setitem__ and __delitem__ 2016-05-07 23:01:45 +02:00
Daniel Grunwald 806f212dc4 py_class!: Make the body to be parsed the first argument. 2016-05-07 20:29:29 +02:00
Daniel Grunwald 20c2dcdba7 Simplify py_class_impl.py 2016-05-07 19:49:07 +02:00
Daniel Grunwald 3de859373c py_class!: add __getitem__ 2016-05-07 00:04:18 +02:00
Daniel Grunwald 713a5c53d3 py_class!: add __length_hint__, and map __len__ to both sq_length and mp_length. 2016-05-06 23:16:06 +02:00
Daniel Grunwald 318d9a9ef3 py_class!: add __call__ slot 2016-05-06 22:32:46 +02:00
Daniel Grunwald 78f673893d Make CallbackConverter output type an associated type. 2016-05-06 22:11:56 +02:00
Daniel Grunwald d21143fa39 py_class!: add __bool__ slot 2016-05-06 22:05:12 +02:00
Daniel Grunwald c06838a38e py_class!: add `__hash__` slot 2016-05-06 21:41:05 +02:00
Daniel Grunwald 933e0ed11d Add documentation and tests for string conversion special methods. 2016-05-06 21:24:32 +02:00
Daniel Grunwald 3d99a4ac3c Fix build with stable rust. 2016-05-05 07:48:29 +02:00
Daniel Grunwald 9ab3e9ea4e char::REPLACEMENT_CHARACTER isn't stable yet 2016-05-05 07:42:04 +02:00
Daniel Grunwald be0c1573aa py_class!: add support for __str__, __repr__, __unicode__ and __format__ 2016-05-05 07:31:14 +02:00
Daniel Grunwald b37fa220df On Python 2.7, PyString now corresponds to `basestring` instead of `str`.
`<str as ToPyObject>::ObjectType` now always is `PyString`
  (previously the type differed between Python 2.7 and 3.x)

`PyStringData` allows zero-copy access to Python's underlying string
representation.
2016-05-05 07:26:52 +02:00
Daniel Grunwald d68e664327 Add support for __iter__ and __next__ slots. 2016-04-30 23:41:18 +02:00
Daniel Grunwald 0445560241 Fix not(nightly) build 2016-04-17 23:42:23 +02:00
Daniel Grunwald 9aec3f33f1 We only need num-traits, not the full num crate. 2016-04-17 23:35:17 +02:00
Daniel Grunwald fffcf57834 Add support for __len__ special method. 2016-04-17 23:26:33 +02:00
Daniel Grunwald a14e3d2b77 Share macro code between tp_new and other class methods. 2016-04-17 18:04:58 +02:00
Daniel Grunwald fb5e4a1521 Generate repetive portions of py_class_impl! macro 2016-04-17 15:53:48 +02:00
Daniel Grunwald b721868c25 Document pitfalls with __traverse__ and RefCell. 2016-04-17 14:03:51 +02:00
Daniel Grunwald 4a01ed31fb Add documentation for __traverse__ and __clear__ 2016-04-14 19:44:08 +02:00
Daniel Grunwald cd88d28973 Add __clear__() special method.
Together with __traverse__, this can be used integrate Python classes
defined in Rust with the Python garbage collector.
2016-04-14 18:41:29 +02:00
Daniel Grunwald 2e977a9c21 gc integration: __traverse__ method 2016-04-14 18:41:29 +02:00
Daniel Grunwald 271a44475d panic::recover -> panic::catch_unwind 2016-04-14 18:41:29 +02:00
Daniel Grunwald cdf2dc8ff7 py_class!: add support for static class members
Fix bug that caused macro expansion to fail when a class had more than
one member.
2016-03-18 21:39:11 +01:00
Daniel Grunwald 3826b54a30 py_class!: Add support for class methods. 2016-03-16 22:18:48 +01:00
Daniel Grunwald f89f957dd4 Add support for @staticmethod. 2016-03-16 21:49:45 +01:00
Daniel Grunwald 80a4ad1466 Fix bug in py_class! when declaring an instance method with parameter list 2016-03-16 21:36:18 +01:00
Daniel Grunwald e608d5eabe Fix build with stable Rust. 2016-03-12 20:20:41 +01:00
Daniel Grunwald b43fa55e01 Delete old 'rustobject' code 2016-03-12 19:09:10 +01:00
Daniel Grunwald 337a90c2fb Reserve special method names
Some of these might work via the normal "instance method" functionality,
but we'll need testcases to be sure.
2016-03-12 19:08:51 +01:00
Daniel Grunwald 0bd9e3ebd2 Adjust extension test cases. 2016-03-12 18:14:21 +01:00
Daniel Grunwald cc81a01077 py_class!: add support for instance methods 2016-03-12 17:58:50 +01:00
Daniel Grunwald ab83b4f4a1 #14; Convert Rust panic to Python SystemError 2016-03-12 01:31:06 +01:00
Daniel Grunwald 309182cfe8 py_class!: Add support for "def __new__(cls)". 2016-03-12 00:06:39 +01:00
Daniel Grunwald 547879ef0f Remove rustobject (PyRustObject, TypeBuilder).
Add new py_class!() macro that generates a static type.
2016-03-09 01:07:50 +01:00
Daniel Grunwald 9b278ba56b Implement second form of py_fn!() (inline function definition) 2016-03-07 23:48:44 +01:00
Daniel Grunwald 3af6e17841 WIP: big macro refactoring
* Introduce py_argparse_parse_plist!() to allow a more flexible
  param list syntax.
* py_fn!() syntax changed
* Remove py_method!() / py_class_method!() macros.
  These are of limited use when building dynamic types,
  and not useful for py_class!() static types.
2016-03-07 23:22:44 +01:00
Daniel Grunwald be682d848f WIP: generalize py_argparse!() macro 2016-03-06 13:33:57 +01:00
Daniel Grunwald 162e20d9e4 Fix build with rust-stable: we can't mark functions as public if we
nest the impl block in fn init().
2016-03-06 11:02:48 +01:00
Daniel Grunwald 96ee652737 TypeBuilder: take &mut self instead of by-value self
py_class!() now can be used to define simple types.
2016-03-06 10:29:28 +01:00
Daniel Grunwald 061e46bde8 Rename PyRustTypeBuilder -> TypeBuilder 2016-03-06 06:33:16 +01:00
Daniel Grunwald acc5712536 Don't flatten the rustobject module + started implementing the py_class!() macro. 2016-03-06 06:29:43 +01:00
Daniel Grunwald d705620502 Add support for Rust stable.
All functions that depend on PyObject having the same memory layout
as *mut ffi::PyObject should now be hidden behind #[cfg(feature="nightly")].
2016-03-06 01:08:40 +01:00
Daniel Grunwald ad7f43efc7 Remove #![feature(optin_builtin_traits)] usage 2016-03-06 00:22:16 +01:00
Daniel Grunwald 7c90651157 Make use of nightly const_fn + shared features optional. 2016-03-06 00:03:17 +01:00
Daniel Grunwald 53353d374b Remove dependency on interpolate_idents.
We now use the generic <DUMMY> hack to avoid duplicate extern "C" symbols.
See rust-lang/rust#26201.

py_module_initializer!() calls now need to manually concatenate the module
name with the prefixes "init" and "PyInit_".
2016-03-05 23:20:53 +01:00
Daniel Grunwald a4f946096c Add back accidentally removed #[macro_use] 2016-03-05 17:44:30 +01:00
Daniel Grunwald 067f262876 Some documentation updates 2016-03-05 17:41:04 +01:00
Daniel Grunwald 5223cf4730 Fix build 2016-03-05 15:57:48 +01:00
Daniel Grunwald e5f77018f1 Allow using py_fn!() as argument to PyRustTypeBuilder::set_new() 2016-03-05 15:16:11 +01:00
Daniel Grunwald d22fbb31ce Refactor py_fn / py_method / py_class_method macros 2016-03-05 15:05:41 +01:00
Daniel Grunwald c01a1e8306 Use std::ptr::Shared in PyObject to enable the null pointer optimization. 2016-03-05 02:01:03 +01:00
Daniel Grunwald b617af7c5b Add PyTypeBuilder::set_new(). 2016-03-05 01:16:54 +01:00
Daniel Grunwald 249be0da3a Use #[cfg] on expressions to avoid some code duplication 2016-03-05 00:13:38 +01:00
Daniel Grunwald 109c704ad7 Fix "reexport of private crate" warning. 2016-03-04 21:35:52 +01:00
Joshua Miller 7092bd4362 remove duplicate word in docstring 2016-01-28 21:13:39 -06:00
Daniel Grunwald 168a060f4b Make PreparedString public. 2015-12-20 13:59:03 +01:00