Projekt

Obecné

Profil

Stáhnout (3.09 KB) Statistiky
| Větev: | Tag: | Revize:
1
import sqlite3
2
from sqlite3 import Error
3
from typing import List, Dict
4

    
5
from ..constants import *
6
from ..dao.repository import IRepository
7

    
8

    
9
class DBManager(IRepository):
10

    
11
    @staticmethod
12
    def create(sql: str, values: List, usages: Dict[int, bool] = None) -> bool:
13
        conn = None
14
        try:
15
            conn = sqlite3.connect(DATABASE_FILE)
16
            c = conn.cursor()
17
            c.execute(sql, values)
18

    
19
            if usages is not None:
20
                for usage_id, usage_value in usages:
21
                    if usage_value:
22
                        c.execute(f"INSERT INTO {TAB_CERTIFICATE_USAGES} ({COL_CERTIFICATE_ID},{COL_USAGE_TYPE_ID}) "
23
                                  f"VALUES (?,?)",
24
                                  [c.lastrowid, usage_id])
25

    
26
            conn.commit()
27
            c.close()
28
        except Error as e:
29
            print(e)
30
            return False
31
        finally:
32
            if conn:
33
                conn.close()
34
        return True
35

    
36
    @staticmethod
37
    def read(sql: str, item_id: int = None):
38
        conn = None
39
        try:
40
            conn = sqlite3.connect(DATABASE_FILE)
41
            c = conn.cursor()
42

    
43
            if item_id is not None:
44
                c.execute(sql, [item_id])
45
            else:
46
                c.execute(sql)
47

    
48
            records = c.fetchall()
49
            c.close()
50
        except Error as e:
51
            print(e)
52
            return []
53
        finally:
54
            if conn:
55
                conn.close()
56
        return records
57

    
58
    @staticmethod
59
    def update(sql: str, item_id: int, values: List, usages: Dict[int, bool] = None) -> bool:
60
        conn = None
61
        try:
62
            values.append(item_id)
63

    
64
            conn = sqlite3.connect(DATABASE_FILE)
65
            c = conn.cursor()
66
            c.execute(sql, values)
67

    
68
            if usages is not None:
69
                for usage_id, usage_value in usages:
70
                    c.execute(f"DELETE FROM {TAB_CERTIFICATE_USAGES} "
71
                              f"WHERE {COL_CERTIFICATE_ID} = ? AND {COL_USAGE_TYPE_ID} = ?",
72
                              [item_id, usage_id])
73

    
74
                    if usage_value:
75
                        c.execute(f"INSERT INTO {TAB_CERTIFICATE_USAGES} ({COL_CERTIFICATE_ID},{COL_USAGE_TYPE_ID}) "
76
                                  f"VALUES (?,?)",
77
                                  [item_id, usage_id])
78

    
79
            conn.commit()
80
            c.close()
81
        except Error as e:
82
            print(e)
83
            return False
84
        finally:
85
            if conn:
86
                conn.close()
87
        return True
88

    
89
    @staticmethod
90
    def delete(sql: str, item_id: int, delete_usages: bool) -> bool:
91
        conn = None
92
        try:
93
            conn = sqlite3.connect(DATABASE_FILE)
94
            c = conn.cursor()
95

    
96
            if delete_usages:
97
                c.execute(f"DELETE FROM {TAB_CERTIFICATE_USAGES} WHERE {COL_CERTIFICATE_ID} = ?", [item_id])
98

    
99
            c.execute(sql, [item_id])
100
            conn.commit()
101
            c.close()
102
        except Error as e:
103
            print(e)
104
            return False
105
        finally:
106
            if conn:
107
                conn.close()
108
        return True
(2-2/3)