diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 84b8ca101..b62988ea6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -44,6 +44,7 @@ jobs: - rabbitmq - redis - selenium + - singlestore runs-on: ${{ matrix.runtime.machine }} steps: - uses: actions/checkout@v3 diff --git a/README.rst b/README.rst index f490e76b6..68e67aa74 100644 --- a/README.rst +++ b/README.rst @@ -34,6 +34,7 @@ testcontainers-python facilitates the use of Docker containers for functional an rabbitmq/README redis/README selenium/README + singlestore/README Getting Started --------------- diff --git a/requirements.in b/requirements.in index e9e122610..ec76ac0d1 100644 --- a/requirements.in +++ b/requirements.in @@ -21,6 +21,7 @@ -e file:rabbitmq -e file:redis -e file:selenium +-e file:singlestore cryptography<37 flake8<3.8.0 # 3.8.0 adds a dependency on importlib-metadata which conflicts with other packages. pg8000 diff --git a/requirements/macos-latest-3.10.txt b/requirements/macos-latest-3.10.txt index 429a054fd..e1dcb1522 100644 --- a/requirements/macos-latest-3.10.txt +++ b/requirements/macos-latest-3.10.txt @@ -39,6 +39,7 @@ # testcontainers-rabbitmq # testcontainers-redis # testcontainers-selenium + # testcontainers-singlestore -e file:elasticsearch # via -r requirements.in -e file:google @@ -73,6 +74,8 @@ # via -r requirements.in -e file:selenium # via -r requirements.in +-e file:singlestore + # via -r requirements.in alabaster==0.7.13 # via sphinx asn1crypto==1.5.1 @@ -96,15 +99,15 @@ bcrypt==4.0.1 # via paramiko bleach==6.0.0 # via readme-renderer -boto3==1.26.129 +boto3==1.26.135 # via testcontainers-localstack -botocore==1.29.129 +botocore==1.29.135 # via # boto3 # s3transfer cachetools==5.3.0 # via google-auth -certifi==2022.12.7 +certifi==2023.5.7 # via # minio # opensearch-py @@ -133,7 +136,7 @@ distro==1.8.0 # via docker-compose dnspython==2.3.0 # via pymongo -docker[ssh]==6.1.0 +docker[ssh]==6.1.2 # via # docker-compose # testcontainers-core @@ -143,7 +146,7 @@ dockerpty==0.4.1 # via docker-compose docopt==0.6.2 # via docker-compose -docutils==0.19 +docutils==0.20.1 # via # readme-renderer # sphinx @@ -160,9 +163,9 @@ flake8==3.7.9 # via -r requirements.in google-api-core[grpc]==2.11.0 # via google-cloud-pubsub -google-auth==2.17.3 +google-auth==2.18.1 # via google-api-core -google-cloud-pubsub==2.16.1 +google-cloud-pubsub==2.17.0 # via testcontainers-gcp googleapis-common-protos[grpc]==1.59.0 # via @@ -173,14 +176,14 @@ greenlet==2.0.2 # via sqlalchemy grpc-google-iam-v1==0.12.6 # via google-cloud-pubsub -grpcio==1.54.0 +grpcio==1.54.2 # via # google-api-core # google-cloud-pubsub # googleapis-common-protos # grpc-google-iam-v1 # grpcio-status -grpcio-status==1.54.0 +grpcio-status==1.54.2 # via # google-api-core # google-cloud-pubsub @@ -226,7 +229,7 @@ minio==7.1.14 # via testcontainers-minio more-itertools==9.1.0 # via jaraco-classes -neo4j==5.8.0 +neo4j==5.8.1 # via testcontainers-neo4j opensearch-py==2.2.0 # via testcontainers-opensearch @@ -240,7 +243,7 @@ packaging==23.1 # sphinx paramiko==3.1.0 # via docker -pg8000==1.29.4 +pg8000==1.29.5 # via -r requirements.in pika==1.3.2 # via testcontainers-rabbitmq @@ -250,7 +253,7 @@ pluggy==1.0.0 # via pytest proto-plus==1.22.2 # via google-cloud-pubsub -protobuf==4.22.4 +protobuf==4.23.1 # via # google-api-core # google-cloud-pubsub @@ -278,14 +281,16 @@ pygments==2.15.1 # readme-renderer # rich # sphinx -pyjwt==2.6.0 +pyjwt==2.7.0 # via python-arango pymongo==4.3.3 # via testcontainers-mongodb pymssql==2.2.7 # via testcontainers-mssql pymysql==1.0.3 - # via testcontainers-mysql + # via + # testcontainers-mysql + # testcontainers-singlestore pynacl==1.5.0 # via paramiko pyrsistent==0.19.3 @@ -309,19 +314,17 @@ python-dotenv==0.21.1 # via docker-compose python-jose==3.3.0 # via python-keycloak -python-keycloak==2.16.1 +python-keycloak==2.16.3 # via testcontainers-keycloak pytz==2023.3 # via # clickhouse-driver # neo4j -pytz-deprecation-shim==0.1.0.post0 - # via tzlocal pyyaml==5.4.1 # via docker-compose readme-renderer==37.3 # via twine -redis==4.5.4 +redis==4.5.5 # via testcontainers-redis requests==2.30.0 # via @@ -335,7 +338,7 @@ requests==2.30.0 # requests-toolbelt # sphinx # twine -requests-toolbelt==0.10.1 +requests-toolbelt==1.0.0 # via # python-arango # python-keycloak @@ -352,7 +355,7 @@ s3transfer==0.6.1 # via boto3 scramp==1.4.4 # via pg8000 -selenium==4.9.0 +selenium==4.9.1 # via testcontainers-selenium six==1.16.0 # via @@ -372,7 +375,7 @@ snowballstemmer==2.2.0 # via sphinx sortedcontainers==2.4.0 # via trio -sphinx==7.0.0 +sphinx==7.0.1 # via -r requirements.in sphinxcontrib-applehelp==1.0.4 # via sphinx @@ -386,12 +389,13 @@ sphinxcontrib-qthelp==1.0.3 # via sphinx sphinxcontrib-serializinghtml==1.1.5 # via sphinx -sqlalchemy==2.0.12 +sqlalchemy==2.0.13 # via # testcontainers-mssql # testcontainers-mysql # testcontainers-oracle # testcontainers-postgres + # testcontainers-singlestore texttable==1.6.7 # via docker-compose tomli==2.0.1 @@ -411,14 +415,13 @@ typing-extensions==4.5.0 # azure-core # azure-storage-blob # sqlalchemy -tzdata==2023.3 - # via pytz-deprecation-shim -tzlocal==4.3 +tzlocal==5.0.1 # via clickhouse-driver urllib3[socks]==1.26.15 # via # botocore # docker + # google-auth # minio # opensearch-py # python-arango diff --git a/requirements/ubuntu-latest-3.10.txt b/requirements/ubuntu-latest-3.10.txt index ce6573279..d230fc266 100644 --- a/requirements/ubuntu-latest-3.10.txt +++ b/requirements/ubuntu-latest-3.10.txt @@ -39,6 +39,7 @@ # testcontainers-rabbitmq # testcontainers-redis # testcontainers-selenium + # testcontainers-singlestore -e file:elasticsearch # via -r requirements.in -e file:google @@ -73,6 +74,8 @@ # via -r requirements.in -e file:selenium # via -r requirements.in +-e file:singlestore + # via -r requirements.in alabaster==0.7.13 # via sphinx asn1crypto==1.5.1 @@ -96,15 +99,15 @@ bcrypt==4.0.1 # via paramiko bleach==6.0.0 # via readme-renderer -boto3==1.26.129 +boto3==1.26.135 # via testcontainers-localstack -botocore==1.29.129 +botocore==1.29.135 # via # boto3 # s3transfer cachetools==5.3.0 # via google-auth -certifi==2022.12.7 +certifi==2023.5.7 # via # minio # opensearch-py @@ -134,7 +137,7 @@ distro==1.8.0 # via docker-compose dnspython==2.3.0 # via pymongo -docker[ssh]==6.1.0 +docker[ssh]==6.1.2 # via # docker-compose # testcontainers-core @@ -144,7 +147,7 @@ dockerpty==0.4.1 # via docker-compose docopt==0.6.2 # via docker-compose -docutils==0.19 +docutils==0.20.1 # via # readme-renderer # sphinx @@ -161,9 +164,9 @@ flake8==3.7.9 # via -r requirements.in google-api-core[grpc]==2.11.0 # via google-cloud-pubsub -google-auth==2.17.3 +google-auth==2.18.1 # via google-api-core -google-cloud-pubsub==2.16.1 +google-cloud-pubsub==2.17.0 # via testcontainers-gcp googleapis-common-protos[grpc]==1.59.0 # via @@ -174,14 +177,14 @@ greenlet==2.0.2 # via sqlalchemy grpc-google-iam-v1==0.12.6 # via google-cloud-pubsub -grpcio==1.54.0 +grpcio==1.54.2 # via # google-api-core # google-cloud-pubsub # googleapis-common-protos # grpc-google-iam-v1 # grpcio-status -grpcio-status==1.54.0 +grpcio-status==1.54.2 # via # google-api-core # google-cloud-pubsub @@ -231,7 +234,7 @@ minio==7.1.14 # via testcontainers-minio more-itertools==9.1.0 # via jaraco-classes -neo4j==5.8.0 +neo4j==5.8.1 # via testcontainers-neo4j opensearch-py==2.2.0 # via testcontainers-opensearch @@ -245,7 +248,7 @@ packaging==23.1 # sphinx paramiko==3.1.0 # via docker -pg8000==1.29.4 +pg8000==1.29.5 # via -r requirements.in pika==1.3.2 # via testcontainers-rabbitmq @@ -255,7 +258,7 @@ pluggy==1.0.0 # via pytest proto-plus==1.22.2 # via google-cloud-pubsub -protobuf==4.22.4 +protobuf==4.23.1 # via # google-api-core # google-cloud-pubsub @@ -283,14 +286,16 @@ pygments==2.15.1 # readme-renderer # rich # sphinx -pyjwt==2.6.0 +pyjwt==2.7.0 # via python-arango pymongo==4.3.3 # via testcontainers-mongodb pymssql==2.2.7 # via testcontainers-mssql pymysql==1.0.3 - # via testcontainers-mysql + # via + # testcontainers-mysql + # testcontainers-singlestore pynacl==1.5.0 # via paramiko pyrsistent==0.19.3 @@ -314,19 +319,17 @@ python-dotenv==0.21.1 # via docker-compose python-jose==3.3.0 # via python-keycloak -python-keycloak==2.16.1 +python-keycloak==2.16.3 # via testcontainers-keycloak pytz==2023.3 # via # clickhouse-driver # neo4j -pytz-deprecation-shim==0.1.0.post0 - # via tzlocal pyyaml==5.4.1 # via docker-compose readme-renderer==37.3 # via twine -redis==4.5.4 +redis==4.5.5 # via testcontainers-redis requests==2.30.0 # via @@ -340,7 +343,7 @@ requests==2.30.0 # requests-toolbelt # sphinx # twine -requests-toolbelt==0.10.1 +requests-toolbelt==1.0.0 # via # python-arango # python-keycloak @@ -359,7 +362,7 @@ scramp==1.4.4 # via pg8000 secretstorage==3.3.3 # via keyring -selenium==4.9.0 +selenium==4.9.1 # via testcontainers-selenium six==1.16.0 # via @@ -379,7 +382,7 @@ snowballstemmer==2.2.0 # via sphinx sortedcontainers==2.4.0 # via trio -sphinx==7.0.0 +sphinx==7.0.1 # via -r requirements.in sphinxcontrib-applehelp==1.0.4 # via sphinx @@ -393,12 +396,13 @@ sphinxcontrib-qthelp==1.0.3 # via sphinx sphinxcontrib-serializinghtml==1.1.5 # via sphinx -sqlalchemy==2.0.12 +sqlalchemy==2.0.13 # via # testcontainers-mssql # testcontainers-mysql # testcontainers-oracle # testcontainers-postgres + # testcontainers-singlestore texttable==1.6.7 # via docker-compose tomli==2.0.1 @@ -418,14 +422,13 @@ typing-extensions==4.5.0 # azure-core # azure-storage-blob # sqlalchemy -tzdata==2023.3 - # via pytz-deprecation-shim -tzlocal==4.3 +tzlocal==5.0.1 # via clickhouse-driver urllib3[socks]==1.26.15 # via # botocore # docker + # google-auth # minio # opensearch-py # python-arango diff --git a/requirements/ubuntu-latest-3.11.txt b/requirements/ubuntu-latest-3.11.txt index cac9cd549..e8718f039 100644 --- a/requirements/ubuntu-latest-3.11.txt +++ b/requirements/ubuntu-latest-3.11.txt @@ -39,6 +39,7 @@ # testcontainers-rabbitmq # testcontainers-redis # testcontainers-selenium + # testcontainers-singlestore -e file:elasticsearch # via -r requirements.in -e file:google @@ -73,14 +74,14 @@ # via -r requirements.in -e file:selenium # via -r requirements.in +-e file:singlestore + # via -r requirements.in alabaster==0.7.13 # via sphinx asn1crypto==1.5.1 # via scramp async-generator==1.10 # via trio -async-timeout==4.0.2 - # via redis attrs==23.1.0 # via # jsonschema @@ -96,15 +97,15 @@ bcrypt==4.0.1 # via paramiko bleach==6.0.0 # via readme-renderer -boto3==1.26.129 +boto3==1.26.135 # via testcontainers-localstack -botocore==1.29.129 +botocore==1.29.135 # via # boto3 # s3transfer cachetools==5.3.0 # via google-auth -certifi==2022.12.7 +certifi==2023.5.7 # via # minio # opensearch-py @@ -134,7 +135,7 @@ distro==1.8.0 # via docker-compose dnspython==2.3.0 # via pymongo -docker[ssh]==6.1.0 +docker[ssh]==6.1.2 # via # docker-compose # testcontainers-core @@ -144,7 +145,7 @@ dockerpty==0.4.1 # via docker-compose docopt==0.6.2 # via docker-compose -docutils==0.19 +docutils==0.20.1 # via # readme-renderer # sphinx @@ -158,9 +159,9 @@ flake8==3.7.9 # via -r requirements.in google-api-core[grpc]==2.11.0 # via google-cloud-pubsub -google-auth==2.17.3 +google-auth==2.18.1 # via google-api-core -google-cloud-pubsub==2.16.1 +google-cloud-pubsub==2.17.0 # via testcontainers-gcp googleapis-common-protos[grpc]==1.59.0 # via @@ -171,14 +172,14 @@ greenlet==2.0.2 # via sqlalchemy grpc-google-iam-v1==0.12.6 # via google-cloud-pubsub -grpcio==1.54.0 +grpcio==1.54.2 # via # google-api-core # google-cloud-pubsub # googleapis-common-protos # grpc-google-iam-v1 # grpcio-status -grpcio-status==1.54.0 +grpcio-status==1.54.2 # via # google-api-core # google-cloud-pubsub @@ -228,7 +229,7 @@ minio==7.1.14 # via testcontainers-minio more-itertools==9.1.0 # via jaraco-classes -neo4j==5.8.0 +neo4j==5.8.1 # via testcontainers-neo4j opensearch-py==2.2.0 # via testcontainers-opensearch @@ -242,7 +243,7 @@ packaging==23.1 # sphinx paramiko==3.1.0 # via docker -pg8000==1.29.4 +pg8000==1.29.5 # via -r requirements.in pika==1.3.2 # via testcontainers-rabbitmq @@ -252,7 +253,7 @@ pluggy==1.0.0 # via pytest proto-plus==1.22.2 # via google-cloud-pubsub -protobuf==4.22.4 +protobuf==4.23.1 # via # google-api-core # google-cloud-pubsub @@ -280,14 +281,16 @@ pygments==2.15.1 # readme-renderer # rich # sphinx -pyjwt==2.6.0 +pyjwt==2.7.0 # via python-arango pymongo==4.3.3 # via testcontainers-mongodb pymssql==2.2.7 # via testcontainers-mssql pymysql==1.0.3 - # via testcontainers-mysql + # via + # testcontainers-mysql + # testcontainers-singlestore pynacl==1.5.0 # via paramiko pyrsistent==0.19.3 @@ -311,19 +314,17 @@ python-dotenv==0.21.1 # via docker-compose python-jose==3.3.0 # via python-keycloak -python-keycloak==2.16.1 +python-keycloak==2.16.3 # via testcontainers-keycloak pytz==2023.3 # via # clickhouse-driver # neo4j -pytz-deprecation-shim==0.1.0.post0 - # via tzlocal pyyaml==5.4.1 # via docker-compose readme-renderer==37.3 # via twine -redis==4.5.4 +redis==4.5.5 # via testcontainers-redis requests==2.30.0 # via @@ -337,7 +338,7 @@ requests==2.30.0 # requests-toolbelt # sphinx # twine -requests-toolbelt==0.10.1 +requests-toolbelt==1.0.0 # via # python-arango # python-keycloak @@ -356,7 +357,7 @@ scramp==1.4.4 # via pg8000 secretstorage==3.3.3 # via keyring -selenium==4.9.0 +selenium==4.9.1 # via testcontainers-selenium six==1.16.0 # via @@ -376,7 +377,7 @@ snowballstemmer==2.2.0 # via sphinx sortedcontainers==2.4.0 # via trio -sphinx==7.0.0 +sphinx==7.0.1 # via -r requirements.in sphinxcontrib-applehelp==1.0.4 # via sphinx @@ -390,12 +391,13 @@ sphinxcontrib-qthelp==1.0.3 # via sphinx sphinxcontrib-serializinghtml==1.1.5 # via sphinx -sqlalchemy==2.0.12 +sqlalchemy==2.0.13 # via # testcontainers-mssql # testcontainers-mysql # testcontainers-oracle # testcontainers-postgres + # testcontainers-singlestore texttable==1.6.7 # via docker-compose trio==0.22.0 @@ -411,14 +413,13 @@ typing-extensions==4.5.0 # azure-core # azure-storage-blob # sqlalchemy -tzdata==2023.3 - # via pytz-deprecation-shim -tzlocal==4.3 +tzlocal==5.0.1 # via clickhouse-driver urllib3[socks]==1.26.15 # via # botocore # docker + # google-auth # minio # opensearch-py # python-arango diff --git a/requirements/ubuntu-latest-3.7.txt b/requirements/ubuntu-latest-3.7.txt index fbe67cf4f..d87515add 100644 --- a/requirements/ubuntu-latest-3.7.txt +++ b/requirements/ubuntu-latest-3.7.txt @@ -39,6 +39,7 @@ # testcontainers-rabbitmq # testcontainers-redis # testcontainers-selenium + # testcontainers-singlestore -e file:elasticsearch # via -r requirements.in -e file:google @@ -73,6 +74,8 @@ # via -r requirements.in -e file:selenium # via -r requirements.in +-e file:singlestore + # via -r requirements.in alabaster==0.7.13 # via sphinx asn1crypto==1.5.1 @@ -93,16 +96,14 @@ azure-storage-blob==12.16.0 babel==2.12.1 # via sphinx backports-zoneinfo==0.2.1 - # via - # pytz-deprecation-shim - # tzlocal + # via tzlocal bcrypt==4.0.1 # via paramiko bleach==6.0.0 # via readme-renderer -boto3==1.26.129 +boto3==1.26.135 # via testcontainers-localstack -botocore==1.29.129 +botocore==1.29.135 # via # boto3 # s3transfer @@ -110,7 +111,7 @@ cached-property==1.5.2 # via docker-compose cachetools==5.3.0 # via google-auth -certifi==2022.12.7 +certifi==2023.5.7 # via # minio # opensearch-py @@ -140,7 +141,7 @@ distro==1.8.0 # via docker-compose dnspython==2.3.0 # via pymongo -docker[ssh]==6.1.0 +docker[ssh]==6.1.2 # via # docker-compose # testcontainers-core @@ -167,9 +168,9 @@ flake8==3.7.9 # via -r requirements.in google-api-core[grpc]==2.11.0 # via google-cloud-pubsub -google-auth==2.17.3 +google-auth==2.18.1 # via google-api-core -google-cloud-pubsub==2.16.1 +google-cloud-pubsub==2.17.0 # via testcontainers-gcp googleapis-common-protos[grpc]==1.59.0 # via @@ -180,14 +181,14 @@ greenlet==2.0.2 # via sqlalchemy grpc-google-iam-v1==0.12.6 # via google-cloud-pubsub -grpcio==1.54.0 +grpcio==1.54.2 # via # google-api-core # google-cloud-pubsub # googleapis-common-protos # grpc-google-iam-v1 # grpcio-status -grpcio-status==1.54.0 +grpcio-status==1.54.2 # via # google-api-core # google-cloud-pubsub @@ -248,7 +249,7 @@ minio==7.1.14 # via testcontainers-minio more-itertools==9.1.0 # via jaraco-classes -neo4j==5.8.0 +neo4j==5.8.1 # via testcontainers-neo4j opensearch-py==2.2.0 # via testcontainers-opensearch @@ -262,7 +263,7 @@ packaging==23.1 # sphinx paramiko==3.1.0 # via docker -pg8000==1.29.4 +pg8000==1.29.5 # via -r requirements.in pika==1.3.2 # via testcontainers-rabbitmq @@ -272,7 +273,7 @@ pluggy==1.0.0 # via pytest proto-plus==1.22.2 # via google-cloud-pubsub -protobuf==4.22.4 +protobuf==4.23.1 # via # google-api-core # google-cloud-pubsub @@ -300,14 +301,16 @@ pygments==2.15.1 # readme-renderer # rich # sphinx -pyjwt==2.6.0 +pyjwt==2.7.0 # via python-arango pymongo==4.3.3 # via testcontainers-mongodb pymssql==2.2.7 # via testcontainers-mssql pymysql==1.0.3 - # via testcontainers-mysql + # via + # testcontainers-mysql + # testcontainers-singlestore pynacl==1.5.0 # via paramiko pyrsistent==0.19.3 @@ -331,20 +334,18 @@ python-dotenv==0.21.1 # via docker-compose python-jose==3.3.0 # via python-keycloak -python-keycloak==2.16.1 +python-keycloak==2.16.3 # via testcontainers-keycloak pytz==2023.3 # via # babel # clickhouse-driver # neo4j -pytz-deprecation-shim==0.1.0.post0 - # via tzlocal pyyaml==5.4.1 # via docker-compose readme-renderer==37.3 # via twine -redis==4.5.4 +redis==4.5.5 # via testcontainers-redis requests==2.30.0 # via @@ -358,7 +359,7 @@ requests==2.30.0 # requests-toolbelt # sphinx # twine -requests-toolbelt==0.10.1 +requests-toolbelt==1.0.0 # via # python-arango # python-keycloak @@ -377,7 +378,7 @@ scramp==1.4.4 # via pg8000 secretstorage==3.3.3 # via keyring -selenium==4.9.0 +selenium==4.9.1 # via testcontainers-selenium six==1.16.0 # via @@ -411,12 +412,13 @@ sphinxcontrib-qthelp==1.0.3 # via sphinx sphinxcontrib-serializinghtml==1.1.5 # via sphinx -sqlalchemy==2.0.12 +sqlalchemy==2.0.13 # via # testcontainers-mssql # testcontainers-mysql # testcontainers-oracle # testcontainers-postgres + # testcontainers-singlestore texttable==1.6.7 # via docker-compose tomli==2.0.1 @@ -439,17 +441,17 @@ typing-extensions==4.5.0 # h11 # importlib-metadata # markdown-it-py + # pyjwt # redis # rich # sqlalchemy -tzdata==2023.3 - # via pytz-deprecation-shim -tzlocal==4.3 +tzlocal==5.0.1 # via clickhouse-driver urllib3[socks]==1.26.15 # via # botocore # docker + # google-auth # minio # opensearch-py # python-arango diff --git a/requirements/ubuntu-latest-3.8.txt b/requirements/ubuntu-latest-3.8.txt index 70a86aa02..203d78925 100644 --- a/requirements/ubuntu-latest-3.8.txt +++ b/requirements/ubuntu-latest-3.8.txt @@ -39,6 +39,7 @@ # testcontainers-rabbitmq # testcontainers-redis # testcontainers-selenium + # testcontainers-singlestore -e file:elasticsearch # via -r requirements.in -e file:google @@ -73,6 +74,8 @@ # via -r requirements.in -e file:selenium # via -r requirements.in +-e file:singlestore + # via -r requirements.in alabaster==0.7.13 # via sphinx asn1crypto==1.5.1 @@ -93,22 +96,20 @@ azure-storage-blob==12.16.0 babel==2.12.1 # via sphinx backports-zoneinfo==0.2.1 - # via - # pytz-deprecation-shim - # tzlocal + # via tzlocal bcrypt==4.0.1 # via paramiko bleach==6.0.0 # via readme-renderer -boto3==1.26.129 +boto3==1.26.135 # via testcontainers-localstack -botocore==1.29.129 +botocore==1.29.135 # via # boto3 # s3transfer cachetools==5.3.0 # via google-auth -certifi==2022.12.7 +certifi==2023.5.7 # via # minio # opensearch-py @@ -138,7 +139,7 @@ distro==1.8.0 # via docker-compose dnspython==2.3.0 # via pymongo -docker[ssh]==6.1.0 +docker[ssh]==6.1.2 # via # docker-compose # testcontainers-core @@ -148,7 +149,7 @@ dockerpty==0.4.1 # via docker-compose docopt==0.6.2 # via docker-compose -docutils==0.19 +docutils==0.20.1 # via # readme-renderer # sphinx @@ -165,9 +166,9 @@ flake8==3.7.9 # via -r requirements.in google-api-core[grpc]==2.11.0 # via google-cloud-pubsub -google-auth==2.17.3 +google-auth==2.18.1 # via google-api-core -google-cloud-pubsub==2.16.1 +google-cloud-pubsub==2.17.0 # via testcontainers-gcp googleapis-common-protos[grpc]==1.59.0 # via @@ -178,14 +179,14 @@ greenlet==2.0.2 # via sqlalchemy grpc-google-iam-v1==0.12.6 # via google-cloud-pubsub -grpcio==1.54.0 +grpcio==1.54.2 # via # google-api-core # google-cloud-pubsub # googleapis-common-protos # grpc-google-iam-v1 # grpcio-status -grpcio-status==1.54.0 +grpcio-status==1.54.2 # via # google-api-core # google-cloud-pubsub @@ -238,7 +239,7 @@ minio==7.1.14 # via testcontainers-minio more-itertools==9.1.0 # via jaraco-classes -neo4j==5.8.0 +neo4j==5.8.1 # via testcontainers-neo4j opensearch-py==2.2.0 # via testcontainers-opensearch @@ -252,7 +253,7 @@ packaging==23.1 # sphinx paramiko==3.1.0 # via docker -pg8000==1.29.4 +pg8000==1.29.5 # via -r requirements.in pika==1.3.2 # via testcontainers-rabbitmq @@ -262,7 +263,7 @@ pluggy==1.0.0 # via pytest proto-plus==1.22.2 # via google-cloud-pubsub -protobuf==4.22.4 +protobuf==4.23.1 # via # google-api-core # google-cloud-pubsub @@ -290,14 +291,16 @@ pygments==2.15.1 # readme-renderer # rich # sphinx -pyjwt==2.6.0 +pyjwt==2.7.0 # via python-arango pymongo==4.3.3 # via testcontainers-mongodb pymssql==2.2.7 # via testcontainers-mssql pymysql==1.0.3 - # via testcontainers-mysql + # via + # testcontainers-mysql + # testcontainers-singlestore pynacl==1.5.0 # via paramiko pyrsistent==0.19.3 @@ -321,20 +324,18 @@ python-dotenv==0.21.1 # via docker-compose python-jose==3.3.0 # via python-keycloak -python-keycloak==2.16.1 +python-keycloak==2.16.3 # via testcontainers-keycloak pytz==2023.3 # via # babel # clickhouse-driver # neo4j -pytz-deprecation-shim==0.1.0.post0 - # via tzlocal pyyaml==5.4.1 # via docker-compose readme-renderer==37.3 # via twine -redis==4.5.4 +redis==4.5.5 # via testcontainers-redis requests==2.30.0 # via @@ -348,7 +349,7 @@ requests==2.30.0 # requests-toolbelt # sphinx # twine -requests-toolbelt==0.10.1 +requests-toolbelt==1.0.0 # via # python-arango # python-keycloak @@ -367,7 +368,7 @@ scramp==1.4.4 # via pg8000 secretstorage==3.3.3 # via keyring -selenium==4.9.0 +selenium==4.9.1 # via testcontainers-selenium six==1.16.0 # via @@ -387,7 +388,7 @@ snowballstemmer==2.2.0 # via sphinx sortedcontainers==2.4.0 # via trio -sphinx==7.0.0 +sphinx==7.0.1 # via -r requirements.in sphinxcontrib-applehelp==1.0.4 # via sphinx @@ -401,12 +402,13 @@ sphinxcontrib-qthelp==1.0.3 # via sphinx sphinxcontrib-serializinghtml==1.1.5 # via sphinx -sqlalchemy==2.0.12 +sqlalchemy==2.0.13 # via # testcontainers-mssql # testcontainers-mysql # testcontainers-oracle # testcontainers-postgres + # testcontainers-singlestore texttable==1.6.7 # via docker-compose tomli==2.0.1 @@ -427,14 +429,13 @@ typing-extensions==4.5.0 # azure-storage-blob # rich # sqlalchemy -tzdata==2023.3 - # via pytz-deprecation-shim -tzlocal==4.3 +tzlocal==5.0.1 # via clickhouse-driver urllib3[socks]==1.26.15 # via # botocore # docker + # google-auth # minio # opensearch-py # python-arango diff --git a/requirements/ubuntu-latest-3.9.txt b/requirements/ubuntu-latest-3.9.txt index a1e4dd7fa..d3e8da2a6 100644 --- a/requirements/ubuntu-latest-3.9.txt +++ b/requirements/ubuntu-latest-3.9.txt @@ -39,6 +39,7 @@ # testcontainers-rabbitmq # testcontainers-redis # testcontainers-selenium + # testcontainers-singlestore -e file:elasticsearch # via -r requirements.in -e file:google @@ -73,6 +74,8 @@ # via -r requirements.in -e file:selenium # via -r requirements.in +-e file:singlestore + # via -r requirements.in alabaster==0.7.13 # via sphinx asn1crypto==1.5.1 @@ -96,15 +99,15 @@ bcrypt==4.0.1 # via paramiko bleach==6.0.0 # via readme-renderer -boto3==1.26.129 +boto3==1.26.135 # via testcontainers-localstack -botocore==1.29.129 +botocore==1.29.135 # via # boto3 # s3transfer cachetools==5.3.0 # via google-auth -certifi==2022.12.7 +certifi==2023.5.7 # via # minio # opensearch-py @@ -134,7 +137,7 @@ distro==1.8.0 # via docker-compose dnspython==2.3.0 # via pymongo -docker[ssh]==6.1.0 +docker[ssh]==6.1.2 # via # docker-compose # testcontainers-core @@ -144,7 +147,7 @@ dockerpty==0.4.1 # via docker-compose docopt==0.6.2 # via docker-compose -docutils==0.19 +docutils==0.20.1 # via # readme-renderer # sphinx @@ -161,9 +164,9 @@ flake8==3.7.9 # via -r requirements.in google-api-core[grpc]==2.11.0 # via google-cloud-pubsub -google-auth==2.17.3 +google-auth==2.18.1 # via google-api-core -google-cloud-pubsub==2.16.1 +google-cloud-pubsub==2.17.0 # via testcontainers-gcp googleapis-common-protos[grpc]==1.59.0 # via @@ -174,14 +177,14 @@ greenlet==2.0.2 # via sqlalchemy grpc-google-iam-v1==0.12.6 # via google-cloud-pubsub -grpcio==1.54.0 +grpcio==1.54.2 # via # google-api-core # google-cloud-pubsub # googleapis-common-protos # grpc-google-iam-v1 # grpcio-status -grpcio-status==1.54.0 +grpcio-status==1.54.2 # via # google-api-core # google-cloud-pubsub @@ -232,7 +235,7 @@ minio==7.1.14 # via testcontainers-minio more-itertools==9.1.0 # via jaraco-classes -neo4j==5.8.0 +neo4j==5.8.1 # via testcontainers-neo4j opensearch-py==2.2.0 # via testcontainers-opensearch @@ -246,7 +249,7 @@ packaging==23.1 # sphinx paramiko==3.1.0 # via docker -pg8000==1.29.4 +pg8000==1.29.5 # via -r requirements.in pika==1.3.2 # via testcontainers-rabbitmq @@ -256,7 +259,7 @@ pluggy==1.0.0 # via pytest proto-plus==1.22.2 # via google-cloud-pubsub -protobuf==4.22.4 +protobuf==4.23.1 # via # google-api-core # google-cloud-pubsub @@ -284,14 +287,16 @@ pygments==2.15.1 # readme-renderer # rich # sphinx -pyjwt==2.6.0 +pyjwt==2.7.0 # via python-arango pymongo==4.3.3 # via testcontainers-mongodb pymssql==2.2.7 # via testcontainers-mssql pymysql==1.0.3 - # via testcontainers-mysql + # via + # testcontainers-mysql + # testcontainers-singlestore pynacl==1.5.0 # via paramiko pyrsistent==0.19.3 @@ -315,19 +320,17 @@ python-dotenv==0.21.1 # via docker-compose python-jose==3.3.0 # via python-keycloak -python-keycloak==2.16.1 +python-keycloak==2.16.3 # via testcontainers-keycloak pytz==2023.3 # via # clickhouse-driver # neo4j -pytz-deprecation-shim==0.1.0.post0 - # via tzlocal pyyaml==5.4.1 # via docker-compose readme-renderer==37.3 # via twine -redis==4.5.4 +redis==4.5.5 # via testcontainers-redis requests==2.30.0 # via @@ -341,7 +344,7 @@ requests==2.30.0 # requests-toolbelt # sphinx # twine -requests-toolbelt==0.10.1 +requests-toolbelt==1.0.0 # via # python-arango # python-keycloak @@ -360,7 +363,7 @@ scramp==1.4.4 # via pg8000 secretstorage==3.3.3 # via keyring -selenium==4.9.0 +selenium==4.9.1 # via testcontainers-selenium six==1.16.0 # via @@ -380,7 +383,7 @@ snowballstemmer==2.2.0 # via sphinx sortedcontainers==2.4.0 # via trio -sphinx==7.0.0 +sphinx==7.0.1 # via -r requirements.in sphinxcontrib-applehelp==1.0.4 # via sphinx @@ -394,12 +397,13 @@ sphinxcontrib-qthelp==1.0.3 # via sphinx sphinxcontrib-serializinghtml==1.1.5 # via sphinx -sqlalchemy==2.0.12 +sqlalchemy==2.0.13 # via # testcontainers-mssql # testcontainers-mysql # testcontainers-oracle # testcontainers-postgres + # testcontainers-singlestore texttable==1.6.7 # via docker-compose tomli==2.0.1 @@ -419,14 +423,13 @@ typing-extensions==4.5.0 # azure-core # azure-storage-blob # sqlalchemy -tzdata==2023.3 - # via pytz-deprecation-shim -tzlocal==4.3 +tzlocal==5.0.1 # via clickhouse-driver urllib3[socks]==1.26.15 # via # botocore # docker + # google-auth # minio # opensearch-py # python-arango diff --git a/requirements/windows-latest-3.10.txt b/requirements/windows-latest-3.10.txt index c567ecf4c..1438d2907 100644 --- a/requirements/windows-latest-3.10.txt +++ b/requirements/windows-latest-3.10.txt @@ -39,6 +39,7 @@ # testcontainers-rabbitmq # testcontainers-redis # testcontainers-selenium + # testcontainers-singlestore -e file:elasticsearch # via -r requirements.in -e file:google @@ -73,6 +74,8 @@ # via -r requirements.in -e file:selenium # via -r requirements.in +-e file:singlestore + # via -r requirements.in alabaster==0.7.13 # via sphinx asn1crypto==1.5.1 @@ -96,15 +99,15 @@ bcrypt==4.0.1 # via paramiko bleach==6.0.0 # via readme-renderer -boto3==1.26.129 +boto3==1.26.135 # via testcontainers-localstack -botocore==1.29.129 +botocore==1.29.135 # via # boto3 # s3transfer cachetools==5.3.0 # via google-auth -certifi==2022.12.7 +certifi==2023.5.7 # via # minio # opensearch-py @@ -139,7 +142,7 @@ distro==1.8.0 # via docker-compose dnspython==2.3.0 # via pymongo -docker[ssh]==6.1.0 +docker[ssh]==6.1.2 # via # docker-compose # testcontainers-core @@ -149,7 +152,7 @@ dockerpty==0.4.1 # via docker-compose docopt==0.6.2 # via docker-compose -docutils==0.19 +docutils==0.20.1 # via # readme-renderer # sphinx @@ -166,9 +169,9 @@ flake8==3.7.9 # via -r requirements.in google-api-core[grpc]==2.11.0 # via google-cloud-pubsub -google-auth==2.17.3 +google-auth==2.18.1 # via google-api-core -google-cloud-pubsub==2.16.1 +google-cloud-pubsub==2.17.0 # via testcontainers-gcp googleapis-common-protos[grpc]==1.59.0 # via @@ -179,14 +182,14 @@ greenlet==2.0.2 # via sqlalchemy grpc-google-iam-v1==0.12.6 # via google-cloud-pubsub -grpcio==1.54.0 +grpcio==1.54.2 # via # google-api-core # google-cloud-pubsub # googleapis-common-protos # grpc-google-iam-v1 # grpcio-status -grpcio-status==1.54.0 +grpcio-status==1.54.2 # via # google-api-core # google-cloud-pubsub @@ -232,7 +235,7 @@ minio==7.1.14 # via testcontainers-minio more-itertools==9.1.0 # via jaraco-classes -neo4j==5.8.0 +neo4j==5.8.1 # via testcontainers-neo4j opensearch-py==2.2.0 # via testcontainers-opensearch @@ -246,7 +249,7 @@ packaging==23.1 # sphinx paramiko==3.1.0 # via docker -pg8000==1.29.4 +pg8000==1.29.5 # via -r requirements.in pika==1.3.2 # via testcontainers-rabbitmq @@ -256,7 +259,7 @@ pluggy==1.0.0 # via pytest proto-plus==1.22.2 # via google-cloud-pubsub -protobuf==4.22.4 +protobuf==4.23.1 # via # google-api-core # google-cloud-pubsub @@ -284,14 +287,16 @@ pygments==2.15.1 # readme-renderer # rich # sphinx -pyjwt==2.6.0 +pyjwt==2.7.0 # via python-arango pymongo==4.3.3 # via testcontainers-mongodb pymssql==2.2.7 # via testcontainers-mssql pymysql==1.0.3 - # via testcontainers-mysql + # via + # testcontainers-mysql + # testcontainers-singlestore pynacl==1.5.0 # via paramiko pyrsistent==0.19.3 @@ -315,14 +320,12 @@ python-dotenv==0.21.1 # via docker-compose python-jose==3.3.0 # via python-keycloak -python-keycloak==2.16.1 +python-keycloak==2.16.3 # via testcontainers-keycloak pytz==2023.3 # via # clickhouse-driver # neo4j -pytz-deprecation-shim==0.1.0.post0 - # via tzlocal pywin32==306 # via docker pywin32-ctypes==0.2.0 @@ -331,7 +334,7 @@ pyyaml==5.4.1 # via docker-compose readme-renderer==37.3 # via twine -redis==4.5.4 +redis==4.5.5 # via testcontainers-redis requests==2.30.0 # via @@ -345,7 +348,7 @@ requests==2.30.0 # requests-toolbelt # sphinx # twine -requests-toolbelt==0.10.1 +requests-toolbelt==1.0.0 # via # python-arango # python-keycloak @@ -362,7 +365,7 @@ s3transfer==0.6.1 # via boto3 scramp==1.4.4 # via pg8000 -selenium==4.9.0 +selenium==4.9.1 # via testcontainers-selenium six==1.16.0 # via @@ -382,7 +385,7 @@ snowballstemmer==2.2.0 # via sphinx sortedcontainers==2.4.0 # via trio -sphinx==7.0.0 +sphinx==7.0.1 # via -r requirements.in sphinxcontrib-applehelp==1.0.4 # via sphinx @@ -396,12 +399,13 @@ sphinxcontrib-qthelp==1.0.3 # via sphinx sphinxcontrib-serializinghtml==1.1.5 # via sphinx -sqlalchemy==2.0.12 +sqlalchemy==2.0.13 # via # testcontainers-mssql # testcontainers-mysql # testcontainers-oracle # testcontainers-postgres + # testcontainers-singlestore texttable==1.6.7 # via docker-compose tomli==2.0.1 @@ -422,15 +426,14 @@ typing-extensions==4.5.0 # azure-storage-blob # sqlalchemy tzdata==2023.3 - # via - # pytz-deprecation-shim - # tzlocal -tzlocal==4.3 + # via tzlocal +tzlocal==5.0.1 # via clickhouse-driver urllib3[socks]==1.26.15 # via # botocore # docker + # google-auth # minio # opensearch-py # python-arango diff --git a/singlestore/README.rst b/singlestore/README.rst new file mode 100644 index 000000000..c03543a61 --- /dev/null +++ b/singlestore/README.rst @@ -0,0 +1 @@ +.. autoclass:: testcontainers.singlestore.SingleStoreContainer diff --git a/singlestore/setup.py b/singlestore/setup.py new file mode 100644 index 000000000..e8584e403 --- /dev/null +++ b/singlestore/setup.py @@ -0,0 +1,19 @@ +from setuptools import setup, find_namespace_packages + +description = "SingleStore component of testcontainers-python." + +setup( + name="testcontainers-singlestore", + version="0.0.1rc1", + packages=find_namespace_packages(), + description=description, + long_description=description, + long_description_content_type="text/x-rst", + url="https://github.com/testcontainers/testcontainers-python", + install_requires=[ + "testcontainers-core", + "sqlalchemy", + "pymysql", + ], + python_requires=">=3.7", +) diff --git a/singlestore/testcontainers/singlestore/__init__.py b/singlestore/testcontainers/singlestore/__init__.py new file mode 100644 index 000000000..bbca5397d --- /dev/null +++ b/singlestore/testcontainers/singlestore/__init__.py @@ -0,0 +1,84 @@ +from os import environ +from tempfile import NamedTemporaryFile +from testcontainers.core.generic import DbContainer + +SINGLESTORE_INIT_SCRIPT_FILE = '/init.sql' + + +class SingleStoreContainer(DbContainer): + """ + SingleStore database container. + + Example: + + .. doctest:: + + >>> import sqlalchemy + >>> from testcontainers.singlestore import SingleStoreContainer + >>> with SingleStoreContainer() as singlestore: + ... engine = sqlalchemy.create_engine(singlestore.get_connection_url()) + ... with engine.begin() as connection: + ... result = connection.execute(sqlalchemy.text( + ... 'select 1' + ... )) + """ + + def __init__( + self, + image: str = "ghcr.io/singlestore-labs/singlestoredb-dev:latest", + port: int = 3306, + password: str = 'password', + dbname: str = 'test_db', + dialect: str = 'mysql+pymysql', + singlestore_license: str = None, + singlestore_version: str = None, + **kwargs + ): + super(SingleStoreContainer, self).__init__(image, **kwargs) + + self.port = port + self.with_exposed_ports(self.port) + + self.username = 'root' + self.password = password or environ.get( + 'SINGLESTORE_ROOT_PASSWORD', + 'password' + ) + self.dbname = dbname or environ.get('SINGLESTORE_DATABASE', 'test_db') + self.singlestore_license = singlestore_license or environ.get('SINGLESTORE_LICENSE') + self.singlestore_version = singlestore_version or environ.get('SINGLESTORE_VERSION') + + self.dialect = dialect + + self.init_script = NamedTemporaryFile(prefix='singlestore-init-script') + + def _configure(self): + self.with_env("ROOT_PASSWORD", self.password) + self.with_env("SINGLESTORE_LICENSE", self.singlestore_license) + self.with_env("LICENSE_KEY", self.singlestore_license) + self.with_env("START_AFTER_INIT", 'Y') + + if self.singlestore_version: + self.with_env("SINGLESTORE_VERSION", self.singlestore_version) + + self.maybe_emulate_amd64() + + self.map_init_script() + + def get_connection_url(self) -> str: + return super()._create_connection_url( + dialect=self.dialect, + username=self.username, + password=self.password, + dbname=self.dbname, + port=self.port + ) + + def map_init_script(self): + self.init_script.write(f'CREATE DATABASE IF NOT EXISTS {self.dbname};') + self.init_script.flush() + self.with_volume_mapping(self.init_script.name, SINGLESTORE_INIT_SCRIPT_FILE) + + def stop(self, force=True, delete_volume=True): + self.init_script.close() + super().stop(force, delete_volume) diff --git a/singlestore/tests/test_singlestore.py b/singlestore/tests/test_singlestore.py new file mode 100644 index 000000000..8bafd6056 --- /dev/null +++ b/singlestore/tests/test_singlestore.py @@ -0,0 +1,19 @@ +import sqlalchemy + +from testcontainers.singlestore import SingleStoreContainer + + +def test_docker_run_singlestore(): + with SingleStoreContainer( + license_key=('BGE5YzE5NTdmN2I1NDQ4MjhhNTQ0MTM4YWQ4Y2Q5ZWNiAAAAAAA' + 'AAAAEAAAAAAAAAAwwNQIYKbH2LOLeT189H+nBdRagLdLboVuJTs' + 'gJAhkAtSepSZkq0Zn4FDVtvZyASWzovR2OeeyiAA==') + ) as singlestore: + engine = sqlalchemy.create_engine(singlestore.get_connection_url()) + with engine.begin() as connection: + result = connection.execute( + sqlalchemy.text( + 'select 1' + ) + ) + assert result.mappings().all() == [{'1': 1}]