pytest-databases 0.2.2__tar.gz → 0.2.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/PKG-INFO +1 -1
  2. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/pyproject.toml +1 -1
  3. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/src/pytest_databases/docker/__init__.py +11 -5
  4. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/src/pytest_databases/docker/docker-compose.yml +47 -47
  5. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/src/pytest_databases/helpers.py +19 -0
  6. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/.gitignore +0 -0
  7. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/.pre-commit-config.yaml +0 -0
  8. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/.sourcery.yaml +0 -0
  9. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/.vscode/settings.json +0 -0
  10. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/CODEOWNERS +0 -0
  11. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/CONTRIBUTING.rst +0 -0
  12. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/LICENSE +0 -0
  13. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/Makefile +0 -0
  14. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/README.md +0 -0
  15. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/requirements/requirements-dev.txt +0 -0
  16. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/requirements/requirements-docs.txt +0 -0
  17. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/requirements/requirements.txt +0 -0
  18. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/scripts/__init__.py +0 -0
  19. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/scripts/build_docs.py +0 -0
  20. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/scripts/convert_docs.sh +0 -0
  21. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/sonar-project.properties +0 -0
  22. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/src/pytest_databases/__init__.py +0 -0
  23. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/src/pytest_databases/__metadata__.py +0 -0
  24. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/src/pytest_databases/docker/cockroachdb.py +0 -0
  25. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/src/pytest_databases/docker/dragonfly.py +0 -0
  26. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/src/pytest_databases/docker/keydb.py +0 -0
  27. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/src/pytest_databases/docker/mariadb.py +0 -0
  28. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/src/pytest_databases/docker/mssql.py +0 -0
  29. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/src/pytest_databases/docker/mysql.py +0 -0
  30. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/src/pytest_databases/docker/oracle.py +0 -0
  31. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/src/pytest_databases/docker/postgres.py +0 -0
  32. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/src/pytest_databases/docker/redis.py +0 -0
  33. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/src/pytest_databases/docker/spanner.py +0 -0
  34. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/src/pytest_databases/py.typed +0 -0
  35. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/tests/__init__.py +0 -0
  36. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/tests/conftest.py +0 -0
  37. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/tests/docker/__init__.py +0 -0
  38. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/tests/docker/test_cockroachdb.py +0 -0
  39. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/tests/docker/test_dragonfly.py +0 -0
  40. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/tests/docker/test_keydb.py +0 -0
  41. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/tests/docker/test_mariadb.py +0 -0
  42. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/tests/docker/test_mssql.py +0 -0
  43. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/tests/docker/test_mysql.py +0 -0
  44. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/tests/docker/test_oracle.py +0 -0
  45. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/tests/docker/test_postgres.py +0 -0
  46. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/tests/docker/test_redis.py +0 -0
  47. {pytest_databases-0.2.2 → pytest_databases-0.2.4}/tests/docker/test_spanner.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pytest-databases
3
- Version: 0.2.2
3
+ Version: 0.2.4
4
4
  Summary: Reusable database fixtures for any and all databases.
5
5
  Project-URL: Documentation, https://github.com/litestar-org/pytest-databases#readme
6
6
  Project-URL: Issues, https://github.com/litestar-org/pytest-databases/issues
@@ -12,7 +12,7 @@ license = "MIT"
12
12
  name = "pytest-databases"
13
13
  readme = "README.md"
14
14
  requires-python = ">=3.8"
15
- version = "0.2.2"
15
+ version = "0.2.4"
16
16
  #
17
17
  authors = [{ name = "Cody Fincher", email = "cody.fincher@gmail.com" }]
