Skip to content

Commit 70b142e

Browse files
Merge pull request #75 from FrancisLfg/update-redis-container
update redis container and add test
2 parents d9bd61a + 999d95b commit 70b142e

File tree

8 files changed

+121
-72
lines changed

8 files changed

+121
-72
lines changed

requirements.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
-e file:.[docker-compose,mysql,oracle,postgresql,selenium,google-cloud-pubsub,mongo]
1+
-e file:.[docker-compose,mysql,oracle,postgresql,selenium,google-cloud-pubsub,mongo,redis]
22
codecov
33
flake8
44
pytest

requirements/3.5.txt

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,30 @@
44
#
55
# pip-compile --output-file=requirements/3.5.txt requirements.in
66
#
7-
-e file:.
7+
-e file:. # via -r requirements.in
88
attrs==19.3.0 # via jsonschema, pytest
99
bcrypt==3.1.7 # via paramiko
10-
blindspin==2.0.1
10+
blindspin==2.0.1 # via testcontainers
1111
cached-property==1.5.1 # via docker-compose
1212
cachetools==4.0.0 # via google-auth
1313
certifi==2019.11.28 # via requests
1414
cffi==1.14.0 # via bcrypt, cryptography, pynacl
1515
chardet==3.0.4 # via requests
16-
codecov==2.0.15
16+
codecov==2.0.15 # via -r requirements.in
1717
colorama==0.4.3 # via crayons
1818
coverage==5.0.3 # via codecov, pytest-cov
19-
crayons==0.3.0
19+
crayons==0.3.0 # via testcontainers
2020
cryptography==2.8 # via paramiko
21-
cx-oracle==7.3.0
22-
docker-compose==1.25.4
23-
docker[ssh]==4.2.0 # via docker-compose
21+
cx-oracle==7.3.0 # via testcontainers
22+
docker-compose==1.25.4 # via testcontainers
23+
docker[ssh]==4.2.0 # via docker-compose, testcontainers
2424
dockerpty==0.4.1 # via docker-compose
2525
docopt==0.6.2 # via docker-compose
2626
entrypoints==0.3 # via flake8
27-
flake8==3.7.9
27+
flake8==3.7.9 # via -r requirements.in
2828
google-api-core[grpc]==1.16.0 # via google-cloud-pubsub
2929
google-auth==1.11.2 # via google-api-core
30-
google-cloud-pubsub==1.2.0
30+
google-cloud-pubsub==1.2.0 # via testcontainers
3131
googleapis-common-protos[grpc]==1.51.0 # via google-api-core, grpc-google-iam-v1
3232
grpc-google-iam-v1==0.12.3 # via google-cloud-pubsub
3333
grpcio==1.27.2 # via google-api-core, googleapis-common-protos, grpc-google-iam-v1
@@ -38,35 +38,35 @@ mccabe==0.6.1 # via flake8
3838
more-itertools==8.2.0 # via pytest
3939
packaging==20.1 # via pytest
4040
paramiko==2.7.1 # via docker
41-
pathlib2==2.3.5 # via pytest
4241
pluggy==0.13.1 # via pytest
4342
protobuf==3.11.3 # via google-api-core, googleapis-common-protos
44-
psycopg2-binary==2.8.4
43+
psycopg2-binary==2.8.4 # via testcontainers
4544
py==1.8.1 # via pytest
4645
pyasn1-modules==0.2.8 # via google-auth
4746
pyasn1==0.4.8 # via pyasn1-modules, rsa
4847
pycodestyle==2.5.0 # via flake8
4948
pycparser==2.19 # via cffi
5049
pyflakes==2.1.1 # via flake8
51-
pymongo==3.10.1
52-
pymysql==0.9.3
50+
pymongo==3.10.1 # via testcontainers
51+
pymysql==0.9.3 # via testcontainers
5352
pynacl==1.3.0 # via paramiko
5453
pyparsing==2.4.6 # via packaging
5554
pyrsistent==0.15.7 # via jsonschema
56-
pytest-cov==2.8.1
57-
pytest==5.3.5
55+
pytest-cov==2.8.1 # via -r requirements.in
56+
pytest==5.3.5 # via -r requirements.in, pytest-cov
5857
pytz==2019.3 # via google-api-core
5958
pyyaml==5.3 # via docker-compose
59+
redis==3.4.1 # via testcontainers
6060
requests==2.23.0 # via codecov, docker, docker-compose, google-api-core
6161
rsa==4.0 # via google-auth
62-
selenium==3.141.0
63-
six==1.14.0 # via bcrypt, cryptography, docker, docker-compose, dockerpty, google-api-core, google-auth, grpcio, jsonschema, packaging, pathlib2, protobuf, pynacl, pyrsistent, websocket-client
64-
sqlalchemy==1.3.13
62+
selenium==3.141.0 # via testcontainers
63+
six==1.14.0 # via bcrypt, cryptography, docker, docker-compose, dockerpty, google-api-core, google-auth, grpcio, jsonschema, packaging, protobuf, pynacl, pyrsistent, websocket-client
64+
sqlalchemy==1.3.13 # via testcontainers
6565
texttable==1.6.2 # via docker-compose
6666
urllib3==1.25.8 # via requests, selenium
6767
wcwidth==0.1.8 # via pytest
6868
websocket-client==0.57.0 # via docker, docker-compose
69-
wrapt==1.12.0
69+
wrapt==1.12.0 # via testcontainers
7070
zipp==1.2.0 # via importlib-metadata
7171

