Commit Graph

392 Commits

Author SHA1 Message Date
kngwyu 5ab216dfe0 Implement IntoPyObject to PyRef 2019-08-11 18:43:50 +09:00
Yuji Kanagawa 1f85593d0a
Merge pull request #564 from kngwyu/paste
Replace mashup with paste
2019-08-11 18:42:21 +09:00
konstin 98b7079183
Merge pull request #540 from PyO3/disable_broken_subclassing
Disable segfaulty subclassing by default
2019-08-05 14:39:46 +02:00
konstin 664209b3ed
Merge pull request #558 from danieldk/fix-iter-null-deref
Fix NULL pointer deref when creating iterator for non-iterable
2019-08-05 14:39:33 +02:00
konstin 5096f936dc Disable segfaulty subclassing by default
See https://github.com/PyO3/pyo3/issues/220 and https://github.com/PyO3/pyo3/issues/407 for details on those segfaults
2019-08-05 11:52:47 +02:00
konstin 38f25f6462
Merge pull request #550 from hengchu/fix/rhs-arithmetic
Attempting to fix #549
2019-08-05 11:40:24 +02:00
kngwyu 41f31e85fd Replace mashup with paste 2019-08-04 23:50:10 +09:00
Alexander Niederbühl 9d9ebfa556 Disable test for windows
The test fails for Windows, since the error message is provided by the
OS.
2019-08-03 22:36:23 +02:00
Alexander Niederbühl 618b9090ed Add test for exception with custom error
Also simplify the old test.
2019-08-03 22:08:51 +02:00
Alexander Niederbühl 1e01f4f8cc Use to_string() instead of description() for exception messages
`description()` is soft-deprecated and can differ from `to_string()`.

For example for NotFound error:
* `description()`: "entity not found"
* `to_string()`: "No such file or directory (os error 2)"

Since io errors provide their error code through the Display trait there
is no need to get it through `raw_os_error()`.
2019-08-01 00:48:56 +02:00
Daniël de Kok ac28a3114b Fix NULL pointer deref when creating iterator for non-iterable
Fixes #494.
2019-07-27 19:58:18 +02:00
hengchu 149163e059 commenting out one of the rhs arithmetics test case for now... 2019-07-24 16:27:07 -04:00
hengchu 3596cc65c0 adding a small testcase for rhs arithmetics 2019-07-21 23:05:03 -04:00
Alexander Niederbühl ceefa7cc27 Add __clear__ for test class 2019-07-14 20:45:05 +02:00
Yuji Kanagawa 670b41c898
Merge pull request #530 from Alexander-N/gc-test
Implement PyGCProtocol in test class
2019-07-15 00:47:21 +09:00
Yuji Kanagawa 2d879bc853
Merge pull request #529 from kngwyu/getter-py
Allow py: Python as an argument of getter
2019-07-15 00:44:33 +09:00
Alexander Niederbühl 72339e5bf9 Implement PyGCProtocol in test class
For the garbage collection to work the PyGCProtocol has to be
implemented. Ideally it should not even get compiled if it doesn't since
a missing tp_traverse can produce a segfault.
2019-07-14 15:54:45 +02:00
kngwyu a6438ebb10 Handle a corner case in which a getter takes multiple Python 2019-07-14 14:35:50 +09:00
kngwyu 60cbe2f47d Add a test that confirms __getattr__ doesn't override 2019-07-13 23:46:25 +09:00
kngwyu 383d0d3bac Do not execute test_compule_error in kcov 2019-07-13 15:00:19 +09:00
kngwyu 721e746585 Allow py: Python as an argument of getter 2019-07-12 23:41:13 +09:00
Georg Brandl ab802cd829 Document and test argument parsing annotations for pyfunctions 2019-06-16 22:13:50 +09:00
Georg Brandl cba1657460 Adjust the varargs/kwds objects to remove arguments consumed by parameters
Also fix some other validation issues and add more tests.

