diff --git a/my/core/dataset.py b/my/core/dataset.py new file mode 100644 index 0000000..dc6b197 --- /dev/null +++ b/my/core/dataset.py @@ -0,0 +1,9 @@ +from pathlib import Path + +# TODO wonder if also need to open without WAL.. test this on read-only directory/db file +def connect_readonly(db: Path): + import dataset # type: ignore + # see https://github.com/pudo/dataset/issues/136#issuecomment-128693122 + import sqlite3 + creator = lambda: sqlite3.connect(f'file:{db}?mode=ro', uri=True) + return dataset.connect('sqlite:///', engine_kwargs={'creator': creator}) diff --git a/my/materialistic.py b/my/materialistic.py index 36ff1dc..6cf383d 100644 --- a/my/materialistic.py +++ b/my/materialistic.py @@ -5,9 +5,9 @@ from datetime import datetime from typing import Any, Dict, Iterator, NamedTuple import pytz -import dataset # type: ignore -from .common import get_files +from .core.common import get_files +from .core.dataset import connect_readonly from my.config import materialistic as config @@ -44,7 +44,7 @@ def _last_export(): def raw() -> Iterator[Row]: - db = dataset.connect('sqlite:///' + str(_last_export())) + db = connect_readonly(_last_export()) st = db['saved'] # TODO wonder if it's 'save time'? yield from st.all(order_by='time')