Coverage for databases/constants.py: 100%

18 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2024-04-28 15:17 +0000

1from __future__ import annotations 

2 

3from typing import List, cast 

4from pathlib import Path 

5from typing_extensions import get_args 

6 

7from lib import pyright 

8 

9from .utils import DatabaseConfig, DatabaseFeature 

10from ._types import DatabaseMapping, SupportedDatabase 

11 

12 

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()] 

17 

18 

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))) 

85 

86# paths 

87ROOT_DIR = Path(__file__).parent.parent 

88DATABASES_DIR = Path(__file__).parent 

89 

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} 

110 

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}