Coverage for databases/constants.py: 100%
18 statements
« prev ^ index » next coverage.py v7.2.7, created at 2024-04-28 15:17 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2024-04-28 15:17 +0000
1from __future__ import annotations
3from typing import List, cast
4from pathlib import Path
5from typing_extensions import get_args
7from lib import pyright
9from .utils import DatabaseConfig, DatabaseFeature
10from ._types import DatabaseMapping, SupportedDatabase
13def _fromdir(path: str) -> list[str]:
14 """Get the contents of a subdirectory within the `` directory"""
15 # TODO: recurse subdirs
16 return [str(f.relative_to(TESTS_DIR)) for f in (TESTS_DIR / path).iterdir()]
19# databases
20CONFIG_MAPPING: DatabaseMapping[DatabaseConfig] = {
21 'postgresql': DatabaseConfig(
22 id='postgresql',
23 name='PostgreSQL',
24 env_var='POSTGRESQL_URL',
25 bools_are_ints=False,
26 unsupported_features=set(),
27 default_date_func='CURRENT_DATE',
28 autoincrement_id='Int @id @default(autoincrement())',
29 ),
30 'cockroachdb': DatabaseConfig(
31 id='cockroachdb',
32 name='CockroachDB',
33 env_var='COCKROACHDB_URL',
34 bools_are_ints=False,
35 default_date_func='CURRENT_DATE',
36 autoincrement_id='BigInt @id @default(sequence())',
37 unsupported_features={
38 'json_arrays',
39 'array_push',
40 'transactions',
41 },
42 ),
43 'sqlite': DatabaseConfig(
44 id='sqlite',
45 name='SQLite',
46 env_var='SQLITE_URL',
47 bools_are_ints=False,
48 default_date_func='',
49 autoincrement_id='Int @id @default(autoincrement())',
50 unsupported_features={
51 'enum',
52 'json',
53 'date',
54 'arrays',
55 'create_many',
56 'case_sensitivity',
57 },
58 ),
59 'mysql': DatabaseConfig(
60 id='mysql',
61 name='MySQL',
62 env_var='MYSQL_URL',
63 bools_are_ints=True,
64 default_date_func='(CURRENT_DATE)',
65 autoincrement_id='Int @id @default(autoincrement())',
66 unsupported_features={
67 'arrays',
68 'case_sensitivity',
69 },
70 ),
71 'mariadb': DatabaseConfig(
72 id='mysql',
73 name='MariaDB',
74 env_var='MARIADB_URL',
75 bools_are_ints=True,
76 default_date_func='CURRENT_DATE',
77 autoincrement_id='Int @id @default(autoincrement())',
78 unsupported_features={
79 'arrays',
80 'case_sensitivity',
81 },
82 ),
83}
84SUPPORTED_DATABASES = cast(List[SupportedDatabase], list(get_args(SupportedDatabase)))
86# paths
87ROOT_DIR = Path(__file__).parent.parent
88DATABASES_DIR = Path(__file__).parent
90# database features
91TESTS_DIR = DATABASES_DIR / 'tests'
92SYNC_TESTS_DIR = DATABASES_DIR / 'sync_tests'
93FEATURES_MAPPING: dict[DatabaseFeature, list[str]] = {
94 'enum': ['test_enum.py', 'test_arrays/test_enum.py'],
95 'json': [
96 'types/test_json.py',
97 'test_arrays/test_json.py',
98 'types/raw_queries/test_json.py',
99 ],
100 'arrays': [*_fromdir('arrays'), *_fromdir('types/raw_queries/arrays')],
101 'array_push': _fromdir('arrays/push'),
102 'json_arrays': ['arrays/test_json.py', 'arrays/push/test_json.py'],
103 'transactions': ['test_transactions.py'],
104 # not yet implemented
105 'date': [],
106 'create_many': ['test_create_many.py'],
107 'raw_queries': ['test_raw_queries.py', *_fromdir('types/raw_queries')],
108 'case_sensitivity': ['test_case_sensitivity.py'],
109}
111# config files
112PYRIGHT_CONFIG: pyright.Config = {
113 'include': [],
114 'exclude': ['../src/prisma/_vendor/**.py', '**/prisma/_vendor/**.py'],
115 # required so that Pyright can resolve the `lib` module
116 'extraPaths': ['../'],
117 'typeCheckingMode': 'strict',
118 'reportPrivateUsage': False,
119 # copied from `pyproject.toml`
120 'reportUnusedImport': True,
121 'reportPrivateUsage': False,
122 'reportImportCycles': False,
123 'reportUnknownMemberType': False,
124 'reportUnknownVariableType': False,
125 'reportUnknownArgumentType': False,
126 # very strict errors
127 'reportImplicitOverride': True,
128 'reportUnusedCallResult': False,
129 'reportImplicitStringConcatenation': False,
130 'reportCallInDefaultInitializer': True,
131}
132PYTEST_CONFIG = {
133 '[tool.pytest.ini_options]': {
134 'asyncio_mode': 'strict',
135 'ignore': [],
136 },
137}