Projekt

Obecné

Profil

Stáhnout (4.15 KB) Statistiky
| Větev: | Tag: | Revize:
1 9d3eded8 David Friesecký
from sqlite3 import Connection, Cursor, Error
2 d6ccc8ca David Friesecký
from typing import List
3 e9e55282 David Friesecký
4 1d2add74 Jan Pašek
from injector import inject
5
6 d65b022d David Friesecký
from src.exceptions.database_exception import DatabaseException
7 181e1196 Jan Pašek
from src.model.private_key import PrivateKey
8 9d3eded8 David Friesecký
from src.constants import *
9 e9e55282 David Friesecký
10 25053504 David Friesecký
11 9d3eded8 David Friesecký
class PrivateKeyRepository:
12 a0602bad David Friesecký
13 1d2add74 Jan Pašek
    @inject
14
    def __init__(self, connection: Connection):
15 9d3eded8 David Friesecký
        """
16
        Constructor of the PrivateKeyRepository object
17 a0602bad David Friesecký
18 9d3eded8 David Friesecký
        :param connection: Instance of the Connection object
19
        :param cursor: Instance of the Cursor object
20 a0602bad David Friesecký
        """
21
22 9d3eded8 David Friesecký
        self.connection = connection
23 1d2add74 Jan Pašek
        self.cursor = connection.cursor()
24 e9e55282 David Friesecký
25 805077f5 David Friesecký
    def create(self, private_key: PrivateKey):
26 a0602bad David Friesecký
        """
27 9d3eded8 David Friesecký
        Creates a private key.
28 a0602bad David Friesecký
29 9d3eded8 David Friesecký
        :param private_key: Instance of the PrivateKey object
30 a0602bad David Friesecký
31 9d3eded8 David Friesecký
        :return: the result of whether the creation was successful
32 a0602bad David Friesecký
        """
33
34 9d3eded8 David Friesecký
        try:
35
            sql = (f"INSERT INTO {TAB_PRIVATE_KEYS} "
36
                   f"({COL_PRIVATE_KEY},"
37
                   f"{COL_PASSWORD}) "
38
                   f"VALUES(?,?)")
39
            values = [private_key.private_key,
40
                      private_key.password]
41
            self.cursor.execute(sql, values)
42 805077f5 David Friesecký
            last_id = self.cursor.lastrowid
43 9d3eded8 David Friesecký
            self.connection.commit()
44
        except Error as e:
45 d65b022d David Friesecký
            raise DatabaseException(e)
46 e9e55282 David Friesecký
47 805077f5 David Friesecký
        return last_id
48 e9e55282 David Friesecký
49 9d3eded8 David Friesecký
    def read(self, private_key_id: int):
50
        """
51
        Reads (selects) a private key.
52 e9e55282 David Friesecký
53 9d3eded8 David Friesecký
        :param private_key_id: ID of specific private key
54 e9e55282 David Friesecký
55 9d3eded8 David Friesecký
        :return: instance of the PrivateKey object
56
        """
57 e9e55282 David Friesecký
58 9d3eded8 David Friesecký
        try:
59
            sql = (f"SELECT * FROM {TAB_PRIVATE_KEYS} "
60
                   f"WHERE {COL_ID} = ?")
61
            values = [private_key_id]
62
            self.cursor.execute(sql, values)
63 f9711600 Stanislav Král
            private_key_row = self.cursor.fetchone()
64 e9e55282 David Friesecký
65 d65b022d David Friesecký
            if private_key_row is None:
66
                return None
67
68 9d3eded8 David Friesecký
            private_key: PrivateKey = PrivateKey(private_key_row[0],
69
                                                 private_key_row[1],
70
                                                 private_key_row[2])
71
        except Error as e:
72 d65b022d David Friesecký
            raise DatabaseException(e)
73 e9e55282 David Friesecký
74 d65b022d David Friesecký
        return private_key
75 9d3eded8 David Friesecký
76 d6ccc8ca David Friesecký
    def read_all(self):
77
        """
78
        Reads (selects) all private keys.
79
80
        :return: list of private keys
81
        """
82
83
        try:
84
            sql = f"SELECT * FROM {TAB_PRIVATE_KEYS}"
85
            self.cursor.execute(sql)
86
            private_key_rows = self.cursor.fetchall()
87
88
            private_keys: List[PrivateKey] = []
89
            for private_key_row in private_key_rows:
90
                private_keys.append(PrivateKey(private_key_row[0],
91
                                               private_key_row[1],
92
                                               private_key_row[2]))
93
        except Error as e:
94 d65b022d David Friesecký
            raise DatabaseException(e)
95 d6ccc8ca David Friesecký
96 d65b022d David Friesecký
        return private_keys
97 d6ccc8ca David Friesecký
98 9d3eded8 David Friesecký
    def update(self, private_key_id: int, private_key: PrivateKey) -> bool:
99 a0602bad David Friesecký
        """
100 9d3eded8 David Friesecký
        Updates a private key.
101 a0602bad David Friesecký
102
        :param private_key_id: ID of specific private key
103 9d3eded8 David Friesecký
        :param private_key: Instance of the PrivateKey object
104 a0602bad David Friesecký
105
        :return: the result of whether the updation was successful
106
        """
107
108 9d3eded8 David Friesecký
        try:
109
            sql = (f"UPDATE {TAB_PRIVATE_KEYS} "
110
                   f"SET {COL_PRIVATE_KEY} = ?, "
111
                   f"{COL_PASSWORD} = ? "
112
                   f"WHERE {COL_ID} = ?")
113
            values = [private_key.private_key,
114 805077f5 David Friesecký
                      private_key.password,
115
                      private_key_id]
116 9d3eded8 David Friesecký
            self.cursor.execute(sql, values)
117
            self.connection.commit()
118
        except Error as e:
119 d65b022d David Friesecký
            raise DatabaseException(e)
120 9d3eded8 David Friesecký
121 d65b022d David Friesecký
        return self.cursor.rowcount > 0
122 e9e55282 David Friesecký
123
    def delete(self, private_key_id: int) -> bool:
124 a0602bad David Friesecký
        """
125
        Deletes a private key
126
127
        :param private_key_id: ID of specific private key
128
129
        :return: the result of whether the deletion was successful
130
        """
131
132 9d3eded8 David Friesecký
        try:
133
            sql = (f"DELETE FROM {TAB_PRIVATE_KEYS} "
134
                   f"WHERE {COL_ID} = ?")
135
            values = [private_key_id]
136
            self.cursor.execute(sql, values)
137
            self.connection.commit()
138
        except Error as e:
139 d65b022d David Friesecký
            raise DatabaseException
140 9d3eded8 David Friesecký
141 45744020 Stanislav Král
        return self.cursor.rowcount > 0