Projekt

Obecné

Profil

Stáhnout (3.09 KB) Statistiky
| Větev: | Tag: | Revize:
1 2c96b4a5 David Friesecký
import sqlite3
2
from sqlite3 import Error
3 1636aefe David Friesecký
from typing import List, Dict
4 2c96b4a5 David Friesecký
5 1636aefe David Friesecký
from ..constants import *
6 2c96b4a5 David Friesecký
from ..dao.repository import IRepository
7
8
9
class DBManager(IRepository):
10
11 25053504 David Friesecký
    @staticmethod
12 1636aefe David Friesecký
    def create(sql: str, values: List, usages: Dict[int, bool] = None) -> bool:
13 2c96b4a5 David Friesecký
        conn = None
14
        try:
15
            conn = sqlite3.connect(DATABASE_FILE)
16
            c = conn.cursor()
17
            c.execute(sql, values)
18 1636aefe David Friesecký
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 2c96b4a5 David Friesecký
            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 25053504 David Friesecký
    @staticmethod
37
    def read(sql: str, item_id: int = None):
38 2c96b4a5 David Friesecký
        conn = None
39
        try:
40
            conn = sqlite3.connect(DATABASE_FILE)
41
            c = conn.cursor()
42
43
            if item_id is not None:
44 1636aefe David Friesecký
                c.execute(sql, [item_id])
45 2c96b4a5 David Friesecký
            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 25053504 David Friesecký
    @staticmethod
59 1636aefe David Friesecký
    def update(sql: str, item_id: int, values: List, usages: Dict[int, bool] = None) -> bool:
60 2c96b4a5 David Friesecký
        conn = None
61
        try:
62 1636aefe David Friesecký
            values.append(item_id)
63
64 2c96b4a5 David Friesecký
            conn = sqlite3.connect(DATABASE_FILE)
65
            c = conn.cursor()
66 1636aefe David Friesecký
            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 2c96b4a5 David Friesecký
            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 25053504 David Friesecký
    @staticmethod
90 1636aefe David Friesecký
    def delete(sql: str, item_id: int, delete_usages: bool) -> bool:
91 2c96b4a5 David Friesecký
        conn = None
92
        try:
93
            conn = sqlite3.connect(DATABASE_FILE)
94
            c = conn.cursor()
95 1636aefe David Friesecký
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 2c96b4a5 David Friesecký
            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