1"""
2Dummy database backend for Plain.
3
4Plain uses this if the database ENGINE setting is empty (None or empty string).
5
6Each of these API functions, except connection.close(), raise
7ImproperlyConfigured.
8"""
9
10from plain.exceptions import ImproperlyConfigured
11from plain.models.backends.base.base import BaseDatabaseWrapper
12from plain.models.backends.base.client import BaseDatabaseClient
13from plain.models.backends.base.creation import BaseDatabaseCreation
14from plain.models.backends.base.introspection import BaseDatabaseIntrospection
15from plain.models.backends.base.operations import BaseDatabaseOperations
16from plain.models.backends.dummy.features import DummyDatabaseFeatures
17
18
19def complain(*args, **kwargs):
20 raise ImproperlyConfigured(
21 "settings.DATABASES is improperly configured. "
22 "Please supply the ENGINE value. Check "
23 "settings documentation for more details."
24 )
25
26
27def ignore(*args, **kwargs):
28 pass
29
30
31class DatabaseOperations(BaseDatabaseOperations):
32 quote_name = complain
33
34
35class DatabaseClient(BaseDatabaseClient):
36 runshell = complain
37
38
39class DatabaseCreation(BaseDatabaseCreation):
40 create_test_db = ignore
41 destroy_test_db = ignore
42
43
44class DatabaseIntrospection(BaseDatabaseIntrospection):
45 get_table_list = complain
46 get_table_description = complain
47 get_relations = complain
48 get_indexes = complain
49
50
51class DatabaseWrapper(BaseDatabaseWrapper):
52 operators = {}
53 # Override the base class implementations with null
54 # implementations. Anything that tries to actually
55 # do something raises complain; anything that tries
56 # to rollback or undo something raises ignore.
57 _cursor = complain
58 ensure_connection = complain
59 _commit = complain
60 _rollback = ignore
61 _close = ignore
62 _savepoint = ignore
63 _savepoint_commit = complain
64 _savepoint_rollback = ignore
65 _set_autocommit = complain
66 # Classes instantiated in __init__().
67 client_class = DatabaseClient
68 creation_class = DatabaseCreation
69 features_class = DummyDatabaseFeatures
70 introspection_class = DatabaseIntrospection
71 ops_class = DatabaseOperations
72
73 def is_usable(self):
74 return True