Feiyang472 commented on code in PR #43740:
URL: https://github.com/apache/arrow/pull/43740#discussion_r1729832877


##########
python/pyarrow/_dataset.pyx:
##########
@@ -2505,6 +2505,28 @@ cdef class Partitioning(_Weakrefable):
         result = self.partitioning.Parse(tobytes(path))
         return Expression.wrap(GetResultValue(result))
 
+    def format(self, expr):
+        """
+        Parse a partition expression into a tuple of directory, path
+
+        Parameters
+        ----------
+        expr : pyarrow.dataset.Expression
+
+        Returns
+        -------
+        tuple[str, str]
+        """
+        cdef:
+            CResult[CPartitionPathFormat] result
+            CPartitionPathFormat result_value
+        result = self.partitioning.Format(
+            Expression.unwrap(expr)
+        )
+        result_value = GetResultValue(result)
+
+        return frombytes(result_value.directory), 
frombytes(result_value.filename)

Review Comment:
   Hi @amoeba , I am fairly new to arrow cython api as well, so I might be 
wrong. `CPartitionPathFormat` is just cython's name (by arrow convention) for 
the `PartitionPathFormat` C struct. The `wrap` and `unwrap` methods are methods 
of the `_WeakRefable` class, which convert cpp shared pointers to cython 
wrappers or vice versa. Cpp shared pointers cannot be given to python, and 
cython classes cannot be given to C, but both can interact in cython code, 
hence the wrapping. C structs of builtin types, unlike shared pointers to 
objects, can be automatically converted by cython into python dicts. Here I 
have chosen to return a tuple instead, because it feels more pythonic.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to