7272
# The following packages are considered to be unsafe in a requirements file:

requirements/3.6.txt

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,30 @@
44
#
55
# pip-compile --output-file=requirements/3.6.txt requirements.in
66
#
7-
-e file:.
7+
-e file:. # via -r requirements.in
88
attrs==19.3.0 # via jsonschema, pytest
99
bcrypt==3.1.7 # via paramiko
10-
blindspin==2.0.1
10+
blindspin==2.0.1 # via testcontainers
1111
cached-property==1.5.1 # via docker-compose
1212
cachetools==4.0.0 # via google-auth
1313
certifi==2019.11.28 # via requests
1414
cffi==1.14.0 # via bcrypt, cryptography, pynacl
1515
chardet==3.0.4 # via requests
16-
codecov==2.0.15
16+
codecov==2.0.15 # via -r requirements.in
1717
colorama==0.4.3 # via crayons
1818
coverage==5.0.3 # via codecov, pytest-cov
19-
crayons==0.3.0
19+
crayons==0.3.0 # via testcontainers
2020
cryptography==2.8 # via paramiko
21-
cx-oracle==7.3.0
22-
docker-compose==1.25.4
23-
docker[ssh]==4.2.0 # via docker-compose
21+
cx-oracle==7.3.0 # via testcontainers
22+
docker-compose==1.25.4 # via testcontainers
23+
docker[ssh]==4.2.0 # via docker-compose, testcontainers
2424
dockerpty==0.4.1 # via docker-compose
2525
docopt==0.6.2 # via docker-compose
2626
entrypoints==0.3 # via flake8
27-
flake8==3.7.9
27+
flake8==3.7.9 # via -r requirements.in
2828
google-api-core[grpc]==1.16.0 # via google-cloud-pubsub
2929
google-auth==1.11.2 # via google-api-core
30-
google-cloud-pubsub==1.2.0
30+
google-cloud-pubsub==1.2.0 # via testcontainers
3131
googleapis-common-protos[grpc]==1.51.0 # via google-api-core, grpc-google-iam-v1
3232
grpc-google-iam-v1==0.12.3 # via google-cloud-pubsub
3333
grpcio==1.27.2 # via google-api-core, googleapis-common-protos, grpc-google-iam-v1
@@ -40,32 +40,33 @@ packaging==20.1 # via pytest
4040
paramiko==2.7.1 # via docker
4141
pluggy==0.13.1 # via pytest
4242
protobuf==3.11.3 # via google-api-core, googleapis-common-protos
43-
psycopg2-binary==2.8.4
43+
psycopg2-binary==2.8.4 # via testcontainers
4444
py==1.8.1 # via pytest
4545
pyasn1-modules==0.2.8 # via google-auth
4646
pyasn1==0.4.8 # via pyasn1-modules, rsa
4747
pycodestyle==2.5.0 # via flake8
4848
pycparser==2.19 # via cffi
4949
pyflakes==2.1.1 # via flake8
50-
pymongo==3.10.1
51-
pymysql==0.9.3
50+
pymongo==3.10.1 # via testcontainers
51+
pymysql==0.9.3 # via testcontainers
5252
pynacl==1.3.0 # via paramiko
5353
pyparsing==2.4.6 # via packaging
5454
pyrsistent==0.15.7 # via jsonschema
55-
pytest-cov==2.8.1
56-
pytest==5.3.5
55+
pytest-cov==2.8.1 # via -r requirements.in
56+
pytest==5.3.5 # via -r requirements.in, pytest-cov
5757
pytz==2019.3 # via google-api-core
5858
pyyaml==5.3 # via docker-compose
59+
redis==3.4.1 # via testcontainers
5960
requests==2.23.0 # via codecov, docker, docker-compose, google-api-core
6061
rsa==4.0 # via google-auth
61-
selenium==3.141.0
62+
selenium==3.141.0 # via testcontainers
6263
six==1.14.0 # via bcrypt, cryptography, docker, docker-compose, dockerpty, google-api-core, google-auth, grpcio, jsonschema, packaging, protobuf, pynacl, pyrsistent, websocket-client
63-
sqlalchemy==1.3.13
64+
sqlalchemy==1.3.13 # via testcontainers
6465
texttable==1.6.2 # via docker-compose
6566
urllib3==1.25.8 # via requests, selenium
6667
wcwidth==0.1.8 # via pytest
6768
websocket-client==0.57.0 # via docker, docker-compose
68-
wrapt==1.12.0
69+
wrapt==1.12.0 # via testcontainers
6970
zipp==3.0.0 # via importlib-metadata
7071

