diff --git a/modelbaker/db_factory/pg_command_config_manager.py b/modelbaker/db_factory/pg_command_config_manager.py index 660fd39..99d61dc 100644 --- a/modelbaker/db_factory/pg_command_config_manager.py +++ b/modelbaker/db_factory/pg_command_config_manager.py @@ -20,7 +20,7 @@ from qgis.PyQt.QtCore import QSettings from ..iliwrapper.ili2dbconfig import Ili2DbCommandConfiguration -from ..libs import pgserviceparser +from ..utils import db_utils from .db_command_config_manager import DbCommandConfigManager @@ -63,50 +63,38 @@ def get_uri(self, su: bool = False, qgis: bool = False) -> str: uri += ["service='{}'".format(self.configuration.dbservice)] # only set the params when they are not available in the service - if not pgserviceparser.service_config(self.configuration.dbservice).get( - "sslmode", None - ): + service_config, _ = db_utils.get_service_config(self.configuration.dbservice) + if not service_config or not service_config.get("sslmode", None): if self.configuration.sslmode: uri += ["sslmode='{}'".format(self.configuration.sslmode)] - if not pgserviceparser.service_config(self.configuration.dbservice).get( - "host", None - ): + if not service_config or not service_config.get("host", None): uri += ["host={}".format(self.configuration.dbhost)] - if not pgserviceparser.service_config(self.configuration.dbservice).get( - "port", None - ): + if not service_config or not service_config.get("port", None): if self.configuration.dbport: uri += ["port={}".format(self.configuration.dbport)] - if not pgserviceparser.service_config(self.configuration.dbservice).get( - "dbname", None - ): + if not service_config or not service_config.get("dbname", None): uri += ["dbname='{}'".format(self.configuration.database)] # only provide authcfg to the uri when it's needed for QGIS specific things if ( qgis and self.configuration.dbauthid - and not ( - pgserviceparser.service_config(self.configuration.dbservice).get( - "user", None - ) - and pgserviceparser.service_config(self.configuration.dbservice).get( - "password", None + and ( + not service_config + or not ( + service_config.get("user", None) + and service_config.get("password", None) ) ) ): uri += ["authcfg={}".format(self.configuration.dbauthid)] else: - if not pgserviceparser.service_config(self.configuration.dbservice).get( - "user", None - ): + if not service_config or not service_config.get("user", None): uri += ["user={}".format(self.configuration.dbusr)] - if not pgserviceparser.service_config(self.configuration.dbservice).get( - "password", None - ): + if not service_config or not service_config.get("password", None): if self.configuration.dbpwd: uri += ["password={}".format(self.configuration.dbpwd)] diff --git a/modelbaker/utils/db_utils.py b/modelbaker/utils/db_utils.py index 8251774..aba8eee 100644 --- a/modelbaker/utils/db_utils.py +++ b/modelbaker/utils/db_utils.py @@ -74,7 +74,7 @@ def get_configuration_from_sourceprovider(provider, configuration): layer_source = QgsDataSourceUri(provider.dataSourceUri()) mode = DbIliMode.pg configuration.dbservice = layer_source.service() - service_map = pgserviceparser.service_config(configuration.dbservice) + service_map, _ = get_service_config(configuration.dbservice) if layer_source.authConfigId(): configuration.dbauthid = layer_source.authConfigId() authconfig_map = get_authconfig_map(configuration.dbauthid) @@ -152,3 +152,36 @@ def db_ili_version(configuration): db_connector = get_db_connector(configuration) if db_connector: return db_connector.ili_version() + + +def get_service_names(): + """ + Provides the names of the available services in the PostgreSQL connection service file. + """ + try: + return pgserviceparser.service_names(), None + except pgserviceparser.ServiceFileNotFound as sfe: + return ( + [], + f"Services cannot be retrieved, since no service file {str(sfe)} available.", + ) + + +def get_service_config(servicename: str): + """ + Provides the service configuration of a given service from the PostgreSQL connection service file. + """ + if not servicename: + return {}, f"No servicename given." + try: + return pgserviceparser.service_config(servicename), None + except pgserviceparser.ServiceFileNotFound as sfe: + return ( + {}, + f"The service {servicename} cannot be found, since no service file {str(sfe)} available.", + ) + except pgserviceparser.ServiceNotFound: + return ( + {}, + f"The service {servicename} cannot be found in the service file.", + )