Projekt

Obecné

Profil

Stáhnout (1.87 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 fe297740 Jan Pašek
from pathlib import Path
5 77f06c5e Jan Pašek
from injector import Module, provider, singleton
6
7
from src.config.configuration import Configuration
8 fe297740 Jan Pašek
from src.constants import TEST_DATABASE_FILE, SCHEMA_SQL_FILE, VALUES_SQL_FILE
9 5678036c David Friesecký
from src.utils.file_anchor import FileAnchor
10 5e31b492 David Friesecký
from src.utils.logger import Logger
11 77f06c5e Jan Pašek
12
13
class ConnectionProvider(Module):
14 b593b83c Jan Pašek
    """
15
    Dependency injection module that provides database connection singleton
16
    """
17 77f06c5e Jan Pašek
18
    @singleton
19
    @provider
20
    def connect(self, configuration: Configuration) -> Connection:
21 b593b83c Jan Pašek
        """
22
        Create an SQLite connection based on the given configuration
23
        :param configuration: Configuration class with application config data
24
        :return: connection singleton
25
        """
26 5e31b492 David Friesecký
27
        Logger.debug(f"Creating a database connection [{configuration.connection_string}].")
28
29
        try:
30 fe297740 Jan Pašek
            db_file = FileAnchor(configuration.root_dir, configuration.connection_string)
31
            db_path = Path(db_file.shortest_relative_path())
32
            if not os.path.exists(db_path.parent.absolute()) and \
33 5678036c David Friesecký
                    configuration.connection_string != TEST_DATABASE_FILE:
34 fe297740 Jan Pašek
                os.makedirs(db_path.parent.absolute())
35 07a6c869 David Friesecký
36 5e31b492 David Friesecký
            co = sqlite3.connect(database=configuration.connection_string, check_same_thread=False)
37
            cu = co.cursor()
38 7ad820d0 David Friesecký
39
            schema_sql_file = open(FileAnchor(configuration.root_dir, SCHEMA_SQL_FILE).shortest_relative_path())
40
            schema_sql = schema_sql_file.read()
41
42
            values_sql_file = open(FileAnchor(configuration.root_dir, VALUES_SQL_FILE).shortest_relative_path())
43
            values_sql = values_sql_file.read()
44
45
            cu.executescript(schema_sql)
46
            cu.executescript(values_sql)
47 5e31b492 David Friesecký
        except sqlite3.Error as e:
48
            Logger.error(f"Unknown error during database setting.")
49
            raise e
50
51 77f06c5e Jan Pašek
        return co