18
18
  keywords = [
@@ -34,7 +34,7 @@ from typing import TYPE_CHECKING, Any, Callable
34
34
 
35
35
  import pytest
36
36
 
37
- from pytest_databases.helpers import wrap_sync
37
+ from pytest_databases.helpers import simple_string_hash, wrap_sync
38
38
 
39
39
  if TYPE_CHECKING:
40
40
  from collections.abc import Awaitable, Generator
@@ -70,17 +70,18 @@ SKIP_DOCKER_COMPOSE: bool = bool(os.environ.get("SKIP_DOCKER_COMPOSE", False))
70
70
  USE_LEGACY_DOCKER_COMPOSE: bool = bool(
71
71
  os.environ.get("USE_LEGACY_DOCKER_COMPOSE", os.getenv("GITHUB_ACTIONS") != "true")
72
72
  )
73
+ COMPOSE_PROJECT_NAME: str = f"pytest-databases-{simple_string_hash(__file__)}"
73
74
 
74
75
 
75
76
  class DockerServiceRegistry:
76
- def __init__(self, worker_id: str) -> None:
77
+ def __init__(self, worker_id: str, compose_project_name: str = COMPOSE_PROJECT_NAME) -> None:
77
78
  self._running_services: set[str] = set()
78
79
  self.docker_ip = self._get_docker_ip()
79
80
  self._base_command = ["docker-compose"] if USE_LEGACY_DOCKER_COMPOSE else ["docker", "compose"]
80
81
  self._base_command.extend(
81
82
  [
82
83
  f"--file={Path(__file__).parent / 'docker-compose.yml'}",
83
- f"--project-name=pytest-databases-{worker_id}",
84
+ f"--project-name={compose_project_name}-{worker_id}",
84
85
  ],
85
86
  )
86
87
 
@@ -132,11 +133,16 @@ class DockerServiceRegistry:
132
133
 
133
134
 
134
135
  @pytest.fixture(scope="session")
135
- def docker_services(worker_id: str = "main") -> Generator[DockerServiceRegistry, None, None]:
136
+ def compose_project_name() -> str:
137
+ return os.environ.get("COMPOSE_PROJECT_NAME", COMPOSE_PROJECT_NAME)
138
+
139
+
140
+ @pytest.fixture(scope="session")
141
+ def docker_services(compose_project_name: str, worker_id: str = "main") -> Generator[DockerServiceRegistry, None, None]:
136
142
  if os.getenv("GITHUB_ACTIONS") == "true" and sys.platform != "linux":
137
143
  pytest.skip("Docker not available on this platform")
138
144
 
139
- registry = DockerServiceRegistry(worker_id)
145
+ registry = DockerServiceRegistry(worker_id, compose_project_name=compose_project_name)
140
146
  try:
141
147
  yield registry
142
148
  finally:
@@ -4,52 +4,52 @@ services:
4
4
  - default
5
5
  image: postgres:12
6
6
  ports:
7
- - "${POSTGRES12_PORT}:5432" # use a non-standard port here
7
+ - "${POSTGRES12_PORT:-5423}:5432" # use a non-standard port here
8
8
  environment:
9
- POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
9
+ POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-super-secret}
10
10
  postgres13:
11
11
  networks:
12
12
  - default
13
13
  image: postgres:13
14
14
  ports:
15
- - "${POSTGRES13_PORT}:5432" # use a non-standard port here
15
+ - "${POSTGRES13_PORT:-5424}:5432" # use a non-standard port here
16
16
  environment:
17
- POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
17
+ POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-super-secret}
18
18
  postgres14:
19
19
  networks:
20
20
  - default
21
21
  image: postgres:14
22
22
  ports:
23
- - "${POSTGRES14_PORT}:5432" # use a non-standard port here
23
+ - "${POSTGRES14_PORT:-5425}:5432" # use a non-standard port here
24
24
  environment:
25
- POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
25
+ POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-super-secret}
26
26
  postgres15:
27
27
  networks:
28
28
  - default
29
29
  image: postgres:15
30
30
  ports:
31
- - "${POSTGRES15_PORT}:5432" # use a non-standard port here
31
+ - "${POSTGRES15_PORT:-5426}:5432" # use a non-standard port here
32
32
  environment:
33
- POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
33
+ POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-super-secret}
34
34
  postgres16:
35
35
  networks:
36
36
  - default
37
37
  image: postgres:16
38
38
  ports:
39
- - "${POSTGRES16_PORT}:5432" # use a non-standard port here
39
+ - "${POSTGRES16_PORT:-5427}:5432" # use a non-standard port here
40
40
  environment:
41
- POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
41
+ POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-super-secret}
42
42
  mariadb113:
43
43
  networks:
44
44
  - default
45
45
  image: mariadb:11.3
46
46
  ports:
47
- - "${MARIADB113_PORT}:3306" # use a non-standard port here
47
+ - "${MARIADB113_PORT:-3359}:3306" # use a non-standard port here
48
48
  environment:
49
- MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD}
50
- MARIADB_PASSWORD: ${MARIADB_PASSWORD}
51
- MARIADB_USER: ${MARIADB_USER}
52
- MARIADB_DATABASE: ${MARIADB_DATABASE}
49
+ MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD:-super-secret}
50
+ MARIADB_PASSWORD: ${MARIADB_PASSWORD:-super-secret}
51
+ MARIADB_USER: ${MARIADB_USER:-app}
52
+ MARIADB_DATABASE: ${MARIADB_DATABASE:-db}
53
53
  MARIADB_ROOT_HOST: "%"
