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
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
|
|
}
|