xi-keyring

simple and extensible alternative for gnome-keyring
git clone https://git.ce9e.org/xi-keyring.git

commit
fcf5ca215858e1cb82c529c5169f686f5640d77d
parent
579ccb67a83905ef6b4f24f1ed567623ad259dbd
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2024-04-05 07:34
refactor: merge list_items() into search_items()

Diffstat

M xikeyring/dbus.py 4 ++--
M xikeyring/keyring.py 22 +++++++++-------------

2 files changed, 11 insertions, 15 deletions


diff --git a/xikeyring/dbus.py b/xikeyring/dbus.py

@@ -136,7 +136,7 @@ class DBusService(BaseDBusService):
  136   136         self.register_object(conn, f'{OFSP}/aliases/default', f'{OFSI}.Collection')
  137   137         self.register_object(conn, f'{OFSP}/collection/it', f'{OFSI}.Collection')
  138   138 
  139    -1         items = self.keyring.list_items()
   -1   139         items = self.keyring.search_items()
  140   140         self.update_items(conn, keep=items, add=items)
  141   141 
  142   142     def service_open_session(self, conn, sender, path, algorithm, input):
@@ -201,7 +201,7 @@ class DBusService(BaseDBusService):
  201   201         return GLib.Variant('(oo)', (f'{OFSP}/collection/it/{id}', '/'))
  202   202 
  203   203     def collection_get_items(self, conn, sender, path):
  204    -1         items = self.keyring.list_items()
   -1   204         items = self.keyring.search_items()
  205   205         self.update_items(conn, keep=items, add=items)
  206   206         return GLib.Variant('ao', self.ids_to_paths(items))
  207   207 

diff --git a/xikeyring/keyring.py b/xikeyring/keyring.py

@@ -142,20 +142,16 @@ class Keyring:
  142   142             raise ValueError
  143   143         self._crypt = None
  144   144 
  145    -1     def list_items(self) -> list[int]:
  146    -1         res = self.db.execute('SELECT id FROM items')
  147    -1         return [row[0] for row in res.fetchall()]
  148    -1 
  149    -1     def search_items(self, query: dict[str, str]) -> list[int]:
  150    -1         if not query:
  151    -1             return self.list_items()
   -1   145     def search_items(self, query: dict[str, str] = {}) -> list[int]:
  152   146         params = []
  153    -1         for key, value in query.items():
  154    -1             params.append(f'$.{key}')
  155    -1             params.append(value)
  156    -1         sql = 'SELECT id FROM items WHERE ' + ' AND '.join(
  157    -1             ['json_extract(attributes, ?) = ?' for _ in query]
  158    -1         )
   -1   147         sql = 'SELECT id FROM items'
   -1   148         if query:
   -1   149             for key, value in query.items():
   -1   150                 params.append(f'$.{key}')
   -1   151                 params.append(value)
   -1   152             sql += ' WHERE ' + ' AND '.join(
   -1   153                 ['json_extract(attributes, ?) = ?' for _ in query]
   -1   154             )
  159   155         res = self.db.execute(sql, params)
  160   156         return [row[0] for row in res.fetchall()]
  161   157