54
54
  LANG: C.UTF-8
55
55
  mysql8:
@@ -57,12 +57,12 @@ services:
57
57
  - default
58
58
  image: mysql:latest
59
59
  ports:
60
- - "${MYSQL8_PORT}:3306" # use a non-standard port here
60
+ - "${MYSQL8_PORT:-3360}:3306" # use a non-standard port here
61
61
  environment:
62
- MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
63
- MYSQL_PASSWORD: ${MYSQL_PASSWORD}
64
- MYSQL_USER: ${MYSQL_USER}
65
- MYSQL_DATABASE: ${MYSQL_DATABASE}
62
+ MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-super-secret}
63
+ MYSQL_PASSWORD: ${MYSQL_PASSWORD:-super-secret}
64
+ MYSQL_USER: ${MYSQL_USER:-app}
65
+ MYSQL_DATABASE: ${MYSQL_DATABASE:-db}
66
66
  MYSQL_ROOT_HOST: "%"
67
67
  LANG: C.UTF-8
68
68
  mysql57:
@@ -70,12 +70,12 @@ services:
70
70
  - default
71
71
  image: mysql:5.7
72
72
  ports:
73
- - "${MYSQL57_PORT}:3306" # use a non-standard port here
73
+ - "${MYSQL57_PORT:-3362}:3306" # use a non-standard port here
74
74
  environment:
75
- MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
76
- MYSQL_PASSWORD: ${MYSQL_PASSWORD}
77
- MYSQL_USER: ${MYSQL_USER}
78
- MYSQL_DATABASE: ${MYSQL_DATABASE}
75
+ MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-super-secret}
76
+ MYSQL_PASSWORD: ${MYSQL_PASSWORD:-super-secret}
77
+ MYSQL_USER: ${MYSQL_USER:-app}
78
+ MYSQL_DATABASE: ${MYSQL_DATABASE:-db}
79
79
  MYSQL_ROOT_HOST: "%"
80
80
  LANG: C.UTF-8
81
81
  mysql56:
@@ -83,12 +83,12 @@ services:
83
83
  - default
84
84
  image: mysql:5.6
85
85
  ports:
86
- - "${MYSQL56_PORT}:3306" # use a non-standard port here
86
+ - "${MYSQL56_PORT:-3363}:3306" # use a non-standard port here
87
87
  environment:
88
- MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
89
- MYSQL_PASSWORD: ${MYSQL_PASSWORD}
90
- MYSQL_USER: ${MYSQL_USER}
91
- MYSQL_DATABASE: ${MYSQL_DATABASE}
88
+ MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-super-secret}
89
+ MYSQL_PASSWORD: ${MYSQL_PASSWORD:-super-secret}
90
+ MYSQL_USER: ${MYSQL_USER:-app}
91
+ MYSQL_DATABASE: ${MYSQL_DATABASE:-db}
92
92
  MYSQL_ROOT_HOST: "%"
93
93
  LANG: C.UTF-8
94
94
  oracle18c:
@@ -96,21 +96,21 @@ services:
96
96
  - default
97
97
  image: gvenzl/oracle-xe:18-slim-faststart
98
98
  ports:
99
- - "${ORACLE18C_PORT}:1521" # use a non-standard port here
99
+ - "${ORACLE18C_PORT:-1514}:1521" # use a non-standard port here
100
100
  environment:
101
- ORACLE_PASSWORD: ${ORACLE_SYSTEM_PASSWORD}
102
- APP_USER_PASSWORD: ${ORACLE_PASSWORD}
103
- APP_USER: ${ORACLE_USER}
101
+ ORACLE_PASSWORD: ${ORACLE_SYSTEM_PASSWORD:-super-secret}
102
+ APP_USER_PASSWORD: ${ORACLE_PASSWORD:-super-secret}
103
+ APP_USER: ${ORACLE_USER:-app}
104
104
  oracle23c:
105
105
  networks:
106
106
  - default
107
107
  image: gvenzl/oracle-free:23-slim-faststart
108
108
  ports:
109
- - "${ORACLE23C_PORT}:1521" # use a non-standard port here
109
+ - "${ORACLE23C_PORT:-1513}:1521" # use a non-standard port here
110
110
  environment:
