You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
1.8 KiB
Python

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
}