Parse database connection strings, DSNs, URLs, file paths, and cloud storage URIs.
Project description
connparse
Connparse parses database connection strings, DSNs, URLs, file paths, and cloud storage URIs into one predictable Python dict.
Connparse is useful when your app accepts connection strings from different systems and you want to pull out the host, port, database, bucket, path, credentials, query options, and a safe redacted string.
Supported sources include PostgreSQL, MySQL, MariaDB, SQLite, DuckDB, ClickHouse, Redis, Memcached, Elasticsearch, MongoDB, CockroachDB, QuestDB, YugabyteDB, TiDB, Valkey, Dragonfly, OpenSearch, FerretDB, ElastiCache, DocumentDB, SQL Server, Oracle, Snowflake, Cassandra, BigQuery, Redshift, Aurora, Neo4j, Trino, Databricks, DynamoDB, StarRocks, SAP HANA, Athena, Spanner, Google Cloud Storage, Azure Blob, Azure Data Lake Storage, Azure Files, Azure Cosmos DB, Business Central, TallyPrime, Amazon S3, and local file paths.
Install
pip install connparse
Basic Usage
from connparse import parse
result = parse("postgres://user:pass@localhost:5432/app?sslmode=require")
if not result["ok"]:
print(result["errors"])
else:
print(result["value"])
Result:
{
"scheme": "postgres",
"type": "database",
"authority": {
"host": "localhost",
"port": 5432
},
"resource": {
"type": "database",
"name": "app"
},
"path": "",
"query": {
"sslmode": "require"
},
"fragment": null,
"credentials": {
"username": "user",
"password": "pass"
},
"options": {},
"raw": "postgres://user:pass@localhost:5432/app?sslmode=require",
"safe": "postgres://user:***@localhost:5432/app?sslmode=require"
}
Recommended Usage
Use parse() for form handling, validation, and showing parsed connection
details to users.
result = parse(input)
if result["ok"]:
address = result["value"]
save_connection(
host=address["authority"].get("host"),
port=address["authority"].get("port"),
database=address["resource"]["name"],
safe_label=address["safe"],
)
Use safe for logs and UI labels. Do not log raw or credentials unless the
user explicitly asks to reveal secrets.
logger.info("connection=%s", result["value"]["safe"])
Use parse_normalize() when you need a stable identity for dedupe, cache keys,
or config comparison.
from connparse import parse_normalize
parse_normalize("postgresql://LOCALHOST:5432/app?sslmode=require")["value"]["canonical"]
# "postgres://localhost/app?sslmode=require"
Use provider when the string does not clearly identify the source type.
parse("host=db.example.com port=5432 dbname=app user=alice", {
"provider": "postgres",
})
parse("https://clickhouse.example.com:8443/default", {
"provider": "clickhouse",
})
Use strict when you want unknown query parameters to fail validation.
parse("postgres://localhost/app?unexpected=1", {"strict": True})
Examples
| Source | Input | Parsed result |
|---|---|---|
| PostgreSQL | postgres://user:pass@localhost:5432/app?sslmode=require |
authority.host = "localhost", authority.port = 5432, resource.name = "app", query.sslmode = "require" |
| MySQL | mysql://root:secret@127.0.0.1/shop?charset=utf8mb4 |
authority.host = "127.0.0.1", authority.port = 3306, resource.name = "shop", query.charset = "utf8mb4" |
| MariaDB | mariadb://root:secret@mariadb.example.com:3306/app |
authority.host = "mariadb.example.com", authority.port = 3306, resource.name = "app" |
| SQLite | sqlite::memory: |
scheme = "sqlite", resource.name = ":memory:", path = ":memory:", options.memory = true |
| DuckDB | duckdb:///tmp/analytics.duckdb?access_mode=read_only |
scheme = "duckdb", path = "/tmp/analytics.duckdb", query.access_mode = "read_only" |
| ClickHouse | jdbc:clickhouse:http://localhost:8123/analytics?ssl=false |
authority.host = "localhost", authority.port = 8123, resource.name = "analytics", options.protocol = "http" |
| Memcached | memcached://cache.example.com |
authority.host = "cache.example.com", authority.port = 11211, type = "cache" |
| Redis | rediss://:pass@cache.example.com/0 |
authority.host = "cache.example.com", authority.port = 6379, resource.name = "0", options.tls = true |
| Elasticsearch | elasticsearch+https://elastic:secret@es.example.com:9243/logs?api_key=abc |
authority.host = "es.example.com", authority.port = 9243, resource.name = "logs", credentials.api_key = "abc" |
| MongoDB | mongodb+srv://user:pass@cluster.mongodb.net/app?retryWrites=true |
authority.host = "cluster.mongodb.net", resource.name = "app", query.retryWrites = "true", options.srv = true |
| CockroachDB | cockroach://root@servername:26257/mydb?sslmode=disable |
authority.host = "servername", authority.port = 26257, resource.name = "mydb", options.compatible_with = "postgres" |
| QuestDB | https::addr=questdb.example.com:9000;username=admin;password=quest;auto_flush_rows=5000; |
authority.host = "questdb.example.com", authority.port = 9000, query.auto_flush_rows = "5000", options.ingestion = true |
| YugabyteDB | yugabyte://yugabyte:yugabyte@localhost:5433/yugabyte?loadBalance=any |
authority.host = "localhost", authority.port = 5433, resource.name = "yugabyte", query.loadBalance = "any" |
| S3 | s3://my-bucket/path/to/file.csv?versionId=123 |
authority.bucket = "my-bucket", resource.name = "my-bucket", path = "path/to/file.csv" |
| File | file:///tmp/data.csv#header |
scheme = "file", path = "/tmp/data.csv", fragment = "header" |
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file connparse-0.7.0.tar.gz.
File metadata
- Download URL: connparse-0.7.0.tar.gz
- Upload date:
- Size: 20.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
206f294cfd80d0540fccb88d75930bb15b10de7415b4bdd1ff24b9cd5e581779
|
|
| MD5 |
fb6f8be441e760475ceed353beab1ff7
|
|
| BLAKE2b-256 |
6cecb9056312b3005ff2bc0711b8882c34b5453bdb38d711e808719b249bec50
|
Provenance
The following attestation bundles were made for connparse-0.7.0.tar.gz:
Publisher:
release.yml on clidey/connparse
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
connparse-0.7.0.tar.gz -
Subject digest:
206f294cfd80d0540fccb88d75930bb15b10de7415b4bdd1ff24b9cd5e581779 - Sigstore transparency entry: 1582415281
- Sigstore integration time:
-
Permalink:
clidey/connparse@000904aa142515687e14d583ec8b832a18263e77 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/clidey
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@000904aa142515687e14d583ec8b832a18263e77 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file connparse-0.7.0-py3-none-any.whl.
File metadata
- Download URL: connparse-0.7.0-py3-none-any.whl
- Upload date:
- Size: 19.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
25feb015b95614c32e94e36588b8470e26a6edd7841ca51cb61ad3325c98ace9
|
|
| MD5 |
2d31c9ee745572e2d8d528f4c21dd29c
|
|
| BLAKE2b-256 |
8bafaaa6cc616fa32d6d9b35b560a498af7474bd7954dee91130af2db7833108
|
Provenance
The following attestation bundles were made for connparse-0.7.0-py3-none-any.whl:
Publisher:
release.yml on clidey/connparse
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
connparse-0.7.0-py3-none-any.whl -
Subject digest:
25feb015b95614c32e94e36588b8470e26a6edd7841ca51cb61ad3325c98ace9 - Sigstore transparency entry: 1582415404
- Sigstore integration time:
-
Permalink:
clidey/connparse@000904aa142515687e14d583ec8b832a18263e77 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/clidey
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@000904aa142515687e14d583ec8b832a18263e77 -
Trigger Event:
workflow_dispatch
-
Statement type: