From 41e3889c56518399e0d76200538562c7ee6e186a Mon Sep 17 00:00:00 2001 From: solidguy7 Date: Wed, 20 Mar 2024 16:42:37 +0300 Subject: [PATCH 1/2] clickhouse-dsn --- pydantic/__init__.py | 2 ++ pydantic/networks.py | 15 +++++++++++++++ tests/test_networks.py | 15 +++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/pydantic/__init__.py b/pydantic/__init__.py index 8a71bbd85c..ae726ea494 100644 --- a/pydantic/__init__.py +++ b/pydantic/__init__.py @@ -124,6 +124,7 @@ 'NatsDsn', 'MySQLDsn', 'MariaDBDsn', + 'ClickhouseDsn', 'validate_email', # root_model 'RootModel', @@ -277,6 +278,7 @@ 'NatsDsn': (__package__, '.networks'), 'MySQLDsn': (__package__, '.networks'), 'MariaDBDsn': (__package__, '.networks'), + 'ClickhouseDsn': (__package__, '.networks'), 'validate_email': (__package__, '.networks'), # root_model 'RootModel': (__package__, '.root_model'), diff --git a/pydantic/networks.py b/pydantic/networks.py index d8e6549f62..ceaf72f417 100644 --- a/pydantic/networks.py +++ b/pydantic/networks.py @@ -45,6 +45,7 @@ 'validate_email', 'MySQLDsn', 'MariaDBDsn', + 'ClickhouseDsn', ] @@ -354,6 +355,20 @@ def check_db_name(cls, v): ] """A type that will accept any MariaDB DSN. +* User info required +* TLD not required +* Host required +""" +ClickhouseDsn = Annotated[ + Url, + UrlConstraints( + allowed_schemes=['clickhouse+native', 'clickhouse+asynch'], + default_host='localhost', + default_port=9000, + ), +] +"""A type that will accept any ClickHouse DSN. + * User info required * TLD not required * Host required diff --git a/tests/test_networks.py b/tests/test_networks.py index 427c22547c..366895ccc2 100644 --- a/tests/test_networks.py +++ b/tests/test_networks.py @@ -9,6 +9,7 @@ AmqpDsn, AnyUrl, BaseModel, + ClickhouseDsn, CockroachDsn, FileUrl, HttpUrl, @@ -419,6 +420,20 @@ class Model(BaseModel): assert str(Model(a=dsn).a) == dsn +@pytest.mark.parametrize( + 'dsn', + [ + 'clickhouse+native://user:pass@localhost:9000/app', + 'clickhouse+asynch://user:pass@localhost:9000/app', + ], +) +def test_clickhouse_dsns(dsn): + class Model(BaseModel): + a: ClickhouseDsn + + assert str(Model(a=dsn).a) == dsn + + @pytest.mark.parametrize( 'dsn,error_message', ( From be315e835a9166b866c06005a2db05cc4817ca59 Mon Sep 17 00:00:00 2001 From: solidguy7 Date: Thu, 21 Mar 2024 19:14:39 +0300 Subject: [PATCH 2/2] renaming --- pydantic/__init__.py | 4 ++-- pydantic/networks.py | 4 ++-- tests/test_networks.py | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pydantic/__init__.py b/pydantic/__init__.py index ae726ea494..929b7f705a 100644 --- a/pydantic/__init__.py +++ b/pydantic/__init__.py @@ -124,7 +124,7 @@ 'NatsDsn', 'MySQLDsn', 'MariaDBDsn', - 'ClickhouseDsn', + 'ClickHouseDsn', 'validate_email', # root_model 'RootModel', @@ -278,7 +278,7 @@ 'NatsDsn': (__package__, '.networks'), 'MySQLDsn': (__package__, '.networks'), 'MariaDBDsn': (__package__, '.networks'), - 'ClickhouseDsn': (__package__, '.networks'), + 'ClickHouseDsn': (__package__, '.networks'), 'validate_email': (__package__, '.networks'), # root_model 'RootModel': (__package__, '.root_model'), diff --git a/pydantic/networks.py b/pydantic/networks.py index ceaf72f417..ece5919b64 100644 --- a/pydantic/networks.py +++ b/pydantic/networks.py @@ -45,7 +45,7 @@ 'validate_email', 'MySQLDsn', 'MariaDBDsn', - 'ClickhouseDsn', + 'ClickHouseDsn', ] @@ -359,7 +359,7 @@ def check_db_name(cls, v): * TLD not required * Host required """ -ClickhouseDsn = Annotated[ +ClickHouseDsn = Annotated[ Url, UrlConstraints( allowed_schemes=['clickhouse+native', 'clickhouse+asynch'], diff --git a/tests/test_networks.py b/tests/test_networks.py index 366895ccc2..bdd5e69679 100644 --- a/tests/test_networks.py +++ b/tests/test_networks.py @@ -9,7 +9,7 @@ AmqpDsn, AnyUrl, BaseModel, - ClickhouseDsn, + ClickHouseDsn, CockroachDsn, FileUrl, HttpUrl, @@ -429,7 +429,7 @@ class Model(BaseModel): ) def test_clickhouse_dsns(dsn): class Model(BaseModel): - a: ClickhouseDsn + a: ClickHouseDsn assert str(Model(a=dsn).a) == dsn