def encode_uri(ds_uri, schema_name, project_name=None): u = QUrl() urlQuery = QUrlQuery() u.setScheme("postgresql") u.setHost(ds_uri.host()) if ds_uri.port() != '': u.setPort(int(ds_uri.port())) if ds_uri.username() != '': u.setUserName(ds_uri.username()) if ds_uri.password() != '': u.setPassword(ds_uri.password()) if ds_uri.service() != '': urlQuery.addQueryItem("service", ds_uri.service()) if ds_uri.authConfigId() != '': urlQuery.addQueryItem("authcfg", ds_uri.authConfigId()) if ds_uri.sslMode() != QgsDataSourceUri.SslPrefer: urlQuery.addQueryItem("sslmode", QgsDataSourceUri.encodeSslMode(ds_uri.sslMode())) urlQuery.addQueryItem("dbname", ds_uri.database()) urlQuery.addQueryItem("schema", schema_name) if project_name: urlQuery.addQueryItem("project", project_name) u.setQuery(urlQuery) return str(u.toEncoded(), 'utf-8')
def qgsdatasoruceuri2dict(datasource: str) -> dict: """ From QgsDatasourceUri to dict At now only for postgres type layer :param qgsdsuri: Instace fo QgsDatasourceUri :return: a dict with uri parameters :return type: dict """ qgsdsuri = QgsDataSourceUri(datasource) # Mapping from QgsDatasourceUri to g3w-admin parameters params = { 'database': 'dbname', 'host': 'host', 'password': '******', 'port': 'port', 'sslMode': 'sslmode', 'username': '******', 'keyColumn': 'key', 'srid': 'srid', 'table': 'table', 'sql': 'sql', 'schema': 'schema' } toret = {} for k, v in params.items(): if k == 'sql': toret[v] = unicode2ascii(getattr(qgsdsuri, k)()) elif k == 'sslMode': print(qgsdsuri.sslMode()) toret[v] = qgsdsuri.encodeSslMode(qgsdsuri.sslMode()) toret[v] = getattr(qgsdsuri, k)() return toret