7172
# The following packages are considered to be unsafe in a requirements file:

requirements/3.7.txt

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,30 @@
44
#
55
# pip-compile --output-file=requirements/3.7.txt requirements.in
66
#
7-
-e file:.
7+
-e file:. # via -r requirements.in
88
attrs==19.3.0 # via jsonschema, pytest
99
bcrypt==3.1.7 # via paramiko
10-
blindspin==2.0.1
10+
blindspin==2.0.1 # via testcontainers
1111
cached-property==1.5.1 # via docker-compose
1212
cachetools==4.0.0 # via google-auth
1313
certifi==2019.11.28 # via requests
1414
cffi==1.14.0 # via bcrypt, cryptography, pynacl
1515
chardet==3.0.4 # via requests
16-
codecov==2.0.15
16+
codecov==2.0.15 # via -r requirements.in
1717
colorama==0.4.3 # via crayons
1818
coverage==5.0.3 # via codecov, pytest-cov
19-
crayons==0.3.0
19+
crayons==0.3.0 # via testcontainers
2020
cryptography==2.8 # via paramiko
21-
cx-oracle==7.3.0
22-
docker-compose==1.25.4
23-
docker[ssh]==4.2.0 # via docker-compose
21+
cx-oracle==7.3.0 # via testcontainers
22+
docker-compose==1.25.4 # via testcontainers
23+
docker[ssh]==4.2.0 # via docker-compose, testcontainers
2424
dockerpty==0.4.1 # via docker-compose
2525
docopt==0.6.2 # via docker-compose
2626
entrypoints==0.3 # via flake8
27-
flake8==3.7.9
27+
flake8==3.7.9 # via -r requirements.in
2828
google-api-core[grpc]==1.16.0 # via google-cloud-pubsub
2929
google-auth==1.11.2 # via google-api-core
30-
google-cloud-pubsub==1.2.0
30+
google-cloud-pubsub==1.2.0 # via testcontainers
3131
googleapis-common-protos[grpc]==1.51.0 # via google-api-core, grpc-google-iam-v1
3232
grpc-google-iam-v1==0.12.3 # via google-cloud-pubsub
3333
grpcio==1.27.2 # via google-api-core, googleapis-common-protos, grpc-google-iam-v1
@@ -40,32 +40,33 @@ packaging==20.1 # via pytest
4040
paramiko==2.7.1 # via docker
4141
pluggy==0.13.1 # via pytest
4242
protobuf==3.11.3 # via google-api-core, googleapis-common-protos
43-
psycopg2-binary==2.8.4
43+
psycopg2-binary==2.8.4 # via testcontainers
4444
py==1.8.1 # via pytest
4545
pyasn1-modules==0.2.8 # via google-auth
4646
pyasn1==0.4.8 # via pyasn1-modules, rsa
4747
pycodestyle==2.5.0 # via flake8
4848
pycparser==2.19 # via cffi
4949
pyflakes==2.1.1 # via flake8
50-
pymongo==3.10.1
51-
pymysql==0.9.3
50+
pymongo==3.10.1 # via testcontainers
51+
pymysql==0.9.3 # via testcontainers
5252
pynacl==1.3.0 # via paramiko
5353
pyparsing==2.4.6 # via packaging
5454
pyrsistent==0.15.7 # via jsonschema
55-
pytest-cov==2.8.1
56-
pytest==5.3.5
55+
pytest-cov==2.8.1 # via -r requirements.in
56+
pytest==5.3.5 # via -r requirements.in, pytest-cov
5757
pytz==2019.3 # via google-api-core
5858
pyyaml==5.3 # via docker-compose
59+
redis==3.4.1 # via testcontainers
5960
requests==2.23.0 # via codecov, docker, docker-compose, google-api-core
6061
rsa==4.0 # via google-auth
61-
selenium==3.141.0
62+
selenium==3.141.0 # via testcontainers
6263
six==1.14.0 # via bcrypt, cryptography, docker, docker-compose, dockerpty, google-api-core, google-auth, grpcio, jsonschema, packaging, protobuf, pynacl, pyrsistent, websocket-client
63-
sqlalchemy==1.3.13
64+
sqlalchemy==1.3.13 # via testcontainers
6465
texttable==1.6.2 # via docker-compose
6566
urllib3==1.25.8 # via requests, selenium
6667
wcwidth==0.1.8 # via pytest
6768
websocket-client==0.57.0 # via docker, docker-compose
68-
wrapt==1.12.0
69+
wrapt==1.12.0 # via testcontainers
6970
zipp==3.0.0 # via importlib-metadata
7071

