@@ -320,7 +320,7 @@ cdef class ConnectParamsImpl:
320
320
# to be a full connect descriptor
321
321
if connect_string.startswith(" (" ):
322
322
_parse_connect_descriptor(connect_string, args)
323
- return self ._process_connect_descriptor(args)
323
+ return self ._process_connect_descriptor(connect_string, args)
324
324
325
325
# otherwise, see if the connect string is an EasyConnect string
326
326
m = re.search(EASY_CONNECT_PATTERN, connect_string)
@@ -342,7 +342,7 @@ cdef class ConnectParamsImpl:
342
342
self ._parse_easy_connect_string(connect_string, m)
343
343
else :
344
344
_parse_connect_descriptor(connect_string, args)
345
- self ._process_connect_descriptor(args)
345
+ self ._process_connect_descriptor(connect_string, args)
346
346
347
347
cdef int _parse_easy_connect_string(self , str connect_string,
348
348
object match) except - 1 :
@@ -382,26 +382,28 @@ cdef class ConnectParamsImpl:
382
382
self .description_list = DescriptionList()
383
383
self .description_list.children.append(description)
384
384
385
- cdef int _process_connect_descriptor(self , dict args) except - 1 :
385
+ cdef int _process_connect_descriptor(self , str connect_string,
386
+ dict args) except - 1 :
386
387
"""
387
388
Internal method used for processing the parsed connect descriptor into
388
389
the set of DescriptionList, Description, AddressList and Address
389
390
container objects.
390
391
"""
391
392
cdef:
393
+ DescriptionList description_list
392
394
AddressList address_list
393
395
Description description
394
396
Address address
395
- self . description_list = DescriptionList()
397
+ description_list = DescriptionList()
396
398
list_args = args.get(" description_list" )
397
399
if list_args is not None :
398
- self . description_list.set_from_args(list_args)
400
+ description_list.set_from_args(list_args)
399
401
else :
400
402
list_args = args
401
403
for desc_args in list_args.get(" description" , [list_args]):
402
404
description = self ._default_description.copy()
403
405
description.set_from_description_args(desc_args)
404
- self . description_list.children.append(description)
406
+ description_list.children.append(description)
405
407
sub_args = desc_args.get(" connect_data" )
406
408
if sub_args is not None :
407
409
description.set_from_connect_data_args(sub_args)
@@ -416,6 +418,10 @@ cdef class ConnectParamsImpl:
416
418
address = self ._default_address.copy()
417
419
address.set_from_args(addr_args)
418
420
address_list.children.append(address)
421
+ if not description_list.get_addresses():
422
+ errors._raise_err(errors.ERR_MISSING_ADDRESS,
423
+ connect_string = connect_string)
424
+ self .description_list = description_list
419
425
420
426
cdef int _set_access_token(self , object val, int error_num) except - 1 :
421
427
"""
@@ -513,13 +519,7 @@ cdef class ConnectParamsImpl:
513
519
"""
514
520
Return a list of the stored addresses.
515
521
"""
516
- cdef:
517
- AddressList addr_list
518
- Description desc
519
- Address addr
520
- return [addr for desc in self .description_list.children \
521
- for addr_list in desc.children \
522
- for addr in addr_list.children]
522
+ return self .description_list.get_addresses()
523
523
524
524
def get_connect_string (self ):
525
525
"""
@@ -980,6 +980,18 @@ cdef class DescriptionList(ConnectParamsNode):
980
980
return parts[0 ]
981
981
return f' (DESCIPTION_LIST={"".join(parts)})'
982
982
983
+ cdef list get_addresses(self ):
984
+ """
985
+ Return a list of the stored addresses.
986
+ """
987
+ cdef:
988
+ AddressList addr_list
989
+ Description desc
990
+ Address addr
991
+ return [addr for desc in self .children \
992
+ for addr_list in desc.children \
993
+ for addr in addr_list.children]
994
+
983
995
def set_from_args (self , dict args ):
984
996
"""
985
997
Set paramter values from an argument dictionary or a (DESCRIPTION_LIST)
0 commit comments