This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 2a084ee8d7 Update Oracle library to latest version (#24311)
2a084ee8d7 is described below
commit 2a084ee8d7fb27cbc3ad28f4845c5d20c82f0cbe
Author: Leonard Meerwood <[email protected]>
AuthorDate: Tue Jun 14 21:24:07 2022 +1000
Update Oracle library to latest version (#24311)
---
.../google/cloud/transfers/oracle_to_gcs.py | 20 ++---
airflow/providers/oracle/hooks/oracle.py | 53 ++++++--------
.../operators/transfer/oracle_to_gcs.rst | 2 +-
.../connections/oracle.rst | 4 +-
docs/apache-airflow-providers-oracle/index.rst | 2 +-
docs/conf.py | 2 +-
setup.py | 2 +-
.../google/cloud/transfers/test_oracle_to_gcs.py | 6 +-
.../transfers/test_oracle_to_azure_data_lake.py | 8 +-
tests/providers/oracle/hooks/test_oracle.py | 85 ++++++----------------
.../oracle/transfers/test_oracle_to_oracle.py | 4 +-
11 files changed, 69 insertions(+), 119 deletions(-)
diff --git a/airflow/providers/google/cloud/transfers/oracle_to_gcs.py
b/airflow/providers/google/cloud/transfers/oracle_to_gcs.py
index 3306c98010..d5fa696c50 100644
--- a/airflow/providers/google/cloud/transfers/oracle_to_gcs.py
+++ b/airflow/providers/google/cloud/transfers/oracle_to_gcs.py
@@ -22,7 +22,7 @@ from datetime import date, datetime, timedelta
from decimal import Decimal
from typing import Dict
-import cx_Oracle
+import oracledb
from airflow.providers.google.cloud.transfers.sql_to_gcs import
BaseSQLToGCSOperator
from airflow.providers.oracle.hooks.oracle import OracleHook
@@ -45,15 +45,15 @@ class OracleToGCSOperator(BaseSQLToGCSOperator):
ui_color = '#a0e08c'
type_map = {
- cx_Oracle.DB_TYPE_BINARY_DOUBLE: 'DECIMAL',
- cx_Oracle.DB_TYPE_BINARY_FLOAT: 'DECIMAL',
- cx_Oracle.DB_TYPE_BINARY_INTEGER: 'INTEGER',
- cx_Oracle.DB_TYPE_BOOLEAN: 'BOOLEAN',
- cx_Oracle.DB_TYPE_DATE: 'TIMESTAMP',
- cx_Oracle.DB_TYPE_NUMBER: 'NUMERIC',
- cx_Oracle.DB_TYPE_TIMESTAMP: 'TIMESTAMP',
- cx_Oracle.DB_TYPE_TIMESTAMP_LTZ: 'TIMESTAMP',
- cx_Oracle.DB_TYPE_TIMESTAMP_TZ: 'TIMESTAMP',
+ oracledb.DB_TYPE_BINARY_DOUBLE: 'DECIMAL', # type: ignore
+ oracledb.DB_TYPE_BINARY_FLOAT: 'DECIMAL', # type: ignore
+ oracledb.DB_TYPE_BINARY_INTEGER: 'INTEGER', # type: ignore
+ oracledb.DB_TYPE_BOOLEAN: 'BOOLEAN', # type: ignore
+ oracledb.DB_TYPE_DATE: 'TIMESTAMP', # type: ignore
+ oracledb.DB_TYPE_NUMBER: 'NUMERIC', # type: ignore
+ oracledb.DB_TYPE_TIMESTAMP: 'TIMESTAMP', # type: ignore
+ oracledb.DB_TYPE_TIMESTAMP_LTZ: 'TIMESTAMP', # type: ignore
+ oracledb.DB_TYPE_TIMESTAMP_TZ: 'TIMESTAMP', # type: ignore
}
def __init__(self, *, oracle_conn_id='oracle_default', ensure_utc=False,
**kwargs):
diff --git a/airflow/providers/oracle/hooks/oracle.py
b/airflow/providers/oracle/hooks/oracle.py
index c018c7c6c0..57b5bead41 100644
--- a/airflow/providers/oracle/hooks/oracle.py
+++ b/airflow/providers/oracle/hooks/oracle.py
@@ -21,7 +21,7 @@ import warnings
from datetime import datetime
from typing import Dict, List, Optional, Union
-import cx_Oracle
+import oracledb
try:
import numpy
@@ -57,7 +57,7 @@ class OracleHook(DbApiHook):
supports_autocommit = True
- def get_conn(self) -> 'OracleHook':
+ def get_conn(self) -> oracledb.Connection:
"""
Returns a oracle connection object
Optional parameters for using a custom DSN connection
@@ -84,8 +84,8 @@ class OracleHook(DbApiHook):
)
}
- see more param detail in
- `cx_Oracle.connect
<https://cx-oracle.readthedocs.io/en/latest/module.html#cx_Oracle.connect>`_
+ see more param detail in `oracledb.connect
+
<https://python-oracledb.readthedocs.io/en/latest/api_manual/module.html#oracledb.connect>`_
"""
@@ -98,9 +98,9 @@ class OracleHook(DbApiHook):
service_name = conn.extra_dejson.get('service_name')
port = conn.port if conn.port else 1521
if conn.host and sid and not service_name:
- conn_config['dsn'] = cx_Oracle.makedsn(conn.host, port, sid)
+ conn_config['dsn'] = oracledb.makedsn(conn.host, port, sid)
elif conn.host and service_name and not sid:
- conn_config['dsn'] = cx_Oracle.makedsn(conn.host, port,
service_name=service_name)
+ conn_config['dsn'] = oracledb.makedsn(conn.host, port,
service_name=service_name)
else:
dsn = conn.extra_dejson.get('dsn')
if dsn is None:
@@ -119,51 +119,40 @@ class OracleHook(DbApiHook):
dsn += "/" + conn.schema
conn_config['dsn'] = dsn
- if 'encoding' in conn.extra_dejson:
- conn_config['encoding'] = conn.extra_dejson.get('encoding')
- # if `encoding` is specific but `nencoding` is not
- # `nencoding` should use same values as `encoding` to set
encoding, inspired by
- #
https://github.com/oracle/python-cx_Oracle/issues/157#issuecomment-371877993
- if 'nencoding' not in conn.extra_dejson:
- conn_config['nencoding'] = conn.extra_dejson.get('encoding')
- if 'nencoding' in conn.extra_dejson:
- conn_config['nencoding'] = conn.extra_dejson.get('nencoding')
- if 'threaded' in conn.extra_dejson:
- conn_config['threaded'] = conn.extra_dejson.get('threaded')
if 'events' in conn.extra_dejson:
conn_config['events'] = conn.extra_dejson.get('events')
mode = conn.extra_dejson.get('mode', '').lower()
if mode == 'sysdba':
- conn_config['mode'] = cx_Oracle.SYSDBA
+ conn_config['mode'] = oracledb.AUTH_MODE_SYSDBA
elif mode == 'sysasm':
- conn_config['mode'] = cx_Oracle.SYSASM
+ conn_config['mode'] = oracledb.AUTH_MODE_SYSASM
elif mode == 'sysoper':
- conn_config['mode'] = cx_Oracle.SYSOPER
+ conn_config['mode'] = oracledb.AUTH_MODE_SYSOPER
elif mode == 'sysbkp':
- conn_config['mode'] = cx_Oracle.SYSBKP
+ conn_config['mode'] = oracledb.AUTH_MODE_SYSBKP
elif mode == 'sysdgd':
- conn_config['mode'] = cx_Oracle.SYSDGD
+ conn_config['mode'] = oracledb.AUTH_MODE_SYSDGD
elif mode == 'syskmt':
- conn_config['mode'] = cx_Oracle.SYSKMT
+ conn_config['mode'] = oracledb.AUTH_MODE_SYSKMT
elif mode == 'sysrac':
- conn_config['mode'] = cx_Oracle.SYSRAC
+ conn_config['mode'] = oracledb.AUTH_MODE_SYSRAC
purity = conn.extra_dejson.get('purity', '').lower()
if purity == 'new':
- conn_config['purity'] = cx_Oracle.ATTR_PURITY_NEW
+ conn_config['purity'] = oracledb.PURITY_NEW
elif purity == 'self':
- conn_config['purity'] = cx_Oracle.ATTR_PURITY_SELF
+ conn_config['purity'] = oracledb.PURITY_SELF
elif purity == 'default':
- conn_config['purity'] = cx_Oracle.ATTR_PURITY_DEFAULT
+ conn_config['purity'] = oracledb.PURITY_DEFAULT
- conn = cx_Oracle.connect(**conn_config)
+ conn = oracledb.connect(**conn_config)
if mod is not None:
conn.module = mod
# if Connection.schema is defined, set schema after connecting
successfully
# cannot be part of conn_config
- #
https://cx-oracle.readthedocs.io/en/latest/api_manual/connection.html?highlight=schema#Connection.current_schema
+ #
https://python-oracledb.readthedocs.io/en/latest/api_manual/connection.html?highlight=schema#Connection.current_schema
# Only set schema when not using conn.schema as Service Name
if schema and service_name:
conn.current_schema = schema
@@ -184,7 +173,7 @@ class OracleHook(DbApiHook):
the whole set of inserts is treated as one transaction
Changes from standard DbApiHook implementation:
- - Oracle SQL queries in cx_Oracle can not be terminated with a
semicolon (`;`)
+ - Oracle SQL queries in oracledb can not be terminated with a
semicolon (`;`)
- Replace NaN values with NULL using `numpy.nan_to_num` (not using
`is_nan()` because of input types error for strings)
- Coerce datetime cells to Oracle DATETIME format during insert
@@ -245,7 +234,7 @@ class OracleHook(DbApiHook):
commit_every: int = 5000,
):
"""
- A performant bulk insert for cx_Oracle
+ A performant bulk insert for oracledb
that uses prepared statements via `executemany()`.
For best performance, pass in `rows` as an iterator.
@@ -307,7 +296,7 @@ class OracleHook(DbApiHook):
provided `parameters` argument.
See
-
https://cx-oracle.readthedocs.io/en/latest/api_manual/cursor.html#Cursor.var
+
https://python-oracledb.readthedocs.io/en/latest/api_manual/cursor.html#Cursor.var
for further reference.
"""
if parameters is None:
diff --git
a/docs/apache-airflow-providers-google/operators/transfer/oracle_to_gcs.rst
b/docs/apache-airflow-providers-google/operators/transfer/oracle_to_gcs.rst
index 9299d417a5..2c23209ae4 100644
--- a/docs/apache-airflow-providers-google/operators/transfer/oracle_to_gcs.rst
+++ b/docs/apache-airflow-providers-google/operators/transfer/oracle_to_gcs.rst
@@ -49,5 +49,5 @@ Reference
---------
For further information, look at:
-* `cx_Oracle Documentation <https://cx-oracle.readthedocs.io/en/latest/>`__
+* `oracledb Documentation
<https://python-oracledb.readthedocs.io/en/latest/>`__
* `Google Cloud Storage Documentation <https://cloud.google.com/storage/>`__
diff --git a/docs/apache-airflow-providers-oracle/connections/oracle.rst
b/docs/apache-airflow-providers-oracle/connections/oracle.rst
index 4a26c36b31..3934b6648e 100644
--- a/docs/apache-airflow-providers-oracle/connections/oracle.rst
+++ b/docs/apache-airflow-providers-oracle/connections/oracle.rst
@@ -82,8 +82,8 @@ Extra (optional)
Schema = "orcl"
- More details on all Oracle connect parameters supported can be found in
`cx_Oracle documentation
-
<https://cx-oracle.readthedocs.io/en/latest/api_manual/module.html#cx_Oracle.connect>`_.
+ More details on all Oracle connect parameters supported can be found in
`oracledb documentation
+
<https://python-oracledb.readthedocs.io/en/latest/api_manual/module.html#oracledb.connect>`_.
Information on creating an Oracle Connection through the web user
interface can be found in Airflow's :doc:`Managing Connections Documentation
<apache-airflow:howto/connection>`.
diff --git a/docs/apache-airflow-providers-oracle/index.rst
b/docs/apache-airflow-providers-oracle/index.rst
index c2792fff69..09f041922a 100644
--- a/docs/apache-airflow-providers-oracle/index.rst
+++ b/docs/apache-airflow-providers-oracle/index.rst
@@ -79,7 +79,7 @@ Requirements
PIP package Version required
================== ==================
``apache-airflow`` ``>=2.2.0``
-``cx_Oracle`` ``>=5.1.2``
+``oracledb`` ``>=1.0.0``
================== ==================
.. include:: ../../airflow/providers/oracle/CHANGELOG.rst
diff --git a/docs/conf.py b/docs/conf.py
index 47334381fc..72080b43cb 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -551,7 +551,6 @@ autodoc_mock_imports = [
'celery',
'cloudant',
'cryptography',
- 'cx_Oracle',
'datadog',
'distributed',
'docker',
@@ -567,6 +566,7 @@ autodoc_mock_imports = [
'kubernetes',
'msrestazure',
'oss2',
+ 'oracledb',
'pandas',
'pandas_gbq',
'paramiko',
diff --git a/setup.py b/setup.py
index a07368d127..d56e3e6233 100644
--- a/setup.py
+++ b/setup.py
@@ -463,7 +463,7 @@ opsgenie = [
'opsgenie-sdk>=2.1.5',
]
oracle = [
- 'cx_Oracle>=5.1.2',
+ 'oracledb>=1.0.0',
]
pagerduty = [
'pdpyras>=4.1.2',
diff --git a/tests/providers/google/cloud/transfers/test_oracle_to_gcs.py
b/tests/providers/google/cloud/transfers/test_oracle_to_gcs.py
index b90510cbae..38a46a8d99 100644
--- a/tests/providers/google/cloud/transfers/test_oracle_to_gcs.py
+++ b/tests/providers/google/cloud/transfers/test_oracle_to_gcs.py
@@ -19,7 +19,7 @@
import unittest
from unittest import mock
-import cx_Oracle
+import oracledb
from airflow.providers.google.cloud.transfers.oracle_to_gcs import
OracleToGCSOperator
@@ -32,8 +32,8 @@ GZIP = False
ROWS = [('mock_row_content_1', 42), ('mock_row_content_2', 43),
('mock_row_content_3', 44)]
CURSOR_DESCRIPTION = (
- ('some_str', cx_Oracle.DB_TYPE_VARCHAR, None, None, None, None, None),
- ('some_num', cx_Oracle.DB_TYPE_NUMBER, None, None, None, None, None),
+ ('some_str', oracledb.DB_TYPE_VARCHAR, None, None, None, None, None), #
type: ignore
+ ('some_num', oracledb.DB_TYPE_NUMBER, None, None, None, None, None), #
type: ignore
)
NDJSON_LINES = [
b'{"some_num": 42, "some_str": "mock_row_content_1"}\n',
diff --git
a/tests/providers/microsoft/azure/transfers/test_oracle_to_azure_data_lake.py
b/tests/providers/microsoft/azure/transfers/test_oracle_to_azure_data_lake.py
index 507e143a03..17d308273c 100644
---
a/tests/providers/microsoft/azure/transfers/test_oracle_to_azure_data_lake.py
+++
b/tests/providers/microsoft/azure/transfers/test_oracle_to_azure_data_lake.py
@@ -44,8 +44,8 @@ class TestOracleToAzureDataLakeTransfer(unittest.TestCase):
delimiter = '|'
encoding = 'utf-8'
cursor_description = [
- ('id', "<class 'cx_Oracle.NUMBER'>", 39, None, 38, 0, 0),
- ('description', "<class 'cx_Oracle.STRING'>", 60, 240, None, None,
1),
+ ('id', "<class 'oracledb.NUMBER'>", 39, None, 38, 0, 0),
+ ('description', "<class 'oracledb.STRING'>", 60, 240, None, None,
1),
]
cursor_rows = [[1, 'description 1'], [2, 'description 2']]
mock_cursor = MagicMock()
@@ -95,8 +95,8 @@ class TestOracleToAzureDataLakeTransfer(unittest.TestCase):
delimiter = '|'
encoding = 'latin-1'
cursor_description = [
- ('id', "<class 'cx_Oracle.NUMBER'>", 39, None, 38, 0, 0),
- ('description', "<class 'cx_Oracle.STRING'>", 60, 240, None, None,
1),
+ ('id', "<class 'oracledb.NUMBER'>", 39, None, 38, 0, 0),
+ ('description', "<class 'oracledb.STRING'>", 60, 240, None, None,
1),
]
cursor_rows = [[1, 'description 1'], [2, 'description 2']]
cursor_mock = MagicMock()
diff --git a/tests/providers/oracle/hooks/test_oracle.py
b/tests/providers/oracle/hooks/test_oracle.py
index db2e9f41ad..d33dbf79f7 100644
--- a/tests/providers/oracle/hooks/test_oracle.py
+++ b/tests/providers/oracle/hooks/test_oracle.py
@@ -28,12 +28,12 @@ from airflow.models import Connection
from airflow.providers.oracle.hooks.oracle import OracleHook
try:
- import cx_Oracle
+ import oracledb
except ImportError:
- cx_Oracle = None
+ oracledb = None # type: ignore
[email protected](cx_Oracle is None, 'cx_Oracle package not present')
[email protected](oracledb is None, 'oracledb package not present')
class TestOracleHookConn(unittest.TestCase):
def setUp(self):
super().setUp()
@@ -46,7 +46,7 @@ class TestOracleHookConn(unittest.TestCase):
self.db_hook.get_connection = mock.Mock()
self.db_hook.get_connection.return_value = self.connection
- @mock.patch('airflow.providers.oracle.hooks.oracle.cx_Oracle.connect')
+ @mock.patch('airflow.providers.oracle.hooks.oracle.oracledb.connect')
def test_get_conn_host(self, mock_connect):
self.db_hook.get_conn()
assert mock_connect.call_count == 1
@@ -56,7 +56,7 @@ class TestOracleHookConn(unittest.TestCase):
assert kwargs['password'] == 'password'
assert kwargs['dsn'] == 'host:1521/schema'
- @mock.patch('airflow.providers.oracle.hooks.oracle.cx_Oracle.connect')
+ @mock.patch('airflow.providers.oracle.hooks.oracle.oracledb.connect')
def test_get_conn_host_alternative_port(self, mock_connect):
self.connection.port = 1522
self.db_hook.get_conn()
@@ -67,7 +67,7 @@ class TestOracleHookConn(unittest.TestCase):
assert kwargs['password'] == 'password'
assert kwargs['dsn'] == 'host:1522/schema'
- @mock.patch('airflow.providers.oracle.hooks.oracle.cx_Oracle.connect')
+ @mock.patch('airflow.providers.oracle.hooks.oracle.oracledb.connect')
def test_get_conn_sid(self, mock_connect):
dsn_sid = {'dsn': 'ignored', 'sid': 'sid'}
self.connection.extra = json.dumps(dsn_sid)
@@ -75,9 +75,9 @@ class TestOracleHookConn(unittest.TestCase):
assert mock_connect.call_count == 1
args, kwargs = mock_connect.call_args
assert args == ()
- assert kwargs['dsn'] == cx_Oracle.makedsn("host",
self.connection.port, dsn_sid['sid'])
+ assert kwargs['dsn'] == oracledb.makedsn("host", self.connection.port,
dsn_sid['sid'])
- @mock.patch('airflow.providers.oracle.hooks.oracle.cx_Oracle.connect')
+ @mock.patch('airflow.providers.oracle.hooks.oracle.oracledb.connect')
def test_get_conn_service_name(self, mock_connect):
dsn_service_name = {'dsn': 'ignored', 'service_name': 'service_name'}
self.connection.extra = json.dumps(dsn_service_name)
@@ -85,49 +85,19 @@ class TestOracleHookConn(unittest.TestCase):
assert mock_connect.call_count == 1
args, kwargs = mock_connect.call_args
assert args == ()
- assert kwargs['dsn'] == cx_Oracle.makedsn(
+ assert kwargs['dsn'] == oracledb.makedsn(
"host", self.connection.port,
service_name=dsn_service_name['service_name']
)
- @mock.patch('airflow.providers.oracle.hooks.oracle.cx_Oracle.connect')
- def test_get_conn_encoding_without_nencoding(self, mock_connect):
- self.connection.extra = json.dumps({'encoding': 'UTF-8'})
- self.db_hook.get_conn()
- assert mock_connect.call_count == 1
- args, kwargs = mock_connect.call_args
- assert args == ()
- assert kwargs['encoding'] == 'UTF-8'
- assert kwargs['nencoding'] == 'UTF-8'
-
- @mock.patch('airflow.providers.oracle.hooks.oracle.cx_Oracle.connect')
- def test_get_conn_encoding_with_nencoding(self, mock_connect):
- self.connection.extra = json.dumps({'encoding': 'UTF-8', 'nencoding':
'gb2312'})
- self.db_hook.get_conn()
- assert mock_connect.call_count == 1
- args, kwargs = mock_connect.call_args
- assert args == ()
- assert kwargs['encoding'] == 'UTF-8'
- assert kwargs['nencoding'] == 'gb2312'
-
- @mock.patch('airflow.providers.oracle.hooks.oracle.cx_Oracle.connect')
- def test_get_conn_nencoding(self, mock_connect):
- self.connection.extra = json.dumps({'nencoding': 'UTF-8'})
- self.db_hook.get_conn()
- assert mock_connect.call_count == 1
- args, kwargs = mock_connect.call_args
- assert args == ()
- assert 'encoding' not in kwargs
- assert kwargs['nencoding'] == 'UTF-8'
-
- @mock.patch('airflow.providers.oracle.hooks.oracle.cx_Oracle.connect')
+ @mock.patch('airflow.providers.oracle.hooks.oracle.oracledb.connect')
def test_get_conn_mode(self, mock_connect):
mode = {
- 'sysdba': cx_Oracle.SYSDBA,
- 'sysasm': cx_Oracle.SYSASM,
- 'sysoper': cx_Oracle.SYSOPER,
- 'sysbkp': cx_Oracle.SYSBKP,
- 'sysdgd': cx_Oracle.SYSDGD,
- 'syskmt': cx_Oracle.SYSKMT,
+ 'sysdba': oracledb.AUTH_MODE_SYSDBA,
+ 'sysasm': oracledb.AUTH_MODE_SYSASM,
+ 'sysoper': oracledb.AUTH_MODE_SYSOPER,
+ 'sysbkp': oracledb.AUTH_MODE_SYSBKP,
+ 'sysdgd': oracledb.AUTH_MODE_SYSDGD,
+ 'syskmt': oracledb.AUTH_MODE_SYSKMT,
}
first = True
for mod in mode:
@@ -140,16 +110,7 @@ class TestOracleHookConn(unittest.TestCase):
assert args == ()
assert kwargs['mode'] == mode.get(mod)
- @mock.patch('airflow.providers.oracle.hooks.oracle.cx_Oracle.connect')
- def test_get_conn_threaded(self, mock_connect):
- self.connection.extra = json.dumps({'threaded': True})
- self.db_hook.get_conn()
- assert mock_connect.call_count == 1
- args, kwargs = mock_connect.call_args
- assert args == ()
- assert kwargs['threaded'] is True
-
- @mock.patch('airflow.providers.oracle.hooks.oracle.cx_Oracle.connect')
+ @mock.patch('airflow.providers.oracle.hooks.oracle.oracledb.connect')
def test_get_conn_events(self, mock_connect):
self.connection.extra = json.dumps({'events': True})
self.db_hook.get_conn()
@@ -158,12 +119,12 @@ class TestOracleHookConn(unittest.TestCase):
assert args == ()
assert kwargs['events'] is True
- @mock.patch('airflow.providers.oracle.hooks.oracle.cx_Oracle.connect')
+ @mock.patch('airflow.providers.oracle.hooks.oracle.oracledb.connect')
def test_get_conn_purity(self, mock_connect):
purity = {
- 'new': cx_Oracle.ATTR_PURITY_NEW,
- 'self': cx_Oracle.ATTR_PURITY_SELF,
- 'default': cx_Oracle.ATTR_PURITY_DEFAULT,
+ 'new': oracledb.PURITY_NEW,
+ 'self': oracledb.PURITY_SELF,
+ 'default': oracledb.PURITY_DEFAULT,
}
first = True
for pur in purity:
@@ -176,14 +137,14 @@ class TestOracleHookConn(unittest.TestCase):
assert args == ()
assert kwargs['purity'] == purity.get(pur)
- @mock.patch('airflow.providers.oracle.hooks.oracle.cx_Oracle.connect')
+ @mock.patch('airflow.providers.oracle.hooks.oracle.oracledb.connect')
def test_set_current_schema(self, mock_connect):
self.connection.schema = "schema_name"
self.connection.extra = json.dumps({'service_name': 'service_name'})
assert self.db_hook.get_conn().current_schema == self.connection.schema
[email protected](cx_Oracle is None, 'cx_Oracle package not present')
[email protected](oracledb is None, 'oracledb package not present')
class TestOracleHook(unittest.TestCase):
def setUp(self):
super().setUp()
diff --git a/tests/providers/oracle/transfers/test_oracle_to_oracle.py
b/tests/providers/oracle/transfers/test_oracle_to_oracle.py
index a036a3e990..7970448c18 100644
--- a/tests/providers/oracle/transfers/test_oracle_to_oracle.py
+++ b/tests/providers/oracle/transfers/test_oracle_to_oracle.py
@@ -33,8 +33,8 @@ class TestOracleToOracleTransfer(unittest.TestCase):
source_sql_params = {':p_data': "2018-01-01"}
rows_chunk = 5000
cursor_description = [
- ('id', "<class 'cx_Oracle.NUMBER'>", 39, None, 38, 0, 0),
- ('description', "<class 'cx_Oracle.STRING'>", 60, 240, None, None,
1),
+ ('id', "<class 'oracledb.NUMBER'>", 39, None, 38, 0, 0),
+ ('description', "<class 'oracledb.STRING'>", 60, 240, None, None,
1),
]
cursor_rows = [[1, 'description 1'], [2, 'description 2']]