|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"""Dataset support for Parquet encryption.""" |
|
|
|
from pyarrow.includes.libarrow_dataset_parquet cimport * |
|
from pyarrow._parquet_encryption cimport * |
|
from pyarrow._dataset_parquet cimport ParquetFragmentScanOptions, ParquetFileWriteOptions |
|
|
|
|
|
cdef class ParquetEncryptionConfig(_Weakrefable): |
|
""" |
|
Core configuration class encapsulating parameters for high-level encryption |
|
within the Parquet framework. |
|
|
|
The ParquetEncryptionConfig class serves as a bridge for passing encryption-related |
|
parameters to the appropriate components within the Parquet library. It maintains references |
|
to objects that define the encryption strategy, Key Management Service (KMS) configuration, |
|
and specific encryption configurations for Parquet data. |
|
|
|
Parameters |
|
---------- |
|
crypto_factory : pyarrow.parquet.encryption.CryptoFactory |
|
Shared pointer to a `CryptoFactory` object. The `CryptoFactory` is responsible for |
|
creating cryptographic components, such as encryptors and decryptors. |
|
kms_connection_config : pyarrow.parquet.encryption.KmsConnectionConfig |
|
Shared pointer to a `KmsConnectionConfig` object. This object holds the configuration |
|
parameters necessary for connecting to a Key Management Service (KMS). |
|
encryption_config : pyarrow.parquet.encryption.EncryptionConfiguration |
|
Shared pointer to an `EncryptionConfiguration` object. This object defines specific |
|
encryption settings for Parquet data, including the keys assigned to different columns. |
|
|
|
Raises |
|
------ |
|
ValueError |
|
Raised if `encryption_config` is None. |
|
""" |
|
cdef: |
|
shared_ptr[CParquetEncryptionConfig] c_config |
|
|
|
|
|
__slots__ = () |
|
|
|
def __cinit__(self, CryptoFactory crypto_factory, KmsConnectionConfig kms_connection_config, |
|
EncryptionConfiguration encryption_config): |
|
|
|
cdef shared_ptr[CEncryptionConfiguration] c_encryption_config |
|
|
|
if crypto_factory is None: |
|
raise ValueError("crypto_factory cannot be None") |
|
|
|
if kms_connection_config is None: |
|
raise ValueError("kms_connection_config cannot be None") |
|
|
|
if encryption_config is None: |
|
raise ValueError("encryption_config cannot be None") |
|
|
|
self.c_config.reset(new CParquetEncryptionConfig()) |
|
|
|
c_encryption_config = pyarrow_unwrap_encryptionconfig( |
|
encryption_config) |
|
|
|
self.c_config.get().crypto_factory = pyarrow_unwrap_cryptofactory(crypto_factory) |
|
self.c_config.get().kms_connection_config = pyarrow_unwrap_kmsconnectionconfig( |
|
kms_connection_config) |
|
self.c_config.get().encryption_config = c_encryption_config |
|
|
|
@staticmethod |
|
cdef wrap(shared_ptr[CParquetEncryptionConfig] c_config): |
|
cdef ParquetEncryptionConfig python_config = ParquetEncryptionConfig.__new__(ParquetEncryptionConfig) |
|
python_config.c_config = c_config |
|
return python_config |
|
|
|
cdef shared_ptr[CParquetEncryptionConfig] unwrap(self): |
|
return self.c_config |
|
|
|
|
|
cdef class ParquetDecryptionConfig(_Weakrefable): |
|
""" |
|
Core configuration class encapsulating parameters for high-level decryption |
|
within the Parquet framework. |
|
|
|
ParquetDecryptionConfig is designed to pass decryption-related parameters to |
|
the appropriate decryption components within the Parquet library. It holds references to |
|
objects that define the decryption strategy, Key Management Service (KMS) configuration, |
|
and specific decryption configurations for reading encrypted Parquet data. |
|
|
|
Parameters |
|
---------- |
|
crypto_factory : pyarrow.parquet.encryption.CryptoFactory |
|
Shared pointer to a `CryptoFactory` object, pivotal in creating cryptographic |
|
components for the decryption process. |
|
kms_connection_config : pyarrow.parquet.encryption.KmsConnectionConfig |
|
Shared pointer to a `KmsConnectionConfig` object, containing parameters necessary |
|
for connecting to a Key Management Service (KMS) during decryption. |
|
decryption_config : pyarrow.parquet.encryption.DecryptionConfiguration |
|
Shared pointer to a `DecryptionConfiguration` object, specifying decryption settings |
|
for reading encrypted Parquet data. |
|
|
|
Raises |
|
------ |
|
ValueError |
|
Raised if `decryption_config` is None. |
|
""" |
|
|
|
cdef: |
|
shared_ptr[CParquetDecryptionConfig] c_config |
|
|
|
|
|
__slots__ = () |
|
|
|
def __cinit__(self, CryptoFactory crypto_factory, KmsConnectionConfig kms_connection_config, |
|
DecryptionConfiguration decryption_config): |
|
|
|
cdef shared_ptr[CDecryptionConfiguration] c_decryption_config |
|
|
|
if decryption_config is None: |
|
raise ValueError( |
|
"decryption_config cannot be None") |
|
|
|
self.c_config.reset(new CParquetDecryptionConfig()) |
|
|
|
c_decryption_config = pyarrow_unwrap_decryptionconfig( |
|
decryption_config) |
|
|
|
self.c_config.get().crypto_factory = pyarrow_unwrap_cryptofactory(crypto_factory) |
|
self.c_config.get().kms_connection_config = pyarrow_unwrap_kmsconnectionconfig( |
|
kms_connection_config) |
|
self.c_config.get().decryption_config = c_decryption_config |
|
|
|
@staticmethod |
|
cdef wrap(shared_ptr[CParquetDecryptionConfig] c_config): |
|
cdef ParquetDecryptionConfig python_config = ParquetDecryptionConfig.__new__(ParquetDecryptionConfig) |
|
python_config.c_config = c_config |
|
return python_config |
|
|
|
cdef shared_ptr[CParquetDecryptionConfig] unwrap(self): |
|
return self.c_config |
|
|
|
|
|
def set_encryption_config( |
|
ParquetFileWriteOptions opts not None, |
|
ParquetEncryptionConfig config not None |
|
): |
|
cdef shared_ptr[CParquetEncryptionConfig] c_config = config.unwrap() |
|
opts.parquet_options.parquet_encryption_config = c_config |
|
|
|
|
|
def set_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 |
|
): |
|
cdef shared_ptr[CParquetDecryptionConfig] c_config = config.unwrap() |
|
opts.parquet_options.parquet_decryption_config = c_config |
|
|