7172
# The following packages are considered to be unsafe in a requirements file:

requirements/3.8.txt

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,30 @@
44
#
55
# pip-compile --output-file=requirements/3.8.txt requirements.in
66
#
7-
-e file:.
7+
-e file:. # via -r requirements.in
88
attrs==19.3.0 # via jsonschema, pytest
99
bcrypt==3.1.7 # via paramiko
10-
blindspin==2.0.1
10+
blindspin==2.0.1 # via testcontainers
1111
cached-property==1.5.1 # via docker-compose
1212
cachetools==4.0.0 # via google-auth
1313
certifi==2019.11.28 # via requests
1414
cffi==1.14.0 # via bcrypt, cryptography, pynacl
1515
chardet==3.0.4 # via requests
16-
codecov==2.0.15
16+
codecov==2.0.15 # via -r requirements.in
1717
colorama==0.4.3 # via crayons
1818
coverage==5.0.3 # via codecov, pytest-cov
19-
crayons==0.3.0
19+
crayons==0.3.0 # via testcontainers
2020
cryptography==2.8 # via paramiko
21-
cx-oracle==7.3.0
22-
docker-compose==1.25.4
23-
docker[ssh]==4.2.0 # via docker-compose
21+
cx-oracle==7.3.0 # via testcontainers
22+
docker-compose==1.25.4 # via testcontainers
23+
docker[ssh]==4.2.0 # via docker-compose, testcontainers
2424
dockerpty==0.4.1 # via docker-compose
2525
docopt==0.6.2 # via docker-compose
2626
entrypoints==0.3 # via flake8
27-
flake8==3.7.9
27+
flake8==3.7.9 # via -r requirements.in
2828
google-api-core[grpc]==1.16.0 # via google-cloud-pubsub
2929
google-auth==1.11.2 # via google-api-core
30-
google-cloud-pubsub==1.2.0
30+
google-cloud-pubsub==1.2.0 # via testcontainers
3131
googleapis-common-protos[grpc]==1.51.0 # via google-api-core, grpc-google-iam-v1
3232
grpc-google-iam-v1==0.12.3 # via google-cloud-pubsub
3333
grpcio==1.27.2 # via google-api-core, googleapis-common-protos, grpc-google-iam-v1
@@ -39,32 +39,33 @@ packaging==20.1 # via pytest
3939
paramiko==2.7.1 # via docker
4040
pluggy==0.13.1 # via pytest
4141
protobuf==3.11.3 # via google-api-core, googleapis-common-protos
42-
psycopg2-binary==2.8.4
42+
psycopg2-binary==2.8.4 # via testcontainers
4343
py==1.8.1 # via pytest
4444
pyasn1-modules==0.2.8 # via google-auth
4545
pyasn1==0.4.8 # via pyasn1-modules, rsa
4646
pycodestyle==2.5.0 # via flake8
4747
pycparser==2.19 # via cffi
4848
pyflakes==2.1.1 # via flake8
49-
pymongo==3.10.1
50-
pymysql==0.9.3
49+
pymongo==3.10.1 # via testcontainers
50+
pymysql==0.9.3 # via testcontainers
5151
pynacl==1.3.0 # via paramiko
5252
pyparsing==2.4.6 # via packaging
5353
pyrsistent==0.15.7 # via jsonschema
54-
pytest-cov==2.8.1
55-
pytest==5.3.5
54+
pytest-cov==2.8.1 # via -r requirements.in
55+
pytest==5.3.5 # via -r requirements.in, pytest-cov
5656
pytz==2019.3 # via google-api-core
5757
pyyaml==5.3 # via docker-compose
58+
redis==3.4.1 # via testcontainers
5859
requests==2.23.0 # via codecov, docker, docker-compose, google-api-core
5960
rsa==4.0 # via google-auth
60-
selenium==3.141.0
61+
selenium==3.141.0 # via testcontainers
6162
six==1.14.0 # via bcrypt, cryptography, docker, docker-compose, dockerpty, google-api-core, google-auth, grpcio, jsonschema, packaging, protobuf, pynacl, pyrsistent, websocket-client
62-
sqlalchemy==1.3.13
63+
sqlalchemy==1.3.13 # via testcontainers
6364
texttable==1.6.2 # via docker-compose
6465
urllib3==1.25.8 # via requests, selenium
6566
wcwidth==0.1.8 # via pytest
6667
websocket-client==0.57.0 # via docker, docker-compose
67-
wrapt==1.12.0
68+
wrapt==1.12.0 # via testcontainers
6869

