Skip to content

Commit 72aba69

Browse files
Added support for multiple aliases in one entry in tnsnames.ora (as
discovered in issue #3).
1 parent fde23a9 commit 72aba69

File tree

3 files changed

+26
-5
lines changed

3 files changed

+26
-5
lines changed

doc/src/release_notes.rst

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ For deprecations, see :ref:`Deprecations <deprecations>`.
1111
oracledb 1.0.1 (TBD)
1212
--------------------
1313

14+
#) Added support for multiple aliases in one entry in tnsnames.ora
15+
(`issue 3 <https://github.com/oracle/python-oracledb/issues/3>`__).
1416
#) Ensured the name of wrapped functions are the same as the function being
1517
wrapped in order to improve error messages that reference them.
1618

src/oracledb/impl/base/connect_params.pyx

+7-5
Original file line numberDiff line numberDiff line change
@@ -729,25 +729,27 @@ cdef class TnsnamesFile:
729729
the file.
730730
"""
731731
with open(self.file_name) as f:
732-
entry_name = None
732+
entry_names = None
733733
for line in f:
734734
line = line.strip()
735735
pos = line.find("#")
736736
if pos >= 0:
737737
line = line[:pos]
738738
if not line:
739739
continue
740-
if entry_name is None:
740+
if entry_names is None:
741741
pos = line.find("=")
742742
if pos < 0:
743743
continue
744-
entry_name = line[:pos].strip().upper()
744+
entry_names = [s.strip() for s in line[:pos].split(",")]
745745
entry_lines = []
746746
num_parens = 0
747747
line = line[pos+1:].strip()
748748
if line:
749749
num_parens += line.count("(") - line.count(")")
750750
entry_lines.append(line)
751751
if entry_lines and num_parens <= 0:
752-
self.entries[entry_name.upper()] = "".join(entry_lines)
753-
entry_name = None
752+
descriptor = "".join(entry_lines)
753+
for name in entry_names:
754+
self.entries[name.upper()] = descriptor
755+
entry_names = None

tests/test_4500_connect_params.py

+17
Original file line numberDiff line numberDiff line change
@@ -483,5 +483,22 @@ def test_4531_build_connect_string_with_tcp_connect_timeout(self):
483483
f"(SECURITY=(SSL_SERVER_DN_MATCH=True)))"
484484
self.assertEqual(params.get_connect_string(), connect_string)
485485

486+
def test_4532_multiple_alias_entry_tnsnames(self):
487+
"4532 - test tnsnames.ora with multiple aliases on one line"
488+
connect_string = \
489+
"(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=my_host32)(PORT=1132))" \
490+
"(CONNECT_DATA=(SERVICE_NAME=my_service_name32)))"
491+
aliases = f"tns_alias32a,tns_alias32b = {connect_string}"
492+
with tempfile.TemporaryDirectory() as temp_dir:
493+
file_name = os.path.join(temp_dir, "tnsnames.ora")
494+
with open(file_name, "w") as f:
495+
print(aliases, file=f)
496+
params = oracledb.ConnectParams(config_dir=temp_dir)
497+
for name in ("tns_alias32a", "tns_alias32b"):
498+
params.parse_connect_string(name)
499+
self.assertEqual(params.host, "my_host32")
500+
self.assertEqual(params.port, 1132)
501+
self.assertEqual(params.service_name, "my_service_name32")
502+
486503
if __name__ == "__main__":
487504
test_env.run_test_cases()

0 commit comments

Comments
 (0)