Commit graph

652 commits

Author SHA1 Message Date
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
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
Daniel Grunwald c1682b68ac Add some tests for py_fn!() 2015-11-07 16:52:20 +01:00
Daniel Grunwald 32086a0ef5 Add back PyIterator, PyListIterator etc. 2015-10-29 02:36:50 +01:00
Daniel Grunwald 0a270a0583 Put Python argument at beginning of argument list.
Closes #33.
2015-10-26 23:52:18 +01:00
Daniel Grunwald 44611991c3 Remove 'p lifetime from PyObject (#15)
Since the `Python` token no longer is a part of `PyObject`,
lots of methods now require the token as additional argument.

This [breaking-change] breaks everything!
2015-10-25 17:55:29 +01:00
Daniel Grunwald 2b7d28f7fd Fix build with python 2.7 2015-09-20 19:43:24 +02:00
Daniel Grunwald 5bab92cbcc Add back PyTuple::as_slice() 2015-09-20 19:40:18 +02:00
Daniel Grunwald 080ca17621 Use concrete return types for str() and repr() 2015-09-20 19:39:59 +02:00
Daniel Grunwald b21a23b304 In python 3, use PyUnicode_AsUTF8AndSize for extracting UTF-8 from unicode objects. 2015-09-20 16:21:00 +02:00
Daniel Grunwald 65395a11b1 Merge branch 'python-eval' of https://github.com/murarth/rust-cpython 2015-09-19 16:14:42 +02:00
Daniel Grunwald d87a4596ef Dict tests.
(squashed pull request #31 without PyMapping)
2015-09-18 21:47:10 +02:00
Daniel Grunwald d00d59959a PySequence: change some more return types to PyResult<'p, PyObject<'p>> 2015-09-13 19:37:49 +02:00
Ewan Higgs 65967c2401 Use err::error_on_minusone to clean the code up a bit. 2015-09-08 12:54:38 +02:00
Ewan Higgs dbcdbedc59 Fix up get_item so it returns PyResult (w/o lifetime elision).
Make concat and repeate return PyObject. Also uncomment tests of concat and
repeat.
2015-09-07 23:03:22 +02:00
Ewan Higgs 809e9ab227 Use signed size to allow negative indexing. Add more tests. 2015-09-04 00:52:16 +02:00
Ewan Higgs f90d427454 Tidy up docs, make length and size the same. Test del_item. 2015-08-26 21:45:46 +02:00
Ewan Higgs a63aa43536 Use cast_into instead of from_object. More PySequence tests. 2015-08-26 21:13:13 +02:00
Ewan Higgs 636cfee28d Add tests for sequence. Make list and tuple use private PyObject again.
Add from_object that converts from PyObject into PyList and PyTuple.
Maybe it should be a macro as part of the newtype thing?
2015-08-26 21:13:13 +02:00
Ewan Higgs ff69760b99 Make ctors public for various object types. 2015-08-26 21:13:13 +02:00
Daniel Grunwald 160b23eff0 Remove unnecessary PyList -> PyObject -> PyList roundtrip 2015-08-26 20:19:58 +02:00
Ewan Higgs 173a6147f4 Add tests for list.rs. Still missing tests for extract. 2015-08-26 15:49:43 +02:00
Daniel Grunwald fa5c866cd6 Fix compiler error
Closes #27
2015-08-21 21:27:11 +02:00
Daniel Grunwald 6316ddc28b Fix some build errors 2015-08-20 21:14:47 +02:00
Daniel Grunwald a23b5b5910 Add parameter extraction support to py_fn! and py_method!.
These macros now support specifying an argument list:
`py_fn!(myfn(myarg: i32))`
will expect `myfn` to be a function with the signature:
`fn myfn<'p>(py: Python<'p>, myarg: i32) -> PyResult<'p, _>`

It can called from python as `myfn(1)`
or using keyword arguments: `myfn(myarg=1)`.

If no parameter list is specified (`py_fn!(myfn)`), the expected signature
now includes the keyword arguments:
`fn run<'p>(py: Python<'p>, args: &PyTuple<'p>, kwargs: Option<&PyDict<'p>>)`

Due to the additional `kwargs` argument, this is a [breaking-change].
2015-08-03 00:06:15 +02:00
Murarth 376ce21f2d Implement eval and run to execute Python code 2015-08-02 14:30:14 -07:00
Daniel Grunwald 072f4d24eb Initial version of argparse! 2015-08-02 21:56:03 +02:00
Murarth 74cdb841c6 Fix function and method name fields 2015-08-02 09:32:52 -07:00
gentoo90 a785ba87a9 Add an example of calling a python function from rust 2015-07-27 21:56:59 +03:00
Daniel Grunwald a884ee945c Change PyDict::items() to return Vec<(PyObject, PyObject)> instead of PyList.
This makes it possible iterate through a PyDict in Rust without
having to unpack tuples.

The PyList version of the method is renamed to `items_list()`.

[breaking-change]
2015-07-23 22:21:11 +02:00
Daniel Grunwald 63d5f2cd1a Rename PyErr::new() to PyErr::from_instance() and add use the name PyErr::new() for a more useful function.
Allows simplifying the common
`PyErr::new_lazy_init(py.get_type::<exc::ValueError>(), Some(msg.to_py_object(py).into_object()));`
to
`PyErr:🆕:<exc::ValueError, _>(py, msg)`

[breaking-change]
2015-07-23 22:21:11 +02:00
Daniel Grunwald 45d03bf8bb Replace FromPyObject with the more powerful ExtractPyObject.
This is a [breaking-change] and makes the trait more difficult to implement.
The usage through PyObject::extract() is unchanged.

This change allows extracting a `&str` through a temporary `Cow<str>`
without having to copy the string data from python to rust
(at least in cases where the python string is UTF-8 encoded).

This is preparation in hope I'll be able to make py_fn!()
automatically extract the function arguments.
2015-07-23 22:09:20 +02:00
Daniel Grunwald 1ad27b977e Merge pull request #20 from traff/master
Implement ToPyObject for HashMap->dict conversion.
2015-07-18 17:51:08 +02:00
Daniel Grunwald aac888b1b1 Fix python 2.7 build 2015-07-18 13:44:39 +02:00
Daniel Grunwald 1c4d71d712 Implement ToPyObject for all PythonObjects. 2015-07-18 13:40:26 +02:00
Dmitry Trofimov 2cfe522157 -Remove unsafe code;
-Panic if can't add item to dict;
-Test added;
2015-07-17 23:47:30 +02:00
Dmitry Trofimov 144d14f8c4 Implement ToPyObject for HashMap->dict conversion. 2015-07-17 22:07:37 +02:00
Daniel Grunwald f6718a271b Merge pull request #18 from traff/master
A method for accessing dictionary items.
2015-07-13 20:30:08 +02:00
Dmitry Trofimov d495eaaa4a Use err::cast_from_owned_ptr_or_panic, because PyDict_Items creates a new reference to list and can fail. 2015-07-09 00:51:12 +02:00
Daniel Grunwald 04ea39d26f Adjust to breaking change rust-lang/rust#26728 2015-07-08 22:47:56 +02:00
Dmitry Trofimov 79abfb99e8 A method for accessing dictionary items. 2015-07-08 01:26:50 +02:00
Daniel Grunwald cdca6f04e8 Fix python 3 build on windows. 2015-06-28 21:45:53 +02:00
Daniel Grunwald 76e38e1a54 Add python 3 support to PyRustTypeBuilder. 2015-06-28 04:12:51 +02:00
Daniel Grunwald 9f2244bbcf Remove unused imports and variables. 2015-06-27 23:49:53 +02:00
Daniel Grunwald 3b02ef5b99 Improve documentation. 2015-06-27 22:48:40 +02:00
Daniel Grunwald 6b496b4772 Prefer taking generic arguments by value. 2015-06-27 22:48:40 +02:00
Daniel Grunwald 1423162ad4 Call PyEval_InitThreads() in module initializer to ensure it's safe
to spawn rust threads in the extension module and acquire the GIL from
those threads.
2015-06-27 22:48:40 +02:00
Daniel Grunwald 280cdab7a2 Remove ToPythonPointer from public API 2015-06-27 22:48:40 +02:00
Daniel Grunwald e6b5312c81 mem::min_align_of -> mem::align_of
See rust#25646
2015-06-27 15:42:10 +02:00
Daniel Grunwald 5414cfb89c Add py_class_method!() 2015-06-26 03:31:35 +02:00
Daniel Grunwald 4980053e95 Add py_method!() macro for creating method descriptors. 2015-06-25 23:58:57 +02:00
Daniel Grunwald 5c74f55862 Change py_func!(py, f) to py_fn(f). 2015-06-25 00:02:56 +02:00
Daniel Grunwald 6e1fc35177 Split rustobject module. 2015-06-22 00:35:01 +02:00
Daniel Grunwald ba0643c11c Add support for creating instances of PyRustObjects that involve inheritance.
Prevent panics from unwinding into C code.
2015-06-20 16:02:09 +02:00
Daniel Grunwald 7c9b96ee90 PyRustObject: implement tp_dealloc by dropping the rust object 2015-06-20 00:30:40 +02:00
Daniel Grunwald fa32b52392 Remove unnecessary std::mem::copy_lifetime call. 2015-06-19 22:47:21 +02:00
Daniel Grunwald 2459d8f0c8 Fix #[cfg] condition for i64 on windows 2015-05-29 10:26:28 +02:00
Daniel Grunwald 73e4ce3f8b #11: Allow defining python extension types
Highly incomplete initial version.
2015-05-27 21:19:32 +02:00
Yoichi Imai 92a30e2c33 Added tests for i64. 2015-05-27 00:17:42 +09:00
Yoichi Imai e237bdd57f Converting function for i64 on 32bit/non-windows platform. 2015-05-26 23:48:01 +09:00
Yoichi Imai 8387932793 Generalize pylong_as_u64. 2015-05-26 23:44:29 +09:00
Daniel Grunwald 0b712d0679 Add methods for PyDict 2015-05-24 22:45:43 +02:00
Daniel Grunwald 8c8779e3fb py_module_initializer! for python 3 2015-05-24 20:06:08 +02:00
Daniel Grunwald db47455904 Add IntoIterator impl for PyTuple and PyList. 2015-05-24 18:20:35 +02:00
Daniel Grunwald d70479d257 Remove lifetime 's from FromPyObject.
This allows implementing `FromPyObject` for `Vec<T>`.
It also means that `obj.extract::<Cow<str>>()` won't be supported, but we
have `PyString::extract()` for that now.
2015-05-24 17:12:12 +02:00
Daniel Grunwald a106cabc4a Initial support for python 3. 2015-05-23 23:52:38 +02:00
James Salter b1eca56ec3 Python 3 build support
* Add python3-sys to rust-cpython as an optional feature, and
  make python27-sys also optional, but still the default
* Parametrise python27-sys/build.rs so that it is python
  version independent, and clone it into python3-sys/build.rs.
  Hopefully this can continue to be maintained as an identical
  file.
* python27-sys and python3-sys gain features for explicitly
  selecting a python version to link to. for python27-sys,
  there's currently only python27; for python3-sys there's
  python 3.4 and 3.5.
* explicitly tell travis to use nightlies (seems to have
  started trying to use 1.0.0)
2015-05-23 15:23:08 +01:00
Daniel Grunwald d4bdcc5cbd Fix warning: unnecessary 'unsafe' block 2015-05-17 21:43:12 +02:00
Daniel Grunwald 6a0f951e94 Use try!() instead of unwrap() 2015-05-17 21:42:34 +02:00
James Salter b3e20e900b fix issues in bb13ec, support utf16, python fom PATH
* fix ucs4 build broken by bb13ec
* add utf16 decoding to unicode.from_py_object for
  narrow unicode builds
* change unicode narrow/wide cfg flag to be
  Py_UNICODE_SIZE_4 not Py_UNICODE_WIDE, which doesn't
  appear in sysconfig
* support framework builds on os x
* python27-sys exports compilation flags as cargo vars,
  and rust-python resurrects them as cfg flags
* travis runs against local python27-sys
* rust-cpython depends on git python27-sys, because
  the one on cargo is now incompatible with it (since bb13ec)
2015-05-17 13:20:58 +01:00
James Salter c1acf04e0e Fix refs to std::num::cast -> num::traits::cast
This function was removed from the rust stdlib in
https://github.com/rust-lang/rust/commit/eeb948.

Updated to refer to the 'num' crate instead.
2015-05-09 17:12:26 +01:00
Daniel Grunwald c07b0468e8 MIT license headers 2015-04-19 05:22:03 +02:00
Daniel Grunwald b3fe39c3c4 call() 2015-04-19 05:01:19 +02:00
Daniel Grunwald fbd60f11f4 Simplify ToPyObject: directly return the object without PyResult
to_py_object should always succeed (modulo out-of-memory)
2015-04-19 01:07:14 +02:00
Daniel Grunwald 1e5605036e Update documentation 2015-04-19 00:39:04 +02:00
Daniel Grunwald 5d3d03bcac Remove dead code 2015-04-18 22:25:03 +02:00
Daniel Grunwald 5a303789b9 Don't export cstr! macro 2015-04-18 22:20:19 +02:00
Daniel Grunwald f8e24a870c Add support for exposing rust functions to python 2015-04-18 20:17:25 +02:00
Daniel Grunwald 60360fa03f Fix py_module_initializer 2015-04-18 01:52:48 +02:00
Daniel Grunwald 2a91b00abe Fix segfault due to POST_DROP_USIZE and update to latest nightly 2015-04-17 22:13:15 +02:00
Daniel Grunwald dd20e00c77 Update for rust beta. 2015-03-09 14:31:20 +01:00
Daniel Grunwald 913f3ea2e5 Adjust to rust nightly 2015-03-08 15:29:44 +01:00
Daniel Grunwald f423acee6d Update to current rust nightly 2015-01-12 03:17:29 +01:00
Daniel Grunwald 5566faf235 py_module_initializer macro 2015-01-12 03:00:34 +01:00
Daniel Grunwald 55ea6cc85b Add PyList, PyInt, PyLong and PyFloat. 2015-01-11 18:56:59 +01:00
Daniel Grunwald 284f7a7931 Fix build 2015-01-11 05:52:11 +01:00
Daniel Grunwald 6d9fd93df2 Go back to 1.0-alpha due to rust issue 21510 2015-01-11 05:41:55 +01:00
Daniel Grunwald d8a1fcd869 update for rust nightly 2015-01-11 04:21:05 +01:00
Daniel Grunwald 706d7c1b78 Port to new rust nighly and add CStr. 2015-01-08 09:20:05 +01:00
Daniel Grunwald fd2ae9ce60 delete pyptr 2015-01-08 09:19:35 +01:00
Daniel Grunwald b3be3d35de Change API for owned python pointers:
replace PyPtr<'p, PyObject<'p>> with PyObject<'p>

Borrowed python pointers stay &PyObject<'p>.
Note: this means the internal representation of borrowed python pointers
changes from "*mut PyObject" to "&*mut PyObject".
2015-01-07 01:40:48 +01:00
Daniel Grunwald 1c7eb2340d Add PyBool and PyTuple impls 2015-01-06 01:04:25 +01:00
Daniel Grunwald 038dfc7474 ToPyObject simplification 2015-01-05 21:14:01 +01:00
Daniel Grunwald 540f934123 Objects module 2015-01-05 17:06:43 +01:00
Daniel Grunwald c61e1e51f4 Add PyDict and unchecked downcasts. 2015-01-05 17:06:41 +01:00
Daniel Grunwald eca5b4039b Split PythonObjectDowncast from PythonObject 2015-01-05 17:06:40 +01:00
Daniel Grunwald df14c894b2 Move objectprotocol to separate module 2015-01-05 17:06:38 +01:00
Daniel Grunwald 61acf98aec Fix threading 2015-01-05 17:06:36 +01:00
Daniel Grunwald 335913e273 Some minor improvements 2015-01-05 17:06:34 +01:00
Daniel Grunwald 60d07011a3 freethreaded-python 2015-01-05 17:06:31 +01:00
Daniel Grunwald 5569ae3bbc Remove BorrowAsPyObject, and simplify PyPtr by moving the 'p bound into the PythonObject definition. 2015-01-05 17:06:28 +01:00
Daniel Grunwald d247b138c5 Rename PyTypeObject and use associated type for ToPyObject. 2015-01-05 17:06:25 +01:00
Daniel Grunwald 7ccf5c88f1 Initial commit 2015-01-05 17:05:53 +01:00