6970
# The following packages are considered to be unsafe in a requirements file:
7071
# setuptools

setup.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@
5454
'postgresql': ['sqlalchemy', 'psycopg2-binary'],
5555
'selenium': ['selenium'],
5656
'google-cloud-pubsub': ['google-cloud-pubsub'],
57-
'mongo': ['pymongo']
57+
'mongo': ['pymongo'],
58+
'redis': ['redis']
5859
},
5960
long_description_content_type="text/markdown",
6061
long_description=long_description,

testcontainers/redis.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,28 @@
1010
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
1111
# License for the specific language governing permissions and limitations
1212
# under the License.
13+
import redis as redis
14+
1315
from testcontainers.core.container import DockerContainer
16+
from testcontainers.core.waiting_utils import wait_container_is_ready
1417

1518

1619
class RedisContainer(DockerContainer):
1720
def __init__(self, image="redis:latest", port_to_expose=6379):
1821
super(RedisContainer, self).__init__(image)
1922
self.port_to_expose = port_to_expose
2023
self.with_exposed_ports(self.port_to_expose)
24+
25+
@wait_container_is_ready()
26+
def _connect(self):
27+
client = self.get_client()
28+
if not client.ping():
29+
raise Exception
30+
31+
def get_client(self):
32+
return redis.Redis(host=self.get_container_host_ip(), port=self.get_exposed_port(6379))
33+
34+
def start(self):
35+
super().start()
36+
self._connect()
37+
return self

0 commit comments

Comments
 (0)