mirror of
https://github.com/simon987/sist2.git
synced 2025-04-16 08:56:45 +00:00
51 lines
1.2 KiB
Python
51 lines
1.2 KiB
Python
from typing import Dict
|
|
|
|
from hexlib.db import Table
|
|
import pickle
|
|
|
|
from tesseract import get_tesseract_langs
|
|
|
|
RUNNING_FRONTENDS: Dict[str, int] = {}
|
|
|
|
TESSERACT_LANGS = get_tesseract_langs()
|
|
|
|
DB_SCHEMA_VERSION = "1"
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
def _serialize(item):
|
|
if isinstance(item, BaseModel):
|
|
return pickle.dumps(item)
|
|
if isinstance(item, bytes):
|
|
raise Exception("FIXME: bytes in PickleTable")
|
|
return item
|
|
|
|
|
|
def _deserialize(item):
|
|
if isinstance(item, bytes):
|
|
return pickle.loads(item)
|
|
return item
|
|
|
|
|
|
class PickleTable(Table):
|
|
|
|
def __getitem__(self, item):
|
|
row = super().__getitem__(item)
|
|
if row:
|
|
return dict((k, _deserialize(v)) for k, v in row.items())
|
|
return row
|
|
|
|
def __setitem__(self, key, value):
|
|
value = dict((k, _serialize(v)) for k, v in value.items())
|
|
super().__setitem__(key, value)
|
|
|
|
def __iter__(self):
|
|
for row in super().__iter__():
|
|
yield dict((k, _deserialize(v)) for k, v in row.items())
|
|
|
|
def sql(self, where_clause, *params):
|
|
for row in super().sql(where_clause, *params):
|
|
yield dict((k, _deserialize(v)) for k, v in row.items())
|
|
|