You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by we...@apache.org on 2017/07/17 13:00:58 UTC

arrow git commit: ARROW-1222: [Python] Raise exception when passing unsupported Python object type to pyarrow.array

Repository: arrow
Updated Branches:
  refs/heads/master 8644ee177 -> e370174dd


ARROW-1222: [Python] Raise exception when passing unsupported Python object type to pyarrow.array

Author: Wes McKinney <we...@twosigma.com>

Closes #854 from wesm/ARROW-1222 and squashes the following commits:

f1a9fc40 [Wes McKinney] Raise exception when passing unsupported Python object type to pyarrow.array


Project: http://git-wip-us.apache.org/repos/asf/arrow/repo
Commit: http://git-wip-us.apache.org/repos/asf/arrow/commit/e370174d
Tree: http://git-wip-us.apache.org/repos/asf/arrow/tree/e370174d
Diff: http://git-wip-us.apache.org/repos/asf/arrow/diff/e370174d

Branch: refs/heads/master
Commit: e370174dd4568a25264da1e531af359c205546ab
Parents: 8644ee1
Author: Wes McKinney <we...@twosigma.com>
Authored: Mon Jul 17 09:00:54 2017 -0400
Committer: Wes McKinney <we...@twosigma.com>
Committed: Mon Jul 17 09:00:54 2017 -0400

----------------------------------------------------------------------
 cpp/src/arrow/python/builtin_convert.cc | 11 +++++++++--
 python/pyarrow/tests/test_array.py      |  7 +++++++
 2 files changed, 16 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/arrow/blob/e370174d/cpp/src/arrow/python/builtin_convert.cc
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/python/builtin_convert.cc b/cpp/src/arrow/python/builtin_convert.cc
index 83154bb..fa1c734 100644
--- a/cpp/src/arrow/python/builtin_convert.cc
+++ b/cpp/src/arrow/python/builtin_convert.cc
@@ -83,7 +83,7 @@ class ScalarVisitor {
         binary_count_(0),
         unicode_count_(0) {}
 
-  void Visit(PyObject* obj) {
+  Status Visit(PyObject* obj) {
     ++total_count_;
     if (obj == Py_None) {
       ++none_count_;
@@ -103,7 +103,14 @@ class ScalarVisitor {
       ++unicode_count_;
     } else {
       // TODO(wesm): accumulate error information somewhere
+      static std::string supported_types =
+        "bool, float, integer, date, datetime, bytes, unicode";
+      std::stringstream ss;
+      ss << "Error inferring Arrow data type for collection of Python objects. ";
+      RETURN_NOT_OK(InvalidConversion(obj, supported_types, &ss));
+      return Status::Invalid(ss.str());
     }
+    return Status::OK();
   }
 
   std::shared_ptr<DataType> GetType() {
@@ -256,7 +263,7 @@ class SeqVisitor {
         // TODO
       } else {
         ++nesting_histogram_[level];
-        scalars_.Visit(item_ref.obj());
+        return scalars_.Visit(item_ref.obj());
       }
     }
     return Status::OK();

http://git-wip-us.apache.org/repos/asf/arrow/blob/e370174d/python/pyarrow/tests/test_array.py
----------------------------------------------------------------------
diff --git a/python/pyarrow/tests/test_array.py b/python/pyarrow/tests/test_array.py
index 413a3be..1a0ee61 100644
--- a/python/pyarrow/tests/test_array.py
+++ b/python/pyarrow/tests/test_array.py
@@ -15,6 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
+import datetime
 import pytest
 import sys
 
@@ -142,6 +143,12 @@ def test_array_slice():
         arr[::2]
 
 
+def test_array_factory_invalid_type():
+    arr = np.array([datetime.timedelta(1), datetime.timedelta(2)])
+    with pytest.raises(ValueError):
+        pa.array(arr)
+
+
 def test_dictionary_from_numpy():
     indices = np.repeat([0, 1, 2], 2)
     dictionary = np.array(['foo', 'bar', 'baz'], dtype=object)