Projekt

Obecné

Profil

Stáhnout (1.3 KB) Statistiky
| Větev: | Tag: | Revize:
1
import os
2
import sqlite3
3
from sqlite3 import Connection
4

    
5
from injector import Module, provider, singleton
6

    
7
from src.config.configuration import Configuration
8
from src.constants import DB_DIR
9
from src.db.init_queries import DEFAULT_VALUES_SQL, CHECK_SCHEMA_SQL
10
from src.db.setup_database import setup_database
11
from src.utils.logger import Logger
12

    
13

    
14
class ConnectionProvider(Module):
15
    """
16
    Dependency injection module that provides database connection singleton
17
    """
18

    
19
    @singleton
20
    @provider
21
    def connect(self, configuration: Configuration) -> Connection:
22
        """
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

    
28
        Logger.debug(f"Creating a database connection [{configuration.connection_string}].")
29

    
30
        try:
31
            if not os.path.exists(DB_DIR):
32
                os.makedirs(DB_DIR)
33

    
34
            co = sqlite3.connect(database=configuration.connection_string, check_same_thread=False)
35
            cu = co.cursor()
36
            cu.executescript(CHECK_SCHEMA_SQL)
37
            cu.executescript(DEFAULT_VALUES_SQL)
38
        except sqlite3.Error as e:
39
            Logger.error(f"Unknown error during database setting.")
40
            raise e
41

    
42
        return co
(3-3/3)