Skip to content

Commit 3add8cb

Browse files
committed
Use utility function to raise for deprecated parameters.
1 parent f5a16cb commit 3add8cb

File tree

15 files changed

+58
-66
lines changed

15 files changed

+58
-66
lines changed

arangodb/testcontainers/arangodb/__init__.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from os import environ
55
from testcontainers.core.config import TIMEOUT
66
from testcontainers.core.generic import DbContainer
7+
from testcontainers.core.utils import raise_for_deprecated_parameter
78
from testcontainers.core.waiting_utils import wait_for_logs
89
import typing
910

@@ -40,7 +41,6 @@ def __init__(self,
4041
arango_root_password: str = "passwd",
4142
arango_no_auth: typing.Optional[bool] = None,
4243
arango_random_root_password: typing.Optional[bool] = None,
43-
port_to_expose: None = None,
4444
**kwargs) -> None:
4545
"""
4646
Args:
@@ -54,8 +54,7 @@ def __init__(self,
5454
the environment variable `ARANGO_NO_AUTH` if `None` or `False` if the environment
5555
variable is not available.
5656
"""
57-
if port_to_expose:
58-
raise ValueError("use `port` instead of `port_to_expose`")
57+
raise_for_deprecated_parameter(kwargs, "port_to_expose", "port")
5958
super().__init__(image=image, **kwargs)
6059
self.port = port
6160
self.with_exposed_ports(self.port)

clickhouse/testcontainers/clickhouse/__init__.py

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from clickhouse_driver.errors import Error
1818

1919
from testcontainers.core.generic import DbContainer
20+
from testcontainers.core.utils import raise_for_deprecated_parameter
2021
from testcontainers.core.waiting_utils import wait_container_is_ready
2122

2223

@@ -39,18 +40,11 @@ class ClickHouseContainer(DbContainer):
3940
... client.execute("select 'working'")
4041
[('working',)]
4142
"""
42-
def __init__(
43-
self,
44-
image: str = "clickhouse/clickhouse-server:latest",
45-
port: int = 9000,
46-
username: Optional[str] = None,
47-
password: Optional[str] = None,
48-
dbname: Optional[str] = None,
49-
user: None = None,
50-
) -> None:
51-
super().__init__(image=image)
52-
if user:
53-
raise ValueError("use `username` instead")
43+
def __init__(self, image: str = "clickhouse/clickhouse-server:latest", port: int = 9000,
44+
username: Optional[str] = None, password: Optional[str] = None,
45+
dbname: Optional[str] = None, **kwargs) -> None:
46+
raise_for_deprecated_parameter(kwargs, "user", "username")
47+
super().__init__(image=image, **kwargs)
5448
self.username = username or os.environ.get("CLICKHOUSE_USER", "test")
5549
self.password = password or os.environ.get("CLICKHOUSE_PASSWORD", "test")
5650
self.dbname = dbname or os.environ.get("CLICKHOUSE_DB", "test")

core/testcontainers/core/generic.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
from .container import DockerContainer
1616
from .exceptions import ContainerStartException
17+
from .utils import raise_for_deprecated_parameter
1718
from .waiting_utils import wait_container_is_ready
1819

1920
ADDITIONAL_TRANSIENT_ERRORS = []
@@ -39,9 +40,9 @@ def get_connection_url(self) -> str:
3940

4041
def _create_connection_url(self, dialect: str, username: str, password: str,
4142
host: Optional[str] = None, port: Optional[int] = None,
42-
dbname: Optional[str] = None, db_name: None = None) -> str:
43-
if db_name:
44-
raise ValueError("use `dbname` instead of `db_name`")
43+
dbname: Optional[str] = None, **kwargs) -> str:
44+
if raise_for_deprecated_parameter(kwargs, "db_name", "dbname"):
45+
raise ValueError(f"unexpected arguments: {','.join(kwargs)}")
4546
if self._container is None:
4647
raise ContainerStartException("container has not been started")
4748
host = host or self.get_container_host_ip()

core/testcontainers/core/utils.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,12 @@ def default_gateway_ip() -> str:
6969
return ip_address.decode('utf-8').strip().strip('\n')
7070
except subprocess.SubprocessError:
7171
return None
72+
73+
74+
def raise_for_deprecated_parameter(kwargs: dict, name: str, replacement: str) -> dict:
75+
"""
76+
Raise an error if a dictionary of keyword arguments contains a key and suggest the replacement.
77+
"""
78+
if kwargs.pop(name, None):
79+
raise ValueError(f"use `{replacement}` instead of `{name}`")
80+
return kwargs

elasticsearch/testcontainers/elasticsearch/__init__.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from urllib.error import URLError
1818

1919
from testcontainers.core.container import DockerContainer
20+
from testcontainers.core.utils import raise_for_deprecated_parameter
2021
from testcontainers.core.waiting_utils import wait_container_is_ready
2122

2223
_FALLBACK_VERSION = 8
@@ -73,10 +74,8 @@ class ElasticSearchContainer(DockerContainer):
7374
'8.3.3'
7475
"""
7576