fixes #420
2019-06-16 22:13:50 +09:00
Yuji Kanagawa 3e69389e68
Merge pull request #512 from kngwyu/expose-py-run
Expose py_run! macro
2019-06-15 23:50:14 +09:00
Yuji Kanagawa 05b0cb66f8
Merge pull request #506 from PyO3/more_error_information
Print error before on class init panic
2019-06-14 14:16:47 +09:00
kngwyu 0f9a3b1194 Expose py_run macro 2019-06-13 18:18:06 +09:00
konstin dfd5a2abb8 Print error before on class init panic
Inspired by https://github.com/rust-numpy/rust-numpy/issues/97, also fixes some warnings from the latest nightly
2019-06-05 12:01:09 +02:00
kngwyu 35f5301675 Reject generics explicitly for #[pyclass] 2019-06-05 18:46:17 +09:00
Martin Larralde 99fdafbb88 Allow setting the module name for a pyclass (#499)
* Add `MODULE` const value to `PyTypeInfo` trait

* Allow setting module name in `pyclass` macro arguments

* Add `$module` argument to `pyobject_native_type` macro in `pyo3::types`

* Set the right module for builtin types in `pyo3::types`

* Add `module` argument to example `word_count.WordCounter` class

* Add `module` argument of `pyclass` macro to guide

* Reformat code using `rustfmt`

* Add tests and entry in CHANGELOG.md for `module` argument in `pyclass`

* Make `$module` parameter in `pyobject_native_type` optional

* Make `pyobject_native_type` declare module as `Some("builtins")` by default
2019-06-03 12:18:44 +09:00
kngwyu 4bf448ecaa Complete the PR 2019-05-25 23:19:07 +09:00
Georg Brandl 39d3ceb551 Make PyTuple constructors return &PyTuple 2019-05-25 22:40:32 +09:00
Alexander Niederbühl 299d325375 Enable setting the module name of a class
This is relevant for pickling objects.
2019-05-08 23:39:22 +02:00
kngwyu cf689840ef Allow lifetime in pymethods 2019-04-26 14:28:29 +09:00
Yuji Kanagawa 60cd0d09c4
Merge pull request #419 from kngwyu/pyclass-regression
Allow slf: PyRef<Self>/PyRefMut<Self> in pymethods
2019-04-24 14:10:28 +09:00
Alexander Niederbühl faa3feda3f Merge branch 'master' into doctest 2019-04-23 21:58:09 +02:00
kngwyu a7736dd51b Add test of slf: PyRefMut<_> 2019-04-23 23:16:09 +09:00
kngwyu 09bf9bbf4a Allow slf: PyRef<Self> by replacing Self 2019-04-23 23:16:09 +09:00
kngwyu b2e01066f0 Introduce FromPyPointer for slf: PyRef/PyRefMut 2019-04-23 23:16:09 +09:00
kngwyu 515c7beac0 Allow slf: Py<Self>/PyRef<Self>/PyRefMut<Self> in pymethods 2019-04-23 23:16:08 +09:00
Alexander Niederbühl f1b0288d3c Remove docmatic and several workarounds for the doctests 2019-04-19 22:47:21 +02:00
Alexander Niederbühl 5858823e83 Test readme and user guide with doc-comment
Also rename some files for consistency.
2019-04-19 22:38:11 +02:00
Georg Brandl 117f6eb47d Allow omitting PyResult wrapping in property get/set methods
fixes #443
2019-04-17 22:29:12 +02:00
Martin Larralde edd2fba2d6 Add tests for quotes in class/method documentation 2019-04-15 01:29:13 +02:00
Martin Larralde 51be6a60fe Run `cargo fmt` on `pyo3-derive-backend` and `tests` 2019-04-14 01:50:00 +02:00
Martin Larralde 3f4f068c7f Ensure `#[getter]` doc is exposed as the `__doc__` of the descriptor 2019-04-14 00:23:59 +02:00
Martin Larralde 569a7e9e95 Add more tests for `#[pymethods]` docstrings 2019-04-13 23:25:45 +02:00
Martin Larralde dfd1fa55c0 Remove dead code from `tests/test_sequence.rs` 2019-03-31 05:29:25 +02:00
Martin Larralde 3b7e83fb7c Run `cargo fmt` on `tests/test_sequence.rs` 2019-03-31 05:28:52 +02:00
Martin Larralde dd2f1ba16a Add tests for `PySequenceProtocol` in `tests/test_sequence.rs` 2019-03-31 05:28:52 +02:00
ijl 2bb0d05a30 Drop support for python2 2019-03-29 12:37:26 +00:00
konstin 97189a16b9 Try fixing cargo fmt on travis ci 2019-03-24 17:19:15 +01:00
konstin f75f742c58 Fix CStr usages 2019-03-20 21:48:41 +01:00
Miles Granger 711155d7ad Update tests & docs with IntoPyDict::into_py_dict(py) 2019-03-20 20:04:00 +01:00
konstin 59a9d4fd9f
Merge branch 'master' into pyany 2019-03-18 01:00:26 +01:00
Alexander Niederbühl f79f84a31b Complete __dict__ support
Add `__dict__` slot to tp_getset of type_object. See
https://bugs.python.org/issue16272 for why this is necessary.
2019-03-17 20:31:05 +01:00
konstin 6540a374af Export pyo3_derive_backend::pyimpl::impl_methods 2019-03-16 11:38:05 +01:00
Alexander Niederbühl e2e4733b82 Test examples in user guide with travis
Test could only be activated for Python 3.5 and some tests had to be
ignored, see #381 and #387.
2019-03-09 23:54:28 +01:00
kngwyu 874d8a0835 Rename PyObjectRef with PyAny 2019-03-04 13:50:43 +09:00
kngwyu 86d239e445 Rename ToPyPointer with AsPyPointer 2019-02-24 16:20:04 +09:00
konstin d3743fec64 Python 2 2019-02-23 18:42:40 +01:00
konstin 6cd07c369c Simpler new and clippy fixes 2019-02-23 18:38:00 +01:00
konstin ad590bd158 Some api improvements 2019-02-23 18:01:22 +01:00
konstin d02f7c3aa5 Big proc macro refactoring
* Removed a lot of clutter, unified some code
 * Started using syn::parse::Parse for pyfunction attributes 
 * No more newlines between imports
 * 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.
2019-02-18 20:07:56 +01:00
konstin 2105fa896b Add PyTuple tests
Initially proposed by athre0z in #307, with the changes from latest master
2019-02-13 22:30:46 +01:00
konstin 6cb098ee12 Replace py.init_[ref|mut] with Py[Ref|Mut]::new 2019-02-13 21:52:21 +01:00
konstin 1a489d2829 Make the init methods use a value instead of a function 2019-02-13 13:59:47 +01:00
kngwyu 4a552a88cf Py::new_ref -> PyRef::new 2019-02-08 23:51:14 +09:00
kngwyu 22687c3712 Modify PyIterProtocol to take PyRefMut 2019-02-05 17:27:34 +09:00
kngwyu 76e30b5248 Remove ToPyPointer and so on from pyclass 2019-02-04 00:34:06 +09:00
konstin 9e53418aad Less feature(specialization) 2019-02-01 18:09:51 +01:00
konstin 328d61ca3b Fix test for python2 2019-02-01 17:15:33 +01:00
konstin c868cc3e4b Fix test 2019-02-01 16:31:18 +01:00
konstin c71c116f29 Better trait bounds with PyMethodsProtocol 2019-02-01 16:23:34 +01:00
konstin 0495ee52d3 ffi2 to rust 2018 2019-02-01 15:25:58 +01:00
konstin 936f0153e8 Migrate to rust 2018 2019-02-01 14:23:29 +01:00
Alexander Niederbühl fbd012601e Fix kwargs
kwargs was broken by a check for the number of given arguments. Only
apply this check if no arbitary number of keyword arguments are allowed
by a "**" parameter of `#[args(...)`.

Closes #318
2019-01-25 00:47:28 +01:00
Alexander Niederbühl 053fa5b984 Avoid race condition in gc tests
To avoid a segfault when the object is collected, disable garbage
collection for the duration of `gc_integration2`.

Closes #198
2019-01-10 00:46:24 +01:00
konstin 89872dceb9 Replace deprecated methods 2018-12-15 14:15:43 +01:00
kngwyu 25a5b74ba6 Use linked list in ReleasePool 2018-11-21 16:00:26 +09:00
konstin 9c8c5a6063 Rename #[pymodinit] to #[pymodule] 2018-11-15 19:43:29 +01:00
konstin 863ffb161f Add wrap_module macro 2018-11-15 19:43:29 +01:00
konstin 57afb51604 Remove PyToken completely; Fixes #94 2018-11-12 14:42:21 +01:00
konstin fb2349b6ec Remove PyToken usages from tests 2018-11-12 14:41:29 +01:00
konstin dbaa2de061 Small improvements around function calling 2018-10-31 11:38:45 +01:00
konstin 71c584a110 De-specialize ToBorrowedObject 2018-10-03 21:04:49 +02:00
konstin 3a95d163ca New rustfmt version
You might need to upgrade to the latest nightly to get the same results
2018-09-28 23:34:57 +02:00
konstin 302c099a76 Big refactoring to shrink the prelude 2018-09-21 23:34:28 +02:00
konstin d92e522243 Syn 0.15 2018-09-09 00:20:04 +02:00
konstin 4c1ff24b2b Fix raw identifiers 2018-09-03 20:50:18 +02:00
konstin f58549f1d8 Get rid of a bunch of PyTokens 2018-09-02 23:33:45 +02:00
konstin 7c0379b13a Remove many specialization uses
From over a hundret "default fn" uses down to 17
2018-08-25 20:48:17 +02:00
konstin 3e7d5280ca
Merge pull request #200 from pganssle/datetime
Initial datetime bindings
2018-08-22 18:00:05 +02:00
Paul Ganssle a05a78f7e0
Use smallest types for Py{Date}{Time} constructors
Because it's unlikely that anything other than the `year` parameter will
change in the C Python API, the rest can be restricted to their logical
ranges, which improves the compile-time error checking.
2018-08-21 18:33:33 -04:00
Paul Ganssle 5d5689f95b
Switch Py{Date}{Time} constructor parameters to i32
While the valid ranges for the constructor parameters is the same when
expressed as either u32 or i32, since the Python API uses i32 in their
public interface, we won't have to make any changes to the signatures if
the Python behavior changes (e.g. supporting negative years) without
their API changing.
2018-08-21 18:33:33 -04:00
Paul Ganssle 078bea4345
Move rustapi_module into examples
This is really a test module, but the Rust convention is to put
something like this under examples/, and when it lands, we can take
advantage of "Project-based Examples for Cargo Projects" - RFC link
at https://github.com/rust-lang/rfcs/pull/2517
2018-08-21 18:33:33 -04:00
Paul Ganssle 3357fabb35
Remove 'Component' from ComponentAccess Traits 2018-08-21 18:33:32 -04:00
Paul Ganssle 003351ba61
Get rid of unwrap_py! macro 2018-08-21 18:33:32 -04:00
Paul Ganssle bcc27bd522
Change datetime constructors to use Rust Option
This makes it cleaner to call PyTime::new and PyDateTime::new from Rust
without needing to retrieve a Python None.
2018-08-21 18:33:32 -04:00
Paul Ganssle 09ee50d4ca
Add tests for datetime overflow behavior
It *should* be safe to cast u32 to i32 in the case of the Py{Date}{Time}
constructors, because any unsigned values that would overflow would
raise an error anyway.

This adds tests to ensure that this is the case - they currently fail on
Python <3.6 because of a known issue with the Python C API.
2018-08-21 18:33:31 -04:00
konstin 771d59b913 Fix another bunch of clippy lints 2018-08-21 23:51:13 +02:00
Paul Ganssle ee658de1fb
Run rustfmt after datetime changes
Most of the datetime related changes were made before pyo3 switched to
using rustfmt, so I ran rustfmt only on the final commit to make it
easier to rewrite history as necessary (for fixups and whatnot).
2018-08-21 14:29:36 -04:00
Paul Ganssle 996c2baec8
Add preliminary Python 2 support to datetime bindings
The bounds checking tests are xfail because the datetime "fast path"
constructor didn't do bounds checking until bpo-29100 was resolved in
CPython commit b67f0967386a9c90411, which was merged for Python 3.6.

This functionality should be simple to backport to earlier versions in a
future commit.

BPO issue:
https://bugs.python.org/issue29100

CPython commit:
b67f096738
2018-08-21 14:29:36 -04:00
Paul Ganssle cd6f7295a1
Add type checking FFI bindings 2018-08-21 14:29:36 -04:00
Paul Ganssle f701bccbdf
Add PyTime component accessors 2018-08-21 14:29:36 -04:00
Paul Ganssle ecf3aaafb2
Add PyDateTime component accessors 2018-08-21 14:29:35 -04:00
Paul Ganssle 0b39452276
Add accessors to PyDateTime_Date 2018-08-21 14:29:35 -04:00
Paul Ganssle 08e7e0f55a
Add PyDelta component accessors
Adds the PyDateTime_DELTA_GET_{comp} accessors and bindings to them in
the PyDelta object.
2018-08-21 14:29:35 -04:00
Paul Ganssle 149a13cbfa
Fix how the test rustapi_module is built 2018-08-21 14:29:35 -04:00
Paul Ganssle cca8eb43d6
Add gitignore to rustapi_module 2018-08-21 14:29:35 -04:00
Paul Ganssle d67d2c4265
Update rustapi_module to new macro methods 2018-08-21 14:29:35 -04:00
Paul Ganssle f5e0785654
Add time_with_fold 2018-08-21 14:29:35 -04:00
Paul Ganssle c49bbe4549
Add PyDateTime::from_timestamp 2018-08-21 14:29:34 -04:00
Paul Ganssle 7256bc85b7
Add PyDate::from_timestamp 2018-08-21 14:29:34 -04:00
Paul Ganssle ee85940579
Add new requirements-dev.txt file 2018-08-21 14:29:34 -04:00
Paul Ganssle 8d781cb03f
Add datetime.timedelta 2018-08-21 14:29:34 -04:00
Paul Ganssle f45362943d
Add datetime.time 2018-08-21 14:29:34 -04:00
Paul Ganssle d7b90c1b3a
Add datetime.datetime and switch to PyResult<Py<T>> 2018-08-21 14:29:34 -04:00
Paul Ganssle 52a64a9240
Add rustapi_module test 2018-08-21 14:29:34 -04:00
konstin db4a2d9017 Get rid of the pyobject_extract macro 2018-08-20 22:53:43 +02:00
konstin 991a8b94d2 More nightly fixes 2018-08-19 20:42:17 +02:00
konstin b12b65cfae Cleanup 2018-08-19 20:06:47 +02:00
konstin fe8a719ee1 Rustfmt all the things ✔️ 2018-07-30 23:05:10 +02:00
konstin 83db765889 Refactoring 2018-07-30 22:56:25 +02:00
konstin 3adcac6e61 Replace concat_idents with mashup 2018-07-18 23:17:05 +02:00
konstin d59bebcc38 Upgrade from proc_macro to use_extern_macros 2018-07-18 13:08:05 +02:00
konstin dbd74401eb Rename the `base` option in the `pyclass` macro to `extends`
"extends" is intuitive for people with java or ES6 experience, and it also aligns pyo3 with
wasm-bindgen (see https://github.com/rustwasm/rfcs/pull/2)
2018-07-15 12:08:20 +02:00
konstin fe931a594f #[pymodinit] now uses the function name as default module name 2018-07-10 00:13:02 +02:00
konstin 4013d40897 Add `py` prefix to the proc macros and move them into the root module
This is important because `proc_macro_path_invoc` isn't going to be stabilized soon.
2018-07-08 23:33:48 +02:00
konstin 562d417517 Fix bug which made code generation dependend on argument ordering 2018-07-06 12:56:40 +02:00
konstin 6645708e4f Get rid of #[py*] methods 2018-07-03 20:42:02 +02:00
konstin 80096ae143 rudtfmt the tests
With some careful refactoring alongside
2018-06-15 21:21:12 +02:00
konstin f9ff7cd465 Ignore test because of a docmatic bug
See https://github.com/assert-rs/docmatic/issues/4
2018-06-15 15:59:22 +02:00
konstin f2be73c4f3 Fix tests 2018-06-14 16:20:55 +02:00
konstin 76510bdd0e Refactoring
This is actually a failed bugfix attempt, but still useful
2018-06-13 18:02:45 +02:00
konstin 60d1565a8f Always clone on in getters
Since copy implies clone, this doesn't  code.
2018-06-12 17:47:24 +02:00
Kevin Phillips 7412eda4b0 Changed the import for the test_module to include ToPyObject in order to make travis CI pass 2018-05-21 16:34:44 +02:00
Kevin Phillips 9544adaf1d Marked from_code on PyModule to only work with Python 3. It could work with Python 2 if you call, for example, Py_CompileStringFlags and pass std::prt::null_mut() as the last argument and when calling PyImport_ExecCodeModuleEx passing mutable pointers for the first and last arguments. I also added a test for this to test_module.rs 2018-05-21 16:03:21 +02:00
Martin Larralde 31ff8356b6 Add some additional test cases to `test_methods` 2018-05-14 18:47:13 +02:00
konstin 858a124374 Merge master 2018-05-05 15:50:04 +02:00
konstin 57048bc5fc Merge branch 'master' into capybara 2018-05-02 19:32:56 +02:00
konstin 15204bab56 Better way to add functions to modules 2018-05-02 19:26:54 +02:00
Martin Larralde 80b3ce7801 Use new `docmatic` API 2018-05-01 22:59:49 +02:00
Martin Larralde 57de066a6b Use `docmatic` with additional arguments 2018-05-01 22:59:49 +02:00
Martin Larralde 87e3f5d600 Make `guide_path` immutable in `test_doc` 2018-05-01 22:59:49 +02:00
Martin Larralde 4dccd556b7 Fix `conversions.md` stubs to work with Py2 as well 2018-05-01 22:59:49 +02:00
Martin Larralde f12af1653d Fix guide documentation to pass doctests 2018-05-01 22:59:49 +02:00
Martin Larralde aed4af9a1e Add documentation tests for `guide/exception.md` 2018-05-01 22:59:49 +02:00
Martin Larralde 79491db60a Add documentation tests for `guide/overview.md` 2018-05-01 22:59:49 +02:00
konstin 0880ac166c Merge master 2018-05-01 20:41:35 +02:00
konstin 5a8f5034d6 Fix make test
This is a follow-up to #147
2018-05-01 20:15:43 +02:00