Commit graph

296 commits

Author SHA1 Message Date
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
konstin e3b74498c8
Merge pull request #146 from konstin/modules_and_functions
Add test for module
2018-05-01 19:26:47 +02:00
konstin d0c42dfcc1 Fix compilation on nightly 2018-05-01 15:44:38 +02:00
konstin 2ee1102ef2 Add test for module 2018-04-30 23:32:25 +02:00
konstin 6113428746 Allow defining functions outside of the module declarations
This commit consists of
 * a proc macro to convert rust functions into python functions (`#[function]`),
 * a macro to register a function in a module (`add_function_to_module!`)
 * Documenting both the old and the new way in the book
2018-04-30 23:17:09 +02:00
konstin 7f68835877 Add unit test for module 2018-04-30 22:38:48 +02:00
konstin 45bb09b3e8 Relax return type requirements
Allows returning essentially arbitrary types by wrapping them into a PyResult. This is done with a conversion trait that specializes for PyResult.
2018-04-06 17:22:09 +02:00
Nikolay Kim b738c1a04b clippy warnings 2018-01-19 10:02:36 -08:00
Nikolay Kim 324a6b2697 drop RefFromPyObject; allow mut refs #106 2018-01-19 09:04:42 -08:00
messense 703883687a
Add features to tests 2017-09-19 20:03:03 +08:00
Nikolay Kim 0abc39ef4f prepare release 2017-08-12 09:31:14 -07:00
Nikolay Kim 25472e5428 cleanup warnings 2017-08-11 20:47:37 -07:00
Nikolay Kim 03b6e5c122 refactor object allocation system 2017-08-11 20:17:09 -07:00
Nikolay Kim ed8599cfd3 refactor __new__ method implementation 2017-08-08 00:27:33 -07:00
Nikolay Kim 3b00145040 fix #[prop] impl 2017-08-07 23:52:24 -07:00
messense 268d7fd3d2 Generate getters/setters (#76) 2017-08-05 10:53:23 +08:00
Nikolay Kim cd6558a19b Introduce IntoPyDictPointer similar to IntoPyTuple #69 2017-08-03 15:01:52 -07:00
Nikolay Kim e44365bec6 make cast_xxx api consistent with PyObject::from_xxx api 2017-08-01 14:29:25 -07:00
Nikolay Kim 325070f6c9 refactor downcast process 2017-07-28 23:19:00 -07:00
messense 0e2afb7b8b Add __dict__ support (#68) 2017-07-28 22:21:59 +08:00
messense ebcd4f5a33 subclass support (#64) 2017-07-27 23:05:15 +08:00
Nikolay Kim a120bbf15e Refactor implementation. Drop parameter from constructor 2017-07-26 01:11:00 -07:00
Nikolay Kim 86252cda4c simplify PyTypeInfo and PyTypeObject 2017-07-25 18:39:11 -07:00
Nikolay Kim 3ab5e4526c add weakref support #56 2017-07-24 13:03:18 -07:00
Nikolay Kim ce15dda5b6 Allow to add gc support without implementing PyGCProtocol #57 2017-07-24 12:19:05 -07:00
Nikolay Kim 98bdf63a4d use const_fn for type size and offset calculation 2017-07-21 09:48:48 -07:00
Nikolay Kim f344c4ce3d added try downcast methods to PyDowncastFrom trait 2017-07-19 13:01:59 -07:00
messense 512bd6a332
Drop a reference does nothing
https://doc.rust-lang.org/std/mem/fn.drop.html

> This function is not magic; it is literally defined as
> pub fn drop<T>(_x: T) { }
> Because _x is moved into the function, it is automatically dropped before the function returns.

warning: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing.
   --> tests/test_class.rs:471:9
    |
471 |         drop(inst);
    |         ^^^^^^^^^^
    |
    = note: #[warn(drop_ref)] on by default
note: argument has type &GCIntegration
   --> tests/test_class.rs:471:14
    |
471 |         drop(inst);
    |              ^^^^
    = help: for further information visit
    https://github.com/Manishearth/rust-clippy/wiki#drop_ref
2017-07-18 22:35:05 +08:00
messense 39a78aa407
Use is_null() to check whether a ptr is null 2017-07-18 22:32:31 +08:00
messense ae40a30243
Fix assign_op_pattern warning
https://github.com/Manishearth/rust-clippy/wiki#assign_op_pattern
2017-07-18 22:25:18 +08:00
messense 5a8fd2febc
Some more clippy warning fixes
[rustfix](https://github.com/killercup/rustfix) makes it much easier.
2017-07-18 22:10:56 +08:00
Nikolay Kim 2d06b07717 fix PyNumberProtocol methods #48 2017-07-17 16:49:19 -07:00
Nikolay Kim 4daac50781 remove associated_consts feature 2017-07-14 03:17:57 -07:00
Nikolay Kim c5f5620f77 rename token() to py() 2017-07-13 19:04:00 -07:00
Nikolay Kim fb8b32072f add basic args test 2017-07-13 18:50:34 -07:00
Nikolay Kim 8eb5dc0667 use associated consts 2017-07-13 16:45:50 -07:00
Nikolay Kim 27f8747ba6 safe typeob dealloc and tests for release pools 2017-07-13 13:01:31 -07:00
Nikolay Kim ce05cb91c0 fix pointer release list 2017-07-10 00:37:20 +06:00
Nikolay Kim a90d8c241f fix ref counter for get_kwargs 2017-07-04 10:24:04 +06:00
Nikolay Kim afe2324ecc fix api inconsystency 2017-06-29 11:23:55 +06:00
messense 2d217be349
Use isize for hash protocol 2017-06-24 23:43:01 +08:00
Nikolay Kim 3a2004eab2 rename PyInstance to PyObjectRef 2017-06-24 08:28:31 -07:00
Nikolay Kim 14c6aaad55 py.init returns ptr, init_ref and init_mut ref and mut ref 2017-06-23 15:15:07 -07:00
Nikolay Kim 8238a141ae py.init(..) return reference 2017-06-23 15:03:52 -07:00
Nikolay Kim a58aa7b5e6 rename PyObject 2017-06-22 20:56:09 -07:00
Nikolay Kim 00bd5615ed drop py paramater for protcol definitions 2017-06-22 12:32:01 -07:00
Nikolay Kim cb969161c6 fix unchecked downcast; added objects pool 2017-06-22 10:26:07 -07:00
Nikolay Kim c48386affa stopping point 2017-06-22 01:04:37 -07:00
Nikolay Kim af663e0f80 update PyType 2017-06-21 15:11:32 -07:00
Nikolay Kim 7cf8e1ab80 modify PyDict 2017-06-21 14:08:16 -07:00
Nikolay Kim 96788bf192 more types 2017-06-21 13:10:40 -07:00
Nikolay Kim 08ddb3f14f other types 2017-06-21 12:33:21 -07:00
Nikolay Kim bc0f9b014f convert PyString object 2017-06-20 23:27:30 -07:00
Nikolay Kim 40efa5c955 rename Ptr to Py 2017-06-19 23:57:34 -07:00
Nikolay Kim 7b5521fdb3 simplify instance ptr, droped #[py::ptr] annotation attr 2017-06-19 20:55:07 -07:00
messense 93b1dd8262 Add compile-test (#38) 2017-06-18 23:41:20 +08:00
Nikolay Kim 0679fec859 update docs 2017-06-15 11:13:58 -07:00
Nikolay Kim 5bf6ce3864 added __unicode__ method to PyObjectProtocol 2017-06-15 07:48:57 -07:00
Nikolay Kim 706477f139 replace py_fn! macro with pyfn attribute 2017-06-14 14:08:30 -07:00
messense d6979c8556 doc string should not contain /// (#32) 2017-06-13 12:15:44 +08:00
Nikolay Kim 7379766ea8 added __doc__ to methods 2017-06-12 21:08:59 -07:00
Nikolay Kim d7c3d34198 add class doc string 2017-06-12 17:15:26 -07:00
Nikolay Kim 26fccf6022 added proper PyString for py2 handling 2017-06-11 22:23:49 -07:00
Nikolay Kim c28a619efd add free list support 2017-06-09 14:27:37 -07:00
Nikolay Kim 5a44ccb40c add test for custom class name 2017-06-09 12:35:29 -07:00
Nikolay Kim ea8f11fa6d refactor PyTypeObject trait 2017-06-08 14:34:29 -07:00
Nikolay Kim 86c20bb139 Change sig of PyIterProtocol.__next__ method #18 2017-06-08 13:43:24 -07:00
Nikolay Kim a90c763bc0 add class and static methods #17 2017-06-08 11:29:40 -07:00
Nikolay Kim 84f5578997 varios cleanups 2017-06-05 20:25:00 -07:00
Nikolay Kim a448aa54cc clone_ref return Self 2017-06-03 17:42:12 -07:00
Nikolay Kim 57cc139c81 drop Py pointer 2017-06-03 17:27:26 -07:00
Nikolay Kim b75160daf3 remove pyobject lifetime 2017-06-02 18:58:16 -07:00
Nikolay Kim cbfdfa2d07 better naming 2017-06-01 15:06:48 -07:00
Nikolay Kim bcaaeb8522 simplify PythonToken 2017-06-01 09:45:00 -07:00
Nikolay Kim 6834a18a5b add ptr support to class 2017-05-31 20:50:40 -07:00
Nikolay Kim 2f3ea202b3 add mirror ptr types for native py classes 2017-05-31 15:52:13 -07:00
Nikolay Kim 92bf7b9c05 rename pptr to PyObjectPtr 2017-05-31 01:08:39 -07:00
Nikolay Kim 5d25c7deea simplify Py and PyPtr objects 2017-05-30 18:57:36 -07:00
Nikolay Kim 3040ac12b9 refactor ToPyObject 2017-05-30 17:23:23 -07:00
Nikolay Kim b8913a3705 refactor IntoPyObject trait; rename pptr into pyptr, introduce pptr pointers 2017-05-30 16:29:13 -07:00
Nikolay Kim 86a8dfec0c restore sequence and iterator objects 2017-05-29 23:04:02 -07:00
Nikolay Kim 61b8bd0695 fix ptr borrowing PyTuple::get_item 2017-05-29 18:36:44 -07:00
Nikolay Kim 4232caf3a3 update tests 2017-05-29 16:16:48 -07:00
Nikolay Kim ad38688378 fix sequence protocol; convert buffer protocol 2017-05-29 15:08:19 -07:00
Nikolay Kim 51ac8c9c78 better gil token scope 2017-05-29 13:30:38 -07:00
Nikolay Kim ea8ccf190a special treatment for native python objects 2017-05-29 02:47:27 -07:00
Nikolay Kim 969cba2c16 remove Token 2017-05-28 08:57:34 -07:00
Nikolay Kim bfb01f65d3 update tests 2017-05-27 11:43:45 -07:00
Nikolay Kim 6205be98b8 introduce PythonToken; cleanup number protocol 2017-05-27 10:49:38 -07:00
Nikolay Kim d165dbe4d4 fixed gil lifetime; pass py object into protocol methods 2017-05-26 14:43:28 -07:00
Nikolay Kim 0979653b98 various cleanups 2017-05-25 08:06:10 -07:00
Nikolay Kim f3176dacfc use pyptr for everything 2017-05-25 08:06:06 -07:00
Nikolay Kim 8fd6e3216f convert object and number protocols to new system 2017-05-20 22:18:31 -07:00
Nikolay Kim 3035ab280f update test_slice 2017-05-20 12:22:35 -07:00
Nikolay Kim 629f53ac52 new impl for sequence protocol 2017-05-20 12:15:28 -07:00
Nikolay Kim 452a4e8d7f more mapping protocol methods; start working on class tests 2017-05-20 10:40:33 -07:00
Nikolay Kim 1f2c927bd5 update buffer proto tests 2017-05-19 23:18:54 -07:00