class Accessor: _DBFILE = "~/sts-api/.db/search.sqlite3" def _refresh(self): if self.buffers.db == None: import sqlite3 self.buffers.db = sqlite3.connect(self._DBFILE) self.buffers.dbcursor = self.buffers.db.cursor() def list(self, type="*"): self._refresh() self.lastOut = self.buffers.dbcursor.execute( "SELECT {} FROM index".format(type)) return self.lastOut def search(self, query, limit=None, offset=None): self._refresh() if self.mode == "ro" or self.mode == "rw": import re if query != None: self.search.query = re.compile(f"^*{query}*$", re.IGNORECASE) self.search.limit = limit self.search.offset = offset if limit == None: self.lastOut = re.search(self.search.query, str(self.list())) return self.lastOut else: self.lastOut = re.search(self.search.query, str(self.list())) return self.lastOut[:25] def addEntry(self, entryData): if self.mode == "ro": raise ImportError self._refresh() if entryData.url in self.list("url"): raise "EntryExists" self.buffers.dbcursor.execute(f""" INSERT INTO index VALUES ('{entryData.fullURL}', '{entryData.faviconURL}', '{entryData.protocol}', '{entryData.title}', '{entryData.description}') """) self.buffers.db.commit() return True def __init__(self, mode="ro"): self.mode = mode self.search = {'query': None, 'limit': 20, 'offset': 0} self.lastOut = None self.buffers = { 'db': None, 'dbcursor': None, 'read': None, 'write': None }