76-
def __init__(self, image: str = "elasticsearch", port: int = 9200, port_to_expose: None = None,
77-
**kwargs) -> None:
78-
if port_to_expose:
79-
raise ValueError("use `port` instead of `port_to_expose`")
77+
def __init__(self, image: str = "elasticsearch", port: int = 9200, **kwargs) -> None:
78+
raise_for_deprecated_parameter(kwargs, "port_to_expose", "port")
8079
super(ElasticSearchContainer, self).__init__(image, **kwargs)
8180
self.port_to_expose = port
8281
self.with_exposed_ports(self.port_to_expose)

kafka/testcontainers/kafka/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from kafka.errors import KafkaError, UnrecognizedBrokerVersion, NoBrokersAvailable
88

99
from testcontainers.core.container import DockerContainer
10+
from testcontainers.core.utils import raise_for_deprecated_parameter
1011
from testcontainers.core.waiting_utils import wait_container_is_ready
1112

1213

@@ -25,10 +26,9 @@ class KafkaContainer(DockerContainer):
2526
"""
2627
TC_START_SCRIPT = '/tc-start.sh'
2728

28-
def __init__(self, image: str = "confluentinc/cp-kafka:5.4.3", port: int = 9093,
29-
port_to_expose: None = None, **kwargs) -> None:
30-
if port_to_expose:
31-
raise ValueError("use `port` instead of `port_to_expose`")
29+
def __init__(self, image: str = "confluentinc/cp-kafka:5.4.3", port: int = 9093, **kwargs) \
30+
-> None:
31+
raise_for_deprecated_parameter(kwargs, "port_to_expose", "port")
3232
super(KafkaContainer, self).__init__(image, **kwargs)
3333
self.port = port
3434
self.with_exposed_ports(self.port)

minio/testcontainers/minio/__init__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from requests import ConnectionError, Response, get
33

44
from testcontainers.core.container import DockerContainer
5+
from testcontainers.core.utils import raise_for_deprecated_parameter
56
from testcontainers.core.waiting_utils import wait_container_is_ready
67

78

@@ -36,16 +37,15 @@ class MinioContainer(DockerContainer):
3637

3738
def __init__(self, image: str = "minio/minio:RELEASE.2022-12-02T19-19-22Z",
3839
port: int = 9000, access_key: str = "minioadmin",
39-
secret_key: str = "minioadmin", port_to_expose: None = None, **kwargs) -> None:
40+
secret_key: str = "minioadmin", **kwargs) -> None:
4041
"""
4142
Args:
4243
image: Docker image to use for the MinIO container.
4344
port: Port to expose on the container.
4445
access_key: Access key for client connections.
4546
secret_key: Secret key for client connections.
4647
"""
47-
if port_to_expose:
48-
raise ValueError("use `port` instead of `port_to_expose`")
48+
raise_for_deprecated_parameter(kwargs, "port_to_expose", "port")
4949
super(MinioContainer, self).__init__(image, **kwargs)
5050
self.port = port
5151
self.access_key = access_key

mongodb/testcontainers/mongodb/__init__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import os
1414
from pymongo import MongoClient
1515
from testcontainers.core.generic import DbContainer
16+
from testcontainers.core.utils import raise_for_deprecated_parameter
1617
from testcontainers.core.waiting_utils import wait_container_is_ready
1718
from typing import Optional
1819

@@ -49,9 +50,8 @@ class MongoDbContainer(DbContainer):
4950
"""
5051
def __init__(self, image: str = "mongo:latest", port: int = 27017,
5152
username: Optional[str] = None, password: Optional[str] = None,
52-
dbname: Optional[str] = None, port_to_expose: None = None, **kwargs) -> None:
53-
if port_to_expose:
54-
raise ValueError("use `port` instead of `port_to_expose`")
53+
dbname: Optional[str] = None, **kwargs) -> None:
54+
raise_for_deprecated_parameter(kwargs, "port_to_expose", "port")
5555
super(MongoDbContainer, self).__init__(image=image, **kwargs)
5656
self.username = username or os.environ.get("MONGO_INITDB_ROOT_USERNAME", "test")
5757
self.password = password or os.environ.get("MONGO_INITDB_ROOT_PASSWORD", "test")

