updated
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
# -----------------------------------------------------------------------------
|
||||
# Copyright (c) 2021, 2023, Oracle and/or its affiliates.
|
||||
#
|
||||
# This software is dual-licensed to you under the Universal Permissive License
|
||||
# (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl and Apache License
|
||||
# 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose
|
||||
# either license.
|
||||
#
|
||||
# If you elect to accept the software under the Apache License, Version 2.0,
|
||||
# the following applies:
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# dsn.py
|
||||
#
|
||||
# Contains makedsn(), a method available for backwards compatibility with
|
||||
# cx_Oracle. Use of the ConnectParams class or the keyword arguments to
|
||||
# connect() and create_pool() is recommended instead.
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
from . import errors
|
||||
|
||||
|
||||
def _check_arg(name: str, value: str) -> None:
|
||||
"""
|
||||
Checks the argument to ensure that it does not contain (, ) or = as these
|
||||
characters are not permitted within connect strings.
|
||||
"""
|
||||
if "(" in value or ")" in value or "=" in value:
|
||||
errors._raise_err(errors.ERR_INVALID_MAKEDSN_ARG, name=name)
|
||||
|
||||
|
||||
def makedsn(
|
||||
host: str,
|
||||
port: int,
|
||||
sid: str = None,
|
||||
service_name: str = None,
|
||||
region: str = None,
|
||||
sharding_key: str = None,
|
||||
super_sharding_key: str = None,
|
||||
) -> str:
|
||||
"""
|
||||
Return a string suitable for use as the dsn parameter for connect(). This
|
||||
string is identical to the strings that are defined in the tnsnames.ora
|
||||
file.
|
||||
"""
|
||||
connect_data_parts = []
|
||||
_check_arg("host", host)
|
||||
if sid is not None:
|
||||
_check_arg("sid", sid)
|
||||
connect_data_parts.append(f"(SID={sid})")
|
||||
if service_name is not None:
|
||||
_check_arg("service_name", service_name)
|
||||
connect_data_parts.append(f"(SERVICE_NAME={service_name})")
|
||||
if region is not None:
|
||||
_check_arg("region", region)
|
||||
connect_data_parts.append(f"(REGION={region})")
|
||||
if sharding_key is not None:
|
||||
_check_arg("sharding_key", sharding_key)
|
||||
connect_data_parts.append(f"(SHARDING_KEY={sharding_key})")
|
||||
if super_sharding_key is not None:
|
||||
_check_arg("super_sharding_key", super_sharding_key)
|
||||
connect_data_parts.append(f"(SUPER_SHARDING_KEY={super_sharding_key})")
|
||||
connect_data = "".join(connect_data_parts)
|
||||
return (
|
||||
f"(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={host})"
|
||||
f"(PORT={port}))(CONNECT_DATA={connect_data}))"
|
||||
)
|
||||
Reference in New Issue
Block a user