rok commented on code in PR #39438:
URL: https://github.com/apache/arrow/pull/39438#discussion_r1592645327
##########
python/pyarrow/_dataset_parquet.pyx:
##########
@@ -808,6 +815,18 @@ cdef class ParquetFragmentScanOptions(FragmentScanOptions):
raise ValueError("size must be larger than zero")
self.reader_properties().set_thrift_container_size_limit(size)
+ def set_file_decryption_properties(self, FileDecryptionProperties
decryption_properties):
Review Comment:
@pitrou is this approximately what you had in mind?
```diff
diff --git a/python/pyarrow/_dataset_parquet.pxd
b/python/pyarrow/_dataset_parquet.pxd
index d5bc172d3..980f645bc 100644
--- a/python/pyarrow/_dataset_parquet.pxd
+++ b/python/pyarrow/_dataset_parquet.pxd
@@ -29,6 +29,7 @@ cdef class ParquetFragmentScanOptions(FragmentScanOptions):
cdef:
CParquetFragmentScanOptions* parquet_options
object _parquet_decryption_config
+ object _file_decryption_properties
cdef void init(self, const shared_ptr[CFragmentScanOptions]& sp)
cdef CReaderProperties* reader_properties(self)
diff --git a/python/pyarrow/_dataset_parquet.pyx
b/python/pyarrow/_dataset_parquet.pyx
index 9d97a7e34..3f774fb83 100644
--- a/python/pyarrow/_dataset_parquet.pyx
+++ b/python/pyarrow/_dataset_parquet.pyx
@@ -56,7 +56,7 @@ from pyarrow._parquet cimport (
try:
from pyarrow._dataset_parquet_encryption import (
- set_encryption_config, set_decryption_config
+ set_encryption_config, set_decryption_config,
set_file_decryption_properties
)
parquet_encryption_enabled = True
except ImportError:
@@ -132,8 +132,7 @@ cdef class ParquetFileFormat(FileFormat):
default_fragment_scan_options =
ParquetFragmentScanOptions(**scan_args)
# make sure scan options has decryption properties
if decryption_properties is not None:
-
default_fragment_scan_options.set_file_decryption_properties(
- decryption_properties)
+ default_fragment_scan_options.file_decryption_properties =
decryption_properties
elif isinstance(default_fragment_scan_options, dict):
default_fragment_scan_options = ParquetFragmentScanOptions(
@@ -721,6 +720,9 @@ cdef class
ParquetFragmentScanOptions(FragmentScanOptions):
decryption_config : pyarrow.dataset.ParquetDecryptionConfig, default
None
If not None, use the provided ParquetDecryptionConfig to decrypt the
Parquet file.
+ file_decryption_properties : pyarrow.dataset.FileDecryptionProperties,
default None
+ If not None, use the provided FileDecryptionProperties to decrypt
encrypted
+ Parquet file.
page_checksum_verification : bool, default False
If True, verify the page checksum for each page read from the file.
"""
@@ -735,6 +737,7 @@ cdef class
ParquetFragmentScanOptions(FragmentScanOptions):
thrift_string_size_limit=None,
thrift_container_size_limit=None,
decryption_config=None,
+ file_decryption_properties=None,
bint page_checksum_verification=False):
self.init(shared_ptr[CFragmentScanOptions](
new CParquetFragmentScanOptions()))
@@ -749,6 +752,8 @@ cdef class
ParquetFragmentScanOptions(FragmentScanOptions):
self.thrift_container_size_limit = thrift_container_size_limit
if decryption_config is not None:
self.parquet_decryption_config = decryption_config
+ if file_decryption_properties is not None:
+ self.file_decryption_properties = file_decryption_properties
self.page_checksum_verification = page_checksum_verification
cdef void init(self, const shared_ptr[CFragmentScanOptions]& sp):
@@ -818,16 +823,24 @@ cdef class
ParquetFragmentScanOptions(FragmentScanOptions):
raise ValueError("size must be larger than zero")
self.reader_properties().set_thrift_container_size_limit(size)
- def set_file_decryption_properties(self, FileDecryptionProperties
decryption_properties):
- """
- Set the file decryption properties for the Parquet fragment scan
options.
- Parameters
- ----------
- decryption_properties : FileDecryptionProperties
- The decryption properties to be used for reading encrypted
Parquet files.
- """
- cdef CReaderProperties* reader_props = self.reader_properties()
-
reader_props.file_decryption_properties(decryption_properties.unwrap())
+ @property
+ def file_decryption_properties(self):
+ if not parquet_encryption_enabled:
+ raise NotImplementedError(
+ "Unable to access encryption features. "
+ "Encryption is not enabled in your installation of pyarrow."
+ )
+ return self._file_decryption_properties
+
+ @file_decryption_properties.setter
+ def file_decryption_properties(self, config):
+ if not parquet_encryption_enabled:
+ raise NotImplementedError(
+ "Encryption is not enabled in your installation of pyarrow,
but "
+ "file_decryption_properties were provided."
+ )
+ set_file_decryption_properties(self, config)
+ self._file_decryption_properties = config
@property
def parquet_decryption_config(self):
diff --git a/python/pyarrow/_dataset_parquet_encryption.pyx
b/python/pyarrow/_dataset_parquet_encryption.pyx
index 11a7174eb..0e1dbfeb4 100644
--- a/python/pyarrow/_dataset_parquet_encryption.pyx
+++ b/python/pyarrow/_dataset_parquet_encryption.pyx
@@ -162,6 +162,14 @@ def set_encryption_config(
opts.parquet_options.parquet_encryption_config = c_config
+def set_file_decryption_properties(
+ ParquetFragmentScanOptions opts not None,
+ FileDecryptionProperties config not None
+):
+ cdef CReaderProperties* reader_props = opts.reader_properties()
+ reader_props.file_decryption_properties(config.unwrap())
+
+
def set_decryption_config(
ParquetFragmentScanOptions opts not None,
ParquetDecryptionConfig config not None
```
--
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]