Skip to content

Commit 891e3fa

Browse files
Internal changes to ensure that no circular imports occur.
1 parent badcf41 commit 891e3fa

24 files changed

+490
-593
lines changed

doc/src/release_notes.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ Thick Mode Changes
2727
Common Changes
2828
++++++++++++++
2929

30+
#) Internal changes to ensure that no circular imports occur.
31+
3032

3133
oracledb 2.2.0 (May 2024)
3234
-------------------------

src/oracledb/__init__.py

Lines changed: 60 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,47 @@
4040
)
4141
warnings.warn(message)
4242

43-
from .version import __version__ as __version__
43+
from . import base_impl, thick_impl, thin_impl
4444

45-
from .constants import (
46-
# mandated DB API constants
47-
apilevel as apilevel,
48-
threadsafety as threadsafety,
49-
paramstyle as paramstyle,
45+
from .base_impl import (
46+
# database types
47+
DB_TYPE_BFILE as DB_TYPE_BFILE,
48+
DB_TYPE_BINARY_DOUBLE as DB_TYPE_BINARY_DOUBLE,
49+
DB_TYPE_BINARY_FLOAT as DB_TYPE_BINARY_FLOAT,
50+
DB_TYPE_BINARY_INTEGER as DB_TYPE_BINARY_INTEGER,
51+
DB_TYPE_BLOB as DB_TYPE_BLOB,
52+
DB_TYPE_BOOLEAN as DB_TYPE_BOOLEAN,
53+
DB_TYPE_CHAR as DB_TYPE_CHAR,
54+
DB_TYPE_CLOB as DB_TYPE_CLOB,
55+
DB_TYPE_CURSOR as DB_TYPE_CURSOR,
56+
DB_TYPE_DATE as DB_TYPE_DATE,
57+
DB_TYPE_INTERVAL_DS as DB_TYPE_INTERVAL_DS,
58+
DB_TYPE_INTERVAL_YM as DB_TYPE_INTERVAL_YM,
59+
DB_TYPE_JSON as DB_TYPE_JSON,
60+
DB_TYPE_LONG as DB_TYPE_LONG,
61+
DB_TYPE_LONG_NVARCHAR as DB_TYPE_LONG_NVARCHAR,
62+
DB_TYPE_LONG_RAW as DB_TYPE_LONG_RAW,
63+
DB_TYPE_NCHAR as DB_TYPE_NCHAR,
64+
DB_TYPE_NCLOB as DB_TYPE_NCLOB,
65+
DB_TYPE_NUMBER as DB_TYPE_NUMBER,
66+
DB_TYPE_NVARCHAR as DB_TYPE_NVARCHAR,
67+
DB_TYPE_OBJECT as DB_TYPE_OBJECT,
68+
DB_TYPE_RAW as DB_TYPE_RAW,
69+
DB_TYPE_ROWID as DB_TYPE_ROWID,
70+
DB_TYPE_TIMESTAMP as DB_TYPE_TIMESTAMP,
71+
DB_TYPE_TIMESTAMP_LTZ as DB_TYPE_TIMESTAMP_LTZ,
72+
DB_TYPE_TIMESTAMP_TZ as DB_TYPE_TIMESTAMP_TZ,
73+
DB_TYPE_UNKNOWN as DB_TYPE_UNKNOWN,
74+
DB_TYPE_UROWID as DB_TYPE_UROWID,
75+
DB_TYPE_VARCHAR as DB_TYPE_VARCHAR,
76+
DB_TYPE_VECTOR as DB_TYPE_VECTOR,
77+
DB_TYPE_XMLTYPE as DB_TYPE_XMLTYPE,
78+
# API types
79+
BINARY as BINARY,
80+
DATETIME as DATETIME,
81+
NUMBER as NUMBER,
82+
ROWID as ROWID,
83+
STRING as STRING,
5084
# authentication modes
5185
AUTH_MODE_DEFAULT as AUTH_MODE_DEFAULT,
5286
AUTH_MODE_PRELIM as AUTH_MODE_PRELIM,
@@ -66,6 +100,19 @@
66100
PURITY_DEFAULT as PURITY_DEFAULT,
67101
PURITY_NEW as PURITY_NEW,
68102
PURITY_SELF as PURITY_SELF,
103+
# vector formats
104+
VECTOR_FORMAT_FLOAT32 as VECTOR_FORMAT_FLOAT32,
105+
VECTOR_FORMAT_FLOAT64 as VECTOR_FORMAT_FLOAT64,
106+
VECTOR_FORMAT_INT8 as VECTOR_FORMAT_INT8,
107+
)
108+
109+
from .version import __version__ as __version__
110+
111+
from .constants import (
112+
# mandated DB API constants
113+
apilevel as apilevel,
114+
threadsafety as threadsafety,
115+
paramstyle as paramstyle,
69116
# AQ delivery modes
70117
MSG_BUFFERED as MSG_BUFFERED,
71118
MSG_PERSISTENT as MSG_PERSISTENT,
@@ -148,10 +195,6 @@
148195
# flags for tpc_end()
149196
TPC_END_NORMAL as TPC_END_NORMAL,
150197
TPC_END_SUSPEND as TPC_END_SUSPEND,
151-
# vector types
152-
VECTOR_FORMAT_FLOAT32 as VECTOR_FORMAT_FLOAT32,
153-
VECTOR_FORMAT_FLOAT64 as VECTOR_FORMAT_FLOAT64,
154-
VECTOR_FORMAT_INT8 as VECTOR_FORMAT_INT8,
155198
)
156199

157200
from .exceptions import (
@@ -190,6 +233,13 @@
190233
create_pool_async as create_pool_async,
191234
)
192235

236+
from .subscr import (
237+
Message as Message,
238+
MessageQuery as MessageQuery,
239+
MessageRow as MessageRow,
240+
MessageTable as MessageTable,
241+
)
242+
193243
from .connect_params import ConnectParams as ConnectParams
194244

195245
from .pool_params import PoolParams as PoolParams
@@ -209,49 +259,6 @@
209259

210260
from .driver_mode import is_thin_mode as is_thin_mode
211261

212-
from . import base_impl, thick_impl, thin_impl
213-
214-
from .base_impl import (
215-
# database types
216-
DB_TYPE_BFILE as DB_TYPE_BFILE,
217-
DB_TYPE_BINARY_DOUBLE as DB_TYPE_BINARY_DOUBLE,
218-
DB_TYPE_BINARY_FLOAT as DB_TYPE_BINARY_FLOAT,
219-
DB_TYPE_BINARY_INTEGER as DB_TYPE_BINARY_INTEGER,
220-
DB_TYPE_BLOB as DB_TYPE_BLOB,
221-
DB_TYPE_BOOLEAN as DB_TYPE_BOOLEAN,
222-
DB_TYPE_CHAR as DB_TYPE_CHAR,
223-
DB_TYPE_CLOB as DB_TYPE_CLOB,
224-
DB_TYPE_CURSOR as DB_TYPE_CURSOR,
225-
DB_TYPE_DATE as DB_TYPE_DATE,
226-
DB_TYPE_INTERVAL_DS as DB_TYPE_INTERVAL_DS,
227-
DB_TYPE_INTERVAL_YM as DB_TYPE_INTERVAL_YM,
228-
DB_TYPE_JSON as DB_TYPE_JSON,
229-
DB_TYPE_LONG as DB_TYPE_LONG,
230-
DB_TYPE_LONG_NVARCHAR as DB_TYPE_LONG_NVARCHAR,
231-
DB_TYPE_LONG_RAW as DB_TYPE_LONG_RAW,
232-
DB_TYPE_NCHAR as DB_TYPE_NCHAR,
233-
DB_TYPE_NCLOB as DB_TYPE_NCLOB,
234-
DB_TYPE_NUMBER as DB_TYPE_NUMBER,
235-
DB_TYPE_NVARCHAR as DB_TYPE_NVARCHAR,
236-
DB_TYPE_OBJECT as DB_TYPE_OBJECT,
237-
DB_TYPE_RAW as DB_TYPE_RAW,
238-
DB_TYPE_ROWID as DB_TYPE_ROWID,
239-
DB_TYPE_TIMESTAMP as DB_TYPE_TIMESTAMP,
240-
DB_TYPE_TIMESTAMP_LTZ as DB_TYPE_TIMESTAMP_LTZ,
241-
DB_TYPE_TIMESTAMP_TZ as DB_TYPE_TIMESTAMP_TZ,
242-
DB_TYPE_UNKNOWN as DB_TYPE_UNKNOWN,
243-
DB_TYPE_UROWID as DB_TYPE_UROWID,
244-
DB_TYPE_VARCHAR as DB_TYPE_VARCHAR,
245-
DB_TYPE_VECTOR as DB_TYPE_VECTOR,
246-
DB_TYPE_XMLTYPE as DB_TYPE_XMLTYPE,
247-
# API types
248-
BINARY as BINARY,
249-
DATETIME as DATETIME,
250-
NUMBER as NUMBER,
251-
ROWID as ROWID,
252-
STRING as STRING,
253-
)
254-
255262
from .thick_impl import (
256263
clientversion as clientversion,
257264
init_oracle_client as init_oracle_client,

src/oracledb/base_impl.pxd

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,57 @@ cdef enum:
107107
TNS_LONG_LENGTH_INDICATOR = 254
108108
TNS_NULL_LENGTH_INDICATOR = 255
109109

110+
cpdef enum:
111+
AUTH_MODE_DEFAULT = 0
112+
AUTH_MODE_PRELIM = 0x00000008
113+
AUTH_MODE_SYSASM = 0x00008000
114+
AUTH_MODE_SYSBKP = 0x00020000
115+
AUTH_MODE_SYSDBA = 0x00000002
116+
AUTH_MODE_SYSDGD = 0x00040000
117+
AUTH_MODE_SYSKMT = 0x00080000
118+
AUTH_MODE_SYSOPER = 0x00000004
119+
AUTH_MODE_SYSRAC = 0x00100000
120+
121+
cpdef enum:
122+
POOL_GETMODE_WAIT = 0
123+
POOL_GETMODE_NOWAIT = 1
124+
POOL_GETMODE_FORCEGET = 2
125+
POOL_GETMODE_TIMEDWAIT = 3
126+
127+
cpdef enum:
128+
PURITY_DEFAULT = 0
129+
PURITY_NEW = 1
130+
PURITY_SELF = 2
131+
132+
cpdef enum:
133+
VECTOR_FORMAT_FLOAT32 = 2
134+
VECTOR_FORMAT_FLOAT64 = 3
135+
VECTOR_FORMAT_INT8 = 4
136+
137+
cdef type PY_TYPE_ASYNC_CURSOR
138+
cdef type PY_TYPE_ASYNC_LOB
139+
cdef type PY_TYPE_BOOL
140+
cdef type PY_TYPE_CURSOR
141+
cdef type PY_TYPE_DATE
142+
cdef type PY_TYPE_DATETIME
143+
cdef type PY_TYPE_DECIMAL
144+
cdef type PY_TYPE_DB_OBJECT
145+
cdef type PY_TYPE_DB_OBJECT_TYPE
146+
cdef type PY_TYPE_FETCHINFO
147+
cdef type PY_TYPE_JSON_ID
148+
cdef type PY_TYPE_INTERVAL_YM
149+
cdef type PY_TYPE_LOB
150+
cdef type PY_TYPE_MESSAGE
151+
cdef type PY_TYPE_MESSAGE_QUERY
152+
cdef type PY_TYPE_MESSAGE_ROW
153+
cdef type PY_TYPE_MESSAGE_TABLE
154+
cdef type PY_TYPE_TIMEDELTA
155+
cdef type PY_TYPE_VAR
156+
157+
cdef str DRIVER_NAME
158+
cdef str DRIVER_VERSION
159+
cdef str DRIVER_INSTALLATION_URL
160+
110161
cdef const char* ENCODING_UTF8
111162
cdef const char* ENCODING_UTF16
112163

src/oracledb/base_impl.pyx

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,7 @@ cydatetime.import_datetime()
5858

5959
include "impl/base/types.pyx"
6060

61-
from . import constants, errors, exceptions, utils
62-
61+
# Python types used by the driver
6362
cdef type PY_TYPE_ASYNC_CURSOR
6463
cdef type PY_TYPE_ASYNC_LOB
6564
cdef type PY_TYPE_BOOL = bool
@@ -76,16 +75,11 @@ cdef type PY_TYPE_TIMEDELTA = datetime.timedelta
7675
cdef type PY_TYPE_VAR
7776
cdef type PY_TYPE_FETCHINFO
7877

79-
# purity values
80-
cdef uint32_t PURITY_NEW = constants.PURITY_NEW
81-
cdef uint32_t PURITY_SELF = constants.PURITY_SELF
82-
cdef uint32_t PURITY_DEFAULT = constants.PURITY_DEFAULT
83-
84-
# vector types
85-
cdef uint8_t VECTOR_FORMAT_FLOAT32 = constants.VECTOR_FORMAT_FLOAT32
86-
cdef uint8_t VECTOR_FORMAT_FLOAT64 = constants.VECTOR_FORMAT_FLOAT64
87-
cdef uint8_t VECTOR_FORMAT_INT8 = constants.VECTOR_FORMAT_INT8
88-
78+
cdef const char* DRIVER_NAME = "python-oracledb"
79+
cdef const char* DRIVER_VERSION
80+
cdef const char* DRIVER_INSTALLATION_URL = \
81+
"https://python-oracledb.readthedocs.io/en/" \
82+
"latest/user_guide/initialization.html"
8983
cdef const char* ENCODING_UTF8 = "UTF-8"
9084
cdef const char* ENCODING_UTF16 = "UTF-16BE"
9185

src/oracledb/constants.py

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -33,28 +33,6 @@
3333
threadsafety = 2
3434
paramstyle = "named"
3535

36-
# authentication modes
37-
AUTH_MODE_DEFAULT = 0
38-
AUTH_MODE_PRELIM = 0x00000008
39-
AUTH_MODE_SYSASM = 0x00008000
40-
AUTH_MODE_SYSBKP = 0x00020000
41-
AUTH_MODE_SYSDBA = 0x00000002
42-
AUTH_MODE_SYSDGD = 0x00040000
43-
AUTH_MODE_SYSKMT = 0x00080000
44-
AUTH_MODE_SYSOPER = 0x00000004
45-
AUTH_MODE_SYSRAC = 0x00100000
46-
47-
# pool "get" modes
48-
POOL_GETMODE_WAIT = 0
49-
POOL_GETMODE_NOWAIT = 1
50-
POOL_GETMODE_FORCEGET = 2
51-
POOL_GETMODE_TIMEDWAIT = 3
52-
53-
# purity values
54-
PURITY_DEFAULT = 0
55-
PURITY_NEW = 1
56-
PURITY_SELF = 2
57-
5836
# AQ delivery modes
5937
MSG_BUFFERED = 2
6038
MSG_PERSISTENT = 1
@@ -155,18 +133,5 @@
155133
TPC_END_NORMAL = 0
156134
TPC_END_SUSPEND = 0x00100000
157135

158-
# vector types
159-
VECTOR_FORMAT_FLOAT32 = 2
160-
VECTOR_FORMAT_FLOAT64 = 3
161-
VECTOR_FORMAT_INT8 = 4
162-
163136
# vector metadata flags
164137
VECTOR_META_FLAG_FLEXIBLE_DIM = 0x01
165-
166-
# basic configuration constants
167-
DRIVER_NAME = "python-oracledb"
168-
INSTALLATION_URL = (
169-
"https://python-oracledb.readthedocs.io/en/"
170-
"latest/user_guide/initialization.html"
171-
)
172-
ENCODING = "UTF-8"

src/oracledb/errors.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,18 @@ def _raise_err(
182182
raise error.exc_type(error) from cause
183183

184184

185+
def _raise_not_supported(feature: str) -> None:
186+
"""
187+
Raises an exception that the specified feature is not supported. This is
188+
used as the default implementation of all functions for the implementation
189+
objects.
190+
"""
191+
driver_type = "thick" if is_thin_mode() else "thin"
192+
_raise_err(
193+
ERR_FEATURE_NOT_SUPPORTED, feature=feature, driver_type=driver_type
194+
)
195+
196+
185197
# prefix used for all error messages
186198
ERR_PREFIX = "DPY"
187199

0 commit comments

Comments
 (0)