mssql/testcontainers/mssql/__init__.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from os import environ
22
from typing import Optional
33
from testcontainers.core.generic import DbContainer
4+
from testcontainers.core.utils import raise_for_deprecated_parameter
45

56

67
class SqlServerContainer(DbContainer):
@@ -22,11 +23,9 @@ class SqlServerContainer(DbContainer):
2223

2324
def __init__(self, image: str = "mcr.microsoft.com/mssql/server:2019-latest",
2425
username: str = "SA", password: Optional[str] = None, port: int = 1433,
25-
dbname: str = "tempdb", dialect: str = 'mssql+pymssql', user: None = None,
26-
**kwargs) -> None:
26+
dbname: str = "tempdb", dialect: str = 'mssql+pymssql', **kwargs) -> None:
27+
raise_for_deprecated_parameter(kwargs, "user", "username")
2728
super(SqlServerContainer, self).__init__(image, **kwargs)
28-
if user:
29-
raise ValueError("use `username` instead")
3029

3130
self.port_to_expose = port
3231
self.with_exposed_ports(self.port_to_expose)

mysql/testcontainers/mysql/__init__.py

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from os import environ
1414
from typing import Optional
1515
from testcontainers.core.generic import DbContainer
16+
from testcontainers.core.utils import raise_for_deprecated_parameter
1617

1718

1819
class MySqlContainer(DbContainer):
@@ -39,18 +40,12 @@ class MySqlContainer(DbContainer):
3940
"""
4041
def __init__(self, image: str = "mysql:latest", username: Optional[str] = None,
4142
root_password: Optional[str] = None, password: Optional[str] = None,
42-
dbname: Optional[str] = None, port: int = 3306, MYSQL_USER: None = None,
43-
MYSQL_ROOT_PASSWORD: None = None, MYSQL_PASSWORD: None = None,
44-
MYSQL_DATABASE: None = None, **kwargs) -> None:
43+
dbname: Optional[str] = None, port: int = 3306, **kwargs) -> None:
44+
raise_for_deprecated_parameter(kwargs, "MYSQL_USER", "username")
45+
raise_for_deprecated_parameter(kwargs, "MYSQL_ROOT_PASSWORD", "root_password")
46+
raise_for_deprecated_parameter(kwargs, "MYSQL_PASSWORD", "password")
47+
raise_for_deprecated_parameter(kwargs, "MYSQL_DATABASE", "dbname")
4548
super(MySqlContainer, self).__init__(image, **kwargs)
46-
if MYSQL_USER:
47-
raise ValueError("use `username` instead of `MYSQL_USER`")
48-
if MYSQL_ROOT_PASSWORD:
49-
raise ValueError("use `root_password` instead of `MYSQL_ROOT_PASSWORD`")
50-
if MYSQL_PASSWORD:
51-
raise ValueError("use `password` instead of `MYSQL_PASSWORD`")
52-
if MYSQL_DATABASE:
53-
raise ValueError("use `dbname` instead of `MYSQL_DATABASE`")
5449

5550
self.port_to_expose = port
5651
self.with_exposed_ports(self.port_to_expose)

0 commit comments

Comments
 (0)