Projekt

Obecné

Profil

Stáhnout (1.52 KB) Statistiky
| Větev: | Tag: | Revize:
1 07a6c869 David Friesecký
import os
2 77f06c5e Jan Pašek
import sqlite3
3
from sqlite3 import Connection
4
5
from injector import Module, provider, singleton
6
7
from src.config.configuration import Configuration
8 5678036c David Friesecký
from src.constants import DB_DIR, TEST_DATABASE_FILE
9 07a6c869 David Friesecký
from src.db.init_queries import DEFAULT_VALUES_SQL, CHECK_SCHEMA_SQL
10 5678036c David Friesecký
from src.utils.file_anchor import FileAnchor
11 5e31b492 David Friesecký
from src.utils.logger import Logger
12 77f06c5e Jan Pašek
13
14
class ConnectionProvider(Module):
15 b593b83c Jan Pašek
    """
16
    Dependency injection module that provides database connection singleton
17
    """
18 77f06c5e Jan Pašek
19
    @singleton
20
    @provider
21
    def connect(self, configuration: Configuration) -> Connection:
22 b593b83c Jan Pašek
        """
23
        Create an SQLite connection based on the given configuration
24
        :param configuration: Configuration class with application config data
25
        :return: connection singleton
26
        """
27 5e31b492 David Friesecký
28
        Logger.debug(f"Creating a database connection [{configuration.connection_string}].")
29
30
        try:
31 5678036c David Friesecký
            if not os.path.exists(FileAnchor(configuration.root_dir, DB_DIR).shortest_relative_path()) and \
32
                    configuration.connection_string != TEST_DATABASE_FILE:
33
                os.makedirs(FileAnchor(configuration.root_dir, DB_DIR).shortest_relative_path())
34 07a6c869 David Friesecký
35 5e31b492 David Friesecký
            co = sqlite3.connect(database=configuration.connection_string, check_same_thread=False)
36
            cu = co.cursor()
37 07a6c869 David Friesecký
            cu.executescript(CHECK_SCHEMA_SQL)
38 5e31b492 David Friesecký
            cu.executescript(DEFAULT_VALUES_SQL)
39
        except sqlite3.Error as e:
40
            Logger.error(f"Unknown error during database setting.")
41
            raise e
42
43 77f06c5e Jan Pašek
        return co