111
- ORACLE_PASSWORD: ${ORACLE_SYSTEM_PASSWORD}
112
- APP_USER_PASSWORD: ${ORACLE_PASSWORD}
113
- APP_USER: ${ORACLE_USER}
111
+ ORACLE_PASSWORD: ${ORACLE_SYSTEM_PASSWORD:-super-secret}
112
+ APP_USER_PASSWORD: ${ORACLE_PASSWORD:-super-secret}
113
+ APP_USER: ${ORACLE_USER:-app}
114
114
  mssql2022:
115
115
  networks:
116
116
  - default
@@ -125,7 +125,7 @@ services:
125
125
  spanner:
126
126
  image: gcr.io/cloud-spanner-emulator/emulator:latest
127
127
  ports:
128
- - "${SPANNER_PORT}:9010"
128
+ - "${SPANNER_PORT:-9010}:9010"
129
129
  # Init (Create Instance)
130
130
  spanner_init:
131
131
  image: gcr.io/google.com/cloudsdktool/cloud-sdk:332.0.0-slim
@@ -136,9 +136,9 @@ services:
136
136
  gcloud config set auth/disable_credentials true &&
137
137
  gcloud spanner instances create $${INSTANCE_NAME} --config=emulator-config --description=Emulator --nodes=1'
138
138
  environment:
139
- PROJECT_ID: ${GOOGLE_CLOUD_PROJECT}
140
- INSTANCE_NAME: ${SPANNER_INSTANCE}
141
- DATABASE_NAME: ${SPANNER_DATABASE}
139
+ PROJECT_ID: ${GOOGLE_CLOUD_PROJECT:-emulator-test-project}
140
+ INSTANCE_NAME: ${SPANNER_INSTANCE:-test-instance}
141
+ DATABASE_NAME: ${SPANNER_DATABASE:-test-database}
142
142
  depends_on:
143
143
  - spanner
144
144
  cockroachdb:
@@ -147,9 +147,9 @@ services:
147
147
  restart: "no"
148
148
  expose:
149
149
  - "8080"
150
- - "${COCKROACHDB_PORT}"
150
+ - "${COCKROACHDB_PORT:-26257}"
151
151
  ports:
152
- - "${COCKROACHDB_PORT}:26257"
152
+ - "${COCKROACHDB_PORT:-26257}:26257"
153
153
  - "8880:8080"
154
154
  healthcheck:
155
155
  test: ["CMD", "curl", "-f", "http://localhost:8080/health?ready=1"]
@@ -159,17 +159,17 @@ services:
159
159
  redis:
160
160
  image: redis
161
161
  ports:
162
- - "${REDIS_PORT}:6379"
162
+ - "${REDIS_PORT:-6397}:6379"
163
163
  keydb:
164
164
  image: eqalpha/keydb
165
165
  ports:
166
- - "${KEYDB_PORT}:6379"
166
+ - "${KEYDB_PORT:-6396}:6379"
167
167
  dragonfly:
168
168
  image: "docker.dragonflydb.io/dragonflydb/dragonfly"
169
169
  ulimits:
170
170
  memlock: -1
171
171
  ports:
172
- - "${DRAGONFLY_PORT}:6379"
172
+ - "${DRAGONFLY_PORT:-6398}:6379"
173
173
  # For better performance, consider `host` mode instead `port` to avoid docker NAT.
174
174
  # `host` mode is NOT currently supported in Swarm Mode.
175
175
  # https://docs.docker.com/compose/compose-file/compose-file-v3/#network_mode
@@ -23,6 +23,7 @@
23
23
 
24
24
  from __future__ import annotations
25
25
 
26
+ import hashlib
26
27
  import inspect
27
28
  from contextlib import AbstractAsyncContextManager, AbstractContextManager
28
29
  from functools import partial
@@ -81,3 +82,21 @@ def wrap_sync(fn: Callable[P, T]) -> Callable[P, Awaitable[T]]:
81
82
  return await anyio.to_thread.run_sync(partial(fn, *args, **kwargs))
82
83
 
83
84
  return wrapped
85
+
86
+
87
+ def simple_string_hash(string_to_hash: str) -> str:
88
+ """Generates a short hash based on a string.
89
+
90
+ Args:
91
+ string_to_hash: The string to hash.
92
+
93
+ Returns:
94
+ A short hash string.
95
+ """
96
+
97
+ string_bytes = string_to_hash.encode("utf-8")
98
+ hasher = hashlib.sha256()
99
+ hasher.update(string_bytes)
100
+ digest = hasher.digest()
101
+ hex_string = digest.hex()
102
+ return hex_string[:12]