Plain is headed towards 1.0! Subscribe for development updates →

 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