Nikolay Kim
83632604ae
create unicode object from object with buffer api support
2017-05-02 21:19:51 -07:00
Nikolay Kim
a65f9e03fc
fix __buffer_get__ return type
2017-04-30 01:17:22 -07:00
Nikolay Kim
257be7119c
added convinience method
2017-04-29 21:31:35 -07:00
Nikolay Kim
8d728663d7
introduce ToPyTuple trait, that simplifies ObjectProtoco.call method
2017-04-28 16:30:46 -07:00
Nikolay Kim
f651b442ba
add PyByteArray
2017-04-27 21:22:15 -07:00
Nikolay Kim
665921e84e
add PySlice
2017-04-27 19:44:56 -07:00
Nikolay Kim
8ccb749c1e
add PyErr to io::Error convert
2017-04-27 19:39:47 -07:00
Nikolay Kim
ffe774a8cc
add class properties
2017-04-06 19:20:06 -07:00
Nikolay Kim
364d7af69c
pass Py_3_x cfg var with links
2017-04-06 18:59:10 -07:00
Nikolay Kim
23c36f5714
pyclass can provide buffer interface
2017-04-06 18:59:10 -07:00
Nikolay Kim
9bb6ec20a1
add PyAsyncMethods support
2017-04-06 18:59:10 -07:00
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