This is an automated email from the ASF dual-hosted git repository.
lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git
The following commit(s) were added to refs/heads/main by this push:
new a8ce6624b chore(python): add cython-lint (#1939)
a8ce6624b is described below
commit a8ce6624b4989069950648988a79b70b07008aa8
Author: David Li <[email protected]>
AuthorDate: Tue Jun 25 19:28:11 2024 +0900
chore(python): add cython-lint (#1939)
Fixes #404.
---
.pre-commit-config.yaml | 4 ++
.../adbc_driver_manager/_lib.pxd | 30 ++++-----
.../adbc_driver_manager/_lib.pyx | 74 +++++++++++++---------
.../adbc_driver_manager/_reader.pyx | 3 +-
4 files changed, 66 insertions(+), 45 deletions(-)
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 6e73eba23..3079a817b 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -86,6 +86,10 @@ repos:
hooks:
- id: isort
types_or: [python]
+ - repo: https://github.com/MarcoGorelli/cython-lint
+ rev: v0.16.2
+ hooks:
+ - id: cython-lint
- repo: https://github.com/vala-lang/vala-lint
rev: 8ae2bb65fe66458263d94711ae4ddd978faece00
hooks:
diff --git a/python/adbc_driver_manager/adbc_driver_manager/_lib.pxd
b/python/adbc_driver_manager/adbc_driver_manager/_lib.pxd
index 5c572f782..2beebb314 100644
--- a/python/adbc_driver_manager/adbc_driver_manager/_lib.pxd
+++ b/python/adbc_driver_manager/adbc_driver_manager/_lib.pxd
@@ -126,13 +126,13 @@ cdef extern from "adbc.h" nogil:
CAdbcStatusCode AdbcDatabaseNew(CAdbcDatabase* database, CAdbcError* error)
CAdbcStatusCode AdbcDatabaseGetOption(
- CAdbcDatabase*, const char*, char*, size_t*, CAdbcError*);
+ CAdbcDatabase*, const char*, char*, size_t*, CAdbcError*)
CAdbcStatusCode AdbcDatabaseGetOptionBytes(
- CAdbcDatabase*, const char*, uint8_t*, size_t*, CAdbcError*);
+ CAdbcDatabase*, const char*, uint8_t*, size_t*, CAdbcError*)
CAdbcStatusCode AdbcDatabaseGetOptionDouble(
- CAdbcDatabase*, const char*, double*, CAdbcError*);
+ CAdbcDatabase*, const char*, double*, CAdbcError*)
CAdbcStatusCode AdbcDatabaseGetOptionInt(
- CAdbcDatabase*, const char*, int64_t*, CAdbcError*);
+ CAdbcDatabase*, const char*, int64_t*, CAdbcError*)
CAdbcStatusCode AdbcDatabaseSetOption(
CAdbcDatabase*, const char*, const char*, CAdbcError*)
CAdbcStatusCode AdbcDatabaseSetOptionBytes(
@@ -180,18 +180,18 @@ cdef extern from "adbc.h" nogil:
CArrowArrayStream* stream,
CAdbcError* error)
CAdbcStatusCode AdbcConnectionGetOption(
- CAdbcConnection*, const char*, char*, size_t*, CAdbcError*);
+ CAdbcConnection*, const char*, char*, size_t*, CAdbcError*)
CAdbcStatusCode AdbcConnectionGetOptionBytes(
- CAdbcConnection*, const char*, uint8_t*, size_t*, CAdbcError*);
+ CAdbcConnection*, const char*, uint8_t*, size_t*, CAdbcError*)
CAdbcStatusCode AdbcConnectionGetOptionDouble(
- CAdbcConnection*, const char*, double*, CAdbcError*);
+ CAdbcConnection*, const char*, double*, CAdbcError*)
CAdbcStatusCode AdbcConnectionGetOptionInt(
- CAdbcConnection*, const char*, int64_t*, CAdbcError*);
+ CAdbcConnection*, const char*, int64_t*, CAdbcError*)
CAdbcStatusCode AdbcConnectionGetStatistics(
CAdbcConnection*, const char*, const char*, const char*,
- char, CArrowArrayStream*, CAdbcError*);
+ char, CArrowArrayStream*, CAdbcError*)
CAdbcStatusCode AdbcConnectionGetStatisticNames(
- CAdbcConnection*, CArrowArrayStream*, CAdbcError*);
+ CAdbcConnection*, CArrowArrayStream*, CAdbcError*)
CAdbcStatusCode AdbcConnectionGetTableSchema(
CAdbcConnection* connection,
const char* catalog,
@@ -244,17 +244,17 @@ cdef extern from "adbc.h" nogil:
CAdbcStatusCode AdbcStatementExecuteSchema(
CAdbcStatement*, CArrowSchema*, CAdbcError*)
CAdbcStatusCode AdbcStatementGetOption(
- CAdbcStatement*, const char*, char*, size_t*, CAdbcError*);
+ CAdbcStatement*, const char*, char*, size_t*, CAdbcError*)
CAdbcStatusCode AdbcStatementGetOptionBytes(
- CAdbcStatement*, const char*, uint8_t*, size_t*, CAdbcError*);
+ CAdbcStatement*, const char*, uint8_t*, size_t*, CAdbcError*)
CAdbcStatusCode AdbcStatementGetOptionDouble(
- CAdbcStatement*, const char*, double*, CAdbcError*);
+ CAdbcStatement*, const char*, double*, CAdbcError*)
CAdbcStatusCode AdbcStatementGetOptionInt(
- CAdbcStatement*, const char*, int64_t*, CAdbcError*);
+ CAdbcStatement*, const char*, int64_t*, CAdbcError*)
CAdbcStatusCode AdbcStatementGetParameterSchema(
CAdbcStatement* statement,
CArrowSchema* schema,
- CAdbcError* error);
+ CAdbcError* error)
CAdbcStatusCode AdbcStatementNew(
CAdbcConnection* connection,
CAdbcStatement* statement,
diff --git a/python/adbc_driver_manager/adbc_driver_manager/_lib.pyx
b/python/adbc_driver_manager/adbc_driver_manager/_lib.pyx
index cf85e226c..e535931b0 100644
--- a/python/adbc_driver_manager/adbc_driver_manager/_lib.pyx
+++ b/python/adbc_driver_manager/adbc_driver_manager/_lib.pyx
@@ -28,20 +28,19 @@ import sys
import warnings
from typing import List, Optional, Tuple
-cimport cpython
import cython
from cpython.bytes cimport PyBytes_FromStringAndSize
from cpython.pycapsule cimport (
PyCapsule_GetPointer, PyCapsule_New, PyCapsule_CheckExact
)
-from libc.stdint cimport int32_t, int64_t, uint8_t, uint32_t, uintptr_t
+from libc.stdint cimport int64_t, uint8_t, uint32_t, uintptr_t
from libc.stdlib cimport malloc, free
from libc.string cimport memcpy, memset
from libcpp.string cimport string as c_string
from libcpp.vector cimport vector as c_vector
if typing.TYPE_CHECKING:
- from typing import Self
+ from typing import Self # no-cython-lint
class AdbcStatusCode(enum.IntEnum):
@@ -97,7 +96,15 @@ class Error(Exception):
Additional error details, if present.
"""
- def __init__(self, message, *, status_code, vendor_code=None,
sqlstate=None, details=None):
+ def __init__(
+ self,
+ message,
+ *,
+ status_code,
+ vendor_code=None,
+ sqlstate=None,
+ details=None,
+ ):
super().__init__(message)
self.status_code = AdbcStatusCode(status_code)
self.vendor_code = vendor_code
@@ -183,7 +190,10 @@ cdef object convert_error(CAdbcStatusCode status,
CAdbcError* error):
if error.message != NULL:
message += ": "
message += error.message.decode("utf-8", "replace")
- if error.vendor_code and error.vendor_code !=
ADBC_ERROR_VENDOR_CODE_PRIVATE_DATA:
+ if (
+ error.vendor_code and
+ error.vendor_code != ADBC_ERROR_VENDOR_CODE_PRIVATE_DATA
+ ):
vendor_code = error.vendor_code
message += f". Vendor code: {vendor_code}"
if error.sqlstate[0] != 0:
@@ -199,7 +209,9 @@ cdef object convert_error(CAdbcStatusCode status,
CAdbcError* error):
break
details.append(
(c_detail.key,
- PyBytes_FromStringAndSize(<const char*> c_detail.value,
c_detail.value_length)))
+ PyBytes_FromStringAndSize(
+ <const char*> c_detail.value,
+ c_detail.value_length)))
if error.release:
error.release(error)
@@ -226,8 +238,19 @@ cdef object convert_error(CAdbcStatusCode status,
CAdbcError* error):
ADBC_STATUS_UNAUTHORIZED):
klass = ProgrammingError
elif status == ADBC_STATUS_NOT_IMPLEMENTED:
- return NotSupportedError(message, vendor_code=vendor_code,
sqlstate=sqlstate, details=details)
- return klass(message, status_code=status, vendor_code=vendor_code,
sqlstate=sqlstate, details=details)
+ return NotSupportedError(
+ message,
+ vendor_code=vendor_code,
+ sqlstate=sqlstate,
+ details=details,
+ )
+ return klass(
+ message,
+ status_code=status,
+ vendor_code=vendor_code,
+ sqlstate=sqlstate,
+ details=details,
+ )
cdef void check_error(CAdbcStatusCode status, CAdbcError* error) except *:
@@ -504,12 +527,10 @@ cdef class AdbcDatabase(_AdbcHandle):
cdef CAdbcError c_error = empty_error()
key_bytes = _to_bytes(key, "key")
cdef char* c_key = key_bytes
- cdef uint8_t* c_value = NULL
cdef size_t c_len = 0
buf = bytearray(1024)
while True:
- c_value = buf
c_len = len(buf)
check_error(
AdbcDatabaseGetOption(
@@ -537,12 +558,10 @@ cdef class AdbcDatabase(_AdbcHandle):
cdef CAdbcError c_error = empty_error()
key_bytes = _to_bytes(key, "key")
cdef char* c_key = key_bytes
- cdef uint8_t* c_value = NULL
cdef size_t c_len = 0
buf = bytearray(1024)
while True:
- c_value = buf
c_len = len(buf)
check_error(
AdbcDatabaseGetOptionBytes(
@@ -617,7 +636,8 @@ cdef class AdbcDatabase(_AdbcHandle):
elif isinstance(value, bytes):
c_value = value
status = AdbcDatabaseSetOptionBytes(
- &self.database, c_key, <const uint8_t*> c_value,
len(value), &c_error)
+ &self.database, c_key, <const uint8_t*> c_value,
+ len(value), &c_error)
elif isinstance(value, float):
status = AdbcDatabaseSetOptionDouble(
&self.database, c_key, value, &c_error)
@@ -802,12 +822,10 @@ cdef class AdbcConnection(_AdbcHandle):
cdef CAdbcError c_error = empty_error()
key_bytes = _to_bytes(key, "key")
cdef char* c_key = key_bytes
- cdef uint8_t* c_value = NULL
cdef size_t c_len = 0
buf = bytearray(1024)
while True:
- c_value = buf
c_len = len(buf)
check_error(
AdbcConnectionGetOption(
@@ -835,12 +853,10 @@ cdef class AdbcConnection(_AdbcHandle):
cdef CAdbcError c_error = empty_error()
key_bytes = _to_bytes(key, "key")
cdef char* c_key = key_bytes
- cdef uint8_t* c_value = NULL
cdef size_t c_len = 0
buf = bytearray(1024)
while True:
- c_value = buf
c_len = len(buf)
check_error(
AdbcConnectionGetOptionBytes(
@@ -1004,7 +1020,8 @@ cdef class AdbcConnection(_AdbcHandle):
elif isinstance(value, bytes):
c_value = value
status = AdbcConnectionSetOptionBytes(
- &self.connection, c_key, <const uint8_t*> c_value,
len(value), &c_error)
+ &self.connection, c_key, <const uint8_t*> c_value,
+ len(value), &c_error)
elif isinstance(value, float):
status = AdbcConnectionSetOptionDouble(
&self.connection, c_key, value, &c_error)
@@ -1077,7 +1094,8 @@ cdef class AdbcStatement(_AdbcHandle):
cdef CArrowArray* c_array
cdef CArrowSchema* c_schema
- if hasattr(data, "__arrow_c_array__") and not isinstance(data,
ArrowArrayHandle):
+ if (hasattr(data, "__arrow_c_array__") and
+ not isinstance(data, ArrowArrayHandle)):
if schema is not None:
raise ValueError(
"Can not provide a schema when passing Arrow-compatible "
@@ -1195,7 +1213,8 @@ cdef class AdbcStatement(_AdbcHandle):
check_error(status, &c_error)
return (stream, rows_affected)
- def execute_partitions(self) -> Tuple[List[bytes],
Optional[ArrowSchemaHandle], int]:
+ def execute_partitions(self) -> \
+ Tuple[List[bytes], Optional[ArrowSchemaHandle], int]:
"""
Execute the query and get the partitions of the result set.
@@ -1300,12 +1319,10 @@ cdef class AdbcStatement(_AdbcHandle):
cdef CAdbcError c_error = empty_error()
key_bytes = _to_bytes(key, "key")
cdef char* c_key = key_bytes
- cdef uint8_t* c_value = NULL
cdef size_t c_len = 0
buf = bytearray(1024)
while True:
- c_value = buf
c_len = len(buf)
check_error(
AdbcStatementGetOption(
@@ -1333,12 +1350,10 @@ cdef class AdbcStatement(_AdbcHandle):
cdef CAdbcError c_error = empty_error()
key_bytes = _to_bytes(key, "key")
cdef char* c_key = key_bytes
- cdef uint8_t* c_value = NULL
cdef size_t c_len = 0
buf = bytearray(1024)
while True:
- c_value = buf
c_len = len(buf)
check_error(
AdbcStatementGetOptionBytes(
@@ -1451,7 +1466,8 @@ cdef class AdbcStatement(_AdbcHandle):
elif isinstance(value, bytes):
c_value = value
status = AdbcStatementSetOptionBytes(
- &self.statement, c_key, <const uint8_t*> c_value,
len(value), &c_error)
+ &self.statement, c_key, <const uint8_t*> c_value,
+ len(value), &c_error)
elif isinstance(value, float):
status = AdbcStatementSetOptionDouble(
&self.statement, c_key, value, &c_error)
@@ -1487,14 +1503,15 @@ cdef class AdbcStatement(_AdbcHandle):
cdef const CAdbcError* PyAdbcErrorFromArrayStream(
- CArrowArrayStream* stream, CAdbcStatusCode* status):
+ CArrowArrayStream* stream, CAdbcStatusCode* status):
return AdbcErrorFromArrayStream(stream, status)
cdef extern from "_blocking_impl.h" nogil:
ctypedef void (*BlockingCallback)(void*) noexcept nogil
c_string
CInitBlockingCallback"pyadbc_driver_manager::InitBlockingCallback"()
- c_string
CSetBlockingCallback"pyadbc_driver_manager::SetBlockingCallback"(BlockingCallback,
void* data)
+ c_string CSetBlockingCallback"pyadbc_driver_manager::SetBlockingCallback"(
+ BlockingCallback, void* data)
c_string
CClearBlockingCallback"pyadbc_driver_manager::ClearBlockingCallback"()
@@ -1573,13 +1590,12 @@ else:
return func(*args, **kwargs)
-
cdef void _handle_blocking_call(void* c_cancel) noexcept nogil:
with gil:
try:
cancel = <object> c_cancel
cancel()
- except:
+ except: # no-cython-lint
with _blocking_lock:
global _blocking_exc
_blocking_exc = sys.exc_info()
diff --git a/python/adbc_driver_manager/adbc_driver_manager/_reader.pyx
b/python/adbc_driver_manager/adbc_driver_manager/_reader.pyx
index e7dcc16f5..c3ea39554 100644
--- a/python/adbc_driver_manager/adbc_driver_manager/_reader.pyx
+++ b/python/adbc_driver_manager/adbc_driver_manager/_reader.pyx
@@ -31,7 +31,8 @@ cdef class _AdbcErrorHelper:
def check_error(self, exception):
cdef:
CAdbcStatusCode c_status = ADBC_STATUS_OK
- const CAdbcError* error =
PyAdbcErrorFromArrayStream(&self.c_stream, &c_status)
+ const CAdbcError* error = \
+ PyAdbcErrorFromArrayStream(&self.c_stream, &c_status)
exc = convert_error(c_status, <CAdbcError*> error)
if exc is not None: